인프런의 개발자를 위한 컴퓨터 공학1 : 혼자 공부하는 컴퓨터 구조 + 운영체제 강의를 듣고, 학습 및 요약
CPU가 어떻게 시간을 효율적으로 사용하면서 명령어들을 빠르게 처리할 수 있을까!?
1. 명령어 파이프라인
하나의 명령어가 처리되는 과정을 비슷한 시간 간격으로 나누면 아래처럼!
이 과정 전체가 하나의 스레드이다.
- 명령어 인출(Instruction Fetch)
- 명령어 해석(Instruction Decode)
- 명령어 실행(Execute Instruction)
- 결과 저장(Write Back)
인출 -> 실행으로 나누기도 하고
명령어 해석 -> 명령어 실행 -> 명령어 접근 -> 결과 저장으로 나누기도 한다.
같은 단계가 겹치지만 않으면 CPU는 '각 단계를 동시에 실행할 수 있다.'
명령어 파이프라이닝 : 동시에 여러 개의 명령어를 겹쳐 실행하는 기법(하나의 코어에 여러 개의 스레드를 사용하는 것)
- 기존의 방식은 하나의 명령어를 처리하기 위해서 명령어 처리 4단계를 모두 마치고 다음 명령어를 실행하지만, 파이프라인 기법에서는 명령어 처리의 단계마다 독립적으로 구성하여 각 단계가 쉬지 않고 명령어 처리한다.
파이프라인 위험
- 명령어 파이프라인이 성능 향상에 실패하는 경우
1. 데이터 위험
- 명령어 간의 의존 성에 의해 야기
- 모든 명령어를 동시에 처리할 수 없다.(이전 명령어를 끝가지 실행해야만 비로소 실행할 수 있는 경우)
- 첫 번째 명령어에 의해 값이 정해지는 데이터를 두 번째 명령어에서 읽게 되는 경우 두 명령어를 실행 순서가 변경되면 안 된다.
2. 제어 위험
- 프로그램 카운터의 갑작스러운 변화
3. 구조 위험
- 서로 다른 명령어가 같은 CPU 부품(ALU, 레지스터)를 쓰려고 할 때
슈퍼스칼라 프로세서
CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조(오늘날의 멀티스레드 프로세서)
- 대부분 파이프라인 기법과 비슷하지만 각 단계에서 동시에 실행되는 명령어가 2개라는 점이 다름
- 병렬로 처리할 수 있는 명령어가 없는 경우에는 슈퍼스칼라를 써도 효과를 기대할 수 없음
- 이론적으로는 파이프라인 개수에 비례하여 처리 속도가 증가하지만 파이프라인 위험도의 증가로 인해 파이프라인 개수에 비례해 처리 속도가 증가하진 않음
비순차적 명령어 처리(out-of-order execution, OoOE)
파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 명령어 병렬 처리 기법
'cs' 카테고리의 다른 글
[혼공운영체제] RAM의 특징과 종류와 메모리의 주소 공간 (0) | 2023.04.17 |
---|---|
[혼공운영체제] CPU의 성능 향상 기법(3) : 명령어 집합 구조, CISC와 RISC (0) | 2023.04.17 |
[혼공운영체제] 4. 빠른 CPU를 위한 설계 기법 (0) | 2023.04.16 |
[혼공운영체제] 3. 명령어 사이클과 인터럽트 (0) | 2023.04.16 |
[혼공운영체제] 2. CPU의 작동원리(ALU와 제어장치, 레지스터) (0) | 2023.04.13 |