암달의 법칙과 병렬 속도 향상

프로그램 중 병렬로 실행할 수 있는 부분의 비율과 프로세서(코어) 수를 입력하면, 암달의 법칙에 따라 프로그램 전체가 얼마나 빨라지는지 확인할 수 있습니다. 양대수 그래프에서는 문제 크기를 고정했을 때의 이 한계를, 프로세서 수에 맞춰 문제를 키우는 구스타프슨의 관점과 비교합니다.

입력값

결과

속도 향상률 (암달의 법칙)
–
병렬 효율
–
속도 향상 한계 1/(1−p)
–
스케일드 속도 향상률 (구스타프슨의 법칙)
–

가는 점선은 이상적인 선형 속도 향상(N배), 파란 선은 암달의 법칙, 초록 선은 구스타프슨의 법칙입니다. 두 축 모두 로그 눈금입니다. 통신, 동기화, 부하 불균형에 따른 오버헤드는 포함하지 않으므로 실제 속도 향상률은 보통 이보다 낮습니다.

암달의 법칙 공식

프로세서 1개에서의 실행 시간을 1로 두고, 병렬화할 수 있는 부분의 비율을 p라고 합니다. 프로세서가 N개이면 병렬 부분은 p/N으로 줄어들지만 직렬 부분 (1 − p)는 그대로이므로, 속도 향상률은 S = 1/((1 − p) + p/N)입니다. N을 아무리 키워도 직렬 부분은 사라지지 않으므로 속도 향상률의 상한은 1/(1 − p)입니다. 기본값인 p = 95%, N = 16에서는 S ≈ 9.14이고 한계는 20입니다. 불과 5%의 직렬 처리가 프로그램이 도달할 수 있는 최고 속도를 결정합니다.

병렬 효율과 그래프 읽는 법

병렬 효율 E = S/N은 각 프로세서가 얼마나 유효한 일을 하는지를 나타냅니다. 기본값에서는 9.14 ÷ 16 ≈ 57.1%로, 처리 능력의 40% 이상이 사실상 놀고 있는 셈입니다. 그래프에서 파란 선은 N이 작을 때 이상적인 점선을 따라가다가 점차 벗어나 한계를 향해 평평해집니다. p = 95%를 유지한 채 N을 64로 늘리면 S ≈ 15.4이고 효율은 약 24%에 불과합니다. 효율이 급격히 떨어지기 시작하는 지점은 비용에 걸맞은 프로세서 수를 판단하는 실용적인 기준이 됩니다.

구스타프슨의 법칙과의 차이

암달의 법칙은 프로세서를 늘리는 동안 문제 크기가 고정되어 있다고 가정하며, 이를 강한 스케일링이라고 합니다. 구스타프슨의 법칙은 반대로 프로세서 수에 맞춰 문제를 키우고 같은 시간 안에 푸는 경우로, 이를 약한 스케일링이라고 하며 S = (1 − p) + p·N이 됩니다. 예를 들어 시뮬레이션 격자를 세밀하게 하면 병렬 작업만 늘어나므로 속도 향상률이 거의 N에 비례해 커집니다. 여기서 p는 N개 프로세서로 실행했을 때 측정한 시간의 비율이므로, 암달의 법칙의 p와는 정의가 다르다는 점에 주의하십시오.

실제 설계에서의 활용

실제 프로그램에는 스레드 시작, 데이터 통신, 락과 배리어에서의 대기, 부하 불균형이 더해지므로 실제 속도 향상률은 암달의 법칙의 예측보다 낮아집니다. 코어를 늘리는 것보다 직렬 부분을 줄이는 편이 효과적인 경우가 많으므로, 먼저 프로파일링을 한 뒤 핫스폿을 병렬화하는 것이 일반적입니다. GPU에서는 호스트와의 데이터 전송과 커널 실행도 직렬 부분으로 작용합니다. 칩 설계에서는 소수의 고성능 코어와 다수의 소형 코어를 조합해 워크로드의 직렬 부분과 병렬 부분을 모두 빠르게 하는 방법이 쓰입니다.

성능 평가 문제 풀어 보기

전체 처리의 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. A프로세서 수를 늘릴 때 다루는 문제의 크기도 늘리면 병렬화 가능한 부분의 비율이 늘어나 큰 속도 향상을 얻을 수 있다
  2. B프로세서 수를 아무리 늘려도 속도 향상은 반드시 2배가 상한이다
  3. C병렬화 가능한 부분은 문제의 크기와 관계없이 항상 일정하다
정답과 해설 보기

정답: A. 프로세서 수를 늘릴 때 다루는 문제의 크기도 늘리면 병렬화 가능한 부분의 비율이 늘어나 큰 속도 향상을 얻을 수 있다

