05 - 1 빠른 CPU를 위한 설계 기법
클럭
컴퓨터의 논리회로에 가해지는 전기 신호의 단위로 Hz 로 표현한다.
즉, CPU의 속도를 나타내는 단위이며, 이는 일정하지 않다. 최대 클럭 속도를 강제로 끌어올리는 것을 오버클럭킹이라고 한다.
클럭 속도를 계속 높이면 발열 문제가 심각해진다. 따라서 클럭 만으로 CPU 속도를 올리는 것은 한계가 있다.
코어와 멀티 코어
코어 : 명령어를 실행하는 부품이다. 즉, CPU 안에 코어가 8개 있다면 명령어를 실행하는 부품이 8개라는 뜻이다. 이렇듯 2개 이상의 코어를 가지고 있으면 멀티코어 CPU,프로세서라고 부른다.
코어를 계속 늘린다고 연산 처리 속도가 비례 증가 하지 않는다. 따라서, 중요한 것은 코어마다 처리할 명령어들을 적절하게 분산시키는 것이다.
스레드와 멀티 스레드
스레드는 하드웨어적 스레드와 소프트웨어적 스레드가 있고, 해당 장에서는 하드웨어 스레드에 대해 정리한다.
스레드 : ‘실행 흐름의 단위’
이것은 즉, 하나의 코어가 처리할 수 있는 명령어 단위가 된다. 단일 코어 CPU에서 명령어를 실행하는 부품인 코어가 2개의 스레드를 가지면 해당 CPU 는 동시에 2가지 일을 처리할 수 있다. 이렇듯 하나의 코어로 명령어를 동시 처리하는 CPU 를 멀티스레드 프로세서라고 한다.
잠깐만 소프트웨어 스레드에 설명하면 위의 하드웨어 스레드와 같이 일을 실행하는 단위가 된다. 하지만 여기서는 하나의 프로그램에서 독립적으로 실행하는 단위이다. 즉, 하나의 프로그램 내에서 한 번에 여러가지 기능을 실행할 때의 개수를 확인하려면 해당 프로그램이 몇 스레드인지 확인하면 된다.
하드웨어 스레드가 1 이어도 소프트웨어 스레드가 수십 개 일 수 있다.
멀티 스레드 프로세서
멀티 스레드는 어떻게 만들까? 코어 안에 레지스터가 있는데 이러한 레지스터들의 묶음을 ‘레지스터 세트’라고 표현하고 이를 코어 내에서 여러 개 두면 스레드를 여러개 두는 것으로 생각할 수 있다. 가령 프로그램 카운터가 2개라면 메모리에서 가져올 명령어 주소를 2개 받을 수 있는 것이다.
만약 2코어 4스레드이면 명령어 4개를 한 번에 처리하는데 이때, 프로그램 입장에서는 CPU 4개가 사용되는 것처럼 보인다.
05 - 2 명령어 병렬 처리 기법
CPU 를 쉬지 않고 작동시키는 기법이 명령어 병렬 처리 기법이다.
명령어 처리 기법의 종류
- 명령어 파이프 라이닝
- 슈퍼 스칼라
- 비순차적 명령어 처리
명령어 파이프 라인 :
일단 하나의 명령어가 처리되는 과정을 시간(클럭) 간격으로 나누어 보면 다음과 같다
- 명령어 인출
- 해석
- 실행
- 결과 저장
이것이 무조건 정답은 아니고 조금씩 상이하지만 이와 비슷하다.
중요한 것은 과정 자체가 무엇인지 보다도 이러한 과정들이 겹치지만 않으면 여러 명령어를 동시에 실행 가능 한 것이다. 즉, 1명령어를 인출하면서 2명령어를 실행하고 3명령어를 저장할 수 있는 것이다.
이렇듯 공장 생상 라인 처럼 명령어들을 명령어 파이프 라인에 넣고 동시에 처리하는 것이 명령어 파이프 라이닝이다.
그런데 이 파이프 라이닝은 실패 할 때가 있고 이를 파이프라인 위험이라고 한다.
파이프라인 위험
- 데이터 위험
- 제어 위험
- 구조적 위험
데이터 위험 : 데이터 의존성에 의해 성능 향상에 실패. 가령 명령어 1,2,3 중 2명령어가 1의 결과를 얻어야 한다면 2명령어는 1명령어가 끝나기 전까지는 작동할 수 없는 것을 의미한다.
제어 위험 : 분기 등에 의해 프로그램 카운터가 받을 다음 주소에 변화가 생길 때 오는 위험이다. 분기로 인해 프로그램 카운터가 다른 주소를 갑작스레 받으면 기존에 그 밑에서 실행되면 명령어들은 쓸모가 없어지는 것이다.
구조적 위험 : 서로 다른 명령어가 동시에 ALU, 레지스터 등과 같이 CPU 부품을 사용할 때 생긱는 위험. 자원 위험이라고도 함
슈퍼 스칼라 : CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조를 슈퍼 스칼라라고 표현한다.
실제로 속도는 빨라지지만 위의 위험 요소들에 의해 비례적으로 성능 향상이 되는 것은 아니고 파이프라인 위험에 더 쉽게 노출되는 단점이 있어 고도로 설계되야한다.
비순차적 명령어 처리 : 대부분의 CPU가 차용하는 기법. 명령어 파이프라이닝, 슈퍼 스칼라가 순차적으로 처리한다면, 이 기법은 아니다. 순서를 바꿔서 실행해도 무방한 명령어를 먼저 실행하여 명령어 파이프라인이 멈추는 것을 방지하는 기법을 비순차적 명령어 처리 기법이라고 한다.
05 - 3 CISC, RISC
오늘날 CPU 가 파이프라인을 활용하면서 기존에 사용하던 CPU 언어가 아닌 파이프라인에 적극적으로 활용할 수 있는 언어가 필요해 졌다. 그래서 생겨난 언어가 CISC 와 RISC 이다.
일단 CPU 의 언어가 무엇일까?
ISA : CPU 가 이해할 수 있는 명령어들의모음을 명령어 집합 또는 명령어 집합 구조 (ISA) 라고 한다. CPU 마다 이 ISA 가 다르다. 즉, 어셈블리어도 다르다는 뜻이다.
ISA 의 차이로 인해 하드웨어 설계도 달라진다.
CISC
Complex Instruction Set Computer 의 약자. CISC 는 가변 길이 명령어를 사용한다. 메모리에 접근하는 주소 지정 방식도 다양하다. 명령어도 다양하다. 적은 수의 명령어로 프로그램을 실행한다.
단점 : 가변이고 명령어가 워낙 많아서 크기와 실행까지의 시간이 일정하지 않다. 복잡한 명령어는 하나의 명령어 실행 시 여러 클럭 주기를 필요로 한다. 실제로 사용하는 명령어가 몇 개 안된다.
RISC
CISC의 문제를 고쳐 나온 것이 RISC 이다.
- 명령어 파이프라인을 원할하게 돌려야한다. 즉, 명령어 길이와 실행 시간을 짧고 규격화 시키자
- 자주 쓰이는 기본 명령어를 작고 빠르게 만들 것
고정 길이 명령어 이다. 레지스터를 적극 활용한다. 그래서 CISC보다 레지스터를 이용하는 연산이 많고, 범용 레지스터도 더 많다.
CISC | RISC |
복잡 다양 명령어 | 단순 적은 명령어 |
가변 길이 명령어 | 고정 길이 명령어 |
다양한 주소 지정 방식 | 적은 주소 지정 방식 |
프로그램을 적은 명령어로 만듬 | 많은 명령어로 프로그램 제작 |
여러 클럭에 걸쳐 수행 | 1클낵 내외로 명령어 수행 |
파이프라이닝 어려움 | 쉬움 |
'CS > 혼자 공부하는 컴퓨터구조와 운영체제' 카테고리의 다른 글
07 - 보조기억장치 (0) | 2024.06.01 |
---|---|
06 - 메모리와 캐시 메모리 (0) | 2024.06.01 |
04 - CPU의 작동 원리 (1) | 2024.05.30 |
03 - 2 명령어 2 (1) | 2024.02.14 |
03 - 1 명령어 (0) | 2024.02.14 |