컴퓨터 이론(명령어 병렬처리 기법)

손원진·2023년 3월 23일

Q) cpu가 시간을 알뜰하게 쓰면서 메모리에 있는 명령어들을 처리하기 위한 방법은 무엇일까?

명령어 파이프라인

  1. 명령어 인출

  2. 명령어 해석

  3. 명령어 실행

  4. 결과 저장

같은 단계가 겹치지 않는다면, CPU는 각 단계를 동시에 실행할 수 있다.

명령어를 동시에 사용하지 않는다면, 겹쳐서 사용하는 기법인 명령어 파이프라인이 현대에는 정말 중요한 기술로 자리매김을 했다.


파이프 라인 위험 : 명령어 파이프라인이 성능향상에 실패하는 경우

  • 데이터 위험
  • 제어 위험
  • 구조적 위험

데이터 위험

명령어간의 의존성에 의해 야기

모든 명령어를 동시에 처리할 수 없다.
(이전 명령어를 끝까지 실행해야만 비로소 실행할 수 있다.)

명령어 1 을 해석하고 있는 동안, 명령어 2를 인출할 수 없다. 왜냐면 명령어 1에서 저장한 데이터를 명령어 2가 인출해야 하는 상황이기 때문이다.

제어위험

프로그램 카운터에 갑작스런 변화

실행하다가 명령어에서 갑자기 60번지로 분기하라는 명령이 나옴 그럼 중간에 파이프라인 방식으로 진행한 명령어를 괜히 실행한 것이 됨

그래서 프로그램 카운터가 어느방향으로 JUMP할 것인지 미리 예측하는 기술도 있는데 그것을 분기예측이라고 부릅니다.

구조위험

서로다른 명령어가 같은 CPU부품 (ALU, 레지스터) 사용하려고 할 때 구조위험 발생


슈퍼 스칼라

CPU내부에서 여러개의 명령어 파이프라인을 포함한 구조(오늘날의 멀티 스레드 프로세서)

이론적으로는 파이프라인 개수에 비례해서 처리속도 증가
파이프라인 위험도의 증가-> 개수에 비례하여 처리속도 증가는 X


비순차적 명령어 처리 (Out Of Order Execution)

1번과 2번이 실행이 완료된 후에 3번을를 실행하기 때문에 파이프라인이 늘어난다고 해서 성능향상을 기대할 수는 없게되는데,
여기서 비순차적 동기처리로 3번 같은 경우를 마지막에 처리할 수 있도록 맨뒤로 보내버릴 수 있을까? 가능하다

다만 아무명령어나 순서를 바꿔서 진행할 수는 없고, 서로 의존관계가 없으면 변경이 가능하다.


명령어 집합

"CPU는 명령어를 실행한다." 명령어의 세세한 생김새 , 연산 , 주소 지정방식은 CPU마다 다르다.

명령어의 집합(구조) : CPU의 언어인 셈
명령어가 달라지면 그에대한 나비효과로 많은 것들이 달라진다.
명령어 해석방식, 레지스터의 종류와 개수

ISA는 소프트 웨어와 하드웨어 사이에 약속입니다.

위 명령어를 어셈블리어(저급언어)로 컴파일을 하게됐을 때 X86-64 명령어 구조를 따르는 CPU들은 ARM에 언어를 이해할 수 있고 반대의 경우도 마찬가지다.

명령어 집합의 종류 (CISC) Complex Instruction Set Computer

복잡한 명령어 집합을 활용하는 컴퓨터(cpu)

복잡하고 다양한 명령어 활용, 명령어의 형태와 크기가 다양한 가변길이 명령어를 활용

다양하고 강력한 명령어를 활용 , 상대적으로 적은 수의 명령어로도 프로그램을 실행가능

단점 - 명령어가 워낙 복잡하고 다양한 기능을 제공하는 탓에 파이프라이닝이 불리하다는 단점

명령어를 겹쳐서 실행하는 파이프라이닝이 동작하려면 명령어 하나당 실행하는 속도가 규칙적으로 진행되어야한다. ex)어떤 명령어는 2clock, 4clock으로 실행되어서는 안된다.

게다가 대다수 복잡한 명령어는 사용빈도가 낮다.

명령어 집합의 종류 RISC(Reduced Instruction Set Computer

Risc는 명령어의 종류가 적고, 짧고 규격화된 명령어를 사용한다.
따라서 명령어 파이프라이닝에 유리하다.

메모리 접근 방식을 최소화(load, store)
접근을 load 저장을 store로 두개의 명령어로만 진행한다.
레지스터를 10분 활용

명령어의 종류가 cisc보다 적기때문에 더많은 명령어로 프로그램을 동작시킴
compile했을 때 더많은 명령어가 나옴


두가지 명령어 집합의 지표

CISC가 명령어의 길이가 들쭉날쭉하고, 명령어마다 처리 시간단위가 다르다고 말하지만
CISC기반에 프로세서라도 실행될때는 작은단위(마이크로 단위) 로 실행된다.
명령어보다도 조금 더 잘게 쪼개서 실행함(마이크로 명령어)
명령어를 실행하는 동작 자체도 1Clock내로 잘게쪼개서 실행하는 경우가 많다.

CISC는 CPU에서 내부적으로 잘게 쪼개서 실행하기 때문에 RISC처럼 실행한다고 이해하면 된다.

profile
매일 한 걸음

0개의 댓글