CH05_ CPU 성능 향상 기법

Jobmania·2023년 4월 18일
0

컴퓨터 구조

목록 보기
5/8
post-thumbnail

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

cpu를 빠르게 설계하려면??

클럭

  • 컴퓨터 부품들은 '클럭 신호'에 맞춰 일사불란하게 움직임!!(주기)
  • CPU는 '명령어 사이클'이라는 정해진 흐름에 맞춰 명령어들을 실행!
  • 클럭속도 : Hz단위

    단순히 클럭 주기를 빠르게 하면 될까?✨일반적으로 클럭속도가 높은 cpu가 성능이 좋음. 하지만 필요이상으로 높이면 발열이 심각해짐!
    -> 1초에 25억번, 최대 49번 반복 (1GHZ = 10^9 Hz),
    🎆 클럭속도 또한 일정하지 않다. 고성능을 요하는 순간에는 클럭속도는 올라가는 등 유연하게 조절이 된다. 최대 클럭속도를 강제로 더 끌어 올릴 수 있는데 이런 기법을 오버클럭킹이라고한다.(overclocking)

그래서 클럭속도 이외, 다른 방법!

  • 코어수를 늘리는 방법(듀얼코어, 멀티코어)
  • 쓰레드 수를 늘리는 방법(멀티쓰레드)

코어와 멀티코어

코어란 ?

  • 전통적으로 CPU는 명령어를 실행하는 부품에 불과했지만, 현대에는 다르다.
  • CPU내 명령어를 실행하는 부품이 여러개 있기 때문에 '코어'라는 명칭이 '명령어를 실행하는 부품'이라고 사용된다.

멀티 코어

  • SCV가 여러마리
  • 2.4GHz 단일 코어 속도 보다 1.9GHz속도가 일반적으로 더 성능이 좋음.

하지만! 코어수의 꼭, 비례해서 속도가 증가하지는 않는다.

쓰레드와 멀티쓰레드

  • 사전적의미는 실행 흐름의 단위, but 하드웨어적 소프트웨어적 의미가 각각 있다.

하드웨어 스레드

  • 하나의 코어가 동시에 처리하는 명령어 단위


    -> 하나의 코어가 여려 명령어를 동시에 처리하는 CPU를 '멀티쓰레드 프로세서' 또는 '멀티쓰레드 CPU'라고도 한다.

하이퍼쓰레딩 : 인텔사의 멀티쓰레드 기술 8core 16Thread라면 한번에 16개 명령어를 처리할 수 있다는 의미!!

소프트웨어 스레드

  • 하나의 프로그램에서 독립적으로 실행되는 단위.
  1. 입력한 내용을 보여주는 기능
  2. 맞춤법 검사하는 기능
  3. 입력한 내용을 수시로 저장하는 기능

3개의 실행 흐름 및 동시에 실행
즉 하나의 프로그램에서 동시에 여러군데를 실행할 수 있다.

🧨1코어 1스레드 CPU도 여러 소프트웨어적 스레드를 만들 수 있다.!!
왜 why? > 엄청나게 빠르게 번갈아 가며 실행하기 때문에 사용자 눈에는 동시에 처리하는 것처럼 보임! ㄷㄷ

멀티스레드 프로세서

  • 가장 큰 핵심은 레지스터로 하나의 코어로 여러가지 명령어를 처리하려면 필요한 레지스터들(프로그램 카운터, 스택 포인터, 데이터 버퍼 레지스터, 데이터 주소레지스터) 가지고 있어야한다.

  • ex) 두개라면 두개를 관리가능 및 명령어를 처리할 수 있는 정보들을 기억 할 수 있따.

  • 하드웨어 스레드 : 논리프로세서 라고도 불린다. 2코어 4쓰레드는 한번에 4명령어를 수행할 수 있는데 메모리 입장에서는 한번에 4개씩 처리할 수 있는 코어가 4개라고 생각한다.

실제 컴퓨터 화면 및 정리

  • 코어는 명령어를 수행할 수 있는 '하드웨어 부품'
  • 스레드 '명령어를 실행하는 단위'
  • 멀티스레드 프로세서 '하나의 코어로 여러개의 명령어를 동시 수행가능한 cpu'

5-2강 명령어 병렬 처리 기법

  • CPU가 시간을 효율적이게 명령어를 처리하는 방법!

명령어 파이프라인

  1. 명령어 인출 (Instruction Fetch)
  2. 명령어 해석 (Instruction Decode)
  3. 명령어 실행(Execute Instruction) (메모리 접근)
  4. 결과 저장(Write Back)

🧨같은 단계가 겹치지 않는다면 CPU는 '각단계를 동시에 실행 할 수 있따'

파이프라인 적용 하고 안하고의 시간 차이!

파이프 라인의 위험

  • 성능향상에 실패... 동시에 명령어를 처리하는데 실패...

데이터 위험(Data hazard)

  • 명령어간의 '데이터 의존성'에 의해 발생
    -> 명령어 1이 완료되기 전에 명렁어 2가 실행 된다면 Error!!!

제어 위험(Control hazard)

  • 프로그램 카운터의 갑작스러운 변화!
  • 기본적으로 명령어는 순차적으로 실행함
  • jump가 일어나면 이전의 실행되기전상태의 명령어는 무쓸모 상태가됨..

분기 예측(branch prediction) : 프로그램이 어디로 분기할지 미리 예측한 후 그 주소를 인출하는 기술.

