Skip to content
난이도 문제은행 3

CPU 성능 높이기 ​

CPU를 빠르게 만드는 방법은 크게 세 갈래다. 클럭(clock) 속도를 높여 박자를 빠르게 하거나, 일꾼인 코어(core)와 하드웨어 스레드(hardware thread)를 늘리거나, 명령어 하나를 처리하는 과정을 쪼개 여러 명령어를 겹쳐 처리하는 것이다. 이 문서는 앞의 두 갈래를 보고, 코어를 늘려도 빨라지는 데 한계가 있는 이유와 하드웨어 스레드가 소프트웨어 스레드와 어떻게 다른지 정리한다.

클럭: 박자를 빠르게 ​

CPU 안의 부품들은 클럭이라는 주기적인 신호에 맞춰 한 박자씩 움직인다. 1초에 몇 번 박자가 치는지를 클럭 속도라 하고 Hz(헤르츠) 단위로 적는다. 3GHz라면 1초에 30억 번 박자가 친다는 뜻이다. 박자가 빨라지면 같은 시간에 더 많은 일을 할 수 있다.

하지만 클럭만 올리는 데에는 한계가 있다. 클럭을 올리려면 보통 전압도 함께 올려야 하는데, 소비 전력은 대략 전압의 제곱과 클럭에 비례하므로 발열이 가파르게 늘어난다. 칩이 감당할 수 있는 열에는 한도가 있다. 그래서 2000년대 중반 이후 CPU 제조사는 클럭 경쟁 대신 "한 박자에 더 많은 일을 하는" 방향과 "일꾼을 늘리는" 방향으로 옮겨 갔다. 앞의 방향은 명령어를 겹쳐 처리하는 파이프라이닝(pipelining) 같은 기법으로, CPU 성능 높이기 2에서 다룬다. 클럭 속도가 높다고 무조건 빠른 CPU가 아닌 이유가 이것이다.

멀티코어: 일꾼을 늘리기 ​

코어는 CPU 안에서 명령어를 독립적으로 가져와 실행할 수 있는 처리 단위다. 예전에는 CPU 하나에 코어가 하나였지만, 지금은 칩 하나에 코어를 여러 개 넣은 멀티코어(multi-core) CPU가 기본이다. 코어가 네 개면 서로 다른 명령어 흐름 네 개를 정말로 동시에 실행할 수 있다.

코어가 늘었다고 프로그램이 저절로 빨라지지는 않는다. 일이 여러 흐름으로 나뉘어 있어야 여러 코어가 나눠 받을 수 있기 때문이다. 하나의 흐름으로만 도는 프로그램은 코어가 몇 개든 코어 하나만 쓴다. 또 나눌 수 없는 순차 구간이 남아 있으면 코어를 아무리 늘려도 그 구간 시간 아래로는 줄지 않는다. 이 한계를 계산식으로 정리한 것이 암달의 법칙(Amdahl's law)이다. 예를 들어 작업의 10%가 순차 구간이면 코어를 무한히 늘려도 최대 10배까지만 빨라진다.

하드웨어 스레드와 하이퍼스레딩 ​

하드웨어 스레드는 코어 하나가 동시에 붙들고 처리할 수 있는 명령어 흐름의 단위다. 코어 하나가 명령어 흐름 두 개의 레지스터(register) 묶음을 따로 들고 있으면, 운영체제는 그 코어를 논리 프로세서(logical processor) 두 개, 곧 스레드를 배정할 CPU 두 개로 본다. 인텔은 이 SMT(Simultaneous Multithreading, 동시 멀티스레딩) 기술을 하이퍼스레딩(hyper-threading)이라는 이름으로 판다.

이 기술이 필요한 이유는 코어 안의 부품이 자주 논다는 데 있다. 한 흐름이 메모리에서 데이터가 오기를 기다리는 동안, 다른 흐름의 명령어를 그 빈 부품에 넣어 실행하면 코어를 더 알차게 쓸 수 있다. 두 흐름의 명령어는 차례를 기다리지 않고 같은 박자에도 함께 실행될 수 있다. 다만 두 흐름은 계산 부품과 캐시 메모리(cache memory)를 함께 쓰므로 코어 두 개만큼 빨라지지는 않는다. 효과는 작업 종류에 따라 크게 다르다.

소프트웨어 스레드(software thread)와 헷갈리지 않아야 한다. 소프트웨어 스레드는 운영체제가 만들고 관리하는 실행 흐름(프로세스와 스레드 2 참고)이다. 운영체제의 스케줄러(scheduler)가 이 소프트웨어 스레드들을 하드웨어 스레드(논리 프로세서) 위에 번갈아 올려 실행한다. 그래서 "8코어 16스레드" CPU에서도 소프트웨어 스레드는 수천 개가 돌 수 있다.

다이어그램 로딩…

이어지는 내용은 CPU 성능 높이기 2에서 다룬다.

면접 포인트 ​

  • "클럭만 계속 올리면 되지 않나요?" → 전력·발열이 가파르게 늘어 한계. 그래서 한 박자에 더 많은 일, 일꾼 늘리기로 옮겨 갔다.
  • "멀티코어와 하이퍼스레딩 차이는?" → 코어는 실행 부품 전체가 따로, 하드웨어 스레드는 한 코어의 부품을 나눠 씀. 하이퍼스레딩은 2배가 아니다.
  • "코어를 늘리면 계속 빨라지나요?" → 아니다. 나눌 수 없는 순차 구간이 한계를 정한다(암달의 법칙).

관련 문서