위 코드는 Instruction Set을 assembly 언어로 나타낸 것이지만 실제로 컴퓨터 메모리에는(특히 program memory) 0과 1로만 구성된 것들이 저장되어 있다.
그런데 CPU 안에서는 register로 바로 가기 전, cache라는 곳을 거쳐서 도달하게 된다. 이 cache는 받는 object에 따라 두 분류로 나뉘어 존재하는데 하나는 data memory에서 받아오는 Data Cache(DC), 또 하나는 program memory에서 받아오는 Instruction Cache(IC)이다.
특히, IC에 존재하는 instruction을 하나씩 받아오기 위해서 memory의 주소를 알아야 하는데 이를 알려주기 위한 Program Counter(PC)가 존재하게 된다.
정리하면 CPU는 다음과 같이 동작하는 것이다.
맨 처음에 PC값을 setting한다.
명령어 시작점은 항상 PC가 가리키는 곳의 명령어이다.
해당 값에 상응하는 instruction들을 IC에서 Instruction Register(IR)로 하나씩 가져온다. (fetch)
그러고 나서 (Combinational) control logic 에서 이 값을 분석한다.(decoder 역할)
위 예시 코드와 같은 경우 데이터 b를 load 과정이기 때문에 이에 대한 control 신호들이 막 날라간다.
이 신호에 의해 DC(data cache)에 있던 b가 register에 전달되어 저장된다.(load)
c도 마찬가지로 register에 전달되고
b와 c가 ALU에 들어가 연산을 진행 후 나온 결과가 register로 전달되고
결과 data가 다시 DC의 a로 전달된다.(store)
이러한 것(microarchitecture)을 설계하는 것이 목적이다.
CPU가 어떤 동작을 수행해야 하는가? -> ISA
그런데 이를 설계할 때 고려해야 하는 중요한 세 가지가 존재한다.
performance(speed)
area(cost) (area는 작아지면 빨라지기 때문에 perfomance와도 관련이 있다.)
power(energy): power를 줄이려 해야함
power ∝ Vdd2 * f * CL
performance
perf. = 1/exec time
Execution time
실행 시간을 측정할 때는 두 가지 방법이 있다.
① Latency(response time)
② Throughput (초당 처리하는 task)
case A: 사람이 위와 같은 통로를 지나는데 걸리는 시간을 10sec라고 하자.
case B: 또한 위와 같은 통로를 지나는데 중간 중간에 칸막이가 쳐져있고 이 칸막이 하나당 지나가는데 2sec가 걸린다고 하자.
이 때 두 경우의 latency는 모두 10sec이다. 한 사람이기 때문에 둘 간의 차이가 존재하지 않는 것처럼 보이나 이번엔 100명의 사람이 위 두 통로를 지난다고 해 보자.
A의 경우 한 명당 10초가 걸려 총 1000초가 걸릴 것이다.
B의 경우 첫 사람은 10초가 걸리나 이 사람이 칸막이를 하나씩 지나면서 다른 사람들도 빈 곳에 계속해서 줄을 서있을 수 있게 된다.
그렇기 때문에 한 명이 빠져나가기 시작하면 2초 간격으로 한 명씩 빠져나갈 수 있게 된다.
이를 정리하면 아래와 같다.
case A: 10초에 사람 한 명(clock 하나 당 실행)
latency = 10 sec
total exec_time = 10 x 100 = 1000 (sec)
throughput = 0.1 (task/sec)
case B: 10초에 사람 5 명(clock의 주기가 위 보다 짧음)
어느 순간(10초 이후)에는 동시에 작업이 일어남
latency = 10 sec
total exec_time = 10 + (99 x 2) = 208 (sec) ≒ 200 (sec)
throughput = 0.5 (task / sec)
위 두 경우는 약 5 배 가량의 total exec_time 차이가 난다.
B의 경우를 pipelining이라고도 하며 해당 칸막이는 그냥 쉽게 쉽게 만들 수 있는 것이 아니라 만드는 데 드는 시간이 조금 걸리긴 하지만 명령어가 길때는 훨씬 더 효율적이기 때문에 상황에 따라 굉장히 이득을 볼 수 있는 구조이다.
caseB보다 caseA이 5배 만큼 높은 throughput(성능, performance)을 가진다.
Throughput(bandwidth) = # of task / time unit(hour, sec)
위 예제에서 task는 사람이고 100명이 지나간 경우를 상정했으니 task=100이다.
Inside the Processor(CPU 내부)
Datapath: 데이터에 대해 연산을 수행한다.
Control: sequences data path, memory
Cache memory
데이터에 즉시 접근을 위함 작고 빠른 SRAM 메모리
Apple A12 Bionic Processor
A safe Place for Data(데이터에게 안전한 곳은?)
Volatile main memory(휘발성 주 메모리)
파위가 꺼지면 데이터와 명령어를 잃는다.
Non-volatile secondary memory(storage) (비휘발성 보조 메모리)
Magnetic disk
Flash memory
Optical disk (CDROM, DVD)
Semiconductor Technology(반도체 기술)
Silicon(실리콘 원소): semiconductor
Add materials to transform properties:
Conductors
Instulators
Switch
Manufacturing ICs(IC의 공정)
silicon ingot을 자른다 -> wafer가 됨
wafer를 design
test를 통해 wafer상의 detect를 잘라서 버림
custom에게 전달 전 최종 test
custom에게 전달
반도체 공정의 중요 3요소
fab
design
test
Integrated Circuit Cost(집적 회로 비용)
Cost per die
Dies per wafer
근사치를 제공
Yield
empirical(경험적인 값)
related to number of critical processing steps
제곱으로 되어는 있지만 사실상 매우 중요하기 때문에 n제곱으로 생각할 수 있다. 공정에 따라서 5제곱이 되기도 함
yield에 따라 안정되었냐 안 되었냐를 알 수 있음
칩의 크기에 따라 detected를 받아들이는 정도가 매우 다를 수 있다.(detect가 4개인데 칩의 크기가 매우 커서 wafer에 칩이 8개가 있다면 8개 중에 4개가 결함이 있는 것이므로 문제가 있는 것이다.)
Defining Performance(퍼포먼스는 무엇으로 정의되는가)
어느 비행기가 제일 좋은 성능을 가졌을까?
기준에 따라서 다름
Response Time과 Throughput
computer architecture 관점에서는 performance를 throughput으로 볼 것이다.
Response time(latency)
하나의 업무를 수행하는데 얼마나 걸리는가
Throughput
Total work done per unit time
단위 시간당 진행한 총 업무량
e.g., tasks/ transactions/... per hour
How are response time and throughput affected by
response time과 throughput는 아래와 같은 상황에서 어떻게 영향을 받는가?