[혼공컴운] 혼공단 11기 - 2주차 (5장)

shyn26·2024년 1월 14일
0

혼공학습단

목록 보기
5/20

5. CPU 성능 향상 기법

  • 클럭 속도 높이기
  • 코어 수 늘리기
  • 스레드 수 늘리기

5-1. 빠른 CPU를 위한 설계 기법

클럭, 코어, 스레드, 멀티코어, 멀티스레드가 CPU와 어떤 관련이 있는지 이해해보자!

클럭

[4장에서 배운 내용]

  1. 컴퓨터 부품들은 ‘클럭 신호’에 맞춰 일사불란하게 움직인다.
  2. CPU는 ‘명령어 사이클’이라는 정해진 흐름에 맞춰 명령어들을 실행한다.
  • 클럭 속도가 높은 CPU는 일반적으로 성능이 좋음
  • 클럭 속도는 CPU 속도 단위로 간주
  • 클럭 속도헤르츠(Hz) 단위로 측정 : 1초에 클럭이 몇 번 반복되는지
  • 오버클럭킹(overclocking) : 최대 클럭 속도를 강제로 더 끌어올리는 기법
  • 클럭 속도를 무작정 높이면 이러한 발열 문제가 더 심각

코어와 멀티코어

  • CPU의 정의 : 명령어를 실행하는 부품 → 이제 코어라고 부름 → 명령어를 실행하는 부품을 여러 개 포함하는 부품 으로 명칭 범위 확장

  • 멀티코어(multi-core) CPU / 멀티코어 프로세서 : 코어를 여러 개 포함하고 있는 CPU

    • 예) [클럭 속도가 2.4GHz인 단일 코어 CPU] vs [클럭 속도가 1.9GHz인 멀티코어 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의 연산 속도 ∝̸\not\propto 코어 수
  • 코어마다 처리할 명령어들을 얼마나 적절하게 분배하느냐이고 그에 따라서 연산 속도가 결정됨

스레드와 멀티스레드

  • 스레드(thread) : (사전적 의미) 실행 흐름의 단위
    • 하드웨어적 스레드 : CPU에서 사용, 하나의 코어가 동시에 처리하는 명령어 단위
      • 멀티스레드(multithread) 프로세서 or 멀티스레드 CPU : 하나의 코어로 여러 명령어를 동시에 처리하는 CPU
      • 하이퍼스레딩(hyper-threading) : 인텔의 멀티스레드 기술
      • 논리 프로세서(logical processor)라고 부르기도 함
    • 소프트웨어적 스레드 : 프로그램에서 사용, 하나의 프로그램 에서 독립적으로 실행되는 단위

[정리][⭐혼공머 선택미션 인증!⭐]

  • 코어 : 명령어를 실행할 수 있는 '하드웨어 부품'
  • 스레드 : '명령어를 실행하는 단위'
  • 멀티코어 프로세서 : 명령어를 실행할 수 있는 하드웨어 부품이 CPU 안에 두 개 이상 있는 CPU
  • 멀티스레드 프로세서 : 하나의 코어로 여러 개의 명령어를 동시에 실행할 수 있는 CPU

[⭐혼공단 미션 인증!⭐]

p.155-4번
답 : 코어 [위에 코어와 멀티코어 - 'CPU의 정의' 부분 이미지 참고]


5-2. 명령어 병렬 처리 기법 (ILP; Instruction-Level Parallelism)

[대표적인 ILP]

  1. 명령어 파이프 라이닝
  2. 슈퍼스칼라
  3. 비순차적 명령어 처리

명령어 파이프 라인

[명령어 처리 과정을 클럭 단위로 나눠 본 단계]
1. 명령어 인출(Instruction Fetch)
2. 명령어 해석(Instruction Decode)
3. 명령어 실행(Execute Instruction)
4. 결과 저장(Write Back)
같은 단계가 겹치지 않으면 CPU는 각 단계를 동시에 실행할 수 있다.

  • 이 기법을 명령어 파이프라이닝(instruction pipelining) 이라 함

  • 파이프 라이닝이 성능이 높지만, 특정 상황에서는 성능 향상에 실패하기도 함, 이런 상황을 파이프라인 위험(pipeline hazard)라고 부름

[파이프라인 위험(pipeline hazard)]

  • 데이터 위험 (data hazard) : 명령어 간 '데이터 의존성'에 의해 발생
    • 예) 명령어1 : R1 ← R2 + R3 / 명령어2 : R4 ← R1 + R5
    • 명령어1 을 끝까지 실행해야 명령어2 를 실행할 수 있음
  • 제어 위험 (control hazard) 주로 분기 등으로 인한 '프로그램 카운터의 갑작스러운 변화'에 의해 발생
    • 분기 예측 (branch prediction) : 프로그램이 어디로 분기할지 미리 예측한 후 그 주소를 인출하는 기술로 확인
  • 구조적 위험 (structural hazard) : 명령어들을 겹쳐 실행할 때, 서로 다른 명령어가 동시에 CPU 부품을 사용하려는 경우 발생
    • 자원위험 (resource hazard) 라고도 부름

