일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 코딩테스트준비
- 정렬
- 데이터베이스
- 그래프 이론
- 99클럽
- DFS
- 그래프
- 백준
- 브루트포스
- Til
- 알고리즘
- 스프링 핵심 원리 - 기본편
- 스프링
- DP
- BinarySearch
- 완전탐색
- 항해99
- 그리디
- 동적 프로그래밍
- lower bound
- 백트래킹
- 트리
- Java
- 자바
- 우선순위큐
- Spring
- 네트워크 계층
- 프로그래머스
- BFS
- 개발자취업
- Today
- Total
AtraFelis's Develop Diary
[컴퓨터 구조] 컴퓨터 성능 본문
CPU 성능
컴퓨터의 성능을 측정하는 것은 단순한 것처럼 보여도 생각보다 어려운 일이다. 개인 사용자 입장에서는 응답시간(실행시간) 이 중요할 것이고, 많은 데이터를 관리해야 하는 서버 관리자 입장에서는 처리량(Throughput) 혹은 대역폭(Bandwith) 이 중요할 것이기 때문이다.
그렇기에 성능을 나타내는 공식이나 척도는 다양할 수밖에 없다.
상대 성능
성능을 최대화 하기 위해서는 어떤 작업의 실행 시간을 최소화해야 하므로, $성능_X = {1 \over 실행시간_X}$ 로 표시할 수 있다.
A가 B보다 n배 빠르다면,
$$
{성능A \over 성능B} = {실행시간B \over 실행시간A} = n
$$
이 된다.
실행 시간
- 경과 시간 (elapsed time)
- 한 작업을 끝내는데 필요한 전체 시간을 뜻하는 것으로 입출력 작업, 메모리 접근, 디스크 접근 등의 모든 시간을 더한 것이다.
- CPU 시간 (CPU time) : CPU 실행 시간
- 사용자 CPU 시간 : 실제로 사용자가 프로그램 실행에 소요된 시간
- 시스템 CPU 시간 : 운영체제가 이 프로그램의 작업을 수행하는데 소비한 시간
CPU 클럭
- 클럭 사이클 (clock cycle)
- 하드웨어 이벤트가 발생하는 클럭의 시간 간격
- 클럭 주기(clock period) - Clock Cycle Time
- 한 클럭 사이클이 걸리는 시간.
- 클럭 속도(clock rate) - 주파수주파수가 2배로 증가한다고 성능이 2배가 되는 것은 아니다.
- 클럭 주기의 역수로, 단위는 Hz로 표시한다.
위 세 가지를 이용해 CPU 시간을 구할 수 있다.
$$
CPU \ 시간 = CPU \ 사이클 \ 수 \ * \ 클럭 \ 주기 = {CPU \ 사이클 \ 수 \over 클럭 \ 속도(주파수) }
$$
명령어 성능
CPI Clock cycle Per Instruction
프로그램 전체 혹은 일부에서 명령어 하나를 실행하는데 필요한 평균 클럭 사이클 수를 의미한다.
$$
CPI = {사이클 \ 수 \over 명령어 \ 수}
$$
이 정의를 이용하면,
\begin{align}
사이클 \ 수 &= 명령어 \ 수 * CPI\\
CPU \ 시간 &= 명령어 \ 수 * CPI * 클럭\ 주기 = {명령어\ 수\ \times \ CPI \over 클럭 \ 속도}
\end{align}
라는 공식이 성립된다.
벤치 마크
성능을 측정하기 위해 선택된 프로그램
사용자의 실제 작업에 대한 성능을 잘 반영할 것으로 생각되는 프로그램들로 구성되어 있다.
SPEC(System Performance Evaluation Cooperative) 최신 컴퓨터 시스템을 위한 표준 벤치마크를 만들기 위해 여러 컴퓨터 회사가 자금을 지원하여 만들어졌다.
SPEC CPU 벤치마크
기존 프로세스의 실행시간을, 측정하려는 컴퓨터의 실행시간으로 나누어 실행시간을 정규화 했다.
이를 SPECratio라고 한다.
SPEC 전력 벤치마크
에너지와 전력의 중요성이 증대하면서, 전력을 측정하기 위해 추가된 벤치마크.
오류
임달의 법칙 Amdahl's Law
작업의 일부분만 개선한 후, 컴퓨터의 전체적인 성능 향상을 기대하는 것을 의미한다.
실행시간이 100초라고 했을 때, 곱셈 연산이 80초 다른 작업에 20초가 소요된다고 가정하자. 이때 곱셈을 5배 빠르게 개선 했다고 하더라도 다른 작업에 소요되는 20초는 줄어들지 않는다.
$$
20s = {80s \over n} + 20s
$$
위 식은 성립될 수 없다.
MIPS Million instructions per second
프로그램의 실행 속도를 백만 개의 명령어 단위로 나타내는 척도이다.
$$
MIPS = {명령어 \ 개수 \over 실행시간 \times 10^6}
$$
MIPS 단위는 이해하기 쉽고, 컴퓨터가 빠를 수록 그 수가 커진다. 하지만 이 MIPS로 컴퓨터 성능을 비교하기에는 몇 가지 오류가 존재한다.
- MIPS는 단순히 명령어를 실행하는 속도를 나타낼 뿐이다.
- 명령어 하나가 얼마나 많은 일을 수행하는지는 반영하지 않는다.
- 같은 컴퓨터에서도 어떤 프로그램을 실행하느냐에 따라 MIPS값이 달라진다.
- 많은 명령어를 실행하지만, 빠른 명령어를 사용하는 프로그램을 사용하면 반대로 MIPS 값이 작아질 수 있다.