세상에는 정말 많은 컴퓨터와 시스템이 존재합니다. 누구나 그렇듯 다들 빠르고 정확한 컴퓨터를 원할 것입니다. Performace 챕터에서는 시스템 간의 성능 비교를 하는 방법을 정리할 것입니다. 그렇다면 성능을 측정하는 방법에는 무엇이 있을까요?
이러한 지표들이 있습니다.
또한 성능 개선의 정도를 나타낼 수도 있습니다.
컴퓨터 시스템의 구조를 설계할 때, 어떤 시스템이 더 나은지 알아야합니다.
구조 설계는 반복적인 작업입니다.
선택을 정확하게 평가하기 위해서는 좋은 측정 방법론이나 도구가 필요합니다.
성능을 평가하는 지표로는 3개의 타입이 있습니다.
그럼 여기서 질문을 하나 던져볼 수 있습니다.
Latency가 하나의 일을 수행하는 데 걸리는 시간이고, Throughput이 시간 당 일 처리량이라면 항상 둘은 역수 관계인가?
얼핏 보면 맞는 말일 수 있지만, 그럴 때도 있고 아닐 때도 있습니다.
하나의 일을 처리할 때 t만큼의 시간이 걸린다면, 4개의 일은 4t만큼의 시간이 걸려야합니다.
하지만 아래 그림과 같은 상황이라면, 시간이 눈에 띄게 줄어든 것을 볼 수 있죠.

위에서 짧게 정리했듯이, 시간은 성능의 첫번째 타입이며 이 시간이라는 지표에도 여러가지가 있습니다.
Wall-clock, response time(latency), or elapsed time
CPU (execution) time
성능을 측정할 수 있는 지표가 되는 CPU Time을 측정하는 방법을 알아보겠습니다.
CPU execution time @ 1 instruction
= (# of clock cycles for instruction) x (Clock cycle time)
= (# of clock cycles for instruction) / (Clock Rate(=Frequency))
CPU execution time @ program
Quesion 1.

Question 2.

Question 3.

Question 4.


Program: 프로그램의 설계나 명령어 수는 CPU Time에 영향을 주지만, 직접적으로 사이클 수(CPI)나 클록 사이클 시간에는 영향을 미치지 않습니다.
Compiler: 컴파일러는 명령어 수와 CPI에 영향을 줍니다. 컴파일러가 얼마나 최적화되었느냐에 따라 프로그램이 더 적은 명령어로 수행되거나, 더 효율적인 명령어 세트를 사용할 수 있습니다.
ISA: ISA는 명령어 수(Instructions/Program)와 명령어당 사이클 수(CPI)에 영향을 미칩니다. 특정 ISA는 더 많은 명령어를 필요로 하거나, 더 복잡한 명령어를 포함할 수 있습니다.
Organization: CPU의 조직적 구조(예: 파이프라이닝, 캐시 설계)는 CPI에 큰 영향을 줍니다.
Technology: 반도체 기술 등 하드웨어 발전은 주로 클록 사이클 시간(Seconds/Cycle)에 영향을 줍니다.
성능을 체크하는 방법 중에 CPU Time은 실행시간, MIPS는 백만개의 명령어를 실행하는데 얼마나 걸리는 지를 측정하는 기준입니다.
=
=
장점
단점
Question 1.

Question 2.

성능 측정의 마지막 세번째 타입은 ratio입니다. 두 개의 비교군이 있을 때, A가 B 보다 n배(%) 빠르다/느리다 로 표현할 수 있습니다.
+) n order of manitude faster than 이라는 표현은 배 차이를 나타냅니다.
시간을 측정해서 성능을 비교하는 방법도 있지만, 각 환경에서 동일한 프로그램을 실행해서 비교를 하는 방법도 있습니다.
특정 유형의 애플리케이션을 위해 다양한 칩/시스템 아키텍처에 접근(또는 비교)하도록 설계된 "프로그램"
벤치마크가 완벽하지 않다는 것을 알고 있지만, 많은 사람들이 벤치마크로 장난질을 합니다.
컴퓨터의 성능을 향상시키기 위해서 CPU 갯수를 늘리는 방법이 있을 수 있습니다. 하지만 CPU를 무작정 늘린다고 해서 드라마틱한 성능 차이가 나지 않음을 볼 수 있을겁니다. 그게 가능하다면 CPU를 1024개라도 붙여서 성능을 개선해보겠죠. 이를 증명하는 법칙이 바로 암달의 법칙입니다.

위의 그림이 사실 암달의 법칙의 전부라고 해도 무방합니다. 프로그램 내에서는 분명 병렬화가 되는 부분이 있고, 되지 않는 부분이 존재합니다. CPU가 아무리 많아도 병렬화가 되지 않는 부분의 성능을 개선할 수는 없죠.

그런 맥락에서 암달의 법칙은 이러한 공식을 따릅니다.
S = 개선된 시간
f = 병렬화 가능한 프로그램의 (시간)비율
N = CPU의 개수
위의 공식에서 N을 무한대로 늘린다고 하여도 분모에 는 반드시 남는다는 사실을 알 수 있으며, 성능 향상의 최대치는 임을 알 수 있습니다.
이 때, f의 비율이 너무 작아도 CPU를 늘리는 것이 아무 의미가 없기 때문에, 코드는 병렬화가 가능해야한다는 결론을 낼 수 있습니다.
Question 1.

Question 2.


다만 암달의 법칙에서는 시간적인 성능 향상이 있는 반면에 구스타프슨의 법칙에서는 Throughput에 대한 성능 향상이 일어납니다.
그렇다고 물론 시간적 성능 향상이 일어나지 않는 것은 아닙니다. 처리할 일의 양이 늘어남에 따라 Throughput이 늘어나고, 동시에 처리할 수 있는 일의 양이 늘어나면 자연히 그에 비례하여 시간적 향상도 있기 마련입니다.
그러한 맥락으로 구스타프슨 법칙은 아래의 공식을 따릅니다.