암달의 법칙은 문제의 크기를 바꾸지 않고 프로세서를 늘리는 경우를 생각하므로, 병렬화할 수 없는 부분이 속도 향상의 상한을 결정합니다. 구스타프슨의 법칙은 프로세서를 늘리면 같은 시간에 더 큰 문제를 푼다고 생각합니다. 시뮬레이션의 격자를 세밀하게 하는 등 문제를 키우면 병렬 부분이 늘고 순차 부분의 비율이 작아지므로, 프로세서 수에 거의 비례하는 효과를 얻을 수 있습니다.

8코어로 병렬 실행했더니 1코어일 때보다 6배 빨라졌다. 병렬 효율은 얼마입니까?

  1. A75%
  2. B133%
  3. C48%
정답과 해설 보기

정답: A. 75%

병렬 효율은 속도 향상률을 코어 수로 나눈 값으로, 코어가 얼마나 유효하게 사용되고 있는지를 나타냅니다. 6÷8=75%이므로 이상(8배)에 대해 4분의 3의 효과를 얻고 있습니다. 나머지 25%는 동기화 대기, 작업 편중, 통신, 메모리 대역폭 경쟁 등으로 손실됩니다. 코어를 늘릴수록 병렬 효율은 떨어지기 쉬우므로, 효율이 어디까지 유지되는지를 보고 사용할 코어 수를 정합니다.

자주 묻는 질문

90%를 병렬화할 수 있는 프로그램은 최대 몇 배까지 빨라집니까?

암달의 법칙에 따르면 한계는 1/(1 − 0.9) = 10배입니다. 프로세서가 16개라도 속도 향상률은 1/(0.1 + 0.9/16) = 6.4에 그치며 효율은 40%입니다. 남은 10%의 직렬 처리를 줄이지 않는 한 속도 향상률은 결코 10을 넘을 수 없습니다.

암달의 법칙과 구스타프슨의 법칙은 서로 모순됩니까?

아닙니다. 암달의 법칙은 문제 크기가 고정된 강한 스케일링을, 구스타프슨의 법칙은 프로세서 수에 따라 문제가 커지는 약한 스케일링을 다룹니다. 어느 관점이 맞는지는 같은 문제를 더 빨리 풀고 싶은지, 더 큰 문제를 같은 시간에 풀고 싶은지에 따라 달라집니다.

병렬 효율이 100%를 넘을 수 있습니까?

있습니다. 프로세서를 추가해 각 프로세서가 맡는 데이터가 캐시에 들어갈 만큼 작아지면 메모리 접근이 빨라져 초선형 속도 향상이 나타날 수 있습니다. 암달의 법칙은 이러한 효과를 모델링하지 않습니다.

관련 용어

암달의 법칙(Amdahl's Law) 구스타프슨의 법칙(Gustafson's Law) 속도 향상률(Speedup) 병렬 효율(Parallel Efficiency) 강한 스케일링(strong scaling) 약한 스케일링(Weak Scaling)

반도체 계산 도구

웨이퍼당 다이 수 및 수율 계산기웨이퍼 지름·다이 크기·결함 밀도로 다이 수, 수율, 양품 1개당 비용을 계산노광 해상도 및 초점 심도 계산기파장, NA, k1로 해상도(하프 피치), 초점 심도, 피치 분할 수 계산셋업·홀드 타이밍 계산기플립플롭 간 경로의 셋업·홀드 슬랙과 최대 클럭 주파수MOSFET I-V 특성 (ID–VDS)Vth, W/L, λ를 바꿔 ID–VDS 곡선과 동작점(영역, ID, gm, ro)을 확인합니다퀴즈 세트 만들기주제와 문항 수를 고르면 수업과 교육에 공유할 수 있는 퀴즈 링크를 만들어 드립니다접합 온도 및 열저항 계산기소비 전력과 열저항으로 접합 온도, Tj(max)까지의 여유, 최대 전력 계산메모리 대역폭 계산기전송 속도와 버스 폭으로 DDR, LPDDR, GDDR, HBM의 피크 및 실효 대역폭 계산ADC SNR과 유효 비트 수(ENOB)분해능, 클럭 지터, 오버샘플링으로 ADC의 SNR과 유효 비트 수 계산캐시 주소 분할과 평균 메모리 접근 시간캐시 크기, 라인 크기, 연관도로 태그·인덱스·오프셋 비트 수와 평균 메모리 접근 시간 계산CMOS 소비 전력 (동적·정적)활동률, 용량, 전압, 주파수, 누설 전류로 동적·정적 소비 전력과 DVFS 적용 후 전력 계산PN 접합의 내장 전위와 공핍층 폭도핑 농도와 역방향 바이어스로 PN 접합의 내장 전위, 공핍층 폭, 최대 전계, 접합 용량 계산열산화막 두께 (Deal-Grove 모델)온도, 시간, 건식·습식 분위기, 면방위로 Deal-Grove 모델에 따른 실리콘 산화막 두께와 소비되는 실리콘 계산