What You Will Learn
- 어떻게 프로그램이 기계어로 번역되는지 (또한 하드웨어가 어떻게 기계어를 실행하는지)
- 하드웨어와 소프트웨어의 인터페이스
- 프로그램의 성능은 어떻게 측정하는지 (또한 어떻게 성능을 향상시킬 수 있는지)
- 하드웨어 디자이너는 어떻게 성능을 향상시키는지
- 병렬 처리는 무엇인지
Understanding Performance
- 알고리즘: 연산의 수를 결정
- 프로그래밍 언어, 컴파일러, 아키텍처: 연산 당 machine instruction의 개수를 결정
- 프로세서와 메모리 시스템: instruction의 수행 속도를 결정
- I/O 시스템: I/O 연산의 수행 속도를 결정
(일반적으로 I/O 호출은 Appliaction -> (OS) -> HW)
Inside the Processor (CPU)
- Datapath: 데이터에 연산을 수행
- Control: 연산이나 메모리 접근 등을 제어 (sequences datapath, memory, ...)
- Cache Memory: 데이터에 직접 접근하기 위한 SRAM 메모리
https://www.realworldtech.com/barcelona/8/
Measuring Execution Time
- CPU time
- User CPU time: 프로세서가 내 프로그램 코드(+ 라이브러리 코드)를 실행하는데 사용한 시간
- System CPU time: 프로세서가 내 프로그램과 관련된 OS 커널 코드를 실행하는데 사용한 시간
https://stackoverflow.com/questions/4310039/user-cpu-time-vs-system-cpu-time/39297244
CPU Time
CPU Time = IC * CPI * CCT
- Instruction Count
- 프로그램, ISA, 컴파일러에 의해 결정
- Static IC: 코드 크기
- Dynamic IC: 실행해봐야 알 수 있음
- Cycles Per Instruction: 공식에서는 Average 값
- CPU 하드웨어에 의해 결정
- Average CPI는 instruction가 어떻게 섞이느냐(mix)에 따라 달라진다.
Power Trends
- 하드웨어 디자이너는 Clock을 빠르게 하면서 연산 속도를 높이려고 노력함
- 성능은 집적도에 비례함
Power = V * I + 0.5 * C * V^2 * f
(static: V * I, dynamic: 0.5 * C * V^2 * f) - 온도는 파워(전력)에 비례함
- Power wall: 더 이상 전압 낮출수 없음, 더 이상 열을 제거할 수 없음
- 더 이상 Clock을 빠르게 하기 힘들어짐
- 이제 어떻게 성능을 올릴 수 있을까?
Multiprocessor
- CPU 1개의 성능을 올리기 힘들다면, 여러 코어를 사용하자
- 이는 명시적인 병렬 프로그래밍을 필요로 함
- ILP(Instruction Level Parallelism)과 비교하면, ILP는 하드웨어가 한 번에 여러 Instruction을 수행하는 것 (프로그래머에게 숨겨진 부분)
- 그런데 명시적 병렬 프로그래밍은 어렵다
Amdahl's Law
- 일반적인 케이스를 빠르게 해야 함
MIPS
- 초당 몇 백만개의 Instruction을 수행하는가
- NOTE: ISA가 어떤지, Instruction의 복잡도는 어떤지는 말해주지 않으므로 주의해야 하는 metric임
Summary
- 실행 시간이 가장 좋은 성능 측정법임
- 파워는 제한 요인(limiting factor): 따라서 성능 향상을 위해 parallelism을 고려
'Computer Science > Computer System' 카테고리의 다른 글
Instruction Set Architecture(ISA) (0) | 2020.02.06 |
---|