작업 중 병렬화 가능 비율과 프로세서 수가 주어졌을 때, 암달의 법칙으로 병렬화에 따른 프로그램의 최대 속도 향상을 추정한다.
입력
작업량
%
0 – 100 %
전체 실행 시간 중 여러 프로세서로 나누어 처리할 수 있는 비율이다. 나머지 부분은 직렬로 실행되며 가속할 수 없다.
사용 가능한 병렬 처리 단위(코어, 스레드, 노드)의 개수이다.
결과
값을 입력하면 계산 결과가 표시됩니다.
속도 향상
작업의 95 %이 병렬화 가능할 때, 16개의 프로세서로 프로그램 전체가 몇 배 빠르게 실행되는지를 나타낸다.
프로세서 수를 무한히 늘렸을 때의 속도 향상 상한으로, 오직 95 %의 병렬화 가능 부분만으로 결정된다.
효율
%
속도 향상을 16개의 프로세서로 나눈 값으로, 추가된 프로세서 한 대당 실제로 얼마만큼이 유효한 가속으로 전환되는지를 나타낸다.
암달의 법칙
암달의 법칙은 고정된 작업의 일부를 여러 프로세서에서 병렬로 실행할 때 그 작업이 얼마나 빨라질 수 있는지를 예측한다. 이는 소프트웨어를 더 많은 코어로 확장할 때 모든 엔지니어가 마주하는 질문에 답한다. 작업의 일부만 병렬화할 수 있다면 현실적인 속도 향상은 어느 정도이며, 하드웨어를 추가해도 더 이상 도움이 되지 않는 지점은 어디인가? 이 계산기는 작업의 병렬화 가능 비율과 프로세서 수를 입력받아 그에 따른 속도 향상, 이론적 상한, 병렬 효율을 반환한다.
직렬 병목
대부분의 프로그램은 여러 종류의 작업이 섞여 있다. 루프의 독립적인 반복, 별개의 이미지 타일 렌더링, 서로 무관한 레코드 처리 같은 부분은 동시에 실행될 수 있다. 반면 설정 파일 읽기, 다른 모든 작업이 의존하는 자료 구조 구축, 마지막 집계 단계 같은 부분은 순차적으로 실행되어야 한다. 직렬 부분은 프로세서를 추가해도 가속할 수 없으므로 전체 실행 시간의 하한을 정한다.
암달의 법칙은 이를 정량화한다. 를 원래 실행 시간 중 병렬화 가능한 비율, 를 직렬 비율이라 하자. 개의 프로세서를 사용하면 병렬 부분은 원래 시간의 만에 끝나지만 직렬 부분은 여전히 만큼 걸린다. 전체 속도 향상은 원래 시간을 새 시간으로 나눈 값이다.
상한
이 커지면 항은 0에 가까워지지만 직렬 항 는 그대로 남는다. 극한을 취하면 프로그램이 도달할 수 있는 최대 속도 향상을 얻는다.
95% 병렬화 가능한 프로그램은 프로세서를 아무리 많이 투입하더라도 20배의 속도 향상을 넘을 수 없다. 50% 병렬화 가능한 프로그램은 2배에서 멈춘다. 이것이 바로 단순히 코어를 더 사는 것보다 직렬 비율을 줄이는 편이 훨씬 효과적인 최적화인 경우가 많은 이유이다.
예제
작업의 95%가 병렬화 가능하고 이를 16개의 프로세서에서 실행한다고 하자. 속도 향상은 다음과 같다.
따라서 16개의 프로세서는 약 9.1배의 속도 향상을 제공하며, 이는 완벽한 16배에 한참 미치지 못한다. 이때 이론적 상한은 이고 병렬 효율은 로, 추가된 연산 능력의 거의 절반이 직렬 병목으로 손실됨을 뜻한다.
효율이 중요한 이유
병렬 효율 은 추가된 프로세서가 얼마나 잘 활용되는지를 나타낸다. 효율이 100%에 가까우면 거의 선형에 가까운 확장을 의미하고, 이 커질수록 효율이 빠르게 떨어지면 직렬 비율이 지배적이어서 하드웨어 추가의 가치가 낮음을 시사한다. 암달의 법칙은 강한 확장성, 즉 고정된 작업량을 더 많은 프로세서로 처리하는 경우를 기술한다. 작업량 자체가 하드웨어와 함께 커지는 경우에는 더 낙관적인 구스타프손의 법칙 계산기이 대신 적용된다.
병렬 비율은 추정치로 다루어야 한다. 이는 보통 프로파일링으로 측정하며 문제 크기와 하드웨어에 따라 자주 달라지므로, 예측된 속도 향상은 보장이 아니라 예상되는 동작에 대한 안내로 보는 것이 적절하다.
자주 묻는 질문 (FAQ)
암달의 법칙이란 무엇인가?
암달의 법칙(Amdahl's law)은 1967년 진 암달(Gene Amdahl)이 정식화한 것으로, 고정된 작업의 일부를 병렬화했을 때 얻는 이론적 속도 향상을 제시한다. 작업의 비율 p를 N개의 프로세서에서 병렬로 실행하고 나머지 1 − p를 직렬로 실행해야 한다면, 전체 속도 향상은 S = 1 / ((1 − p) + p / N)이다. 직렬 부분이 명확한 상한을 정하므로, 프로세서를 아무리 많이 추가하더라도 프로그램은 원래보다 1 / (1 − p)배를 초과해 빨라질 수 없다.
프로세서를 더 추가해도 효과가 줄어드는 이유는 무엇인가?
프로세서 수가 늘어나면 작업의 병렬 부분에 드는 시간은 0에 가까워지지만 직렬 부분은 일정하게 유지된다. 병렬 부분이 직렬 부분에 비해 작아지면, 프로세서를 한 대 더 추가해도 전체 실행 시간은 거의 변하지 않는다. 예컨대 병렬화 가능 비율이 90%일 때 프로세서를 1개에서 16개로 늘리면 약 6.4배의 속도 향상을 얻지만, 16개에서 1,024개로 늘려도 약 9.9배에 그쳐 여전히 10배라는 상한에 미치지 못한다.
암달의 법칙은 구스타프손의 법칙과 어떻게 다른가?
암달의 법칙은 문제 크기를 고정한 채 프로세서를 늘렸을 때 얼마나 빨라지는지를 묻는 것으로, 직렬 작업이 부과하는 한계를 강조한다. 구스타프손의 법칙(Gustafson's law)은 사용 가능한 프로세서에 비례해 문제 크기가 커진다고 가정하며(시간 예산은 고정하고 작업량을 키움), 더 유리하게 확장되는 속도 향상을 예측한다. 두 법칙 모두 옳으며, 강한 확장성과 약한 확장성이라는 서로 다른 질문에 답한다.
프로그램의 병렬 부분은 어떻게 추정하는가?
병렬 부분은 추측보다는 측정으로 구하는 것이 바람직하다. 프로그램을 프로파일링하여, 동시에 실행될 수 있는 코드와 순차적으로 실행되어야 하는 코드(입출력 설정, 의존 관계 사슬, 동기화)에 각각 벽시계 시간이 얼마나 소요되는지 파악한다.
속도 향상 공식을 변형하면 서로 다른 프로세서 수에서 측정한 두 실행 시간으로부터 병렬 비율을 역산할 수도 있다. 다만 병렬 비율은 문제 크기와 하드웨어에 따라 자주 달라지므로, 어떤 단일 추정치든 근삿값으로 다루어야 한다.