암달의 법칙과 구스타프슨의 법칙의 차이: 전제·식·스케일링·예 비교

둘 다 프로세서를 늘렸을 때 얼마나 빨라지는지를 추정하는 법칙이지만, 전제가 다릅니다. 암달의 법칙은 문제의 크기를 고정하고 같은 일을 빨리 끝내는 것을 생각하므로, 병렬화할 수 없는 부분이 속도 향상의 상한을 정합니다. 구스타프슨의 법칙은 실행 시간을 고정하고 프로세서를 늘린 만큼 더 큰 문제를 푸는 것을 생각하므로, 속도 향상은 프로세서 수에 거의 비례해 늘어납니다. 두 법칙은 모순되는 것이 아니라 서로 다른 질문에 답하고 있습니다.

비교 항목암달의 법칙구스타프슨의 법칙
고정하는 것문제의 크기(전체 작업량)실행 시간(프로세서 1개당 작업량)
질문같은 문제를 얼마나 빨리 풀 수 있는가같은 시간에 얼마나 큰 문제를 풀 수 있는가
식(N은 프로세서 수)S = 1 / ((1 − p) + p / N)S = s + (1 − s) × N = N − s × (N − 1)
비율의 측정 방법p는 1대로 실행했을 때 병렬화할 수 있는 부분이 차지하는 시간의 비율s는 N대로 병렬 실행했을 때 순차 부분이 차지하는 시간의 비율
N을 늘렸을 때1 / (1 − p)에서 한계에 도달함N에 거의 비례해 계속 증가함
계산 예p = 0.95이면 N = 100에서 약 17배, N을 무한대로 해도 20배가 상한s = 0.05이면 N = 100에서 약 95배
대응하는 스케일링강한 스케일링약한 스케일링
보이는 방식비관적. 약간의 순차 부분이 상한을 정함낙관적. 문제를 크게 하면 병렬화가 보상받음
해당하는 예정해진 크기의 입력을 바로 처리하고 싶을 때. 이미지 1장의 처리, 대화형 응답 등격자를 더 촘촘하게 한 시뮬레이션, 더 큰 데이터나 모델을 같은 시간에 처리하고 싶을 때
공통으로 포함되지 않은 것통신·동기화 오버헤드, 부하 불균형, 메모리 대역폭 부족통신·동기화 오버헤드, 부하 불균형, 메모리 대역폭 부족

수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.

상황별 선택 기준

암달의 법칙
문제의 크기가 정해져 있고 응답 시간을 줄이고 싶을 때. 병렬화의 상한을 추정하고, 순차 부분을 줄여야 할지 판단하는 데 사용합니다.
구스타프슨의 법칙
프로세서를 늘린 만큼 문제를 크게 할 수 있을 때. 대규모 시뮬레이션이나 데이터 처리에서 더 세밀하게, 더 크게 푸는 가치를 추정하는 데 사용합니다.
평가 결과의 제시 방법
병렬 성능을 보고할 때는 강한 스케일링과 약한 스케일링 중 어느 쪽으로 측정했는지 명시합니다. 조건이 다르면 같은 프로그램이라도 속도 향상률이 크게 달라집니다.

자주 묻는 질문

두 법칙은 서로 모순되지 않나요?

모순되지 않습니다. 암달의 법칙은 문제의 크기를 고정하고, 구스타프슨의 법칙은 실행 시간을 고정하므로 답하는 질문이 다릅니다. 또한 순차 부분의 비율도 암달의 법칙에서는 1대로 실행했을 때, 구스타프슨의 법칙에서는 N대로 실행했을 때의 시간으로 측정하므로, 같은 수치를 대입해 비교할 수는 없습니다.

90%를 병렬화할 수 있는데 최대 10배밖에 되지 않는 이유는 무엇인가요?

나머지 10%는 프로세서를 아무리 늘려도 짧아지지 않기 때문입니다. 병렬 부분의 시간이 0에 가까워져도 전체 시간은 원래의 10%보다 짧아지지 않으므로, 속도 향상은 1 / 0.1 = 10배에서 한계에 도달합니다.

실제 속도 향상이 이 법칙들의 예측보다 작아지는 이유는 무엇인가요?

두 법칙 모두 프로세서 간 통신이나 동기화, 부하 불균형, 공유 메모리 대역폭 부족 등을 포함하지 않기 때문입니다. 프로세서가 늘어날수록 이런 영향이 커져 병렬 효율이 떨어집니다.

제 프로그램에는 어느 쪽을 적용하면 되나요?

