반응형
Chapter 5. CPU 성능 향상 기법
요약
- CPU 성능 향상을 위해서 명령어를 병렬적으로 처리하는 파이프라이닝 기법에 대해 알 수 있었다.
- CPU 명령어 집합의 종류와 특징에 대해 알 수 있었고, 병렬화에 효율적인 명령어와 그렇지 못한 명령어의 차이에 대해 알 수 있었다.
내용 정리
05-1. 빠른 CPU를 위한 설계 기법
클럭
컴퓨터 부품들은 "클럭 신호" 주기에 맞춰서 명령어들이 실행되며 동작한다.
- 클럭 속도가 높을수록 CPU의 명령어 사이클은 더 빠르게 반복된다.
- 따라서 클럭 속도가 높은 CPU가 성능이 일반적으로 좋으며, CPU의 속도 단위로 간주된다.
클럭 속도
- 헤르츠(Hz) 단위로 측정되며 1초에 클럭이 몇번 반복되는지를 나타냄
- 1Hz는 1초에 클럭이 1번 반복된 것을 의미함
- 클럭속도는 일정하지 않음. 고성능을 요할 때는 클럭 속도를 높이고, 유연하게 낮추기도 함
- 이에 따라 기본 클럭 속도(Base)와 최대 클럭 속도(Max) 등으로 표기
- 오버클럭킹(overclocking): 최대 클럭 속도를 강제로 끌어올려서 CPU 성능을 향상시키는 기법
클럭 속도의 한계
- 속도만 높인다고 무조건 CPU가 빨라지는 것이 아니다.
- 고성능을 요구하는 작업을 장시간 처리 시 발열 문제가 심각해질 수 있다.
코어와 멀티코어
CPU 성능을 높이는 방법
- CPU의 코어 수와 스레드 수를 늘려서 성능을 향상시킴
- 기술의 발전에 따라 CPU 내부에 명령어를 처리하는 부품인 코어를 여러 개 설계할 수 있음
코어(core)
- 명령어를 실행하는 부품
멀티코어(multi-core)
- 멀티코어(multi-core) CPU: 코어를 여러 개 포함하고 있는 CPU로 멀티코어 프로세서라고도 불림
- 멀티코어 처리 속도는 단일 코어보다 일반적으로 빠름
- ex> 2.3GHz 단일 코어 CPU보다 2.0GHz의 멀티코어 CPU가 일반적으로 성능이 뛰어남
멀티코어의 종류
코어 수 | 프로세서 명칭 |
1 | 싱글코어(single-core) |
2 | 듀얼코어(dual-core) |
3 | 트리플코어(triple-core) |
4 | 쿼드코어(quad-core) |
6 | 헥사코어(hexa-core) |
8 | 옥타코어(octa-core) |
10 | 데카코어(deca-core) |
12 | 도데카코어(dodeca-core) |
멀티 코어의 한계
- CPU 연산 속도가 코어 수에 비례해 증가하는 것은 아니다.
- 코어에 처리할 연산이 적절히 분배되지 않으면 코어 수에 비해서 성능 향상이 크지 않다.
- 처리할 작업량보다 코어 수가 지나치게 많을 때도 성능 향상 폭이 크지 않다.
- 따라서 코어마다 처리할 명령어들을 얼마나 적절히 분배하는지에 따라 연산 속도가 크게 달라진다.
스레드와 멀티스레드
스레드(thread)
- 실행 흐름의 단위로 하드웨어적 스레드와 소프트웨어적 스레드로 나뉜다.
- 하드웨어적 스레드: CPU에서 사용되는 스레드
- 소프트웨어적 스레드: 프로그램에서 사용되는 스레드
하드웨어적 스레드
- 하나의 코어가 동시에 처리하는 명령어 단위
- 논리 프로세서(logical process)라고도 부른다.
- 여러 스레드를 지원하는 CPU는 하나의 코어로 여러 개 명령어를 동시에 실행할 수 있다.
- ex> 2코어 4스레드 CPU는 명령어를 실행하는 코어 2개를 포함하고, 각 코어는 2개의 명령어( 2 x 2 = 4) 를 실행할 수 있다.
- 멀티스레드(multithread) 프로세서: 하나의 코어로 여러 명령어를 동시에 처리하는 CPU로 멀티스레드 CPU로도 불림.
- 하이퍼스레딩(hyper-threading): 인텔의 멀티스레드 기술
소프트웨어적 스레드
- 하나의 프로그램에서 독립적으로 실행되는 단위
- 일반적으로 스레드 라고 칭한다.
- 하나의 프로그램에서 서로 독립된 작업들은 동시에 실행될 수 있다.
- ex> 입력받은 내용들을 화면에 출력하면서 동시에 입력된 내용들을 저장하는 프로그램
- 1코어 1스레드 CPU도 소프트웨어적 스레드를 여러 개 실행할 수 있다. 즉, 소프트웨어적 스레드는 프로그램의 여러 부분을 동시에 실행하는 것
멀티스레드 프로세서
- 멀티스레드 프로세서를 구성하는데 레지스터가 중요한 역할을 한다.
- 하나의 명령어를 처리하려면 하나의 레지스터 세트가 필요하다.
- 따라서 멀티스레드 프로세스는 여러 명령어를 동시에 처리하기 위해 레지스터 세트를 여러 개 들고 있다.
05-2. 명령어 병렬 처리 기법
명령어 병렬 처리 기법 (Instruction-Level Parallelism, ILP)
- 명령어를 동시에 처리해 CPU를 쉬지 않고 작동시키는 방법
- 명령어 파이프라이닝, 슈퍼스칼라, 비순차적 명령어 처리 등이 있다.
명령어 파이프라인
- 명령어는 같은 처리 단계는 동시에 실행할 수 없다.
- 달리 말하면 CPU는 "다른 단계에 있는 여러 명령어는 동시에 실행할 수 있다"
명령어 처리 단계
- 명령어 인출(Instruction Fetch)
- 명령어 해석(Instruction Decode)
- 명령어 실행(Execute Instruction)
- 결과 저장 (Write Back)
명령어 파이프라인(Instruction Pipeline)
- 명령어 파이프라이닝(Instruction pipelining): 동시에 여러 개 명령어를 겹쳐서 실행하는 기법
- 명령어를 겹처서 실행하면 하나씩 실행하는 것보다 훨씬 효율적으로 처리할 수 있다.
- 아래와 같이 동시간에 여러 명령어의 다른 단계들을 동시에 처리할 수 있다.
파이프라인 위험(pipeline hazard)
- 특정 상황에서는 파이프라이닝이 성능 향상에 도움을 주지 못하는 경우를 의미함
- 데이터 위험, 제어 위험, 구조적 위험이 존재
데이터 위험(data hazard)
- 데이터 의존적인 두 명령어를 실행하려고 할 때 파이프라인이 제대로 동작하지 않는 경우
- 즉, 명령어 간 "데이터 의존성"에 의해 발생함
- 어떤 명령어가 이전 명령어가 끝까지 실행되기 전까지는 실행하기 어려운 경우
- ex> 레지스터 R1 값을 명령어 1이 저장하고, 이후에 명령어 2는 레지스터 R1 값을 불러와야 할 때, 명령어 2는 명령어 1이 종료되기 전까지는 실행될 수 없다.
제어 위험(control hazard)
- 분기 등으로 인한 "프로그램 카운터의 갑작스러운 변화"로 발생
- 분기로 인해서 명령어 파이프라인이 미리 처리 중이던 명령어들은 쓸모 없게 돼버리는 현상
- 분기 예측(branch prediction): 제어 위험을 방지하기 위해 사용하며, 프로그램이 어디로 분기할지 예측하고 그 주소를 인출하는 기술
구조적 위험(structural hazard)
- 명령어 파이프라인에서 서로 다른 명령어가 동시에 ALU, 레지스터 등의 CPU 부품에 접근할 때 발생함
- 자원 위험(resource hazard)라고도 불림
슈퍼스칼라
슈퍼 스칼라(superscalar)
- CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조
- 요즘 대부분 CPU는 여러 개 파이프 라인을 사용하고 있음
- 슈퍼스칼라 프로세서: 슈퍼스칼라 구조의 명령어 처리가 가능한 CPU. 슈퍼스칼라 CPU라고도 부름
- 장점: 이론적으로 파이프라인 개수에 비례해 프로그램 처리 속도가 빨라짐
- 단점: 실제로 파이프라인 위험 등 예상치 못한 상황에서는 파이프라인 개수에 비례해 빨라지진 않음
- 따라서 파이프라인 위험을 방지하는 방향으로 고도화한 설계가 필요하다.
비순차적 명령어 처리
비순차적 명령어 처리(Out-of-order execution, OoOE)
- 명령어를 순차적으로 실행하지 않는 기법
- 선순위 명령어가 실행되는 명령어들과 데이터 의존성이 있을 때 순서를 바꿔 처리해도 되는 후순위 명령어들을 먼저 처리하는 방법
- CPU 성능 향상에 크게 기여한 기법으로 오늘날 대부분의 CPU가 차용한 기법
- 비순차적 명령어 처리가 가능한 CPU는 명령어가 어떤 명령어들과 데이터 의존성이 있는지, 순서를 바꿔서 실행할 수 있는지를 판단할 수 있어야 한다.
05-3. CISC와 RISC
명령어의 형태
- 효율적인 파이프라이닝을 위해 명령어가 최적화 되어야 함
- 최적화된 명령어란 파이프라이닝을 하기 쉬운 형태로 된 명령어를 의미함
명령어 집합
- 명령어 집합(instruction set): CPU가 이해할 수 있는 명령어들의 모음
- 일종의 CPU 언어로 이해할 수 있다.
- CPU마다 ISA가 다를 수 있다.
- ex> 인텔 CPU 컴퓨터와 맥은 서로의 명령어를 이해할 수 없다.
- 명령어 집합 구조(Instruction Set Architecture, ISA)라고도 부름
- CPU의 명령어 이해 방식에 따라 컴퓨터 구조 및 설계 방식이 달라질 수 있기 때문에 "구조"라는 단어를 사용
ISA의 특징
- CPU가 어떤 ISA를 쓰느냐에 따라 많은 것이 달라질 수 있다.
- 제어장치가 명령어를 해석하는 방식
- 사용하는 레지스터 종류와 수
- 메모리 관리 방법
- 따라서 ISA는 CPU 하드웨어 설계 방식에 큰 영향을 미친다.
- 명령어 병렬 처리에 적절한 ISA와 적절하지 못한 ISA가 존재한다.
CISC
CISC(Complex Instruction Set Computer): 복잡한 과정 처리가 가능한 다양한 명령어를 활용하는 CPU 설계 방식
- 명령어 형태와 크기가 다양한 가변 길이 명령어를 활용함
- 장점
- 상대적으로 적은 수의 명령어로도 프로그램을 실행할 수 있음
- 메모리를 최대한 절약하며 쓸 수 있어 과거에 인기가 높았다.
- 단점
- 명령어의 크기가 다르고, 명령어 실행 시간이 일정하지 않음.
- 복잡한 명령어로 명령어 하나를 실행하는데 여러 클럭 주기를 요구함
CISC의 한계
- CISC는 명령어마다 처리 시간이 달라지기 때문에 명령어 파이프라인을 구현하기 어렵다.
- 즉, 명령어가 규격화돼 있지 않아서 파이프라인을 어렵게 만든다.
- CISC는 복잡한 연산을 가능케하는 다양한 명령어들이 존재하지만 대부분 사용빈도는 낮다.
- 즉, 자주 사용되는 명령어들만 쓰이는 것이다.
RISC
RISC(Reduced Instruction Set Computer)
- CISC의 한계를 극복하기 위해 등장한 명령어
- 특징
- CISC에 비해 명령어 종류가 적다
- 명령어를 규격화해 되도록 1클럭 내외로 실행되는 명령어를 지향함
- 고정 길이 명령어를 활용함
- 장점
- 명령어 파이프라이닝에 최적화 됨
- 단점
- 프로그램을 실행하는데 CISC보다 많은 명령어가 필요함
RISC의 메모리 접근
- RISC는 메모리에 직접 접근하는 명령어를 load, store 두개로만 표현
- 즉, 단순화된 명령어만을 최소로 남겨서 파이프라이닝을 효율적으로 가능하게 함
- 메모리 접근은 단순화한 대신 레지스터를 적극적으로 활용함
- 따라서 레지스터를 이용하는 연산이 많고, 일반적으로 범용 레지스터의 수도 많다.
CISC와 RISC 비교
CISC | RISC |
복잡하고 다양한 명령어 | 단순하고 적은 명령어 |
가변 길이 명령어 | 고정 길이 명령어 |
다양한 주소 지정 방식 | 적은 주소 지정 방식 |
프로그램을 표현하는 명령어 수가 적음 (메모리 효율적) | 프로그램을 표현하는 명령어 수가 많음 (메모리 비효율적) |
여러 클럭에 걸쳐서 명령어가 수행됨 | 1클럭 내외로 명령어를 실행함 |
파이프라이닝이 어려움 | 파이프라이닝에 효율적임 |
주요 Point
- 코어 - 명령어 실행부품
- CPU - 코어를 여러 개 포함하는 부품
- 파이프라인 위험 - 데이터 위험, 제어 위험, 구조적 위험
- 스퍼스칼라의 경우에도 파이프라인 위험을 방지해야 한다
반응형
'Study > 컴퓨터공학' 카테고리의 다른 글
[컴퓨터 구조] 혼자 공부하는 컴퓨터구조 + 운영체제 Chapter 7 보조기억장치 (0) | 2022.11.20 |
---|---|
[컴퓨터 구조] 혼자 공부하는 컴퓨터구조 + 운영체제 Chapter 6 메모리와 캐시 메모리 (2) | 2022.11.10 |
[컴퓨터 구조] 혼자 공부하는 컴퓨터구조 + 운영체제 CPU의 작동 원리 (0) | 2022.11.02 |
[컴퓨터 구조] 혼자 공부하는 컴퓨터구조 + 운영체제 Chapter 3 명령어 (2) | 2022.10.28 |
[컴퓨터 구조] 혼자 공부하는 컴퓨터구조 + 운영체제 Chapter 2 데이터 (0) | 2022.10.20 |