int a, b, c
main
...
a = b + c
지난 시간 내용을 정리하면 다음과 같다.
- 선언한 데이터들이 compiler에 의해 Main memory의 data memory(중간)에 저장된다.
- RISC의 경우 memory에서 ALU에 바로 전달하지 않고 중간에 register file(bank)에 저장하는 과정이 있다.
- 프로그램 수행 과정
- 연산을 하기 위해서는, compiler에 의해 data b와 data c를 각각 빈 register 공간에 저장한다.
- register에 있던 b, c 는 ALU에 들어가 연산을 하게 되고 그 결과가 다시 register 의 빈 공간에 저장된다.
- 이 결과가 register 에서 다시 data memory로 전달되어 마무리 된다.
이러한 과정처럼 단순한 instruction들을 모아서 복잡한 기능을 하는데 이러한 기능을 모은 것을 Instruction Set Architecture라고 한다.
ISA
ld [b] -> r2
ld [c] -> r3
add r2 + r3 -> r10
store r10 -> [a]
위 코드는 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는 아래와 같은 상황에서 어떻게 영향을 받는가?
- 더 빠른 버전의 프로세서로 교체 시
- 더 많은 프로세서를 추가 시(multi-processor)
- 우선은 response time에 집중해 볼 것이다.
- Throughput은 나중에 또 고려를 해 볼 것이다.
'CS 지식 > 컴퓨터구조' 카테고리의 다른 글
[컴퓨터구조] 6. R-Type, J-Type, I-Type (1) | 2023.10.10 |
---|---|
[컴퓨터구조] 5. Register(레지스터)와 Memory(메모리) (0) | 2023.01.11 |
[컴퓨터 구조] 4. MIPS instruction set(명령어 세트) (0) | 2023.01.11 |
[컴퓨터 구조] 3. Performance와 CPU Time (0) | 2023.01.11 |
[컴퓨터 구조] 1. 컴퓨터 구조 시작 (0) | 2023.01.11 |