1.5 프로세서와 메모리 생산기술
트랜지스터 : 전기로 제어되는 온/오프 스위치 집적회로 : 수십, 수백 개의 트랜지스터를 칩 하나에 집적시킨 것
실리콘 : 반도체 천연 원소 반도체 : 전기가 잘 통하지 않는 물질
특수한 화학 처리를 거쳐 불순물을 첨가하면 실리콘의 작은 부분을 다음 세 가지 중 하나로 바꿀 수 있다.
- 전기의 양도체(초소형 구리나 알루미늄 전선)
- 전기 절연체(플라스틱 피복이나 유리 같은)
- 조건에 따라 도체가 되기도 하고 절연체가 되기도 하는 물질(스위치) -> 트랜지스터는 여기에 속함
집적회로의 가격 다이 원가 = 웨이퍼당 가격 / 웨이퍼당 다이의 수 x 수율
웨이퍼당 다이의 수 = 웨이퍼의 면적 / 다이의 면적
수율 = 1 / (1 + (면적당 결합의 수 x 다이면적/2))²
1.6 성능
성능의 정의
- 컴퓨터 사용자 개인의 입장 -> 응답시간 , 즉 실행시간이 중요
- 데이터 센터 관리자 -> 처리량, 대역폭(일정한 시간 동안 처리하는 작업의 양)이 중요
** “ X가 Y보다 n배 빠르다” -> 성능x/성능y = 실행시간 y / 실행시간 x = n **
- 벽시계 시간, 응답시간, 경과시간 -> 한 작업을 끝내는데 필요한 전체시간
-
CPU 실행시간, CPU 시간 -> 특정 작업의 실행을 위해 CPU가 소비한 실제시간
- 사용자 CPU 시간 (실제로 사용자 프로그램 실행에 소요된 시간)
- 시스템 CPU 시간 (운영체제가 이 프로그램을 위한 작업을 소비하기 위해 실행한 시간)
논의의 일관성을 위해 다른 부하가 없는 시스템에서의 경과시간으로 계산 -> 시스템 성능 사용자 CPU가 계산한 것을 - CPU 성능
- 프로그램의 CPU 실행시간 = 프로그램 CPU 클럭사이클 수 x 클럭 사이클 기간 = 프로그램 CPU 클럭 사이클 수 / 클럭 속도
※ 참고자료
kilobyte | 10³ | |
megabyte | 10⁶ | |
gigabyte | 10⁹ | |
terabyte | 10¹² |
예제 A에 필요한 클럭 사이클 수 구하기
cpu 시간 a = cpu 클럭 사이클 수 / 클럭 속도A 10초 = CPU 클럭 사이클 수 / 2x 10⁹ 사이클/초
CPU 클럭 사이클 수 a = 10초x2x10⁹사이클/초 = 20x10⁹ 사이클
CPU 시간 B = 1.2xCPU 클럭 사이클 수 A / 클럭속도 B 6초 = 1.2x 20x10⁹ / 6초 = 0.2 x 20 x 10⁹/초 = 4.10⁹사이클 / 초 = 4GHZ
결국 켬퓨터의 B의 클락은 A보다 두배 빨라야 한다.
명령어 성능 CPU 클럭 사이클 수 = 명령어 수 x 명령어당 평균 출력 사이클 수(CPI: clock cycles per instruction) ※ 명령어 마다 실행시간이 다르므로 CPI는 프로그램이 실행한 모든 명령어에 대해 평균한 값 사용
성능식의 이용
예제 - 컴퓨터 A의 클럭 사이클 시간 250ps, CPI - 2.0 컴퓨터 B의 클럭 사이클 시간 500ps, CPI 1.2 -> 어떤 컴퓨터가 얼마나 더 빠른가?
- 두 컴퓨터가 실행해야 하는 명령어 개수는 서로 같을 것 ->I
- CPU 클럭 사이클 수 A = I x 2.0
- CPU 클럭 사이클 수 B = I x 1.2
각 컴퓨터의 CPU 시간을 계산 CPU 시간 A = CPU 클럭 사이클 수 A x 클럭 사이클 시간 A = I x 2.0 x 250ps = 500 x IPS
CPU 시간 B = I x 1.2x 500PS = 600IPS
CPU 성능 A / CPU 성능 B = 실행시간 B / 실행시간 A = 600xIPS / 500x IPS = 1.2
따라서 A가 B보다 1.2배 빠르다
고전적인 CPU 성능식 성능식을 명령어 개수(instruction count) (프로그램이 실행한 명령어 개수) CPI, 사이클 시간으로 표현하라
CPU 시간 = 명령어 개수 x CPI x 클럭 사이클 시간 (클럭 속도는 클럭 사이클 시간의 역수이므로) CPU 시간 = 명령어 갯수 x CPI/ 클럭 속도
예제 코드 비교
- 어떤 코드가 얼마나 더 빠르고, 더 많은 명령어?, 각 코드의 CPI는 ?
코드 1 -> 2 + 1 + 2 = 5 코드 2 -> 4 + 1 + 1 = 6
CPU 클럭 사이클 수 1 -> (2x1) + (1x2) + (2x3) = 10사이클
CPU 클럭 사이클 수 2 -> (4x1) + (1x2) + (1x3) = 9사이클
-> 코드 2가 명령어는 하나 더 실행하지만 실행 속도는 더 빠르다 CPI(1) -> CPU 클럭 사이클 수 1/ 명령어 개수 2 = 10/5 -> 2 CPI(2) -> CPU 클럭 사이클 수 2/ 명령어 갯수 2 = 9 / 6 -> 1.5
총정리 시간 = 초 / 프로그램 = 명령어 수 / 프로그램 x 클럭 사이클 수 / 명령어 x 초 / 클럭 사이클
성능의 이해
성능식의 세 가지 인자값은 어떻게 구할까?
- CPU 실행시간은 실제 프로그램을 시행시켜서 얻을 수 있다
- 클럭 사이클 시간은 보통 컴퓨터의 하드웨어 메뉴얼에 기록되어 있다.
- 명령어 개수와 CPI는 조금 구하기가 어렵다.
- 명령어 개수는 실행 과정을 추적하는 소프트웨어 도구나 컴퓨터 구조의 시뮬레이터를 이용해서 측정 가능
- 그 외에 하드웨어 카운터를 사용하면 실행 명령어 수나 평균 CPI, 심지어 성능 저하의 원인까지도 찾아낼 수 있다.
- CPI는 명령어 배합에 따라 달라지므로 클럭 속도가 같더라도 명령어 개수와 CPI는 비교해야 한다.
MIPS
실행시간 대신 쓸 수 있는 척도 중 하나로 MIPS가 있다. 특정 프로그램에 대한 MIPS 값은 다음과 같이 간단하게 정의 된다.
- MIPS - 명령어 개수 / 실행시간 x 10⁶
(MIPS : 프로그램의 실행 속도를 백만 개의 명령어 단위로 나타내는 척도. MIPS는 실행한 명령어 개수를 실행시간 x 10⁶으로 나누어서 계산한다)
MIPS는 명령어 실행 속도 이므로 실행시간의 역수로 성능을 표시한다. 따라서 빠른 컴퓨터일수록 높은 MIPS 값을 갖는다. MIPS의 좋은 점 -> 이해하기 쉬움. 빠를수록 값이 크므로 직관과 잘 들어맞음
그러나 컴퓨터의 성능을 비교하는 기준으로 - MIPS를 사용하는 데는 세 가지 문제가 있다.
-
① MIPS는 단순히 명령어를 실행하는 속도를 나타낼 뿐이지, 그 명령어 하나가 얼마나 많은 일을 수행하는지는 반영하지 못한다. 명령어 집합이 다르면 명령어 개수가 달라지기 때문에 단순히 MIPS 값으로만 성능을 비교할 수는 없다.
- ② 같은 컴퓨에서도 어떤 프로그램을 실행하느냐에 따라 MIPS 값은 달라진다. 그러므로 컴퓨터에서도 컴퓨터의 MIPS 값은 하나가 아니다.
- MIPS = 명령어 개수 / ((명령어 개수 x CPI)/클럭속도) x 10⁶ = 클럭속도 / CPI x 10⁶
- ③ 많은 명령어를 실행하지만 빠른 명령어를 사용하는 프로그램으로 바꾸는 경우, 컴퓨터 성능과는 반대로 MIPS 값이 작아진다는 점이다.
결론
추상화가 중요. -> 컴퓨터 시스템을 이해하는데 필수적 가장 중요한 추상화의 예 -> 하드웨어와 하위 소프트웨어 간의 인터페이스. 이것을 명령어 집합 구조라 부른다.
명령어 집합 구조를 고정시키면 동일한 소프트웨어를 실행시키면서도 가격과 성능이 서로 다른 여러가지 구현이 가능하다. 반면에 이 인터페이스의 변경이 필요한 신기술은 받아들이기 어렵게 만드는 역효과도 있다.
실행시간 = 초/프로그램 = 명령어 수 / 프로그램 x 클럭 사이클 수 / 명령어 x 초/클럭 사이클
전체의 곱인 실행시간 많이 유일하게 믿을 수 있는 척도이다.
-
CPU 실행시간 = CPU 클락 사이클 수 x 클락 사이클 시간 = CPU 클락 사이클 수 / Clock Rate
-
클락 사이클 수 = IC(명령어 갯수) x CPI (Aveage Cycles Per Instruction)
-
따라서 CPU Time = (IC x CPI) / Clock rate
-
Instructions / Program (프로그램 당 명령어 갯수) x Clock cycles / instruction (CPI) x Seconds/Clock cycle(clock cycle time) (알고리즘, 프로그래밍 언어, 컴파일러, Instrcution set architecture- 3가지가 다 영향)
CPU 클럭이란?
(cpu 클럭이란 cpu가 가지고 있는 시계라고 생각하시면 됩니다. 우리가 몇시엔 무엇을 하고 또 몇시엔 다른일을하고 라고 표현을 하잔하요.. 그처럼 cpu도 클럭이라는 시계를 가지고 있어서 그것에 맞추어서 일을 합니다.
일반적으로 cpu이름 뒤에 붙는 숫자가 바로 그 cpu가 가지고 있는 클럭을 말합니다. 예로 펜티엄4 1.6GHz인 경우 클럭 사이클이 1.6GHz라는 것을 나타냅니다. Hz는 1초사이에 전기신호가 +에서 -로 다시 +로 돌아오는 횟수가 몇번인가를 나타냅니다. 그러니까 1.6GHz는 1초에 1.6x1000000000번 진동을 한다는 것이죠. 이 숙자가 높으면 일반적으로 성능이 우수한 cpu라고 생각하시면 됩니다.)
참고자료
컴퓨터 구조 및 설계 지음 DAVID A.PATTERSON, JOHN L>HENNESSY