슈퍼스칼라(Superscalar)

  • CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조
  • 슈퍼스칼라 프로세서 / 슈퍼스칼라 CPU : 슈퍼스칼라 구조로 명령어 처리가 가능한 CPU
    • 이론적으로 파이프라인 개수에 비례하여 프로그램 처리속도가 빨라짐
    • 실제로는 파이프라인 위험 등 예상치 못한 문제로 인해 반드시 비례하지 않음

비순차적 명령어 처리(OoOE; Out-of-order execution)

💡 오늘날 CPU 성능 향상에 크게 기여한 기법이자 대부분의 CPU가 차용하는 기법이기에 꼭 알아두자!

  • 명령어들을 순차적으로 실행하지 않는 기법 (합법적인 새치기)

[예]

  • 비순차적 명령어 처리로 하면 1→2→4→5→6→3 으로 처리하면 더 빨리 처리 할 수 있음
    • 순차적으로 처리하면, 12초 걸림
    • 비순차적으로 처리하면, 9초 걸림

  • 비순차적 명령어 처리가 가능한 CPU는 명령어들이 어떤 명령어와 데이터 의존성을 가지고 있는지, 순서를 바꿔 실행할 수 있는 명령어에는 어떤 것들이 있는지를 판단 후 사용 (바꿔도 결과가 다르지 않은 경우가 있음)

5-3. CISC 와 RISC

💡 파이프 라이닝 하기 쉬운 명령어!


명령어 집합(instruction set)

  • 명령어 집합 구조(ISA, Instruction Set Architecture) 라고도 함

    • CPU가 어떤 명령어를 이해하는지에 따라 컴퓨터 구조 및 설계 방식이 달라지기 때문에 '구조'라고 함

    • 인텔의 노트북 속 CPU는 x86 혹은 x86-64 ISA를 이해

    • 애플의 아이폰 속 CPU는 ARM ISA를 이해

    • 인텔 노트북과 아이폰(맥북)은 서로의 명령어 이해불가

    • 명령어가 달라지면 어셈블리어도 달라짐

    • 언어가 다르면 문화, 생활양식, 가치관 등이 다른 것처럼 ISA가 다르면 제어장치가 명령어를 해석하는 방식, 사용되는 레지스터의 종류와 개수, 메모리 관리 방법, CPU 하드웨어 설계 방법 등이 달라짐

CISC(Complex Instruction Set Computer)

  • ‘복잡한 명령어 집합을 활용하는 컴퓨터’를 의미
  • 여기서 '컴퓨터'는 'CPU'라고 간주
  • x86, x86-64는 대표적인 CISC 기반의 ISA
  • 다양하고 강력한 기능의 명령어 집합을 활용하기 때문에 명령어의 형태와 크기가 다양한 가변 길이 명령어를 활용
  • [장점] 메모리 공간 절약
  • [단점] 명령어의 크기와 실행되기까지의 시간이 일정하지 않고, 복잡한 명령어 때문에 명령어 하나를 실행하는 데에 여러 클럭 주기를 필요로 함
    → 파이프라인이 효율적으로 명령어를 처리할 수 없음
  • 대다수의 복잡한 명령어는 그 사용 빈도가 낮음
  • CISC 기반 CPU는 성장에 한계가 있음

RISC(Reduced Instruction Set Computer)

  • CISC의 한계로부터 보완해서 나온 것
  • CISC에 비해 명령어의 종류가 적음
  • CISC와는 달리 짧고 규격화된 명령어, 되도록 1클럭 내외로 실행되는 명령어를 지향함
  • 고정 길이 명령어를 활용
  • 명령어 파이프 라이닝에 최적화되어 있음
  • load-store 구조라고 부르기도 함
  • ARM은 RISC 기반의 대표적인 ISA
  • 사용 가능한 명령어 개수가 CISC보다 적기 때문에 RISC는 CISC보다 많은 명령으로 프로그램을 작동시킴 [위 이미지 참고]

CISC vs RISC

특징CISCRISC
명령어 복잡도복잡하고 다양한 명령어단순하고 적은 명령어
명령어 길이가변 길이 명령어고정 길이 명령어
주소 지정 방식다양한 주소 지정 방식적은 주소 지정 방식
프로그램을 이루는 명령어 수명령어 수가 많음명령어 수가 적음
명령어 수행 속도여러 클럭에 걸쳐 수행1클럭 내외로 수행
파이프라이닝 가능성파이프라이닝하기 어려움파이프라이닝하기 쉬움
profile
Without haste, but without rest - J.W. von Goethe

0개의 댓글