클럭 신호가 빠르게 반복되면 CPU를 비롯한 컴퓨터 부품들은 그만큼 빠른 박자에 맞춰 움직인다. 즉, 클럭 속도가 높아지면 CPU는 명령어 사이클을 더 빠르게 반복할 것이고, 다른 부품들도 그에 발맞춰 더 빠르게 작동한다.
실제로 클럭 속도가 높은 CPU는 일반적으로 성능이 좋다. 따라서 클럭 속도
는 CPU 속도 단위로 간주되기도 한다.
하지만 클럭 속도를 무지막지하게 높인다고 CPU가 빨라지는 것은 아니다. 무작정 클럭 속도를 높이면 발열 문제가 더 심각해진다. 클럭 속도를 높이는 것은 분명 CPU를 빠르게 만들지만, 클럭 속도만으로 CPU의 성능을 올리는 것에는 한계가 있다.
클럭 속도를 높이는 방법 외에 CPU 성능을 높이는 방법에는 CPU의 코어
와 스레드 수
를 늘리는 방법이 있다.
여기서 코어
는 무엇을 의미할까? 전통적인 관점에서 CPU는 '명령어를 실행하는 부품'을 의미하였다. 하지만 오늘날 CPU는 기술적으로 많이 발전하였기 때문에 지금까지 '명령어를 실행하는 부품'은 코어
라는 용어로 사용이 된다. 오늘날의 CPU는 '명령어를 실행하는 부품을 여러 개 포함하는 부품' 이라는 의미로 명칭의 범위가 확장되었다.
따라서 컴퓨터를 구매할 때 확인할 수 있는 8코어의 의미는 '명령어를 실행하는 부품'을 8개 포함하고 있다고 보면 된다.
코어를 여러 개 포함하고 있는 CPU를 멀티코어 CPU
또는 멀티코어 프로세서
라고 부른다. 당연히 멀티코어가 단일 코어보다 속도가 더 빠를 수 밖에 없다. 하지만 그렇다고 CPU의 연산 속도가 코어 수에 비례하여 증가하는 것은 아니다. 중요한 것은 코어마다 처리할 명령어들을 얼마나 적절하게 분배하느냐
이고 그에 따라서 연산 속도는 크게 달라진다.
스레드
에는 CPU에서 사용되는 하드웨어적 스레드가 있고, 프로그램에서 사용되는 소프트웨어적 스레드 있다.
하드웨어적 스레드
스레드를 하드웨어적으로 정의하면 '하나의 코어가 동시에 처리하는 명령어 단위'를 의미한다. 보통 CPU에서 사용하는 스레드라는 용어는 보통 CPU 입장에서 정의된 하드웨어적 스레드를 의미한다. 보통 CPU는 1코어 1스레드 CPU였다. 즉, 명령어를 실행하는 부품이 하나 있고, 한 번에 하나씩 명령어를 실행하는 CPU를 가정했다.
반면, 여러 스레드를 지원하는 CPU는 하나의 코어로도 여러 개의 명령어를 동시에 실행할 수 있다. 예를 들어 2코어 4스레드 CPU는 명령어를 실행하는 부품을 두 개 포함하고, 한 번에 네 개의 명령어를 처리할 수 있는 CPU를 의미한다.
이처럼 하나의 코어로 여러 명령어를 동시에 처리하는 CPU를 멀티스레드 프로세서
또는 멀티스레드 CPU
라고 한다.
앞으로 자주 볼 용어 중 하나가 하이퍼스레딩
이다. 이는 인텔의 멀티스레드 기술을 의미한다. 인텔이 자신들의 멀테스레드 기술에 하이퍼스레딩이라는 명칭을 부여한 것이다.
소프트웨어적 스레드
소프트웨어적 스레드는 '하나의 프로그램에서 독립적으로 실행되는 단위'를 의미한다.보통 프로그래밍 언어나 운영체제를 학습할 때 접하는 스레드는 소프트웨어적으로 정의된 스레드를 의미한다.
하나의 프로그램은 실행되는 과정에서 한 부분만 실행될 수도 있지만, 프로그램의 여러 부분이 동시에 실행될 수도 있다.
멀티스레드 프로세서
구분을 하기 위해서 하드웨어적 스레드를 하드웨어 스레드
, 소프트웨어적 스레드를 스레드
라고 칭한다.
멀티스레드 프로세서의 가장 큰 핵심은 레지스터
이다. 하나의 코어로 여러 명령어를 동시에 처리하도록 만들려면 필요한 레지스터를 여러 개 가지고 있으면 된다. 하나의 명령어를 실행하기 위해 꼭 필요한 레지스터들을 편의상 '레지스터 세트' 라고 하자. 레지스터 세트가 한 개인 CPU는 한 개의 명령어를 처리하기 위한 정보를 기억할 뿐이지만 , 두 개면 두 개의 명령어를 처리하기 위한 정보를 기억한다.
하지만 메모리 속 프로그램 입장에서 봤을 때 하드웨어 스레드는 마치 '한 번에 하나의 명령어를 처리하는 CPU'나 다름없다. 프로그램 입장에서 봤을 땐 한 번에 하나의 명령어를 처리하는 CPU가 네 개 있는 것처럼 보인다. 그래서 하드웨어 스레드를 논리 프로세서
라고 부르기도 한다.