명령어 파이프라인
하나의 명령어 사이클을 여러단계로 나누고 각 단계에서 동시에 다른 명령어를 처리하도록 CPU설계.
파이프라인의 깊이는 총 단계 수.
명령어 사이클의 단계 설계
최소 다음 단계의 순차 실행을 고려
- 메모리에 저장된 명령어를 인출
- 명령어를 해독 → 연산코드와 오퍼랜드 필드분리
- 오퍼랜드 필드에서 유효주소를 찾아냄
- 유효주소로 메모리에 저장된 실제 피연산자를 인출
- 연산을 실행해 명령어 수행을 완료
- 연산결과를 저장
4단계 파이프라인 구조
- 1 단계 : 명령어 인출
- 2 단계 : 명령어 해독
- 3 단계 : 연산 실행
- 4 단계 : 연산결과 저장
5단계 파이프라인 구조
- 1 단계 : 메모리에서 명령어 인출
- 2 단계 : 명령어를 해독하고 명령어 형태를 결정하며 필요한 피연산자 결정
- 3 단계 : 레지스터 또는 메모리에서 피연산자 결정
- 4 단계 : 명령어 연산 수행
- 5 단계 : 결과를 레지스터에 저장
요즘은 수십 단계로 나누지만 무한정 늘리지 않음
요즘 CPU →여러 개의 명령어 파이프라인과 연산 파이프라인을 갖도록 설계
파이프라인 구조 사용시 병렬계산의 속도상승→ 명령어 개수가 커지면 단계 수 N에 근접
데이터 해저드
데이터 의존성 (data dependency) : 파이프 라인에서 앞서가는 명령의 연산 결과를 레지스터에 기록 전에 다른 명령에 이 데이터가 필요한 상황. 앞의 명령결과가 다음 명령 입력으로 사용될 때 파이프 라인 시스템에 문제 발생
해결 방법 :
- 레지스터에 저장되기 전에 연산 결과를 직접 다음 명령에 전달하는 데이터 포워딩,
- 버블을 명령 사이에 끼워 넣어 프로그램 실행을 1단계 또는 2단계 지연
제어 해저드
파이프 라인 CPU 구조의 분기 명령이 실행될 떄 발생
이미 파이프 라인에 적재되어 실행되고 있는 이어지는 다른 명령들이 더 이상 필요가 없어지므로 발생
해결 방법 :
- 지연 슬롯(delay slot)을 넣고 분기 목적지 주소를 계산하는 과정을 파이프 라인 속에 넣는 것
- 지연 슬롯이란 NOP이나 분기 명령과 무관한 명령을 끼워 넣는 것, 컴파일러나 프로그래머가 프로그램 순서를 바꾸는 것.
구조적 해저드
서로 다른 단계에서 동시에 실행되는 명령이 컴퓨터 내의 장치 하나를 동시에 사용하려고 할 때 발생
Ex) 명령어 인출과 오퍼랜드 인출이 동시에 발생하는 경우
해결 방법 :
- 하버드 구조(harvard architecture)를 사용, 메모리를 프로그램(명령어) 메모리와 데이터 메모리로 완전 분리시킨 구조
- 동일한 장치를 동시 사용하여 일어나는 충돌 : 장치를 하나 더 둠
슈퍼 스칼라
하나의 프로세서 안에 2개 이상의 파이프 라인 탑재
하나의 명령어 인출 장치가 명령어 쌍을 동시에 가져와서 각 명령어를 다른 파이프 라인에 배치하고 개별 ALU를 가지고 병렬 작업
둘 중 어느 명령도 다른 명령의 결과에 의존하지 않아야 함
하드웨어를 추가해 실행 도중에 충돌을 감지 및 제거
혹은 파이프 라인은 한개지만 기능 장치를 여러 개 제공하는 슈퍼 스칼라도 있음 ex) S4 단계에서 여러 장치 제공
'Computer Science' 카테고리의 다른 글
인터럽트란? (Interrupt) (0) | 2022.06.29 |
---|---|
프로세스와 스레드의 차이 (0) | 2022.06.14 |
중앙처리장치(CPU)의 작동원리 (0) | 2022.06.07 |
메모리 구조 (Memory structure) - code, data, heap, stack (0) | 2022.06.02 |
캐시(cache) 란 무엇인가? (0) | 2022.05.31 |