티스토리 뷰
[컴퓨터 구조] 명령어 병렬 처리 기법(중요) + 슈퍼스칼라, 파이프라인, CISC, RISC
sikaro 2024. 2. 4. 11:471. 명령어 인출 (Instruction Fetch)
2.명령어 해석 (Instruction Decode)
3. 명령어 실행(Execute Instruction)
4. 결과 저장(Write Back)
전공서에 따라 다르다.
명령어 파이프라인
같은 단계가 겹치지만 않는다면 CPU는 '각 단계를 동시에 실행할 수 있다.'
ex) 컨베이어 벨트에서 반복작업하는 노동자
명령어 파이프라인이 없다면 한 명령어를 끝까지 처리하고 다음에 또 끝까지 처리해야 한다.
> 시간이 오래 걸린다
파이프라인 위험(중요)
명령어 파이프라인이 성능 향상에 실패하는 경우
데이터 위험, 제어 위험, 구조적 위험
데이터 위험 : 명령어 간의 의존성에 의해 발생
모든 명령어를 동시에 처리할 수는 없다.(이전 명령어를 끝까지 실행해야만 비로소 실행할 수 있는 경우)
ex) 명령어 1: R1 <- R2+R3 / 명령어 2. R4 <- R1 + R5
명령어 R1을 해석하고 있는 동안에 R1을 가져올 수 없다.
제어 위험 : 프로그램 카운터의 갑작스러운 변화
점프나 인터럽트 같이 순서가 파괴될 때 실행하면 다음 명령어가 헛수고가 된다.
이 상황을 방지하기 위해서 어느 번지로 점프할 것인지 예측하는 기술도 있다(분기 예측)
구조 위험 : 서로 다른 명령어가 같은 CPU 부품(ALU, 레지스터)를 쓰려고 할 때
슈퍼스칼라
CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조
여러 개의 컨베이어 벨트를 두는 구조
하드웨어 스레드가 여러개 있는 CPU에서 가능한 구조이다.
이론적으로는 파이프라인 개수에 비례하여 처리 속도는 증가하지만,
파이프라인 위험도의 증가로 인해 파이프라인 개수에 비례하여 처리 속도가 증가하진 않는다.
비순차적 명령어 처리(OOOE)
현대 CPU 발전에서 기여한 기법
명령어들간의 합법적인 새치기
명령어를 순차적으로 처리하지 않는다.
M(100), M(101), M(102) = M(100)+M(101), M(150) 순서에서
M(100), M(101), , M(150), M(102) = M(100)+M(101) 순서로 바꾸면
파이프라인의 속도 또한 증가된다.
전체 프로그램 실행에는 영향이 없다.
물론 데이터 위험이 있다면 바꿀 수 없지만, 그래도 바꿀 수 있는 건 바꿀 수 있다.
명령어 집합
명령어 집합 (구조) CPU가 이해할 수 있는 명령어들의 모음
CPU의 종류에 따라서 어셈블리어가 달라질 수 있다.
명령어 집합이 달라지면은 같은 소스를 컴파일 해도 X86, ARM CPU인지에 따라 다르다.
명령어 집합(구조) (ISA) 는 CPU의 언어인 셈이다.
언어에 따라서 생활 양식이 달라지는 것처럼 나비효과로 많은 것들이 달라진다.
ex) 명령어 해석 방식, 레지스터의 종류와 개수, 파이프라이닝의 용이성
명령어의 집합이 달라지면 그 명령어를 효율적으로 실행할 수 있는 하드웨어도 달라지기 때문에 ISA는 소프트웨어와 하드웨어 사이의 약속이다.
CISC(Complex Instruction Set Computer)
복잡한 명령어 집합을 활용하는 컴퓨터 (CPU)
복잡한 명령어 집합을 사용하기 때문에, 복잡하고 다양한 명령어 활용한다.
명령어의 형태와 크기가 다양한 가변 길이 명령어를 활용
명령어 하나하나가 강력하기 때문에
상대적으로 적은 수의 명령어로도 프로그램을 실행할 수 있다.
메모리를 최대한 아끼며 개발해야 했던 시절에는 인기가 높았으나,
명령어 파이프라닝이 불리하다는 치명적인 단점이 있다.
명령어의 크기와 실행되기까지 시간이 들쑥날쑥하다.
명령어 파이프라이닝이 되려면 시간이 정형화 되어있어야 한다.
게다가 복잡한 명령어는 사용 빈도가 낮다.
하지만 현대 CPU의 실제 설계는 CISC가 실제로 설계될 떄는 마이크로 명령어 단위로 실행된다.
내부적으로는 RISC 처럼 사용하게 된다.
RISC(Reduced Instruction Set Computer)
명령어의 종류가 적고, 짧고, 규격화된 명령어 사용
단순하고 적은 수의 고정 길이 명령어 집합을 활용한다.
메모리 접근 최소화 및 레지스터 최대한 활용
다만 명령어 종류가 CISC보다 적기에 더 많은 명령어로서 실행된다.
1클럭 내외로 명령어를 수행한다.
파이프라이닝 하기가 쉽다.