빠른 CPU를 위한 설계 기법
CPU를 어떻게 하면 빠르게 설계 할 수 있을까?
단순하게 생각해보면 CPU는 클럭 신호에 맞춰 움직이기 떄문에 클럭 속도를 빠르게 하면 되지 않을까? 클럭 신호에 맞춰 명령어 사이클이 실행되기 때문에 명령어 사이클 주기도 빨리 돌 것 같다.
'그럼 클럭 신호가 빠르게 반복되면 CPU를 비롯한 컴퓨터 부품들은 그만큼 빠른 박자에 맞춰 움직이겠네?'
꼭 그런건 아니지만 일반적으로는 맞다.
클럭 속도
- 클럭 속도 : 헤르츠(Hz) 단위로 측정
- 헤르츠(Hz) : 1초에 클럭이 반복되는 횟수
- 클럭이 '똑-딱-' 하고 1초에 한 번 반복되면 1Hz
- 클럭이 1초에 100번 반복되면 100Hz
실제 CPU의 클럭 속도는 어떨까?
1초에 클럭이 기본적으로 25억(2.5x4 109)번, 순간적으로 최대 49억(4.9 x 109)번 반복된다.
그럼 클럭 신호를 계속해서 높이면 CPU가 무지막지하게 빨라지지 않을까? CPU의 클럭 속도를 필요 이상으로 높이면 발열이 심각해지기ㅔ 때문에 불가능하다.
그럼 클럭 속도에는 한계가 있는데 클럭 속도 말고 CPU의 속도를 높이는 방법은 무엇이 있을까?
- 코어 수를 늘리는 방법 (듀얼 코어, 멀티 코어...)
- 스레드 수를 늘리는 방법 (멀티 스레드...)
코어
코어란?
코어를 이해하기 위해서는 현대적인 관점에서 CPU라는 용어를 재해석 해야 한다. 전통적으로 명령어를 실행하는 부품은 원칙적으로 하나만 존재했다. 그러나 오늘날에는 CPU에는 명령어를 실행하는 부품이 여러개 존재한다.
CPU내부에 코어수와 속도는 비례하지 않는다.
스레드
스레드란 실행 흐름의 단위이다.
- 하드웨어 스레드(=논리 프로세서) : 하나의 코어가 동시에 처리하는 명령어 단위
위 그림처럼 여러개의 명령어를 동시에 처리할 수 있는 프로세서, CPU를 멀티 스레드 프로세서, 멀티스레드 CPU라고 부른다.
멀티스레드 프로세서를 실제로 설계한는 일은 매우 복잡하지만, 가장 큰 핵심은 레지스터이다. 레지스터 세트가 코어에 여러개가 있으면 하나의 코어가 여러 명령어를 동시에 처리할 수 있다.
- 소프트웨어 스레드 : 하나의 프로그램에서 독립적으로 실행되는 단위
예를 들어
- 사용자로부터 입력받은 내용을 화면에 보여 주는 기능
- 사요자가 입력한 내용이 맞춤법에 맞는지 검사하는 기능
- 사용자가 입력한 내용을 수시로 저장하는 기능
위 3가지 기능을 동시에 하고 싶으면 스레드를 3개 만들면 된다.
근데 여기서 중요한게 있다.
1코어 1스레드 CPU도 여러 소프트웨어적 스레드를 만들 수 있다.