일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- H-모빌리티 클래스
- 함수형 프로그래밍
- 안드로이드스튜디오
- 배낭문제
- 카카오테크캠퍼스
- 정렬
- 탐색
- 리액트네이티브
- 개발
- 데이터과학
- 컴퓨터구조
- 대외활동
- 부동소수점
- 그리디
- 알고리즘
- 분할과정복
- 백준2098
- datapath
- 백준
- 프로그래밍 언어론
- cpp02
- ios
- 코틀린
- 판다스
- 유전학알고리즘
- 앱심사
- 컴퓨터알고리즘
- 외판원순회
- 컴퓨터공학과
- 데이터 과학
- Today
- Total
minkylee
[컴퓨터구조] 시스템의 성능 본문
어떤 컴퓨터가 다른 컴퓨터보다 성능이 좋다는 것은 과연 무엇을 뜻하는 것일까?
두 데스크탑 컴퓨터에서 같은 프로그램을 실행시키는 경우에는 먼저 끝나는 쪽이 더 빠른 컴퓨터라고 할 수 있다. (응답시간) 그러나 여러 대의 서버를 가지고 여러 사용자의 작업을 처리하는 데이터센터를 운영할 때에는 하루동안 더 많은 작업을 처리하는 컴퓨터가 더 빠른 컴퓨터일 것이다. (처리량)
- 응답시간 : 컴퓨터가 테스크를 완료하기까지의 총 소요 시간, 디스크 접근, 메모리 접근, 입출력 작업, 운영체제 오버헤드 및 CPU 시간을 다 포함한다.
- 처리량 : 단위 시간당 완료하는 테스크의 수를 나타내는 또 다른 성능 척도
성능을 최대화하기 위해서는 어떤 테스트의 응답시간 또는 실행시간을 최소화 해야한다. 어떤 컴퓨터 X의 성능과 실행시간의 관계를 다음과 같이 표시할 수 있다.
$$ 성능_x = \frac{1}{실행시간_x} $$
그러므로 두 컴퓨터 X와 Y에 대해 X의 성능이 Y의 성능보다 좋다면
$$ 성능_x > 성능_y $$
$$ \frac{1}{실행시간_x} > \frac{1}{실행시간_y} $$
$$ 실행시간_y > 실행시간_x $$
가 된다. 즉, X가 Y보다 빠르다면 Y에서의 실행시간이 X에서의 실행시간보다 길다.
- 정량적인 표현 : X가 Y보다 n배 빠르다.
$$ \frac{성능_x}{성능_y} = n $$
X가 Y보다 n 배 빠르다면 Y에서의 실행시간이 n배 길 것이다.
$$ \frac{성능_y}{성능_x} = \frac{실행시간_y}{실행시간_x} $$
성능의 측정
- 프로그램 실행시간 : 프로그램을 처리하는 데 걸린 시간을 초 단위로 표시한 것 (응답시간, 경과 시간)
컴퓨터를 공유하는 경우, 프로세서 하나가 여러 프로그램을 동시에 실행하는 경우가 많이 있다. 이런 환경에서는 특정 프로그램의 경과시간을 최소화하는 것보다는 처리량을 최적화하는 것이 중요할 수 있다. 그러므로 경과시간과 구분해서 프로세서가 순수하게 이 프로그램을 실행하기 위해 소비한 시간을 계산할 필요가 있다. 이를 CPU 실행시간 (CPU execution time), CPU 시간 (CPU time)
이라고 한다.
입출력에 걸린 시간이나 다른 프로그램을 실행하는 데 걸린 시간은 포함하지 않는다. CPU time은 사용자 CPU 시간 (user CPU time)
과 시스템 CPU 시간 (system CPU time)
으로 다시 나눌 수 있다.
- 사용자 CPU 시간 : 프로그램 자체에 소비된 CPU 시간
- 시스템 CPU 시간 : 프로그램의 수행을 위해서 운영체제가 소비한 CPU 시간
그러나 운영체제의 각 작업이 어떤 프로그램을 위해서 수행되고 있는가를 명확히 가려내는 것이 어렵고 운영체제 간의 기능 차이도 있기 때문에 시스템 CPU 시간과 사용자 CPU 시간을 정확히 구하는 것은 쉽지 않다.
경과 시간을 기준으로 한 성능과 CPU 시간을 기준으로 한 성능을 구분하는 것이 좋다.
- 시스템 성능 : 다른 부하가 없는 시스템에서의 경과 시간으로 계산한 것
- CPU 성능 : 사용자 CPU 시간으로 계산한 것
컴퓨터의 세세한 부분을 평가할 때는 다른 성능 척도를 사용하는 것이 편리할 때가 있다. 특히 컴퓨터 설계자는 하드웨어가 기본 함수를 얼마나 빨리 처리할 수 있는지와 관련된 성능 척도를 필요로 한다. 거의 모든 컴퓨터는 하드웨어 이벤트가 발생하는 시점을 결정하는 클럭
을 이용하여 만들어진다.
- 클럭 사이클 : 일정한 속도를 가지고 동작하는 프로세서 클럭 한 주기 동안의 시간
- 클럭 주기 : 한 클럭 사이클에 걸리는 시간 (예를 들면 250ps)
- 클럭 속도 : (예를 들면 4GHz) 클럭 속도는 클럭 주기의 역수이다.
CPU 성능과 성능 인자
컴퓨터의 성능을 표시하는 데 사용자가 사용하는 척도와 설계자가 사용하는 척도가 서로 다른 경우가 많이 있다. 이 때 서로 다른 척도간의 상관관계를 구할 수 있다면, 설계상의 변화가 사용자에 느끼는 성능에 얼마나 영향을 미치는 지 평가할 수 있다. 당분간은 CPU 서응에만 관심을 갖기로 했으므로 궁극적인 성능 척도는 CPU 시간이다.
$$ 프로그램의 CPU 실행시간 (CPU time) = 프로그램의 CPU 클럭 사이클 수 X 클럭 사이클 시간 $$
클럭 속도와 클럭 사이클 시간은 역수 관계이므로
$$ 프로그램의 CPU 실행시간 = \frac{프로그램의 CPU 클럭 사이클 수}{클럭 속도} $$
-> 이 공식을 통해 클럭 사이클의 길이를 줄이거나 프로그램 실행에 필요한 클럭 사이클 수를 줄이면 성능을 개선할 수 있음을 알 수 있다.
But, 이 둘 중 하나를 감소시키면 다른 하나가 증가하는 경우가 자주 발생한다. 예를 들어 클럭 사이클 수를 줄이는 기법 중에는 클럭 사이클 시간을 증가시키는 것들이 많이 있다.
명령어 성능
컴파일러가 실행할 명령어를 생성하고 컴퓨터는 이 명령어를 실행해야 하기 때문에, 실행시간은 프로그램의 명령어 수와 관련이 있다.
$$ CPU 클럭 사이클 수 = 명령어 수 X 명령어당 평균 클럭 사이클 수 $$
- 명령어당 클럭 사이클 수 (clock cycles per instruction) 은 CPI로 줄여 쓰기도 한다.
명령어마다 실행시간이 다르므로 CPI는 프로그램이 실행한 모든 명령어에 대해 평균한 값을 사용한다. 명령어 집합 구조가 같으면 프로그램에 필요한 명령어 수가 같으므로, CPI는 서로 다른 구현을 비교하는 한 가지 기준이 될 수 있다.
고전적인 CPU 성능식
성능식을 명령어 개수(프로그램이 실행한 명령어의 개수), CPI, 클럭 사이클 시간으로 표현하면
$$ CPU 시간 = 명령어 개수 X CPI X 클럭 사이클 시간 $$
클럭 속도는 클럭 사이클 시간의 역수이므로
$$ CPU 시간 = \frac{명령어 개수 X CPI}{클럭속도} $$
컴퓨터 성능에 대한 완벽하고 믿을 만한 척도는 실행시간밖에 없음을 잊지 말자. 명령어 개수를 줄이기 위해 명령어 집합을 바꾸었을 때 클럭 속도가 느려지거나 CPI가 커져서 오히려 성능이 더 나빠질 수도 있다. 마찬가지로 CPI는 실행되는 명령어 종류에 따라 달라지므로 실행 명령어 수가 적은 코드가 항상 가장 빠른 것은 아니다.
성능식의 세 가지 인자 값은 어떻게 구할까? CPU 실행시간은 실제 프로그램을 실행시켜서 얻을 수 있고, 클럭 사이클 시간은 보통 컴퓨터의 하드웨어 메뉴얼에 기록되어 있다. 그러나 명령어 개수와 CPI는 구하기가 조금 어렵다. 클럭 속도와 CPU 실행시간을 알 때, 명령어 개수나 CPI 중 하나를 알면 다른 하나는 계산으로 구할 수 있다.
명령어 개수는 실행 과정을 추적하는 소프트웨어 도구나 컴퓨터 구조의 시뮬레이터를 이용해서 측정할 수 있다. 그 외에 하드웨어 카운터를 사용하면 실행 명령어 수나 평균 CPI, 심지어는 성능 저하의 원인까지 찾아낼 수 있다.
- 성능에 영향을 미치는 여러가지
- 어떤 알고리즘을 사용하는가? -> IC, CPI 에 영향을 미친다.
- 어떤 언어를 사용하는가? -> IC, CPI에 영향을 미친다.
- 어떤 컴파일러를 사용하는가? -> IC, CPI에 영향을 미친다.
- 어떤 instruction을 수행하게 되는가 -> IC, CPI, Clock Cycle time에 영향을 미친다.
'CSE > 컴퓨터구조' 카테고리의 다른 글
[컴퓨터구조] 컴퓨터 산술연산 (0) | 2024.04.19 |
---|---|
[컴퓨터구조] Memory Addressing (0) | 2024.04.19 |
[컴퓨터구조] RISC-V 명령어의 타입, Procedure Calling (0) | 2024.04.17 |
[컴퓨터구조] 하드웨어 연산 (0) | 2024.04.16 |
[컴퓨터구조] 컴퓨터 추상화 (0) | 2024.04.03 |