- 명령어 파이프라이닝
명령어를 실행하는데 사용되는 하드웨어를 여러 개의 독립적인 단계들로 분할하여 서로 다른 명령어들을 처리하도록 함으로써 CPU의 성능을 높여주는 기술
- n단계 명령어 파이프라인
명령어를 실행하는 하드웨어를 n 개의 독립적인 단계로 분할한 것
- 4단계 명령어 파이프라인
명령어 인출 (IF), 명령어 해독(ID), 오퍼랜드 인출(OF), 실행(EX)으로 이루어짐
- 명령어 선인출
명령어 파이프라이닝에 의해 다음에 실행될 명령어를 미리 인출하는 것
- 전체 명령어 실행 시간
T (전체 시간) = k (파이프라인 단계 수) + (N(명령어 수) - 1)
같은 명령어 클록의 k개의 단계가 N 개의 명령어를 실행하는데 걸리는 시간
k 시간을 기다린 후 나머지는 이미 누적되므로 N - 1 시간을 더함
- 속도 향상
Sp = k x N / k + (N - 1)
파이프라이닝이 없을 시 처리하는데 k x N 의 시간이 걸림
- 문제점
명령어 인출 및 실행 때마다 모든 파이프라이닝의 작업이 실행되는 것이 아니지만 모든 단계의 파이프라인을 다 통과해야 하므로 시간이 필요없이 소모됨
모든 단계의 시간이 같은 것이 아니므로 단계 중 가장 긴 시간의 단계를 클록 주기로 잡아야 하므로 실제 속도 향상이 더 낮아짐
하나의 기억 장치 모듈을 여러 단계가 동시에 엑세스 할 수 없기 때문에 단계끼리 만나면 지연될 수 있음
조건 분기 시 파이프라인에 쌓인 작업이 필요없어져 사이클이 낭비될 수 있음
- 보완책
단계를 매우 쪼개어 각 단계 시간을 같게 만들어 클록 주기를 단축시키는 슈퍼파이프라이닝 구조 사용
IF 단계와 OF 단계가 직접 액세스하는 CPU 내부 캐시를 명령어 캐시와 데이터 캐시로 분리시키는 방법 사용
- 조건 분기
- 분기 예측
분기가 일어날 것을 예측하고 그에 따라 어느 경로의 명령어를 인출할 지 결정하는 확률적 방법
- 분기 목적지 선인출
조건 분기가 인식되면 분기 명령어의 다음 명령어와 조건이 만족할 경우에 분기하게 될 목적지의 명령어도 함께 인출하는 방법
- 루프버퍼
파이프라인의 명령어 인출 단계에 포함된 작은 고속 기억장치
가장 최근에 인출된 일정 개수의 명령어들이 순서대로 저장되어있음
분기 발생 시 하드웨어가 분기 목적지의 명령어를 버퍼에서 확인한 후 버퍼로부터 인출
반복 루프가 크지 않다면 그 전체가 루프 버퍼 에 저장될 수 있기 때문에 반복 루프들이 포함된 프로그램을 처리하는 경우에 효과가 높음
- 지연 분기
분기 명령어의 위치를 적절히 조정하여 원래보다 나중에 실행되도록 재배치함으로써 성능 저하를 최소하 하는 것
- 상태 레지스터
조건 분기 명령어에서 사용하는 조건들이 저장됨
CPU는 실행 사이클 동안에 조건 분기 명령어가 지정하는 플래그의 값을 검사하여 분기 여부를 결정
- 플래그
각 조건의 상태를 나타내는 비트
- 슈퍼스칼라
CPU의 처리 속도를 더욱 높이기 위하여 내부에 두개 혹은 그 이상의 명령어 파이프라인들을 포함시킨 구조
이론적으로는 프로그램 처리 속도가 파이프라인 의 수만큼 높아질 수 있음
- 데이터 의존성
파이프라이닝의 명령어들의 사이에 데이터 의존성이 있는 것
하나가 처리될 때 다른 파이프라이닝이 유휴상태가 될 수 있음
- m-way 슈퍼 스칼라의 전체 명령어 실행 시간
T(k) = k + (N-m) / m
- 속도 향상
sp = k x N / k + (N-m) / m
N 이 무한히 갈 수록 실제로는 sp = m
m배의 효과를 얻을 수 있음
- 실제
CPU가 동시에 처리할 수 있는 명령어들의 수가 늘어나게 되면,기억장치와 레지스터에 대한 충돌이 발생하지 않을 수 있도록 하드웨어도 그만큼 추가되어야 함
실제 프로그램 처리 과정에서는 독립적으로 실행될 수 있는 명령어들이 파이프라인의 수만큼 존재하지 않거나,명령어들 간에 데이터 의존성이 존재하는 상황이 발생하게 되어 파이프라인의 일부 단계가 유휴 상태로 들어갈 수 있음
- 다중 프로세서 구조
한 시스템 내에 여러 개의 CPU 들을 탑재하는 구조
- 코어
- CPU 코어
CPU 칩의 내부회로 중에서 명령어 실행에 반드시 필요한 핵심 부분들로 이루어진 하드웨어 모듈
- 멀티 코어 프로세스
하나의 칩에 여러 개의 코어를 넣은 것
- 독립성
각 CPU 코어는 시스템 버스 인터페이스와 내부 캐시만 공유
각 CPU 코어는 프로그램 실행을 독립적으로 수행하며 필요한 경우에만 공유 캐시를 통해 정보를 교환함
- 멀티 태스팅 (멀티-스레딩)
독립적인 처리가 가능한 단위로 분할된 태스크 프로그램들이 CPU 코어들에 의해 동시에 처리되는 기술