시스템 일부의 성능을 향상시켰을 때 시스템 전체적으로 어느정도의 성능향상이 있을 수 있는지를 정의한 법칙
초기 컴퓨터과학에서의 선구자였던 Gene Amdahl이 제안한 간단하지만 매우 통찰력있는 관찰이다. 암달의 법칙을 통해서 우리는 시스템 일부의 성능을 향상시켰을 때 시스템 전체의 성능향상에 대해 가늠해 볼 수 있다.
main idea는 시스템 일부의 성능을 향상시켰을 때 전체 시스템 성능의 향상은 해당 부분의 비율과 얼마나 빨라졌는지에 달려있다는 것이다.
이전 시스템의 성능을 라고 하고 시스템중 부분 만큼의 성능을 배 증가시켰다고 하자. 이때 전체적인 성능은 다음과 같다.
이것으로부터 우리는 성능향상을 로 나타내면 다음과 같다.
예를 들어 60퍼센트 부분의 성능을 3배 향상시켰다고 할 때 우리가 얻을 수 있는 성능향상은 1.67x 이다. 이 수식을 통해서 우리는 두가지 insight를 얻을 수 있다.
1. 전체 시스템의 성능을 향상시키고자 한다면 very large fraction 즉 시스템에서 매우 큰 부분을 차지하는 곳의 성능을 향상시켜야 한다. 가 매우 작다면 아무리 를 무한대에 가깝에 성능향상 시켜도 영향을 많이 미치지 못한다.
2. 를 무한대로 놓았을 때, 즉 일부분의 성능향상을 무한대로 보았을 때 얻을 수 있는 성능향상은 이다. 일부분을 아무리 성능향상을 시켜도 일정 수준 이상의 성능향상을 기대할 수 없다.
CPU의 코어를 무한대로 두었을 때, 성능향상은 무한대로 갈 수 있을까? 이를 암달의 법칙과 함께 살펴보자.
CPU 코어를 많이 넣음으로서 얻을 수 있는 성능향상은 해당 부분의 병렬화가 가능할 때이다. 따라서 암달의 법칙을 적용할 때 가 병렬화가 가능한 비율이 되고 는 코어의 개수가 된다.
위의 암달의 법칙의 적용에 따라 코어를 아무리 늘려도 병렬화의 범위가 제한되어 있으면 성능향상에 제한이 있을 수 밖에 없고 만약 모든 부분을 병렬화 한다고 해도 코어의 개수배만큼의 성능향상만 이룰 수 있다. 이를 그래프로 나타내면 아래와 같다.