CPU

- 컴퓨터의 두뇌
- 메모리에 저장된 명령어를 읽어들이고, 읽어들인 명령어를 해석하고 실행하는 부품.
내부 구성요소
- 산술논리연산장치(ALU: Arithmetic Logic Unit)
- 계산기. 컴퓨터 내부에서 수행되는 대부분의 계산을 도맡아 시행한다.
- 레지스터(register)
- CPU 내부의 작은 임시 저장 장치
- 프로그램을 실행하는 데 필요한 값을 임시로 저장.
- CPU 내부에는 여러 개의 레지스터가 존재하고 각기 다른 이름과 역할을 가지고 있다.
- 제어장치(CU: Control Unit)
- 제어신호(control signal)라는 전기 신호를 내보내고 명령어를 해석하는 장치
- 제어신호: 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기 신호
- cpu가 메모리에 저장된 값을 읽고 싶을 땐 메모리를 향해
메모리 읽기
라는 제어 신호를 보낸다.
- cpu가 메모리에 어떤 값을 저장하고 싶을 땐 메모리를 향해
메모리 쓰기
라는 제어 신호를 보낸다.
코어(Core)

- 코어는 이러한 CPU의 기본구성요소(ALU, 제어장치, 레지스터)를 모두 포함하는 완전한 실행 유닛이다.
- 프로그램의 명렁(Instruction)을 읽고 수행하는 독립적인 처리 장치(Processing Unnit)
- 즉, 코어는 독립적으로 명령어를 fetch,decode,execute할 수 있는 CPU의 기본 단위이다.
- 코어는 CPU 내부에 위치하며, 아키텍쳐 설계에 따라 여러 개의 코어가 CPU에 동시에 위치할 수 있다.
- 전통적으로 CPU에서 명령어를 실행하는 부품은 원칙적으로 1개 존재했다.
- 그러나 오늘날에는 CPU에 명령어를 실행하는 부품이 여러 개 존재하고, 이 부품을 코어라고 하며, 코어가 여러 개 존재할 때 멀티코어 라고 한다.
CPU vs Core
CPU | Core |
---|
컴퓨터 내의 전자회로 | CPU내의 전자 회로 |
컴퓨터에 여러 개의 CPU가 있을 수 있다. | CPU에 여러 개의 코어(Core)가 있을 수 있다. |
Fetch-Decode-Execute | Fetch-Decode-Execute |
차이점
두 개의 장치 모두 컴퓨터의 컴퓨팅 구성장치로 기능을 수행하고 작동하지만, 컴퓨터의 속도와 효율성을 설명할 수 있는 몇 가지 차이점이 존재한다.
앞에서 언급한 바와 같이 CPU는 프로그램의 명령(Instruction)를 실행하는 것이며 대부분은 하나의 집적회로 칩(IC, Integrated Chip)이 포함되어 있다.
이 집적회로 내에 코어(Core), 입출력(IO) 관리 장치 및 기타 기본 구성요소 또한 포함되어 있다.
반면, 코어(Core)는 CPU의 하나의 구성요소로써 작동한다.
Fetch-Decode-Execute의 CPU 명령주기(Instruction Cycle)을 따른다.
일반적으로 멀티코어 프로세서는 단일 코어에 비해 빠른 CPU로 설명되지만, 실제로는 실행중인 프로그램에 따라 달라질 수 있다. 단일 코어 프로세서는 여전히 일부 프로그램의 멀티코어 프로세서보다 더 빠른 속도를 낼 수 있다. 이는 여전히 단계적으로 명령을 수행해야 하는 직렬방식(Serial)의 프로그램이 존재하기 때문이다.
멀티코어
- 코어를 여러개 포함하고 있는 CPU = 멀티코어 CPU = 멀티코어 프로세서
- CPU내에 명령어를 처리하는 일꾼이 여러명 있는 것.
- CPU와 코어의 관계
- 과거의 단일 코어 CPU: ALU + 제어장치 + 레지스터 = 1개의 코어 = CPU
- 현대의 멀티 코어 CPU: (ALU + 제어장치 + 레지스터) * N + 공유자원 = N개의 코어 = CPU
- 공유 자원
- 멀티코어 CPU에서는 일부 자원이 코어 간에 공유된다.
- 예: L3 캐시, 메모리 컨트롤러, I/O 인터페이스 등
- 각 코어는 독립적으로 명령어를 실행할 수 있다.
코어 수 | 프로세서 명칭 |
---|
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 연산속도가 꼭 코어 수에 비례하여 증가하지는 않는다.
- 코어마다 처리할 연산이 적절하게 분배되지 않는다면 코어 수에 비례하여 연산 속도가 증가하지 않는다.
스레드와 멀티스레드
- 스레드(thread): 실행 흐름의 단위
- 하드웨어적 스레드: 하나의 코어가 동시에 처리하는 명령어 단위
- 소프트웨어적 스레드: 하나의 프로그램에서 독립적으로 실행되는 단위
하드웨어적 스레드
- 하나의 코어가 동시에 처리하는 명령어 단위
- 전통적 cpu: 1코어 1스레드
- 명령어를 실행하는 부품이 하나 있고, 한 번에 하나씩 명령어를 실행하는 CPU

