CPU에 대한 좋은 글이 있어서 번역 및 의역해보려고 한다.
https://www.howtogeek.com/194756/cpu-basics-multiple-cpus-cores-and-hyper-threading-explained/
(이해가 되지 않는 분은 해당 URL을 참고하시면 됩니다.)
컴퓨터에서 CPU는 기본적으로 프로그램 실행과 같은 계산적인 작업을 수행한다. 그러나 현대 CPU는 멀티 코어, 하이퍼 스레딩과 같은 다양한 특징을 제공한다. (심지어 멀티 CPU 까지) 이와 같은 내용을 해당 포스팅에서 나열해 보려고 한다.
CPU의 클럭 속도는 CPU의 성능을 비교할 때 사용된다. (사실 이보다 단순히 설명되는 것 없다.) 멀티 코어와 하이퍼 스레딩을 지원하는 CPU는 하이퍼 스레딩을 지원하지 않는 같은 속도의 단일 코어 CPU보다 성능이 더 좋다. 더욱이 멀티 CPU를 지원하는 PC(Program Counter의 약자로 사용되는 것 같다.)는 더 많은 장점을 가진다. 이와 같은 멀티 코어, 멀티 CPI, 하이퍼 스레딩 등과 같은 기능은 동일한 시간에 PC가 멀티 프로세스를 쉽게 동작할 수 있게 한다. (멀티태스킹을 할 때 성능의 증가 등) 그럼 각각의 기능을 알아보도록 하자.
*PC : A program counter is a register in a computer processor that contains the address (location) of the instruction being executed at the current time.
Hyper-Threading
하이퍼 스레딩은 병렬 계산을 위해 인텔에서 만든 것이다. 2002년 펜티엄 4 HT의 데스크탑 CPU에서 처음으로 선보였다. 그 당시의 펜티엄 4는 단일 코어로 한 번에 하나의 작업 밖에 하지 못하였다. (물론 멀티태스팅처럼 빠르게 Task를 스위칭할 수는 있었다.) 하이퍼 스레딩은 이 같은 문제를 보완하기 위한 시도였다.
하이퍼 스레딩이 탑재된 물리적인 단일 CPU 코어는 OS에 논리적으로 2개의 CPU가 있는 것처럼 보인다. (여전히 CPU는 하나이기 때문에 어찌보면 약간의 속임수라 할 수 있다.) 그렇기 때문에 OS는 각 CPU 코어에 대해 2개의 CPU가 있는 것으로 인식하지만 실질적으로는 각 CPU 코어에 대해 단일 코어의 자원을 사용한다. (CPU는 내부적인 로직으로 프로그램 실행 속도가 높아질 수 있도록 한다.) 다시 말해서 OS는 속임수에 당해서 단일 코어를 두 개의 코어로 보는 것이다.
하이퍼 스레딩은 2개의 논리적인 CPU 코어들이 물리적인 자원을 공유할 수 있도록 한다. 즉, 하나의 가상 CPU가 대기하면, 다른 가상 CPU가 자원을 사용하는 것과 같은 방식으로 속도가 높아지지만 추가적인 물리 CPU 코어를 가진 것만큼은 아니다.
고맙게도 현재 하이퍼 스레딩은 "보너스"이다. 하이퍼 스레딩을 탑재한 기존 프로세서는 가상으로 멀티 코어를 사용할 수 있는 물리적인 단일 코어였지만, 현재 인텔에서는 멀티 코어와 하이퍼 스레딩을 동시에 사용 할 수 있다. 하이퍼 스레딩을 탑재하고 있는 듀얼 코어 CPU는 OS에 마치 4개의 코어가 있는 것처럼 보여진다. (쿼드 코어 CPU는 8개의 코어인 것처럼.) 물론 하이퍼 스레딩은 물리적인 추가 코어를 대체할 수는 없지만 하이퍼 스레딩을 탑재한 듀얼 코어가 그렇지 않은 듀얼 코어보다는 성능이 좋다.
Multiple Cores
이전에는 CPU는 단일 코어를 가졌다. 이것의 의미는 물리적인 CPU는 단일 CPU라는 것이었다. 그러나 제조업체는 보다 나은 성능을 보이기 위해 코어를 추가했다.
듀얼 코어는 2개의 CPU를 가진 것으로 OS에 2개의 CPU가 있는 것처럼 보여진다. 예를 들어 2개의 코어를 가진 CPU는 같은 시간에 2개의 다른 프로세스를 실행할 수 있다. 이는 시스템의 속도를 높이고 사용자의 컴퓨터는 여러개의 작업을 할 수 있다.
하이퍼 스레딩과는 다르게 속임수는 없다. 듀얼 코어 CPU는 말 그대로 CPU 칩에 2개의 CPU가 들어간다. (쿼드 코어는 4개)
이와 같은 멀티 코어 방식은 물리적인 CPU를 하나의 소켓에 유지하면서 시스템 성능을 극적으로 끌어 올렸다. 하나의 CPU는 하나의 CPU 소켓을 사용하기 때문에 추가적인 자원이 소모되지 않으므로 코어와 코어 사이의 통신이 더욱 빨라졌다. (각 CPU 마다 여러 CPU 소켓을 사용하면 파워, 쿨링 등과 같은 추가 자원이 필요하기 때문에 내부 속도에 영향을 받는다. 더욱이 같은 칩 안에 속하지 않기 때문에)
윈도우의 작업 관리자에 잘 볼 수 있다. 여기서 하나의 CPU (소켓)과 4개의 코어를 볼 수 있다. 하이퍼 스레딩이 각 물리적인 코어를 논리적으로 2개로 나누어 총 8개의 논리적인 프로세서가 존재하는 것을 볼 수 있다.
Multiple CPUs
대부분의 컴퓨터는 단일 CPU를 가지고 있다. 단일 CPU는 멀티 코어 또는 하이퍼 스레딩을 탑재하고 있다. 그러나 마더보드(motherboard)에 단일 CPU는 단일 CPU 소켓에 삽입된다.
하이퍼 스레딩과 멀티 코어 CPU가 등장하기 전에는 사람들은 프로세싱 파워를 높이기 위해 추가 CPU를 붙였다. 이는 다수의 CPU 소켓을 탑재한 마더보드가 필요하다는 사용자의 요구이기도 하였다. 또한 마더보드는 이러한 CPU 소켓과 연결하기 위한 RAM과 같은 리소스를 위한 추가 하드웨어가 필요하였다. 이런 작업은 많은 오버헤드이다. (CPU들 간에 통신함에 대기시간이 늘어나고 추가적인 컴퓨팅 파워가 필요하다.)
요즘 멀티 CPU를 갖춘 시스템은 흔하지 않다. 심지어 다수의 그래픽 카드를 탑재한 게이밍 데스크탑 또한 단일 CPU를 가진다. 때문에 이 같은 시스템은 슈퍼 컴퓨터, 서버, 고성능 시스템에서나 볼 수 있다.
'IT > Internals' 카테고리의 다른 글
Global Interpreter Lock (GIL) (1) | 2019.08.11 |
---|---|
[번역] Speed Up Your Python Program With Concurrency Part 2 (0) | 2019.08.11 |
[번역] Speed Up Your Python Program With Concurrency Part 1 (0) | 2019.08.03 |
I/O, CPU Bound (0) | 2019.06.23 |
[Cache] memory와 cache 관계 (0) | 2018.12.20 |
댓글