Pitfall: Amdahl`s Law
컴퓨터의 어떤 부분을 향상시키면, 전체적인 성능에서 이에 비례적인 향상을 기대할 수 있을 것이다? => 함정!
P: 향상 가능 부분
S: 향상 배수
실제로는 그렇지 않다.
어떤 시스템을 개선하여 전체 작업 중 P%의 부분에서 S배의 성능이 향상되었을 때, 전체 시스템에서의 성능의 최대 향상은
개선 후의 실행시간 = (개선에 의해 영향을 받는 부분의 실행 시간 / 성능 향상 비율) + 영향을 받지 않는 부분의 실행 시간.
즉, 시스템의 한 부분의 성능을 향상시키면, 전체적인 시스템에 비례해서 성능이 향상되는 것이 아닌 해당 시스템이 차지하는 비율에 비례해서 만큼만 성능이 향상된다.
예시
어떤 기계에서 100초에 돌아가는 프로그램이 있다고 하자. 이 프로그램에서 80초는 곱하기 기능을 위해 쓰인다. 이 프로그램이 4배 더 빠른 속도로 돌아가기 위해서는 곱하기 기능을 얼마나 향상해야 하는가?
Sol) 이전 시간을 Told, 향상된 시간을 Tnew라고 했을 때, 4배 더 빠른 속도로 돌아가기 때문에 Tnew = 25s이다.
또한 곱하기 기능에 80초 쓰이기 때문에 영향을 받는 부분 = 80s, 받지 않는 부분 = 20s이므로 영향을 받는 부분 0.8, 받지 않는 부분 0.2이다.
따라서 25s = 100s * ((1 - 0.8) + (0.8 / Speedup)), Speedup = 16
곱하기 기능을 16배 향상시켜야 한다.
Fallacy: Low Power at Idle
컴퓨터는 CPU 사용량이 낮으면 전력 소모도 적게 할까? => 일반화 할 수는 없다.
intel의 i7의 벤치마크를 보면,
100% load => 258W
50% load => 170W (66%)
10% load => 121W (47%)
로 되어있다.
즉, CPU 사용량에 비례하여 그만큼 전력 소모도 같이 줄어들지는 않는 것이다.
Pitfall: MIPS as a Performance Metric
성능을 평가할 때, MIPS의 성능지표가 확실하게 맞을까? => MIPS만으로 판단할 수는 없다.
MIPS: Millions of Instructions Per Second (초 당 명령어 수행을 100만으로 나눈 성능 지표)
예를 들어, 4GHz의 Clock rate, CPIA=1, CPIB=2, CPIC=3을 가진 기계에서 2가지의 컴파일러를 테스트 하려고 한다.
컴파일러 A : CPIA=50억개, CPIB=10억개, CPIC=10억개
컴파일러 B : CPIA=100억개, CPIB=10억개, CPIC=10억개
1) MIPS로 성능을 평가할 때
컴파일러 A의 MIPS = 4GHz / {((1 * 5 * 10^9) + (2 * 1 * 10^9) + (3 * 1 * 10^9)) * 10^6} = 4 * 10^(-7)
컴파일러 B의 MIPS = 4GHz / {(1 * 10 * 10^9) + (2 * 1 * 10^9) + (3 * 1 * 10^9)) * 10^6} = 2.666 * 10^(-7)
2) 실행 시간으로 성능을 평가할 때
컴파일러 A의 실행 시간 = (5 * 1 + 1 * 2 + 1 * 3 * 1) * 10^9 * (1 / 4 * 10^9) = 2.5
컴파일러 B의 실행 시간 = (1 * 10 + 2 * 1 + 3 * 1) * 10^9 * (1 / 4 * 10^9) - 3.75
MIP는 성능 평가 지표가 될 수는 있지만 그 자체로 평가하기는 힘들다.