클럭

  1. 컴퓨터 부품들은 '클럭 신호'에 맞춰 일사불란하게 움직임
  2. CPU는 '명령어 사이클'이라는 정해진 흐름에 맞춰 명령어들을 실행

클럭 신호가 빠르게 반복되면 CPU를 비롯한 컴퓨터 부품들은 그만큼 빠른 박자에 맞춰 움직인다. 즉, 클럭 속도가 높아지면 CPU는 명령어 사이클을 더 빠르게 반복하고, 다른 부품들도 발맞춰 빠르게 작동하므로 클럭 속도가 높은 CPU는 일반적으로 성능이 좋다.

클럭 속도를 무지막지하게 높이더라도 무조건 CPU가 빨라지는가 하면 그것도 아니다. 장시간 CPU에 무리가 가는 작업을 하는 경우 발열 문제가 심각해져 성능 저하를 유발한다. 그러므로 클럭 속도를 높이는 것은 CPU를 빠르게 만들지만 속도만으로 성능을 올리는 것에는 한계가 있다.

클럭 속도는 헤르츠(Hz)단위로 측정한다. 1초에 클럭이 몇 번 반복되는지를 나타내며 '똑-딱-'하고 1초에 한 번 반복되면 1Hz, 1초에 100번 반복되면 100Hz.

💡 클럭 속도는 일정하지 않다.

기본 클럭 속도(Base)와 최대 클럭 속도(Max)로 나뉘는데 고성능을 요구하는 순간에 순간적으로 클럭 속도를 높이고, 아닐 경우 유연하게 클럭 속도를 낮춘다. 최대 클럭 속도를 강제로 높이는 기법을 오버클럭킹(overclocking)이라고 한다.

코어와 멀티코어

클럭 속도를 높이는 방법 외에 CPU의 코어와 스레드 수를 늘리는 방법이 있다.

코어

전통적인 관점에서 '명령어를 실행하는 부품' CPU는 원칙적으로 하나만 존재했다. 하지만 기술의 발전으로 CPU 내부에는 '명령어를 실행하는 부품'을 얼마든지 만들 수 있게 되었고 이 '명령어를 실행하는 부품은' 코어core 라는 용어로 사용된다.

코어를 여러 개 포함하고 있는 CPU를 멀티코어multi-core 또는 멀티코어 프로세스라고 한다.

코어 수프로세서 명칭
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에서 사용되는 하드웨어적 스레드와, 프로그램에서 사용되는 소프트웨어적 스레드로 나눌수 있다.

하드웨어적 스레드

'하나의 코어가 동시에 처리하는 명령어 단위'를 의미하며 CPU에서 사용하는 스레드는 하드웨어적 스레드를 의미한다.

하나의 코어로 여러 명령어를 동시에 처리하는 CPU를 멀티스레드multithread프로세서 또는 멀티스레드 CPU라고 한다.

소프트웨어적 스레드

'하나의 프로그램에서 독립적으로 실행되는 단위'를 의미하며, 프로그래밍 언어나 운영체제를 학습할 때 접하는 스레드는 보통 소프트웨어적 스레드를 의미한다.

하나의 프로그램은 실행되는 과정에서 한 부분만 실행될 수도 있지만, 여러 부분이 동시에 실행될 수도 있다.

멀티스레드 프로세서

하나의 코어로 여러 명령어를 처리하는데 있어 핵심은 레지스터다. 프로그램 카운터, 스택 포인터, 데이터 버퍼 레지스터, 데이터 주소 레지스터 같이 하나의 명령어를 처리하기 위해 꼭 필요한 레지스터를 여러개 가지고 있으면 된다.

하나의 명령어를 실행하기 위해 꼭 필요한 레지스터 세트(편의상 레지스터 세트라고 표기)가 두 개인 CPU는 두 개의 명령어를 처리하기 위한 정보들을 기억하고 ALU와 제어장치 각 레지스터 세트에 저장된 명령어를 해석하고 실행하면 하나의 코어에서 두 개의 명령어가 동시에 실행 된다.

그러나 메모리 속 프로그램 입장에서 하드웨어 스레드는 '한 번에 하나의 명령어를 처리하는 CPU'와 같다. 그래서 하드웨어 스레드를 논리 프로세서logical processor라고 부르기도 한다.

0개의 댓글