본문으로 바로가기

0. 프로세서의 명령어 수준 병렬성, Pipeline


* Pipeline 정의

여러개의 명령어를 처리 단계별로 병렬화, 동시해석, 처리하는 기법


* RISC[reduced instruction set computer] Pipeline 5단계



IF(instructions fetch)

현재 명령어가 실행되는 주소에서 다음 주소로 넘기는 +4를 해주고

I-MEM에서 명령어를 가지고 온다.


ID(instruction decode)

명령어를 해독하여, LW의 기준으로는 lw $1 (0)$2 를 예를 들면, rs 필드 : $2 , 변위 : 0 , rt 필드 : $1로 레지스터를 읽도록 하게하고, 변위에 대해서는 부호와 주소로 변환 32bit로 변환해주는과정을 해준다.


EX(execute) 실행과정

ALU를 통해서 해당 명령어를 수행한다. rs, rt필드를 읽어올 수도 있고(R-type, branch) , lw, sw의 경우에는 변위부분을 두번째 피연산자로해서 계산한다. 

또한, 변위 부분을 Shift logical left 2번 해줌으로써 * 4를 해서 주소화 시킨다. 


MEM(Data memory)에다가 write하거나, read해서 write back할 준비를 한다. 

LW같은 경우에는 base address $2에 + 0을 더한 값으로 해당 주소의 데이터를 read 한 후에, wb할 준비를 한다. 

sw같은 경우에는 해당 주소 $2에 +0을 더한 값에 해당하는 주소에 $1값을 write한다.


WB(Write back)


* Pipeline 아키텍처

Super Scalar

Super Pipeline

Superpipelined Superscalar

VLIW (Very Long Instruction Word)



1. 해저드

다음 명령이 지정된 클럭에서 수행하는 것을 방해하는 것


2. 구조적 해저드 (Structural hazards)

하드웨어가 여러 명령 수행을 지원하지 않기 때문에 발생. 자원충돌.

add A, B, B

add C, D, D


▷ 해결방안 : 레지스터 파일 사용, 모든 구조적 해저드 제거는 어렵고 비쌈



3. 데이터 해저드 (Data hazards)

명령이 현재 파이프 라인에서 수행중인 이전 결과에 종속되는 경우 발생.


* Read After Write (RAW) : 명령 instrI가 저장한 오퍼랜드를 다음 명령 instrJ가 읽을 때 발생

A = B + C;

D = A + E;

명령 instrI가 WB스테이지에서 결과값 쓰기를 할 때까지 기다려야한다.


* Write After Read (WAR) : 명령 instrI가 오퍼랜드를 읽기 전에 다음 명령 instrJ가 같은 오퍼랜드 쓰기의 경우 발생

A = B + C;

B = D + E;

단일 파이프 라인에서는 발생하지 않음.

스테이지2에서 오퍼랜드를 읽고, 스테이지 5에서 오퍼랜드를 쓰기 때문.

동시에 수행하는 다중이슈에서 발생


* Write After Write (WAW) : 명령 instrI가 오퍼랜드를 쓰기 전에 명령 instrJ가 같은 오퍼랜드를 쓰는 경우 발생.

A = B + C;

A = D + E;

단일 파이프라인에서는 발생하지 않음.

동시에 수행하는 다중이슈에서 발생.


▷ 해결방안 : 레지스터 리네임 ( stoll )

 파이프라인 지연 ( interlock )

 컴파일러에 의한 instruction 스케줄링 ( By Pass )



4. 제어 해저드(Control hazards)

분기 명령어에 의해 발생


▷ 해결방안 : 지연분기 - 분기 방향이 결정될 때까지 중지

 Branch 예측 - 과거 실행 내역 및 빈도를 이용한 확률적 예측



5. 해저드를 해결하는 가장 단순한 방식은 해저드의 요인이 소멸될 때까지 파이프라인을 중지(stall)하는 것이다.



=============================================

I-MEM : instruction memory

LW : Load Word

ALU : 산술연산, 논리연산 및 시프트(shift)를 수행하는 중앙처리장치 내부의 회로 장치

오퍼랜드 : 연산의 대상이 되는 것. A+B라는 연산에서는 A를 제1오퍼랜드, B를 제2오퍼랜드라고 함


==============================================

예를 들어  lw $s1, 100($s2) 의 경우


IF 스테이지는 명령캐쉬(메모리의 사본)로부터 명령코드자체를 가져오는 단계입니다.
실제 RISC는 메모리를 직접 액세스하는 경우가 없습니다.
거의 캐쉬로부터 PC에 해당하는 코드이미지를 가져옵니다.

명령어 fetch -  memory에서 명령어 register로 명령어를 가져옵니다.


ID 스테이지에서 Load/Store는 실상은 거의 하는일이 없습니다.
보통 이 단계에서 레지스터페치가 일어납니다.
즉 $s2를 레지스터 파일에서 읽어오는거죠, 또한 숫자 100이라는 값도 ALU에 로딩합니다.
실상은 RISC파이프에서는 점프명령이 아닌 이상 거의 하는일이 없다고 봐도 됩니다.


EX 스테이지에서 Load/Store는 하는일이 무척많습니다.
$s2 + 100의 값이 실제로 계산되는 단계이며
필요에 따라서는 메모리 관리유닛(MMU)에 의해
가상메모리주소와 물리메모리주소의 변환이 일어납니다.(구조에 따라 아닐 수도 있습니다.)


MEM : $s2 + 100 주소에 있는 data를 read합니다.

대체로 데이터캐쉬로부터 값을 로딩합니다.


WB : 상기의 data를 $s1 register에 write 합니다.

로딩값을 레지스터 파일에 기록합니다.

'CS > Computer' 카테고리의 다른 글

[Network] 토폴로지(Topology) bus형 star형 ring형  (0) 2017.07.01
[품질관리] CMM (Capability Maturity Model)  (0) 2017.06.27
RAID Level (5,6)  (0) 2017.06.26
RAID Level (0,1,2,3,4)  (0) 2017.06.26
[Micro Processor] RISC / CISC  (0) 2017.06.26