Chapter 1
중간고사 대비 컴구 요약 -14011160 장은태
Chapter 1: Fundamentals of Computer Design
첨부파일:https://drive.google.com/open?id=0B9mSiiTEByfoUy1TUkpIbjhWS28&authuser=0
1.Conventional Wisdom in Comp. Arch
-ILP wall: 명령 수준 병렬성(Instruction-level-parallelism)의 한계
-Power wall: 소비 전력의 벽
-Memory wall: 메모리 접근 벽
-Brick wall = Power wall + Memory wall + ILP wall
->ILP을 향상 시키려고 하면 전력소비가 증가하고, 또한 CPU코어를 빠르게 해도 메모리 접근 대기시간이 감소하기 때문에 메모리가 발목을 잡는다.
2.Quantitative principles of Disign
-병렬의 이점
-지역성의 원리
-공통 케이스에 초점을 맞추는 것
-암달 법칙
3.Taking Advantage of Parallelism(병렬의 이점)
-디테일 된 HW디자인
-다중 디스크 or 다중 프로세서를 통한 컴퓨터 서버의 처리량 증가
-Pipelining
4.pipeline
-여러 개의 연산 장치를 설정하여 명령 실행을 시작한 후에 계속해서 다음 명령의 실행을 중복시키는 일
-용어: Ifetch (명령어 추출)
Reg (레지스터 읽기)
Execute (ALU)
Data Memory Access (Dmem)
Register Write (Reg)
5.Hazards: clock cycle로부터 실행되는 다음 명령어를 막음
-Structural hazards
-Data hazards:
-Control hazard:
5-1.Structural hazards
: 두 명령이 동시에 한 HW resource에 접근하는 경우 발생한다.
(clock cycle)
fetch
|
decode
|
ALU exe
|
memory access
|
register write
| |||
fetch
|
decode
|
ALU exe
|
memory access
|
register write
| |||
fetch
|
decode
|
ALU exe
|
memory access
|
register write
| |||
fetch
(from memory)
|
decode
|
ALU exe
|
memory access
|
register write
|
-위의 구조는 4 stage pipline 구조이다. 모든 instruction의 수행이 IF-EX-MEM-WB로 이루어진다고 가정했을 때 4번째 Cycle에서는 첫 번째 instruction의 Memoty Access와 네 번째 instruction의 Instruction Fetch가 동시에 Memory Access를 요구하게 된다.
메모리는 당연히 어디서 해당 signal을 받았는지 알 수 없기 때문에 hazard가 일어나게 됨
(해결 방안)
Load 명령과 Add 명령이 잇달아 있다고 가정했을 때, 이 때 Load 명령은 5cycle을 Add 명령은 4cycle을 실행하므로, 두 명령이 동시에 Write back 단계를 진행하게 된다.
하지만 이것은 불가능 하므로, stall(=bubble)을 넣는데 이 stall 단계에서는 아무것도 하지 않지만, 결과적으로 앞서ㅓ 있는 load 명령과 WB가 겹치지 않음으로 Structual hazard가 발생하지 않는다.
5-2.Data hazard: 두 번째 명령어의 결과가 첫 번째 명령어에 의존하기에 발생
-Read After Write (RAW)
-Write After Write (WAW)
-Write After Read (WAR)
WAR의 예)
add r1, r1, #1
add r2, r1, r1
이 때, r2의 제대로 된 값을 구하려면 위에 명령이 Execute 된 이후여야 하는데, pipeline 에서는 r1에 값을 쓰기(WB)도 전에 r2를 Fetch한다.
RAW의 예)
첫 번째 명령에서는 $2에 저장된 결과를 두 번째, 세 번째 명령에서 활용한다. 위와 같이 pipeline을 적용하면서 $2가 저장되기 이전에 그 이후에 수행되어야 할 명령이 미리 수행되어 버리는 것이다. 그러면 and와 or의 연산결과는 $1과 $3이 아닌 이전에 들어있는 쓰레기 값으로 수행될 것이다.
이렇게 read 된 후에 값이 write되는 문제를 RAW hazard라고 한다.
(해결방안)
-Forwarding
Forwarding이란, 말 그대로 다음 명령에게 값을 밀어주는 방식입니다. Pipelined processor에서 다음 명령이 현재 명령이 값을 쓸 register를 사용하는 것은 Execution 단계이므로, 이 단계까지만 어떻게 해서든지 올바른 값을 전달해 주면 명령을 올바르게 실행할 수 있습니다. 그리고 현재 명령에서 계산된 값을 알 수 있는 단계는 Execution stage가 끝난 이후(=다음 명령이 ID stage가 끝난 때)이므로, 늦지 않게 값을 전해줄 수 있습니다.
-Stall이용
:stall을 이용하여 첫 번째 연산이 끝날 때 까지 두 번째와 세 번째를 기다리게 하는 것
5-3.control hazard
명령을 수행하는데 있어서 Program Counter의 역할이 있는데, 보통은 4가 더해지면서 다음 명령을 수행하지만, Branch나 Jump 같은 소위 건너뛰는 명령어가 발생하는 경우에는 이외의 방법을 통해서 명령이 수행된다. 이러한 명령어가 나오면 Program Counter가 가변적으로 변하게 된다. 이런 변화는 명령이 pipelined execution을 수행하는데 지장을 준다.
이상적은 pipeline 구조라면 CPI가 1인 형태를 취할 것이다. 하지만 첫 번째 명령이 Branch명령어라면 Program Counter가 해당 address로 넘어가면서 두 번째 명령은 수행되지 않을 것이다. branch명령의 특성상 현재의 address를 저장해둔 상태에서 수행한 후 다시 돌아오기 때문이다. 이 때문에 의도치 않은 stall이 발생하게 되고 결론적으로 pipeline의 제 성능을 못 나타나게 된다.
(해결방안)
1.Predict-Not-Taken
:branch 성립 여부에 상관없이 일단은 두 번째 명령을 수행해 놓고 보자는 것(branch가 성립하지 않을 것이라 가정)
2.Predict Taken
:branch가 무조건 성립할 것이라는 가정 하에 target instruction을 먼저 수행하는 방식
3.Delayed Branch
:branch의 성립조건에 상관없이 무조건 다음 명령을 수행하게 하는 것이다. Branch 자체가 Target으로 넘어가는 것이기에 다시 돌아오기 전까지 다음 instruction을 수행하는 것이 의미가 없는데 단지 그동안 할 것이 없기에 수행하게 하는 것이다.
-Delay slots: Branch 명령 바로 뒤에서 수행되는 의미 없는 명령이 담긴 것을 Delay Slot이라고 한다.
6.지역성의 원리
:프로그램은 상대적으로 주소공간의 작은 부분에 접근한다.
6-1: Temporal 지역성
:만약 item이 참조된다면 그것은 곧 다시 참조되는 경향이 있다.
6-2: Spatial 지역성
7.Levels of the Memory Hierarchy
계층순서: 레지스터 -> L1 캐시 -> L2 캐시 -> 메모리 -> 디스크 -> 테이프
레지스터와 L1 캐시는 명령어를 서로 주고받고 L1 과 L2캐시 사이에는 데이터 블록을 주고받는다. 또한 L2 캐시와 메모리 사이에도 데이터 블록을 주고 받으며 메모리와 디스크 사이에는 Page를 공유한다.
계층이 아래로 갈수록 속도 가격이 낮아지고 용량을 높아진다.
계층이 위로 갈수록 속도 가격은 높아지고 용량이 줄어든다.
8.Computer Architecture is Design and Analysis
: Cost이 적고 실행분석이 높을수록 Good Idea이다.
9.암달법칙
10.clock cycle이 무엇인가?
:컴퓨터 프로세스의 템포를 설정하는 발진기의 두 개의 인접한 펄스사이의 시간.
초당 펄스의 수가 많을 수록 컴퓨터 프로세서가 더 빨리 정보를 처리할 수 있다.
11.명령어 집합 구조
SW instruction set HW 관계: 소프트웨어가 명령 집합을 이용해 작업을 하고, 하드웨어는 SW가 잘 작동할 환경을 만들어준다.
ISA(명령집합구조): SW와 HW사이의 인터페이스에 대한 완전한 명세
MIPS: RISC 명령 집합(RISC: CPU안의 명령어를 최소로 줄여 단순하게 만든 프로세서)
12.MIPS 구조
R: 산술 연산 명령어
opcode: 연산자의 종류를 결정
rs: 첫 번째 피연산자 값이 들어가 있는 레지스터의 주소를 담고 있는 부분(5비트-32개의 레지스터 선택 가능)
rt: 두 번째 피연산자 값이 들어가 있는 레지스터의 주소를 담고 있는 부분 (5비트-32개의
레지스터 선택 가능)
rd: 두 개의 피연산자의 값을 얻은 결과를 저장하기 위한 레지스터의 주소를 담고 있는 부 분(5비트-32개의 레지스터 선택가능)
shamt: shift 명령어에서 이동 크기를 나타낸다. (다른 명령어에서는 항상 0이다.)
funct: opcode 와 함께 명령어의 종류를 나타낸다.
opcode
|
rs
|
rt
|
rd
|
shamt
|
funct
|
0
|
8
|
9
|
16
|
0
|
32
|
예를 들어 add $r16, $r8, $r9 일때,
$r16이라는 레지스터는 rd에 저장되고 $r8 $r9 라는 레지스터는 각각 rs, rt에 저장된다.
더하기, 빼기 등의 명령은 funct에 기록된다.
I:
opcode: 연산자의 종류를 결정
rs: 첫 번째 피연산자
rt: 연산 결과를 저장할 레지스터
immediate: 상수값 피 연산자
immediate 부분에는 16비트로 만들 수 있는 상수가 들어간다.
R타입에서는 두 개의 레지스터를 선택했지만, I 타임에서는 하나의 레지스터와 하나의 상수값을 선택해 명령을 수행한다.
예를 들어 int 형의 배열이 있다. Array[2]=Temp+Array[4]; 를 어셈블리어 코드로 변경하면
lw $r8, 16($r18) //$r18은 Array[0]이라 가정
add $r8, $r16, $r8 //$r16은 temp라고 가정함
sw $r8, 8($r18) //sw는 store
opcode
|
rs
|
rt
|
immediate
|
35
|
18
|
8
|
16
|
-J
opcode: 연산자의 종류 결정
address: 분기할 주소(상수 값)
13. Latency Lags Bandwidth
14.SLA(서비스 수준 협약서)
: 서비스를 제공함에 있어서 공급자와 사용자간의 서비스에 대한 협약서
15.Performance
Performance(x) = 1 / execution_time(x)
"X is n times faster than Y" means :
n= Performance(X) / Performance(Y) = Execution_time(Y) / Execution_time(X) = SPECRATIO(X) / SPECRATIO(Y)
Appendix A: Review of Instruction Set Architecture
-ppt로 공부
출처:
http://blog.naver.com/gayun817/220112475123
http://www.computerhope.com/jargon/c/clockcyc.htm
http://talkingaboutme.tistory.com/477
http://blog.naver.com/ctpoyou/143141689
0 개의 댓글