- 빠른 CPU를 위한 설계 기법을 학습한다.
- 빠른 CPU를 위한 명령어 병렬 처리 기법을 학습한다.
- RISC와 CISC의 차이에 대해 이해한다.
- 컴퓨터 부품들은 클럭 신호에 맞춰 움직인다.
- CPU는 명령어 사이클이라는 정해진 흐름에 맞춰 명령어들을 실행한다.
클럭 속도는 헤르츠(Hz)
단위로 측정한다.
클럭 속도는 일정하지 않다.
클럭속도는 기본 클럭 속도(Base)
와 최대 클럭 속도(Max)
로 나뉘는데 CPU는 계속 일정한 클럭 속도를 유지하기보단 고성능을 요하는 순간에 순간적으로 클럭 속도를 높이고, 그렇지 않을 때에는 클럭 속도를 낮춘다.
최대 클럭 속도를 강제로 더 끌어 올리는 기법을 오버클럭킹
이라고 한다.
발열 문제
가 심각해진다. 명령어를 실행하는 부품
➡ 예로 8코어
는 명령어를 실행하는 부품
이 8개가 있다는 의미
코어를 여러 개 포함하고 있는 CPU
분배
되지 않는다면 코어 수에 비례하여 연산 속도가 증가하지 않음사전적 의미로는 실행의 흐름 단위이다.
CPU
에서 사용되는하드웨어적 스레드
가 있고,프로그램
에서 사용되는소프트웨어적 스레드
가 있다.
스레드 | |
---|---|
하드웨어적 스레드 | 하나의 코어가 동시에 처리하는 명령어 단위 (CPU입장) |
소프트웨어적 스레드 | 하나의 프로그램에서 독립적으로 실행되는 단위 (프로그램, 운영체제 입장) |
<하드웨어적 스레드>
➡ 1코어 1스레드는 명령어를 실행하는 부품이 하나있고, 한 번에 하나씩 명령어를 실행하는 CPU
➡ 2코어 4스레드는 명령어를 실행하는 부품이 두 개 있고, 한 번에 4개의 명령어를 처리할 수 있는 CPU
<소프트웨어적 스레드>
➡ 하나의 프로그램은 실행되는 과정에서 한 부분만 실행될 수도 있고, 여러 부분이 동시에 실행될 수도 있음
➡ 1코어 1스레드 CPU로도 프로그램의 여러 부분을 동시에 실행할 수 있음
하나의 코어로 여러 명령어를 동시에 처리하는 CPU
➡ 8코어 16스레드는 코어 하나당 두 개의 하드웨어 스레드를 처리한다는 의미
◼ 하이퍼스레딩
이란 인텔의 멀티스레드 기술을 의미
하나의 코어로 여러 명령어를 동시에 처리하도록 만들려면 PC, SP, MAR, MBR과 같이 하나의 명령어를 처리하기 위해 꼭 필요한 레지스터(
레지스터 세트
)를 여러 개 가지고 있으면 된다.
➡ ALU와 제어장치가 두 개의 레지스터 세트에 저장된 명령어를 해석하고 실행하면 하나의 코어에서 두 개의 명령어가 동시에 실행된다.
➡ 프로그램 입장
에서 봤을 때 하드웨어 스레드
는 '한 번에 하나의 명령어를 처리하는 CPU'와 같으므로 2코어 4스레드는 프로그램입장
에서 4개의 CPU가 있는 것처럼 보인다. 때문에 하드웨어 스레드
를 논리 프로세서
라고 부르기도 한다.
- 명령어 파이프라이닝
- 슈퍼스칼라
- 비순차적 명령어 처리
명령어 처리 과정을 비슷한 시간 간격으로 나눠서 서로 다른 단계의 명령어를 동시에 실행하는 것
➡ 파이프라이닝
이 높은 성능
을 가져오긴 하지만, 특정 상황에서는 성능 향상에 실패하는데 이러한 상황을 파이프라인 위험
이라고 한다.
파이프라인 위험 | |
---|---|
데이터 위험 (data hazard) | 데이터 의존성에 의해 발생 |
제어 위험 (control hazard) | 분기 등으로 인한 프로그램 카운터(PC)의 갑작스러운 변화에 의해 발생 ➡ 이를 위해 분기 예측(branch prediction)이라는 기술을 사용함 |
구조적 위험 (construc) | 서로 다른 명령어가 동시에 ALU,레지스터 등과 같은 CPU부품을 사용하려고 할 때 발생 ➡ 자원 위험 (resource hazard) |
CPU내부에 여러 개의 명령어 파이프라인을 포함한 구조
슈퍼스칼라 구조로 명령어 처리가 가능한 CPU
➡ 멀티스레드 프로세서
는 한 번에 여러 명령어를 인출하고, 해석하고, 실행할 수 있으므로 슈퍼스칼라 구조
를 사용할 수 있다.
➡ 이론적으로 슈퍼스칼라 프로세서
는 파이프라인 개수
에 비례하여 프로그램 처리 속도가 빨라지지만 파이프라인 위험
등의 예상치 못한 문제가 있어 실제로는 파이프라인 개수
에 비례하여 빨라지지 않음
명령어들을 순차적으로 실행하지 않는 기법
➡ 데이터 의존성
이 없는 명령어들의 순서를 바꿔 파이프라인
이 멈추는 것을 방지하는 것이 목적이다.
◼ CPU가 파이프라이닝
과 슈퍼스칼라 기법
을 효과적으로 사용하려면 명령어
가 파이프라이닝
하기 쉬워야한다.
CPU가 이해할 수 있는 명령어들의 모음. 즉 CPU마다 ISA가 다를 수 있음
➡ 명령어
가 달라지면 어셈블리어
또한 달라짐
어셈블리어
: 명령어를 읽기 편하게 표현한 언어컴파일러
에 따라서도 어셈블리어
가 달라질 수 있음➡ ISA가 같은 CPU끼리는 서로의 명령어를 이해할 수 있지만, ISA가 다르면 서로의 명령어를 이해하지 못 함. 이러한 이유로 ISA
를 CPU언어
라고 함
➡ ISA가 달라지면 명령어의 생김새 외에도 여러 가지가 달라짐
➡ ISA는 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속
복잡하고 다양한 명령어들을 활용하는 CPU 설계방식
➡ CISC
는 다양하고 강력한 기능의 명령어 집합을 활용하기 때문에 명령어의 형태와 크기가 다양한 가변 길이 명령어
를 활용함
CISC | |
---|---|
장점 | 상대적으로 적은 수의 명령어로도 프로그램을 실행할 수 있다. ➡ 메모리 공간 절약 가능 |
단점 | 명령어가 복잡하고 다양한 기능을 제공하기 때문에 명령어의 크기와 실행되기까지의 시간이 일정하지 않다. 또한 복잡한 명령어 때문에 명령어 하나를 실행하는 데에 여러 클럭 주기가 필요하다. |
➡ CISC의 단점은 명령어 파이프라인을 구현하는 데에 큰 걸림돌
규격화
되지 않은 명령어가 파이프라이닝을 어렵게 만듦➡ CISC가 복잡하고 다양한 명령어를 활용할 수 있다고 하지만, 실제로는 자주 사용되는 명령어만 쓰임
단순하고 적은 수의 명령어를 사용하는 CPU 설계방식
➡ RISC
는 고정 길이 명령어
를 활용한다.
➡ RISC
는 명령어가 규격화
되어 있고, 하나의 명령어가 1클럭
내외로 실행되기 때문에 파이프라이닝
에 최적화
➡RISC
는 메모리 접근을 단순화, 최소화하는 대신 레지스터를 적극적으로 활용한다.
RISC
는 CISC
보다 레지스터
를 이용하는 연산이 많고, 일반적인 경우보다 범용 레지스터
개수도 많다. ➡ RISC
는 메모리에 직접 접근하는 명령어를 load
,store
두 개로 제한할 만큼 메모리 접근
을 단순화하고 최소화를 추구한다.
CISC
보다 주소 지정 방식의 종류
가 적은 경우가 많음CISC | RISC |
---|---|
복잡하고 다양한 명령어 | 단순하고 적은 명령어 |
가변 길이 명령어 | 고정 길이 명령어 |
다양한 주소 지정 방식 | 적은 주소 지정 방식 |
프로그램을 이루는 명령어의 수가 적음 | 프로그램을 이루는 명령어의 수가 많음 |
여러 클럭에 걸쳐 명령어 수행 | 1클럭 내외로 명령어 수행 |
파이프라이닝하기 어려움 | 파이프라이닝하기 쉬움 |