본문 바로가기
Books

[혼공컴운] CPU 성능 향상을 위한 설계 기법에는 무엇이 있나요?

by yhames 2023. 11. 24.

서론

무어의 법칙(Moore’s Law)은 반도체 집적회로의 컴퓨팅 성능이 24개월마다 2배로 증가하고, 가격은 반으로 떨어진다는 예측이다. 단일 프로세서의 집적도는 이미 한계에 직면했으나 다양한 성능 향상을 위한 기법이 등장하면서 현재까지도 연산 장치의 속도는 지속적으로 발전하고 있다.

 

다음은 책에서 소개되는 CPU의 성능 향상을 위한 설계 기법이다.

 

클럭(Clock)

CPU 명령어 사이클클럭 주기에 맞춰서 동작한다. 따라서 클럭 속도가 빠르면 그만큼 명령어 사이클이 더 빠르게 반복될 것이고 전체적인 성능이 향상될 것이다.

 

오버클럭킹(Overclocking)이란 CPU를 설계된 것 보다 더 높은 클럭 속도로 동작하게 강제하는 것이다. 오버클럭을 진행하면 성능이 올라가는 만큼 열도 많이 발생하게 되고, 하드웨어의 수명을 단축시키는 결과를 가져올 수도 있다.

 

서론에서 언급했듯이 단일 프로세서의 집적도가 한계에 직면하면서 CPU 성능 향상을 위해 코어스레드를 늘리는 방법이 등장했다.

 

멀티 코어

멀티 코어코어를 여러개 포함하고 있는 CPU를 의미한다.

 

하지만 반드시 코어의 수에 비례해서 성능이 향상되는 것은 아니다.

암달의 법칙(Amdahl's law)이란 컴퓨터 시스템의 일부를 개선할 때 전체적으로 얼마만큼의 최대 성능 향상이 있는지 계산하는 이론이다. 암달의 법칙에 따르면 어떤 시스템을 개선하여 전체 작업 중 P%의 부분에서 S배의 성능이 향상되었을 때 전체 시스템에서 최대 성능 향상은 다음과 같다.

 

멀티 코어를 사용할 때 프로그램의 모든 부분을 병렬화 할 수는 없을 것이다. 만약 프로그램의 95%를 병렬처리를 할 수 있다고 해도 암달의 법칙에 의하면 최대 성능 향상은 최대 20배로 제한된다.

 

멀티 스레드

멀티 스레드레지스터 세트를 여러개 포함하고 있는 CPU를 의미한다.

여기서 언급되는 멀티 스레드는 OS에서 사용되는 스레드 개념과 구분된다. 책에서는 소프트웨어적 멀티스레드(OS의 스레드, 이하 스레드)와 하드웨어적 스레드로 구분한다. CPU에서 사용되는 스레드는 하드웨어 스레드로 지칭한다.

 

위 그림에서 코어는 2개지만, 프로그램 입장에서는 한 번에 4개의 명령어가 수행되기 때문에 마치 CPU가 4개인 것 처럼 보인다. 그래서 하드웨어 스레드를 논리 프로세서라고 부르기도 한다.

 

명령어 파이프라인

CPU 성능 향상을 위해 클럭 속도를 높이거나 멀티 코어와 멀티 스레드를 통해 병렬 처리하는 것도 중요하지만, 하나의 CPU가 명령어 사이클을 효율적으로 처리하게하는 방법도 중요하다.

 

명령어 파이프라인이란 명령어 사이클의 각 처리 과정을 클럭 주기로 나누어서 병렬로 처리하는 방법이다.

명령어 사이클을 클럭 단위로 나누어보면 다음과 같다.

  1. 명령어 인출(IF, Instruction Fetch)
  2. 명령어 해석(ID, Instruction Decode)
  3. 명령어 실행(EX, Execute Instruction)
  4. 명령어 저장(WB, Write Back)

CPU는 각 단계를 동시에 실행할 수 있다. 즉, 서로 다른 2개의 명령에 대해 IF와 ID를 동시에 실행할 수 있다는 것이다.

 

하지만 특정 상황에서는 성능 향상에 실패하는 경우가 있다. 이를 파이프라인 위험(Pipeline Hazard)라고 한다.

파이프라인 위험(Pipeline Hazard)에 대해서는 다음 글에서 정리해 두었다.

CPU 명령어 파이프라인 위험과 분기문

 

슈퍼스칼라

슈퍼스칼라는 명령어 파이프라인이 여러개 포함되어 있는 CPU를 의미한다.

 

슈퍼스칼라 프로세서는 매 클럭 주기마다 동시에 여러 명령어를 인출(IF)하거나 실행(EX)할 수 있다. 하지만 멀티 코어나 멀티 스레드와 마찬가지로 파이프라인 개수에 비례해서 빨라지지는 않는다.

 

비순차적 명령어 처리

비순차적 명령어 처리(OoOE, Out-of-Order Execution)는 명령어 간에 의존성이 있을 때, 의존성이 없는 명령어를 우선적으로 처리하는 방식이다. 책에서는 명령어의 "합법적인 새치기"라고 표현한다.

 

비순차적 명령어 처리를 지원하는 CPU는 명령어들이 어떤 명령어와 의존성을 갖고 있는지 판단할 수 있어야 한다. 오늘날 CPU 성능 향상에 크게 기여한 기법이자 대부분의 CPU가 차용하는 기법이다.

 

결론

  • 클럭 : 클럭 속도를 높인다.
  • 멀티 코어 : 코어 개수를 늘린다.
  • 멀티 스레드 : 레지스터 세트를 늘린다.
  • 명령어 파이프라인 : 명령어 사이클을 병렬처리한다.
  • 슈퍼스칼라 : 명령어 파이프라인을 늘린다.
  • 비순차적 명령어 처리 : 명령어 간의 의존성을 검사한다.

 


wikipedia - 무어의 법칙(Moore's law)

wikipedia - 암달의 법칙(Amdahl's law)

wikipedia - 비순차적 명령어 처리