- 2코어 4스레드
- 명령어를 실행하는 부품을 두 개 포함하고, 한 번에 네 개의 명령어를 처리할 수 있는 CPU.

- 멀티스레드(multithread) 프로세서, 멀티스레드 CPU
- 하나의 코어로 여러 명령어를 동시에 처리하는 CPU
- 8코어 16스레드: 명령어 실행 부품 8개 포함, 한번에 16개의 명령어를 처리하는 CPU
- 하이퍼스레딩(hyper-threading): 인텔이 자신들의 멀티스레드 기술에 부여한 명칭.
소프트웨어적 스레드
- 하나의 프로그램에서 독립적으로 실행되는 단위
- 하나의 프로그램은 실행되는 과정에서 한 부분만 실행될 수도 있지만, 프로그램의 여러 부분이 동시에 실행될 수도 있다.

스레드의 두가지 용례
- 한 번에 하나씩 명령어를 처리하는 1코어 1스레드 CPU도 소프트웨어적 스레드를 수십 개 실행할 수 있다.
- 1코어 1스레드 CPU로도 프로그램의 여러 부분을 동시에 실행할 수 있다.
멀티스레드 프로세서
- 멀티스레드 프로세서: 하나의 코어로 여러 명령어를 동시에 처리하는 CPU

- 하나의 코어로 여러 명령어를 동시에 처리하도록 만들려면 프로그램 카운터, 스택 포인터, 메모리 버퍼 레지스터, 메모리 주소 레지스터와 같이 하나의 명령어를 처리하기 위해 꼭 필요한 레지스터를 여러개 가지고 있으면 된다.
- 가령 프로그램 카운터가 2개 있다면 '메모리에서 가져올 명령어 주소'를 두 개 지정할 수 있을 것.
- 스택 포인터가 2개 있다면 2개의 스택을 관리할 수 있다.
- 하나의 명령어를 실행하기 위해 꼭 필요한 레지스터들을 '레지스터 세트'라고 표기
ALU와 제어장치가 2개의 레지스터 세트에 저장된 명령어를 해석하고 실행하면 하나의 코어에서 2개의 명령어가 동시에 실행 가능.
논리 프로세서
- 메모리 속 프로그램 입장에서 하드웨어 스레드는 마치 '한 번에 하나의 명령어를 처리하는 CPU'나 다름없음.
- 그래서 하드웨어 스레드를 논리 프로세서(logic processor)라고 부르기도 한다.

정리
- 코어: 명령어를 실행할 수 있는 '하드웨어 부품'
- 스레드: 명령어를 실행하는 단위
- 멀티코어 프로세서: 명령어를 실행할 수 있는 하드웨어 부품이 cpu안에 2개 이상 있는 cpu.
- 멀티스레드 프로세서: 하나의 코어로 여러개의 명령어를 동시에 실행할 수 있는 cpu
📌 요약 정리
- 하드웨어 스레드: 하나의 코어에서 명령어 실행을 병렬해서 동시에 여러개 실행하는 것. (일꾼이 여러개)
- 소프트웨어 스레드: 프로그램 내부에서 개발자가 로직 흐름을 여러개 만든 것. (수행해야 할 일이 동시에 여러개)
- 코어: 명령어 실행 주체. (= like 직원)
- 코어 하나가 작업(하드웨어 스레드) 여러개 실행 가능.
- 하나의 cpu에 코어 여러개 존재 가능
- 멀티코어 프로세서 (직원이 여러일 동시에 멀티로 수행)
- CPU: 코어들 여러 개(1개일수도 있음). 코어 여러개가 하나의 두뇌. (= like 사장)

Reference