본문으로 이동

미디어위키 1.45 안정화가 거의 끝났습니다. 다만 Flow 확장 기능 관련 이슈가 있어서 대체하는 작업을 수행할 계획입니다.

  1. 큰숲백과:청사진에서 위키 발전의 대략적인 방향성을 제시했습니다. 의견이 있으신 분은 큰숲백과토론:청사진에서 의견을 남겨주시면 좋겠습니다.
  2. 기능상의 오류로 지원하지 않고 있는 기능에 대해서는 큰숲백과토론:이슈 트래커에 요약했습니다. 참고하시기 바랍니다.
  3. 데이터베이스 덤프 받고싶으신 분은 큰숲백과 가입 후에 사용자토론:Bigforest에 의견 남겨주시면 ftp 주소, 계정, 비밀번호를 특수:EmailUser를 통해서 공개할 예정입니다.

CPU: 두 판 사이의 차이

큰숲백과, 나무를 보지 말고 큰 숲을 보라.
잔글 분류
37번째 줄: 37번째 줄:


== 분류 ==
== 분류 ==
* 명령어 설계 철학에 따라 [[CISC]], [[RISC]], [[VLIW]] 등으로 나뉜다.


* 플린 분류: SISD, [[SIMD]], MISD, MIMD
* 플린 분류: SISD, [[SIMD]], MISD, MIMD

2021년 9월 2일 (목) 09:50 판

CPU 또는 중앙처리장치는 컴퓨터의 특정 메모리에서 특정 데이터 값(코드)을 가져와 해석하고 그에 대응되는 연산을 처리한 후 레지스터/주기억장치 등지에 연산 결과 값을 기억하도록 제어하는 폰 노이만 구조[1]에 기반하여 설계된 집적 회로 부품을 말한다.

컴퓨터 내부에서는 기억장치(RAM, 플래시 메모리, 하드디스크, ROM 등)와 함께 사실상 컴퓨터 그 자체라고 말할 수 있는 두 장치 중 하나다.

CPU의 성능은 크게 신호를 전달하는 타이밍을 정하는 클럭 속도, 한번에 처리 가능한 명령어 수를 결정하는 IPC, 그리고 병렬적인 데이터 연산 능력을 결정하는 코어 수에 따라 결정된다. 여기에 추가로 전력 공급량이나 CPU 내 트랜지스터의 과열로 인한 고장을 예방할 수 있는 발열 제어 같은 부수적 요소가 따라붙는다.

한번에 처리 가능한 데이터의 비트 수에 따라 n비트 프로세서라고 일컫는다.

구조와 원리

CPU는 크게 역할 순서대로 배치되어 데이터를 보관하는 Datapath와 그 데이터가 갈 위치를 정하는 Control Unit을 내장하고 있다.

이에 따라 CPU의 작업은 크게 Fetch, Decode, Execute, Write Back 단계로 나뉜다.

  • Fetch는 메모리에서 특정한 코드를 가져오는 작업이다. 전통적인 디자인에서는 1개의 명령어가 한 클럭 사이클에 들어오나 현대에 들어와서는 CPU가 한번에 여러 명령어를 뽑는 슈퍼스칼라 기법이 적용되어 IPC를 늘릴 수 있다.
  • Decode는 가져온 코드에 따라 작동할 연산부를 결정하고 필요한 데이터를 연산부에 넘겨준다.
  • Execute는 들어온 데이터를 연산부가 가공하고 실행시킨다.
  • Write Back은 실행한 결과물에 따라 레지스터나 주기억장치에 연산의 결과물을 기억시키는 작업이다.

여기서 Fetch부터 Write Back까지 코드가 1개 들어가고 1개 나올 때까지 기다리는 것은 성능 향상에 도움이 되지 않으므로 컨베이어 벨트를 사용하는 공장처럼 각 단계별로 작업을 연속적으로 할 수 있도록 현재 작업 중인 코드를 기억하는 레지스터를 단계별로 배치하는데, 이를 파이프라이닝 기법이라고 한다. 파이프라이닝은 각 단계별로 1개~n개씩 배치되어 클럭 사이클(반복되는 클럭 변화)마다 1단계씩 다음 단계로 코드/데이터를 넘기므로 각 레지스터 사이에 배치된 트랜지스터 논리 소자 배치가 단순해져 트랜지스터를 지나갈 때마다 발생하는 전기 신호 지연을 줄일 수 있어 클럭 속도를 높일 수 있다.

캐시 메모리

한편 주기억장치로 쓰이는 축전기 기반 DRAM 및 보조 기억 장치(하드디스크 및 플래시 메모리)의 느린 읽고 쓰기 속도로 인한 CPU의 성능 저하를 보완하기 위해 현대 CPU에는 상대적으로 빠르지만 비싼 플립플롭 기억 소자를 사용하는 저용량의 SRAM 또는 특수한 DRAM에 주기억장치에 담긴 일부 데이터를 저장하여 CPU로 데이터를 빨리 끌어서 쓸 수 있도록 하는 조치가 되어있는데, 이런 조치가 되어 있는 설계를 메모리 계층이라고 하며 메모리 계층에 사용된 저용량 RAM을 캐시 메모리라고 부른다.

캐시 메모리는 데이터 저장방식에 따라 Direct-mapped Cache나 n-way Associative Cache 등으로 나뉘며 캐시 메모리가 다 차거나 중복된 위치에 데이터를 채워야 할 경우(cache miss)에 새 데이터를 배치하는 각종 방법론(Least Recently Used, Random 및 기타 등등)이 있다.

Out of order 프로세싱

한편 몇몇 명령어는 먼저 실행해야 할 다른 명령어가 없이 명령어 레벨에서 각각 독립적으로 실행 가능한 경우가 생기는데, 이때 실행 순서를 재배치하여 몇몇 명령어들을 선제적으로 처리할 수 있는 구조를 Out of Order 프로세싱이라고 한다. 이때에는 Fetch와 Decode라는 단계 대신 Issue라는 단계를 거쳐 토마술로 알고리즘 등에 의해 먼저 실행할 명령어들의 순서를 결정한다.

분기 예측

조건문이나 반복문 같이 조건 분기를 하는 경우 조건 분기에 의한 메모리 위치 이동(이하 점프)가 일어날 때까지 Fetch/Decode에 대응하는 부분은 놀게 되는데, 성능 향상을 위해 다음에 들어올 명령어를 예측할 수 있는 몇 가지 방법을 분기 예측이라고 한다.

반복문의 경우 분기 예측의 적중률이 매우 높기에[2] 분기 예측은 CPU 성능 향상에 중요한 역할을 맡는다.

파이프라인 단계가 지나치게 많을 경우 분기 예측 실패로 인한 파이프라인 비우기가 오래 걸리기 때문에 성능에 오히려 악영향을 주게 된다.

분류

  • 명령어 설계 철학에 따라 CISC, RISC, VLIW 등으로 나뉜다.
  • 플린 분류: SISD, SIMD, MISD, MIMD

설계 및 제조사

각주

  1. 프로그램이라는 코드 묶음을 메모리에 저장하여 컴퓨터 내에 내장시키고 프로세서로 프로그램을 가져와 가공하는 컴퓨터 구조
  2. 상식적으로 n번의 반복 후 나가야 하는 코드의 경우 단 한번만 틀리면 되므로 n에 들어가는 값이 클수록 적중률이 올라간다