Reference :
- 컴퓨터 구조 및 설계 MIPS EDITION [6판] / David A. Patterson / 한빛에듀
- 건국대학교 컴퓨터구조 강의 / 박능수 교수님
- https://developbear.tistory.com/ (김베어의 개발일지)
성능의 정의 (Performance)
비행기로 예를 들면
속도 : Concorde
비행 거리 : Boeing 777-200LR
수송 능력 : Airbus A380-800
* 즉, 성능은 무엇을 기준으로 하냐에 따라 달라진다
두 데스크톱 컴퓨터에서 같은 프로그램을 실행시키는 경우에는 먼저 끝나는 쪽이 더 성능이 좋은 컴퓨터이다
처리량과 응답시간
성능의 기준으로는 여러 가지가 존재하는데,
컴퓨터의 가장 중요한 2가지 성능 평가 지표는 응답 시간과 처리량이다.
1. 응답 시간 (response time)
컴퓨터가 작업 개시에서 완료하기까지의 총 소요 시간을 말한다.
즉, 디스크 접근, 메모리 접근, 입출력 작업, 운영체제 오버헤드 및 CPU 시간을 전부 포함한다.
2. 처리량 (throughput) / 대역폭 (bandwidth)
단위 시간 동안 처리하는 작업의 양을 말한다.
현재로서는 컴퓨터의 성능을 논할 때 응답 시간에 초점을 맞출 것이다.
성능을 최대화하기 위해서는 어떤 작업(태스크)의 응답 시간 또는 실행시간을 최소화해야 한다.
(성능과 실행시간은 반비례 관계)
따라서 어떤 컴퓨터 X의 성능과 실행시간의 관계는 다음과 같이 표시할 수 있다.
상대 성능 (Relative Performance)
두 컴퓨터 X와 Y에 대하여 X의 성능이 Y의 성능보다 좋다면 우리는 "X가 Y보다 n배 빠르다"라고 말한다.
이때 n은 다음과 같이 정의할 수 있다.
(예시)
같은 프로그램을 실행하는데 컴퓨터 A에서 10초 B에서 15초 걸렸다면,
A는 B보다 15/10 = 1.5배 빠르다.
성능의 측정 (Measuring Execution Time)
컴퓨터 성능의 가장 기본적인 척도는 시간이다.
같은 작업을 최단 시간에 실행하는 컴퓨터가 가장 빠른 컴퓨터이며,
프로그램 실행시간은 프로그램을 처리하는 데 걸린 시간을 초 단위로 표시한 것이다.
그러나 시간은 우리가 재는 방법에 따라 여러 가지로 정의될 수 있다.
1. 벽시계 시간 (Wall-clock Time)
위에서 말한 응답 시간과 같다. (한 작업을 끝내는 데 필요한 전체 시간 = 경과 시간)
디스크 접근, 메모리 접근, 입출력 작업, 운영체제 오버헤드 및 CPU 시간을 전부 다 포함한다.
2. CPU 실행시간 (CPU Execution Time)
단순히 CPU 시간(CPU Time)이라고 부른다.
프로세서가 순수하게 이 프로그램을 실행하기 위해 소비한 시간을 말한다.
(응답 시간에서 디스크 접근, 메모리 접근, 입출력 작업 시간을 제외한 것)
(1) 사용자 CPU 시간 : 프로그램 자체에 소비된 CPU 시간
(2) 시스템 CPU 시간 : 프로그램 수행을 위해서 운영체제가 소비한 CPU 시간
* 사용자 CPU 시간과 시스템 CPU 시간을 정확히 구하는 것은 쉽지 않다.
운영체제의 각 작업이 어떤 프로그램을 위해서 수행되고 있는가를 명확히 가려내는 것이 어렵고
운영체제 간의 기능 차이도 있기 때문이다.
CPU 성능과 성능 인자
컴퓨터의 세세한 부분을 평가할 때는 다른 성능 척도를 사용하는 것이 편리할 때가 있다.
컴퓨터의 설계자는 하드웨어가 기본 함수를 얼마나 빨리 처리할 수 있는지와 관련된 성능 척도를 필요로 한다.
거의 모든 컴퓨터는 하드웨어 이벤트가 발생하는 시점을 결정하는 클럭(clock)을 이용하여 만들어진다.
우리는 이 클럭의 시간 간격을 클럭 사이클(clock cycle)이라고 한다.
한 클럭 사이클에 걸리는 시간은 두 가지로 표현할 수 있다.
1. 클럭 주기 (Clock Period, Clock Cycle Time) : 한 클럭 사이클에 걸리는 시간
2. 클럭 속도 (Clock Frequency, Clock Rate) : 1초에 도는 사이클의 개수 (클럭 주기의 역수)
CPU 실행시간 (CPU Time)
= 어떤 일을 하는데 걸리는 클럭 사이클의 총시간
= CPU Clock Cycles (CPU 클럭 사이클 수) x Clock Cycle Time (클럭 사이클 시간 = 클럭 주기)
= CPU Clock Cycles (CPU 클럭 사이클 수) / Clock Rate (클럭 속도 = 클럭 주기의 역수)
CPU 시간은 클럭 사이클과 클럭 주기를 통해 나타낼 수 있다.
CPU Time은 어떤 일을 하는데 걸리는 클럭 사이클의 총시간이며,
클럭 사이클의 총시간은 프로그램의 클럭 사이클 총 수 × 클럭 주기이다.
위의 식을 통해 성능을 개선하는 방법 2가지를 도출할 수 있다.
1. 클럭 사이클의 길이를 줄인다.
2. 클럭 사이클의 수를 줄인다.
명령어 성능
프로그램을 실행할 때 컴파일러가 실행할 명령어를 생성하고, 컴퓨터는 이 명령어를 실행해야 하기 때문에
CPU Time을 명령어의 수와 관련해서도 나타낼 수 있어야 한다..
Clock Cycles (CPU 클럭 사이클 수)
= Instruction Count (명령어 수) x Cycles per Instruction (Average CPI, 명령어당 평균 클럭 사이클 수)
명령어 당 클럭 사이클 수(Clock Cycles per Instruction)는 줄여서 CPI라고 부른다.
하나의 명령어 처리 시에는 여러 개의 Clock Cycle이 필요로 하고 그 수는 명령어마다 다르다.
이에 명령어 각각의 실행시간이 다르기 때문에,
프로그램이 실행한 모든 명령어의 Clock Cycles에 대해 평균한 값을 척도로 사용해야 한다.
명령어의 종류마다 'CPI × 명령어의 수'를 더한 것이 Clock Cycles이 되며,
CPI (Average CPI)
= Clock Cycle / Instruction Count
이를 위의 식에 대입하면 다음과 같이 CPI를 나타낼 수 있다.
본론으로 되돌아오면,
위의 Clock Cycles 식을 통해 아래처럼 CPU Time 공식을 확장할 수 있게 된다.
고전적인 CPU 성능식
요점 정리
[+a]
- IC (명령어 수) = Instruction Count
- CPI (명령어 당 클럭 사이클 수) = CPU Clock Cycle / Instruction Count
- IC x CPI = CPU Clock Cycles (클럭 사이클 수)
- Clock Cycle Times = 1 / 클럭 속도
컴퓨터 성능에 대한 완벽하고 믿을 만한 척도는 실행시간밖에 없다는 것을 잊지 말아야 한다.
명령어 개수를 줄이기 위해 명령어 집합을 바꾸었을 때
클럭 속도가 느려지거나 CPI가 커져서 오히려 성능이 더 나빠질 수도 있다.
또한 CPI는 실행되는 명령어 종류에 따라 달라지므로
실행 명령어 수가 적은 코드가 항상 가장 빠른 것은 아니다.
성능이 결정되는 요소들
'컴퓨터 구조 > Ch1. 컴퓨터 추상화 및 관련 기술' 카테고리의 다른 글
7. 현저한 변화 : 단일프로세서에서 멀티프로세서로의 변화 (0) | 2023.03.28 |
---|---|
6. 전력 장벽 (0) | 2023.03.28 |
[Ch1. 컴퓨터 추상화 및 관련 기술] 4. 케이스를 열고 (0) | 2023.03.15 |
[Ch1. 컴퓨터 추상화 및 관련 기술] 3. 프로그램 밑의 세계 (0) | 2023.03.15 |
[Ch1. 컴퓨터 추상화 및 관련 기술] 2. 컴퓨터 구조 분야의 일곱 가지 위대한 아이디어 (0) | 2023.03.15 |