티스토리 뷰
CPU 명령어 수행 과정과 파이프라인
[ CPU 명령어 수행 과정 ]
1. Instruction Fetch
: 실행할 명령어를 메모리에서 읽어 CPU로 가져오는 단계.
1) PC가 가리키는 주소를 MAR에 전송.
2) MAR에 적힌 주소를 메모리에서 읽어 MBR로 전송.
3) MBR에 있는 명령어를 IR에 저장.
4) 다음 명령어를 가리키도록 PC 주소값 증가.
※ PC(Program Counter) : 다음 명령어를 가리키는 주소값을 가진 레지스터.
MAR(Memory Access Register) : CPU가 사용하려는 명령어 주소를 일시적으로 저장하는 레지스터.
MBR(Memory Buffer Register) : CPU에 쓰여질 데이터를 일시적으로 저장하는 버퍼 레지스터.
IR : 가장 최근에 인출(Fetch)된 명령어가 저장 된 레지스터.
2. Instruction Decode
: 인출한 명령어에 포함된 데이터를 가져오고, 명령어를 해독(Decode)하는 단계.
3. Instruction Execution
: 해석된 명령어에 따라 데이터에 대한 연산을 수행하는 단계.
4. Write Back
: 처리 완료된 데이터를 메모리에 기록하는 단계.
[ Pipeline ]
: 한 명령어가 모두 끝나야 다음 명령을 수행하던 기존 방식의 단점을 보완해, 여러 단계로 나누어 병렬 처리하는 기법.
: 명령어를 겹쳐 실행하기 위해 하나의 코어에 여러 개의 스레드를 실행하는 방식.
: 수행된 연산 결과는 다음 세그먼트(Segment)로 넘어가 마지막 세그먼트에서 최종 연산 결과 도출.
: 세그먼트마다 레지스터가 존재하며, 레지스터는 각 세그먼트의 연산 결과를 저장. → 중간 결과 보관.
: CPU 성능 향상.
: 각 세그먼트의 수행 시간이 다르며, 가장 시간이 많이 소요되는 세그먼트에 속도를 맞춰야 하는 문제가 있음.
병렬 컴퓨터 구조
1. SISD(Single Instruction-stream Single Data-stream)
: 한 번에 데이터 하나를 명령어 하나로 처리하는 기법.
: 폰 노이만 구조의 컴퓨터가 기본적으로 따르는 기법.
: 단순한 구조.
: 명령어를 실행할 때마다 명령어와 데이터를 읽어와야 한다는 단점 존재. → 낮은 효율성
2. SIMD(Single Instruction-stream Multi Data-streams)
: 한 번에 여러 데이터를 명령어 하나로 처리하는 기법.
: 배열이나 벡터 처리에 적합하여 배열 처리기라고도 부름.
: 개발자가 신경 쓸 것이 많아지고, 높은 구조 지식을 요구.
3. MISD(Multi Instruction-streams Single Data-stream)
: 한 번에 하나의 데이터를 여러 명령어로 처리하는 기법.
4. MIMD(Multi Instruction-streams Multi Data-streams)
: 한 번에 여러 데이터를 여러 명령어로 처리하는 기법.
: 비동기적이며 독립적으로 동작.
: 대부분의 멀티프로세서(Multi-Processor)와 멀티컴퓨터(Multi-Computer)가 이에 속함.
Pipeline의 종류
· 산술 파이프라인(Arithmetic Pipeline)
: 산술 연산들을 부연산으로 나누어 Pipeline의 Segment에서 수행되도록 함.
· 명령어 파이프라인(Instruction Pipeline)
: Fetch, Decode, Execution 단계를 중첩시켜 명령어 흐름에 대해 동작하도록 함.
: 분기가 발생할 경우 파이프라인을 모두 비우고 읽어온 명령어들은 무시되어야 하는 취약점이 있음.
: 명령어 Fetch를 Queue로 구성 및 실행하여 메모리 접근 시간을 줄임.
- 동작 단계
1. 2단계 명령어 파이프라인(Two-Stage Instruction Pipeline)
: 두 단계의 처리 시간이 동일하지 않으면 오히려 효율이 저하. → 파이프라인 단계 수를 증가시킴으로 해결.
1) Fetch Stage(Instruction Fetch / Instruction Decode)
2) Execution Stage(Instruction Execution)
2. 4단계 명령어 파이프라인(Four-Stage Instruction Pipeline)
1) IF(Instruction Fetch) : 명령어 인출
2) ID(Instruction Decode) : 명령어 해독
3) OF(Operand Fetch) : 메모리에서 데이터(Operand) 인출
4) EX(Execute) : 실행
- 수행 시간
▶ 클럭 사이클 수 : 세그먼트의 갯수 K, 총 Task의 수 N이라고 하면, K + N - 1
▶ 소요시간 : 각 세그먼트를 수행하는데 걸리는 시간을 T라 하면, T * (K + N - 1)
▶ 파이프라인을 통한 속도 향상률 : (K * N) / (K + N - 1)
- 문제점
1. Resource Conflict
: 구조적인 문제.
: 여러 세그먼트가 동시에 같은 자원에 접근하려고 하여 정상 작동을 방해하는 문제.
해결 방법)
: 하버드 아키텍처(Harvard Architecture)를 이용해 명령어 버스와 데이터 버스를 분리하여 해결 가능.
2. Data Dependency
: 데이터적인 문제.
: 이전 명령어가 끝나지 않은 레지스터에 접근하여 명령어를 실행하려고 할 때 발생.
( 인접한 두 명령어에서 발생 )
해결 방법)
1) Freezing the pipeline : 이전 명령이 데이터를 Write할 때 까지 대기.
2) Forwarding : Write하기 전에 연산된 데이터를 미리 다음 명령어로 전달.
3) Compiler Scheduling : 컴파일 단계에서 사용하지 않는 명령어를 입력해 Clock을 맞춤.
3. Branch Difficulty
: 제어적인 문제.
: 분기 명령어를 통해 명령어를 건너뛸 때 발생. → PC값 변동, 명령어 미실행
해결 방법)
1) Stall : 문제 해결까지 대기.
2) Optimized Branch Procession(Fast Branch) : 본래의 MEM 단계가 아닌 ID 단계에서 분기 결과 미리 수행.
3) Delayed Branch : 분기와 상관 없이 항상 수행되는 명령을 Delayed Slot에 삽입.
4) Branch Prediction
: 분기 명령어를 실행하기 전에 목적지 주소를 예측.
▶ Static Branch Prediction
: 발생(Taken), 미발생(Not-Taken), 코드에 따른 예측(Predict by Op-code)으로, 미리 정적 예측.
▶ Dynamic Branch Prediction
: BTB(Branch Prediction Buffer)를 이용해 이전 분기 명령어의 결과를 확인하여 예측.
: BTB는 Fetch 세그먼트에 속해 있어 IF단계에서 예측 가능.
'컴퓨터 공학 이론 > 컴퓨터 구조론' 카테고리의 다른 글
[컴퓨터 구조론] 논리 회로와 컴퓨터 구조 (0) | 2022.11.23 |
---|---|
[컴퓨터 구조론] 컴퓨터의 구성 요소와 폰 노이만 구조 (0) | 2022.11.23 |