불타는 우리의 머리
전 포스팅에서 잠깐 다뤘지만 프로그램은 처리과정이 있다.
보통 우리가 흔히 사용하는 HLL(High Level Language)를 이용해서 기계어 수준으로 번역하는 것이다. 언어는 번역체라고 할수 있겠다.
HLL:
z = x + y
Low level:
LOAD a, x
ADD a, y
STOR z ,a
Machine code:
101010000101...
자세한 LL사용은 추후에 따로 포스팅 하겠다.
이렇게 번역된 언어들을 통해 우리는 프로그램을 수행하고, 느린 프로그램들을 보면서 화를낸다.
그럼 성능은 어떤것에 좌우될까?
작업시작과 종료까지의 Time
일정한 시간동안 처리하는 작업량
우리는 응답시간에 초점을 맞춘다.
성능 = 1/실행시간 (Performance = 1/Execution Time) 이라고 한다.
예시: 프로그램 실행 시간
사용자 CPU시간과 시스템 CPU시간으로 나뉜다.
모든 컴퓨터는 클럭 주기를 기반으로 이벤트 발생 시점을 결정한다.
클럭이 일어나는 시기 또는 일어나는 중을 구분하여 실행된다.
결국 clock rate 는 1초당 얼마나 clock이 실행됐냐를 묻는다. 많이 실행됐음 당연히 rate가 높겠지
1/클럭 레이트 = 클럭 주기
CPU Time = Cycles * Clock Cycle Time
= Clock Cycles/Clock Rate
을 의미한다. Clock Cycle Time 은 클럭 주기를 의미하고 클럭 주기는 클럭레이트와 반비례한다.
1초당 100개의 사이클이 실행된다. 그런데 클럭 레이트를 높인다면? 1초당 200개의 사이클을 실행한다면 당연히 클럭주기는 짧아지는것이다. 빠르게 실행해야 사이클 수를 늘릴수 있으니.
때문에 CPU TIME을 개선시키기 위해선 분모로 쓰이는 클럭 레이트를 높이거나 클럭사이클 수를 줄일수있다.
Clock Cycles = instruction Count * Cycles Per Instruction
CPU Time = Instruction Count * CPI * Clock Cycle Time
= (Instruction Count * CPI) / Clock Rate
ㄱ 이란 명령어가 2사이클을 먹는다면 CPI는 2인것이다.
위의 식에서 클럭 사이클 타임 = 클럭 주기 임으로 반비레인 클럭 레이트로 작성가능하다.