구조적 위험(structural hazard)

  • 서로 다른 명령어가 같은 CPU부품(ALU, 레지스터)를 쓰려고할때
  • 자원 위험(Resource hazard) 이라고도 함.

슈퍼 스칼라

  • CPU 내부에 여러개의 명령어 파이프라인을 포함한 구조.
  • 멀티쓰레드 프로세서
  • 매 클럭 주기마다 동시에 여러가지 명령어 인출, 해석, 실행 가능!
  • 이론적으로난 파이프라인 갯수에 비례해서 처리속도는 증가하나
    But 파이프 라인의 위험도가 증가하기 때문에 완전히 비례하지는 않음. 하나의 파이프라인보다 더더욱 까다롭기 때문임

비순차적 명령어 처리(Out-of-order esecution)

  • 오늘날의 CPU 성능향상에 크게 기여한 기법!
  • 대부분 CPU가 차용하는 기법
  • 순차적으로 명령어를 처리하는 기법은 위와 같지만 만약 예상치 못하게 파이프라인에서 문제가 발생하면 파이프라인의 명령어는 멈춰버린다.

위와 같은 명령어를 순차적으로만 실행한다면??

  • 메모리 100번지, 101번지가 저장되기전까지는 102번지는 인출 못함.

만약 의존성이 없는 명령어를 순서를 바꾼다면?

  • 결과는 똑같으나 시간은 줄어듬!
  • BUT 아무 명령어를 순서 바꿀 수는 없다. 의존성이 없는 명령어만 바꿀 수 있다..
  • 비순차적 명령어 처리가 가능한 CPU는 명령어들이 어떤 명령어와 의존성이 있는지, 순서를 바꿔 실행할 수 있는 명령어에는 어떤것들이 있는지 판단할 수 있어야 한다.

5-3강 CISC와 RISC

  • 명령어 파이프라인에 적용하기 위해선 명령어가 최적화 되어야 한다. 여기서 파이프라이닝하기 유리한 명령어가 있다!!
  • 이와 관련 CPU의 언어인 ISA와 각기 다른 성격 ISA를 기반으로 설게된
    CISC, RISC가 있다.

명령어 집합 (= 명령어 집합구조 ISA, Instruction Set Architecture)

  • CPU 제조사 별로 명령어가 다르게 생김.
  • 일반적으로 인텔 CPU는 "X86", 애플은 "ARM"명령어 집합을 따른다.
  • 그래서 서로 다른 명령어는 이해할 수 없어 실행이 되지 않는다.

    동일한 소스코드에 대한 다른 어셈블리어로 컴파일된 예시

    즉, CPU가 이해하는 명령어가 달라지면 많은 것들이 달라진다. 제어장치가 명령어 해석방식, 사용되는 레지스터 종류와 갯수, 메모리 관리 기법등 cpu하드웨어적 설계부분에서도 큰 영향을 미친다.

  • 마치 다른 언어를 사용하는 생활양식의 차이라고 보면 된다.

CISC(Complex Instruction Set Computer)

  • 복잡한 명령어 집합을 활용하는 컴퓨터
  • x86, x86-64는 대표적인 CISC 기반은 ISA
  • 가변길이 명령어 구조

  • 다양하고 강력한 명령어를 활용 -> 즉 상대적으로 적은 수의 명령어로 프로그램을 실행시킬수 있음.
  • 명령어 수가 적다는 말은 '컴파일된 프로그램의 크기가 작다'라는 것을 의미! -> 즉, 같은 CPU가 실행하더라도 실행파일의 크기가 다를 수 있다.

단점

  1. 메모리를 아낄때는 유리하나, 명령어 파이프라이닝을 처리하는데 불리하다는 치명적인 단점!!

    활용하는 명령어가 복잡하고 다양한 기능을 제공해서 명령어의 크기와 실행되는 시간이 일정하지 않다!
    🎆명령어 파이프라인 기법을 위한 이상적인 명령어는 각단계에서 소요되는 시간이 (가급적 1클럭으로)동일하는게 유리

    -> 높은 성능을 위해선 명령어의 파이프라인은 핵심기술임. 그러나 규격화되지 않은 명령어가 파이프라인을 어렵게 만듬...

  2. 실제로 사용하는 복잡한 명령어는 사용빈도수가 낮다.

RISC(Reduced Instruction Set Computer)

✨CISC의 한계로 다음과 같은 구상
1. 빠른 처리를 위해 명령어파이프라인은 활용되어야한다. 그래서 원활한 파이프라인을 위해 명령어의 길이와 수행시간이 짧고 규격화 되어야 한다.
2. 자주 쓰이는 기본적인 명령어를 작고 빠르게 만드는 것이 중요하다.

  • 파이프라이닝에 최적화 되어있음
  • ARM
  • 메모리 접근 최소화, 즉 메모리에 접근하는 명령어(LOAD,STORE) 두개로 제한 -> 레지스터 십분 활용 (LOAD-STORE 구조) 그래서 범용 레지스터 갯수도 더 많다.
  • 명령어의 종류가 작기 때문에 많은 명령어를 필요로 한다!

정리

-> 현대 CPU설계에서 CICS제조사들은 명령어 단위를 더 잘게 쪼개서(마이크로 명령어) 1클럭단위로 수행된다. 내부적으로는 RISC처럼 수행한다

profile
HelloWorld에서 RealWorld로

0개의 댓글