명령어 병렬 처리 기법 & CISC와 RISC
🤓책 '혼자 공부하는 컴퓨터 구조 + 운영체제'의 내용을 바탕으로 정리한 공부 내용입니다.
🏭명령어 병렬 처리 기법
: 명령어를 동시에 처리하여 CPU를 쉬지 않고 작동시키는 기법
명령어 파이프라인
: 명령어들을 명령어 파이프라인에 넣고 동시에 처리하는 기법
- 하나의 명령어가 처리되는 과정
- 명령어 인출 (Instruction Fetch)
- 명령어 해석 (Instruction Decode)
- 명령어 실행 (Execute Instruction)
- 결과 저장 (Write Back)
=> 같은 단계가 겹치지 않는다면 동시 실행가능
파이프라인 위험
: 특정 상황에서 성능향상에 실패하는 경우
- 데이터 위험
- 명령어간 '데이터 의존성'에 의해 발생
- 어떤 명령어는 이전 명령어를 끝까지 실행해야만 비로소 실행됨
명령어1 : R1 <- R2 + R3 //R2레지스터 값과 R3레지스터 값을 더해 R1에 저장
명령어2 : R4 <- R1 + R5
-> 명령어 2는 R1의 값에 의존적이므로 명령어1 실행이 끝나기 전에 명령어2를 인출할 수 없음
- 제어 위험
- 분기 등의 프로그램 카운터의 갑작스러운 변화에 의해 발생
- 분기 예측 : 프로그램이 어디로 분기할지 미리 예측한 후 그 주소를 인출하는 기술
- 구조적위험
- 명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 같은 CPU부품을 사용하려 할 때 발생 (=자원 위협)
슈퍼 스칼라
: 여려 개의 명령어 파이프라인을 두는 기법
- 멀티스레드 프로세서는 슈퍼스칼라 구조 사용 가능
- 이론적으로 파이프라인 개수에 비례하여 프로그램 처리 속도 향상
- 하지만 파이프라인 위험 등의 문제로 비례하여 빨라지지는 암흥ㅁ
=> 위험 방지를 위해 고도의 설계 필요
비순차적 명령어 처리
: (OoOE : Out-of-order execution) 명령어들을 순차적으로 실행하지 않는 기법, 대부분의 CPU가 차용
=> 서로 데이터 의존성이 전혀 없는 명령어들을 순서를 바꾸어 먼저 실행하여 명령어 파이프라인이 멈추는 것을 방지
📖 CISC와 RISC
명령어 집합 구조
: (ISA : Instruction Set Architecture) CPU가 이해할 수 있는 명령어의 모음, CPU종류마다 차이有
- 같은 소스코드로 만들어진 프로그램이라도 ISA가 다르면 어셈블리어도 달라짐
- CPU의 언어임과 동시에 CPU를 비롯한 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속
CISC
: (Complex Instruction Set Coumputer) 복잡하고 다양한 명령어를 활용하는 CPU설계 방식
(x86, x86-64 - 대표적인 CISC 기반의 ISA)
- 명령에의 형태와 크기가 다양한 가변 길이 명령어를 활용
= 상대적으로 적은 수의 명령어로도 프로그램을 실행 가능
- 메모리 공간 절약 가능
- 명령어의 크기와 실행 시간이 일정하지 않고 하나의 명령에 여려 클럭 주기를 필요로함 => 규격화 되지 않은 명령어가 파이프라이닝을 어렵게 만든 셈
- 자주 사용하는 명령어만 계속 씀
=> CISC기반 CPU는 성장에 한계有
RISC
: (Reduced Instruction Set Computer)
- CISC에 비해 명령어의 종류가 적음
- 짧고 규격화된 명령어 지향 (1클럭 내외의 명령어)
=> 파이프라이닝에 최적화
load
store
두 개로 제한한 메모리 접근 명렁어
=> 레지스터 적극 활용
- CISC보다 많은 명령으로 프로그램 작동
Sum-up
구분 | SISC | RISC |
---|
명령어 | 복잡 다양 | 단순 적은 양 |
명령어 길이 | 가변길이 | 고정길이 |
주소지정방식 | 다양 | 적음 |
프로그램 명령어 수 | 적음 | 많음 |
명령어 수행 클럭 | 여러 클럭 | 1클럭 내외 |
파이프라이닝 난이도 | 어려움 | 쉬움 |
.💭사람들 참 똑똑하다