컨텐츠 검색
[CS] CPU 성능 지표: 클럭, 코어, 스레드

2026. 3. 13. 15:33Computer Science

이전 글: [CS] 컴퓨터 구조: CPU의 동작 원리

1. 클럭 (Clock)

클럭은 CPU가 명령어 사이클을 반복하는 속도이며, 단일 코어의 연산 속도를 결정짓는 가장 직관적인 성능 척도입니다. 단위는 Hz를 사용하며, 1Hz는 1초에 1번의 주기를 의미합니다.

  • Base & Max Clock (기본 및 최대 클럭): Base Clock은 평상시 전력 소모 및 발열을 제어하기 위해 시스템이 유지하는 기본 작동 속도입니다.
    • Max Clock(부스트 클럭)은 게임, 렌더링 등 고부하 작업이 요구될 때 CPU가 허용된 전력과 온도 제한 내에서 일시적으로 끌어올리는 최대 작동 속도입니다.
  • 스로틀링 (Thermal Throttling): CPU가 높은 클럭으로 작동하여 한계 온도에 도달했을 때, 칩의 물리적 손상을 방지하기 위해 강제로 클럭 속도와 전압을 낮추는 하드웨어 보호 메커니즘입니다. 이 현상이 발생하면 급격한 연산 지연 및 프레임 드랍이 발생합니다.
  • 오버클러킹 (Overclocking): 메인보드 설정을 통해 제조업체가 제한해 둔 최대 클럭 속도의 한계치를 인위적으로 해제하여 연산 속도를 더 높이는 기법입니다. 단, 전력 소모와 발열이 기하급수적으로 증가하므로 스로틀링을 방지하기 위한 고성능 쿨링 솔루션(수랭 쿨러 등)이 필수적으로 요구됩니다.

2. 코어 (Core)

코어는 CPU 내부에서 실제로 명령어를 연산하고 실행하는 독립적인 물리적 하드웨어 단위입니다. 현대 CPU는 단일 칩 내에 여러 개의 코어를 탑재하여 병렬 처리 능력을 높인 멀티코어(Multi-core) 프로세서 구조를 채택하고 있습니다.

  • 성능 확장성과 암달의 법칙 (Amdahl's Law): 코어 수가 2배, 4배로 증가한다고 해서 전체 시스템의 연산 속도가 정비례하여 향상되지는 않습니다. 프로그램 코드 중에는 병렬 처리가 불가능하고 반드시 앞선 연산의 결과를 기다려야 하는 '순차적 실행 로직'이 존재하기 때문입니다. 암달의 법칙에 따르면, 이 순차적 코드의 비율이 전체 시스템의 최대 성능 향상폭을 제한하는 병목 지점이 됩니다.
  • 작업 분배 (Load Balancing): 연산 작업이 여러 코어에 균등하게 분배되지 않으면, 특정 코어만 과부하에 걸리고 나머지 코어는 대기(Idle) 상태에 놓이게 되어 멀티코어의 물리적 이점을 살릴 수 없습니다.
  • 코어 개수별 명칭: 싱글코어(1), 듀얼코어(2), 쿼드코어(4), 헥사코어(6), 옥타코어(8), 도데카코어(12), 헥사데카코어(16) 등으로 분류됩니다.

3. 스레드 (Thread)

스레드는 CPU 파이프라인에서 처리되는 '실행 흐름의 단위'이며, 하드웨어 레벨과 소프트웨어 레벨의 작동 방식을 명확히 구분해야 합니다.

  • 물리 코어와 논리 프로세서 (Hardware Thread & SMT): 하드웨어적 스레드는 운영체제(OS)가 인식하는 논리적인 프로세서의 개수입니다. 인텔의 하이퍼스레딩(Hyper-Threading)이나 AMD의 SMT(Simultaneous Multithreading) 기술은 하나의 물리적 코어 내부에 다수의 레지스터 세트와 스케줄러를 배치합니다. 이를 통해 물리적 코어 하나를 2개의 논리 프로세서(스레드)로 분할하여 인식시킵니다. 코어 내부의 파이프라인 유휴 자원을 최소화하고 2개의 명령어 흐름을 동시 처리하여 연산 효율을 높이는 하드웨어적 구조입니다. (예: 8코어 16스레드 CPU).
  • 소프트웨어적 스레드: 단일 프로그램(프로세스) 내에서 독립적으로 실행되는 멀티태스킹 작업 단위입니다. 물리적 코어나 논리 프로세서의 수와 무관하게, 운영체제 단에서 시분할 방식을 통해 수십~수백 개의 소프트웨어 스레드를 생성하고 교차 실행할 수 있습니다.

4. 언리얼 엔진 성능 최적화

언리얼 엔진은 위에서 설명한 하드웨어의 멀티코어 및 멀티스레드 아키텍처를 극한으로 활용하도록 설계되었습니다.

  • 틱(Tick)과 프레임: Tick 함수는 매 프레임 호출되며, CPU의 클럭 사이클 동작을 엔진 수준에서 논리적으로 추상화하여 구현한 형태입니다.
  • C++과 블루프린트(Blueprint)의 실행 속도 차이: C++ 코드는 컴파일 단계에서 기계어로 직접 변환되어 CPU가 즉시 실행합니다. 반면 블루프린트는 언리얼 엔진의 가상머신(VM)을 거쳐 런타임에 해석(해독)되는 과정이 추가되므로, C++ 대비 상대적으로 실행 속도가 느립니다.
  • TArray 자료구조 사용 이유: TArray는 데이터가 메모리상에 연속적으로 배치되는 구조입니다. 데이터에 순차적으로 접근할 때 CPU 캐시 메모리의 공간 지역성(Spatial Locality)을 활용할 수 있어, 캐시 적중률(Cache Hit Rate)이 높아지고 시스템 버스를 통한 통신 속도가 극대화됩니다.
  • 멀티스레딩 최적화: 목적별로 스레드를 분할하여 작업을 병렬 처리합니다.
    • Game Thread: 게임 로직, 캐릭터 이동, 물리 및 AI 연산 등 핵심 로직 처리.
    • Render Thread: 렌더링할 오브젝트 데이터를 준비하여 GPU로 전송(Draw Call).
    • Worker Threads: 나나이트(Nanite) 처리, 에셋 비동기 로딩 등 고부하 로직을 백그라운드에서 분산 처리.
  • 실무 예시: 셰이더 컴파일 (Shader Compilation): 언리얼 엔진에서 셰이더를 컴파일할 때는 시스템에 가용한 모든 논리 프로세서(하드웨어 스레드)에 Worker 프로세스를 할당합니다. 이때 CPU 점유율은 100%에 도달하며 모든 코어와 스레드를 극한으로 활용하는 하드웨어 부하 상태가 됩니다. 이 과정에서 발열이 급증하여 앞서 설명한 '스로틀링(Throttling)' 현상을 직접 관찰할 수 있습니다.
  • 병렬 처리 병목 현상 (Sync): 특정 스레드의 로직 처리가 지연되어 다른 스레드들이 작업을 진행하지 못하고 대기 상태(Idle)에 놓이면 시스템 전체 성능이 저하됩니다. 이를 방지하기 위해 무거운 연산은 별도의 Worker 스레드로 분산하여 코어별로 균등하게 분배해야 합니다. 프레임 드랍 발생 시, 클럭 스로틀링으로 인한 물리적 성능 저하인지, 혹은 특정 코어만 100% 과부하에 걸리는 단일 스레드 병목(Single-threaded Bottleneck) 현상인지 프로파일러를 통해 분석해야 합니다.