CPU의 구조와 명령 실행
CPU는 메모리에 놓인 명령을 가져와 해독하고, 필요한 데이터를 읽어 연산한 뒤 결과를 기록한다. 이 흐름은 명령어 인출, 해독, 실행, 메모리 접근, 결과 확정으로 나눌 수 있지만 현대 CPU는 여러 명령의 단계를 겹치고 순서를 재배치해 실행 유닛이 쉬는 시간을 줄인다.
프런트엔드는 명령 바이트를 가져와 경계를 찾고 내부 동작으로 변환한다. 분기 예측기는 조건문과 함수 호출 뒤에 실행할 주소를 미리 고른다. 백엔드의 스케줄러는 입력 데이터가 준비된 동작을 정수·부동소수점·벡터·로드/스토어 유닛에 보낸다. 실행은 순서가 달라질 수 있지만 리오더 버퍼가 프로그램이 보는 결과를 원래 순서대로 확정한다.
코어와 스레드
코어는 독립적인 명령 실행 자원과 상태를 가진 처리 단위다. 동시 멀티스레딩(Simultaneous Multithreading, SMT)은 한 코어가 둘 이상의 하드웨어 스레드 상태를 유지해 빈 실행 자원을 활용한다. 논리 CPU가 두 배로 보인다고 물리 코어와 실행 자원이 모두 두 배가 되는 것은 아니다.
하이브리드 CPU는 서로 다른 크기와 목표를 가진 코어를 한 패키지에 넣는다. 성능 지향 코어와 효율 지향 코어의 작업 배치는 운영체제 스케줄러, 펌웨어, 프로그램의 스레드 특성에 영향을 받는다.
데이터를 기다리는 시간
레지스터는 현재 연산에 가장 가까운 저장 공간이고, 캐시는 최근 사용한 명령과 데이터를 보관한다. 캐시에 없으면 DRAM까지 접근해야 하므로 지연시간이 크게 늘어난다. 분기 예측, 비순차 실행과 많은 미처리 메모리 요청은 이 대기 시간을 다른 작업으로 가리는 기술이다.
출처
- Intel, Intel 64 and IA-32 Architectures Software Developer Manuals
- AMD, Developer Guides, Manuals and ISA Documents
- Arm, A-Profile Architecture
다음 읽기: 파이프라인과 비순차 실행, CPU Cache, 명령어 집합과 마이크로아키텍처