명령이 실행되는 과정
프로그램이 실행될 때 CPU는 처리할 명령을 가져오고, 그 의미를 파악한 뒤 필요한 연산을 수행한다. 더하기 명령이라면 값을 읽어 계산하고 결과를 저장한다. 분기 명령이라면 조건에 따라 다음에 실행할 위치가 달라진다.
현대 CPU는 이 단계를 단순히 한 번씩 차례대로 반복하는 데 그치지 않는다. 여러 명령의 처리를 겹치거나, 결과가 준비된 명령을 먼저 실행하는 등 다양한 방법으로 처리량을 높인다. 이런 내부 동작은 프로그램이 기대하는 결과를 유지하도록 관리된다.
가까운 저장 공간이 필요한 이유
CPU가 연산할 때마다 느린 저장 장치에서 값을 가져온다면 연산 회로가 빨라도 기다리는 시간이 길어진다. 레지스터와 캐시는 자주 쓰는 값을 CPU 가까이에 두어 이러한 지연을 줄인다.
캐시 용량이 크다고 모든 프로그램이 같은 비율로 빨라지는 것은 아니다. 데이터의 크기와 접근 순서, 같은 값을 다시 쓰는 빈도에 따라 효과가 달라진다.
코어와 스레드
코어는 명령을 실행하는 처리 단위다. 여러 코어가 있으면 독립적인 작업을 나누어 진행할 수 있다. 스레드는 프로그램의 실행 흐름을 가리키며, 일부 CPU는 한 코어가 여러 하드웨어 스레드를 지원한다.
코어 수가 두 배라고 작업 시간이 항상 절반이 되지는 않는다. 작업을 나눌 수 있는 정도와 결과를 합치는 비용, 공유 자원에서 생기는 대기가 성능을 제한한다.
클럭 수치의 한계
동작 주파수는 일정 시간에 반복하는 클럭의 수를 뜻한다. 그러나 클럭당 처리하는 일의 양은 CPU 구조와 명령 종류에 따라 다르다. 서로 다른 제품의 실제 작업 성능은 같은 조건의 측정 결과로 비교해야 한다.