입력의 크기가 정해져 있고 결과를 빨리 얻고 싶다면 암달의 법칙입니다. 프로세서가 늘어나면 더 촘촘한 격자나 더 큰 데이터를 다루고 싶다면 구스타프슨의 법칙입니다. 같은 프로그램이라도 사용 방식에 따라 해당하는 법칙이 달라집니다.

이해도 확인

전체 처리의 90%를 병렬화할 수 있는 프로그램을 프로세서 수를 한없이 늘려 실행했을 때, 이론상 최대 속도 향상률은?

  1. A10배
  2. B90배
  3. C무한대
정답과 해설 보기

정답: A. 10배

암달의 법칙에서는 병렬화할 수 있는 비율을 p, 프로세서 수를 N이라 하면 속도 향상률은 1/((1 − p) + p/N)입니다. p = 0.9이면 N을 무한대로 해도 1/0.1 = 10배가 상한이고, N = 10이라도 약 5.3배에 그칩니다. 병렬화할 수 없는 부분이 조금이라도 있으면 상한이 정해지므로 순차 부분을 줄이는 것이 중요합니다. 문제의 규모를 키워 병렬 부분을 늘리는 사고방식은 구스타프슨의 법칙입니다.

전체 처리의 50%를 차지하는 부분을 4배 빠르게 했다. 전체의 속도 향상률은 얼마입니까?(암달의 법칙)

  1. A2배
  2. B1.6배
  3. C4배
정답과 해설 보기

정답: B. 1.6배

개선 후 시간은 빠르게 하지 않는 나머지 50%(0.5)와 4배 빠르게 한 50%(0.5÷4=0.125)의 합인 0.625가 됩니다. 속도 향상률은 1÷0.625=1.6배입니다. 빠르게 한 부분을 아무리 빠르게 해도 나머지 50%는 그대로 남으므로 전체는 최대 2배밖에 되지 않습니다. 전체를 크게 빠르게 하려면 시간을 많이 차지하는 부분을 찾아 개선해야 합니다.

암달의 법칙에서 얻을 수 있는 성능 개선 방법에 대한 교훈으로 가장 적절한 것은?

  1. A시간을 많이 쓰는 부분(자주 있는 경우)을 빠르게 하는 것을 우선한다
  2. B좀처럼 실행되지 않는 부분부터 먼저 빠르게 한다
  3. C어느 부분을 빠르게 해도 전체에 대한 효과는 같다
정답과 해설 보기

정답: A. 시간을 많이 쓰는 부분(자주 있는 경우)을 빠르게 하는 것을 우선한다

전체의 1%밖에 사용하지 않는 부분을 무한히 빠르게 해도 전체는 약 1%밖에 빨라지지 않습니다. 반면 80%를 사용하는 부분을 2배 빠르게 하면 전체는 약 1.7배가 됩니다. 따라서 먼저 프로파일러 등으로 시간을 많이 쓰는 부분을 찾아 거기서부터 개선하는 것이 기본입니다. '자주 있는 경우를 빠르게 하라'는 컴퓨터 설계에서도 반복해서 쓰이는 원칙입니다.

  1. 구스타프슨의 법칙이 나타내는 사고방식으로 올바른 것은?
  2. 병렬 계산 평가에서 말하는 '강한 스케일링'과 '약한 스케일링'의 차이로 올바른 것은?
  3. 성능 개선을 나타내는 '속도 향상률(스피드업)'을 구하는 방법으로 올바른 것은?

성능 분석 문제 풀기

주요 용어 설명

암달의 법칙(Amdahl's Law)
프로그램의 일부만 병렬화했을 때 전체 속도 향상은 병렬화할 수 없는 부분에 의해 제한된다는 법칙. 예를 들어 90%를 병렬화해도 최대 10배까지만 빨라진다.
구스타프슨의 법칙(Gustafson's Law)
프로세서 수를 늘릴 때 다루는 문제도 키우면 병렬화할 수 있는 부분의 비율이 늘어, 프로세서 수에 거의 비례하는 효과를 얻을 수 있다는 개념.
강한 스케일링(strong scaling)
문제 크기를 고정한 채 프로세서를 늘려 시간이 얼마나 단축되는지 보는 병렬 성능 평가.
약한 스케일링(Weak Scaling)
프로세서당 문제 크기를 고정하고 전체를 키워 시간이 일정하게 유지되는지를 보는 병렬 성능 평가.
병렬 효율(Parallel Efficiency)
병렬화에 의한 속도 향상률을 프로세서 수로 나눈 값. 코어가 얼마나 효과적으로 사용되고 있는지를 나타낸다.

관련 비교