- CPI 에 대해 더 자세히 뜯어 보자.

클락 사이클의 개수는 결국, 각각의 Instruction의 개수와 그 Instruction 한 개를 실행하는데 걸리는 CPI 를 곱한 것의 합이다. 다시 말해, add 명령어가 100개가 있고, add 명령어 한 개를 처리하는데 하나의 클락 사이클이 필요하다. 또 multiply 명령어가 200개가 있고, multiply 명령어 한 개를 처리하는데 두 개의 클락 사이클이 필요하다. 그럼, 결국 필요한 클락 사이클의 개수는, 100 * 1 + 200 * 2 = 500 개 이다.
그럼 이제 평균 CPI를 구해 보자.
- 평균 CPI = 클락 사이클의 총 개수 / 인스트럭션의 개수 = 1개의 인스트럭션 당 필요한 사이클의 평균 개수가 된다. 예를 들어 위의 경우 평균 CPI 는, 500 / 300 이 된다.
- 평균 CPI 활용하여 클락 사이클 개수 구하기 예제


예제를 풀어보며 개념을 다지자. 지금 A 인스트럭션 하나를 처리하는데 필요한 CPI 가 1개, B instruction 하나를 처리하는데 필요한 cpi 가 2개, C 인스트럭션 하나를 처리하는데 필요한 cpi 가 3개이다. 이때, 1번 코드의 경우, A가 2번, B가 1번, C가 2번이 있다.
그럼, 평균 CPI 는 얼마가 될까?
- 필요한 총 클락 사이클의 개수는 12 + 21 + 3*2 = 10 개 이고, 인스트럭션 한 개당 필요한 클락의 개수 즉 평균 CPI 는 10 / (1+2+3) 1.6xx 가 된다.
2번 코드의 경우, A가 4번, B가 1번, C가 1번 실행이 된다.
- 그럼 필요한 총 클락의 개수는 41 + 12 + 1*3 = 9개가 된다. 그럼 인스트럭션 하나당 필요한 클락의 개수 다시말해 cpi 는 9 / (4+1+1) = 1.5xx 가 된다.
그럼 결과적으로 1번 코드의 총 클락 사이클의 개수가 더 많으니 오히려 인스트럭션의 총 개수가 적은 1번의 실행 시간이 더 많이 걸린다는 것을 확인할 수 있다. 즉 인스트럭션의 개수가 적다고 무조건 실행 시간도 더 적다는 보장은 없다.
- Performance 총정리

결국 퍼포먼스 === 시간!!
시간이라는 거는 한 프로그램을 실행할 때 걸리는 시간을 의미하는 것이니까, 이는 다시 Seconds / Program 으로 쓸 수 있고, Seconds 를 CPI 등 이용해서 다시 풀어서 써 보면,
- Time = Seconds / Program = Instruction의 개수 * CPI * 클락 사이클 한 번에 걸리는 초 = Instruction 의 개수 * CPI * ( 1 / 1초에 몇 번 clock cycle 이 동작하는지 ) = 저 위의 식!
- 중요한 개념은, 클락 사이클이 1초에 몇 번 도는지를 뜻하는 rate 와 1번의 클락 사이클이 도는데 필요한 초를 나타내는 clock cycle time 은 서로 역수 즉 반비례 관계라는 것!
- 또 Time = 인스트럭션 개수 * 평균 CPI * 1번의 클락 사이클을 도는 데 필요한 초 라는 것!
퍼포먼스의 성능은
- 제일 크게 알고리즘에 의존함.
- 프로그램밍 언어에 의해 달라질 수도 있음 c++ 과 파이썬처럼
- 컴파일러 → 예를 들어 특정 계산을 곱하기로 처리할지 더하기로 처리할지 컴파일러가 어떻게 판단하느냐에 따라 성능 달라짐.
- ISA
이렇게 4가지에 의해 영향을 받는다.