빠른 CPU를 위한 설계 기법
- 클럭 속도는 헤르츠 단위로 측정한다.
- 1초에 클럭이 몇 번 반복되는지를 나타낸다.
코어와 멀티코어
- 코어란 CPU 내에서 명령어를 실행하는 부품으로 여러 개 있을 수 있다.
- 코어를 여러 개 포함하고 있는 CPU를 멀티코어 CPU라고 한다.
- 멀티코어 프로세서한 여러 개의 코어를 포함하고 있는 CPU를 말한다.
- 코어마다 처리할 명령어들을 얼마나 적절하게 분배하느냐이고, 그에 따라서 연산 속도는 크게 달라진다.
스레드와 멀티 스레드
- 스레드는 실행 흐름의 단위이다.
- 스레드에는 CPU에서 사용되는 하드웨어적 스레드가 있고, 프로그램에서 사용되는 소프트웨어적 스레드가 있다.
하드웨어적 스레드
- 스레드를 하드웨어적으로 정의하면 하나의 코어가 동시에 처리하는 명령어 단위를 의미한다.
- 여러 스레드를 지원하는 CPU는 하나의 코어로도 여러 개의 명령어를 동시에 실행 할 수 있다.
- 하나의 코어로 여러 명령어를 동시에 처리하는 CPU를 멀티스레드 프로세서 또는 멀티스레드 CPU라고 한다.
소프트웨어적 스레드
- 하나의 프로그램에서 독립적으로 실행되는 단위
- 하나의 프로그램은 실행되는 과정에서 한 부분만 실행될 수 있지만, 프로그램의 여러 부분이 동시에 실행될 수도 있다.
멀티스레드 프로세서
- 하나의 코어로 여러 명령어를 동시에 처리하도록 만들려면, 프로그램 카운터, 스택 포인터, 데이터 버퍼 레지스터, 데이터 주소 레지스터와 같이 하나의 명령어를 처리하기 위해 꼭 필요한 레지스터를 여러 개 가지고 있으면 된다.
- 하드웨어 스레드(CPU에서 사용되는 스레드)를 논리 프로세서라고 부른다.
05-2 명령어 병렬 처리 기법
명령어 파이프라인
- 명령어 처리 과정을 클럭 단위로 나누어 보면 다음과 같이 나뉜다.
- 명령어 인출(Instruction fetch)
- 명령어 해석(instruction decode)
- 명령어 실행(execute instruction)
- 결과 저장(write back)
→ 같은 단계가 겹치지만 않는다면 cpu는 각 단계를 동시에 실행할 수 있다.
- 명령어들을 명령어 파이프라인에 넣고, 동시에 처리하는 기법을 명령어 파이프라이닝 이라고 한다.
- 파이프라이닝이 높은 성능을 가져오기는 하지만, 성능 향상에 실패하는 경우도 있는데, 이를 파이프라인 위험 이라고 한다.
- 파이프라인 위험은 데이터 위험, 제어 위험, 구조적 위험이 있다.
데이터 위험
- 명령어 간 데이터 의존성에 의해 발생한다.
- 모든 명령어를 동시에 처리 할 수는 없다
명령어 1: R1 <- R2 + R3
명령어 2: R4 <- R1 + R5
위와 같은 경우, 명령어 1을 수행해야만, 명령어 2를 수행할 수 있다. 따라서 명령어 2는 명령어 1의 데이터에 의존적이다.
제어 위험
- 제어 위험은 주로 분기 등으로 인한 프로그램 카운터의 갑작스러운 변화에 의해 발생한다.
- 프로그램 카운터는 현재 실행중인 명령어의 다음 주소로 갱신된다.
- 프로그램 실행 흐름이 바뀌어 명령어가 실행되면서 프로그램 카운터 값에 갑작스러운 변화가 생긴다면, 명령어 파이프라인에 미리 가지고 와서 처리중이던 명령어는 쓸모 없어진다.
- 분기 예측은 프로그램이 어디로 분기할지 미리 예측한 후 그 주소를 인출하는 기술이다.
구조적 위험
- 구조적 위험은 명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 ALU, 레지스터 등과 같은 CPU 부품을 사용할 때 발생, 구조적 위험은 자원 위험이라고도 부름
슈퍼스칼라
- CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조를 슈퍼 스칼라라고 한다.
- 슈퍼스칼라 구조로 명령어 처리가 가능한 CPU를 슈퍼스칼라 프로세서, 슈퍼스칼라 CPU라고 한다.
비순차적 명령어 처리
- 아래와 같은 명령어들로 이루어진 소스 코드가 있다고 하자.
메모리 N번지는 M(n)으로 표기, 메모리 n번지에 m을 저장하라는 m(n) ← m으로 표기
M(100) <- 1
M(101) <- 2
M(102) <- M(100) + M(101)
M(150) <- 1
M(151) <- 2
M(152) <- 3
- 3번 명령어를 실행하기 위해서는 M(100), M(101) 값이 결정되어야 하기에, 1번과 2번 명령어 실행이 끝날 떄까지 기다려야 한다.
- 명령어를 순차적으로만 실행하지 않고, 순서를 바꿔 실행해도 무방한 명령어를 먼저 실행하여 명령어 파이프라인이 멈추는 것을 방지하는 기법을 비순차적 명령어 처리 기법이라고 한다.
CISC와 RISC
명령어 집합
- CPU가 이해할 수 있는 명령어들의 모음을 명령어 집합이라고 한다. 명렁어 집합구조(ISA)라고 한다.
- ISA가 같은 CPU끼리는 서로의 명령어를 이해할 수 있지만, ISA가 다르면 서로의 명령어를 이해하지 못한다.
- ISA는 CPU의 언어이자 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 연속이다.
CISC
- Complex Instruction Set Computer의 약자
- 복잡한 명령어 집합을 활용하는 컴퓨터이다.
- 이름 그대로 복잡하고 다양한 명령어들을 활용하는 CPU 설계 방식이다.
- CISC는 다양하고 강력한 기능의 명령어 집합을 활용하기 때문에, 명령어의 형태나 크기가 다양한 가변 길이 명령어를 활용한다.
- 적은 수의 명령어만으로도 프로그램을 동작시킬 수 있다.
- 단점은 활용하는 명령어가 워낙 복잡하고, 다양한 기능을 제공하는 탓에 명령어의 크기와 실행되기까지의 시간이 일정하지 않다.
- 복잡한 명령어때문에 명령어 하나를 실행하는 데에 여러 클럭 주기를 필요로 한다.
- 명령어의 규격화가 어려워 파이프라이닝이 어렵다.
RISC
CISC의 한계
- 빠른 처리를 위해 명령어 파이프라인을 십분 활용해야 한다. 원활한 파이프라이닝을 위해 명령어 길이와 수행 시간이 짧고, 규격화 되어야 한다.
- 복잡한 기능을 지원하는 명령어를 추가하기보다는 자주 쓰이는 기본적인 명령어를 작고 빠르게 만드는 것이 중요하다.
- Reduced Instruction Set Computer의 약자이다.
- CISC에 비해 명령어의 종류가 적다.
- CISC와는 달리 짧고 규격화된 명령어, 되도록 1클럭 내외로 실행되는 명령어를 지향한다.
- RISC는 고정 길이 명령어를 활용한다.
- 명령어 파이프라이닝에 최적화되어 있다.
- RISC는 메모리에 직접 접근하는 명령어를 load, store 두 개로 제한할 만큼 메모리 접근을 단순화하고 최소화를 추구한다. 주소 지정 방식의 종류가 적음.
- RISC를 load-store 구조라고 부르기도 한다.
- 메모리 접근을 최소화 하는 대신에, 레지스터를 적극적으로 활용한다. CISC보다 레지스터를 이용하는 연산이 많고, 범용 레지스터 개수도 더 많다.
'📗 BOOK > 혼자 공부하는 컴퓨터구조+운영체제' 카테고리의 다른 글
혼자 공부하는 컴퓨터 구조+운영체제 7장 정리 (0) | 2024.07.25 |
---|---|
혼자 공부하는 컴퓨터 구조+운영체제 6장 정리 (0) | 2024.07.19 |
혼자 공부하는 컴퓨터 구조+운영체제 3장 정리 (0) | 2024.07.11 |
혼자 공부하는 컴퓨터 구조+운영체제 2장 정리 (0) | 2024.07.10 |
혼자 공부하는 컴퓨터 구조+운영체제 1장 정리 (0) | 2024.07.09 |