🖥빠른 CPU 설계를 위한 설계 기법
- 컴퓨터 부품들은 클럭 신호에 맞춰 움직인다.
- CPU는 명령어 사이클이라는 흐름에 맞춰 명령어를 실행한다.
⏰클럭
- 클럭 속도 : 헤르츠(Hz) 단위로 측정
- 헤르츠 : 1초에 클럭이 반복되는 횟수
클럭 속도를 높인다고 해서 무조건 빨라지는 것이 아니다.
필요 이상으로 클럭을 높이면 발열이 심각해진다.
⏳코어와 멀티코어
코어
- 명령어를 실행하는 부품
- CPU : 코어를 여러 개 포함하는 부품으로 명칭의 범위 확장
멀티코어
- 코어를 여러 개 포함하고 있는 CPU
🧨스레드와 멀티스레드
하드웨어적 스레드
- 하나의 코어가 동시에 처리하는 명령어 단위
- 2코어 4스레드 CPU
명령어 실행부품 2개, 한 번에 4개의 명령어 처리 가능하다.
- 멀티스레드 프로세서(멀티스레드 CPU)
하나의 코어로 여러 명령어를 동시에 처리하는 CPU
소프트웨어적 스레드
- 하나의 프로그램에서 독립적으로 실행되는 단위
멀티스레드 프로세서
- 설계는 복잡하지만, 가장 핵심은 레지스터다.
레지스터 세트 : PC, SP 등 꼭 필요한 레지스터
메모리 입장에서 위 CPU는 한 번에 하나의 명령어를 처리하는 CPU가 4개 있는 것처럼 보인다.
그래서 하드웨어 스레드를 논리프로세서라고 부르기도 한다.
🎯명령어 병렬 처리 기법
💎명령어 파이프라인
- 명령어 처리 과정을 클럭 단위로 나누면 다음과 같다.
1. 명령어 인출
2. 명령어 해석
3. 명령어 실행
4. 결과 저장
같은 단계가 겹치지만 않으면 CPU는 각 단계를 동시에 실행 가능하다.
- 명령어 파이프라이닝
명령어들을 명령어 파이프라인에 넣고 동시에 처리하는 기법
파이프라인 위험
-
데이터 위험
- 명령어 간 ‘데이터 의존성’에 의해 발생
- 모든 명령어를 동시에 처리할 수 없다. 이전 명령어를 끝까지 실행해야만 실행할 수 있는 경우가 있다.
-
제어 위험
- 분기 등으로 인한 프로그램 카운터의 갑작스런 변화에 의해 발생
- 기본적으로 PC값은 다음 주소로 갱신된다. 그러나 위처럼 갑자기 변화가 생기면 미리 가지고 와서 처리 중이던 명령어들은 쓸모가 없어진다.
-
구조적 위험(자원 위험)
- 서로 다른 명령어가 동시에 ALU, 레지스터 등을 사용하려 할 때 발생
🎡슈퍼스칼라
- CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조
- 이론적으로 파이프라인 개수에 비례하여 처리 속도가 증가한다.
그러나 파이프라인 위험도 증가로 인해 비례하여 빨라지지는 않는다.
비순차적 명령어 처리
의존성이 없는 명령어들은 순서를 바꿔서 실행해도 상관없다.
의존성이 있는 명령어들은 순서를 바꿀 수 없다.
따라서 어떤 명령어와 의존성을 가지고, 순서를 바꿔 실행할 수 있는 명령어에는 어떤 것들이 있는지 판단할 수 있어야 한다.
💊CISC와 RISC
🎨명령어 집합(ISA)
- CPU가 이해할 수 있는 명령어들의 모음
- CPU마다 ISA가 다를 수 있다.
- ISA가 같은 CPU끼리는 서로의 명령어를 이해할 수 있지만 ISA가 다르면 서로의 명령어를 이해하지 못한다.
- ISA는 CPU의 언어임과 동시에 CPU를 비롯한 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속이다.
📉CISC
- 복잡한 명령어 집합을 활용하는 컴퓨터
- 명령어의 형태, 크기가 다양한 가변 길이 명령어을 활용한다.
- 다양하고 강력한 명령어를 활용해 상대적으로 적은 수의 명령어로도 프로그램 실행이 가능하다. → 메모리 공간을 절약할 수 있다.
- 명령어 크기와 실행 시간이 일정하지 않아 명령어 파이프라인 구현이 어렵다는 단점이 있다.
- 복잡한 명령어를 사용할 수 있지만 사용 빈도가 낮다.
📈RISC
- 명령어 종류가 적고, 짧고 규격화된 명령어 사용
- 고정 길이 명령어를 활용한다.
- 명령어 파이프라이닝에 유리하다.
- 메모리에 접근하는 명령어를 load, store 두 개로 제한할 만큼 메모리 접근을 단순화하고 최소화했다.
- CISC보다 주소 지정 방식의 종류가 적은 경우가 많다.
- 그 대신 레지스터를 적극적으로 활용한다.
- 명령어 개수가 CISC보다 적어 더 많은 명령으로 프로그램 작동시킨다.
📕미션
p. 125의 확인 문제 2번
-
플래그 레지스터
연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장하는 레지스터
-
프로그램 카운터
메모리에서 가져올 명령어의 주소를 저장하는 레지스터
-
범용 레지스터
데이터와 주소를 모두 저장할 수 있는 레지스터
-
명령어 레지스터
해서할 명령어를 저장하는 레지스터
p. 155의 확인 문제 4번
코어와 스레드의 개념