중앙 처리 장치 구조와 구현
나중에 단일 프로그램에도 더 세밀한 병렬성이 존재한다는 것이 인식되었다. 단일 프로그램은 여러 스레드(또는 함수)를 가질 수 있으며, 이들은 별도로 또는 병렬로 실행될 수 있다. 이 기술의 초기 사례 중 일부는 직접 메모리 접근과 같은 입출력 처리를 계산 스레드와 별개의 스레드로 구현했다. 이 기술에 대한 더 일반적인 접근 방식은 1970년대에 시스템이 여러 계산 스레드를 병렬로 실행하도록 설계되었을 때 도입되었다. 이 기술은 멀티스레딩으로 알려져 있다. 이 접근 방식은 MP의 경우 전체 CPU와 달리 CPU 내의 소수의 구성 요소만 복제하여 MT를 지원하므로 다중 처리보다 비용 효율적인 것으로 간주된다. MT에서는 실행 장치와 캐시를 포함한 메모리 시스템이 여러 스레드 간에 공유된다. MT의 단점은 멀티스레딩에 대한 하드웨어 지원이 MP보다 소프트웨어에 더 많이 노출되어 운영 체제와 같은 감독 소프트웨어가 MT를 지원하기 위해 더 큰 변경을 겪어야 한다는 것이다. 구현된 MT의 한 유형은 시간적 멀티스레딩으로, 외부 메모리에서 데이터가 반환되기를 기다리며 스톨될 때까지 하나의 스레드가 실행된다. 이 방식에서 CPU는 실행 준비가 된 다른 스레드로 빠르게 컨텍스트 스위칭하며, 스위칭은 종종 울트라SPARC T1과 같이 한 CPU 클럭 사이클 내에서 이루어진다. 다른 유형의 MT는 동시 멀티스레딩으로, 여러 스레드의 명령어가 한 CPU 클럭 사이클 내에서 병렬로 실행된다.
1970년대부터 2000년대 초반까지 수십 년 동안 고성능 범용 CPU 설계의 초점은 주로 파이프라이닝, 캐시, 슈퍼스칼라 실행, 비순차적 실행 등과 같은 기술을 통해 높은 ILP를 달성하는 데 있었다. 이러한 추세는 펜티엄 4와 같은 크고 전력을 많이 소비하는 CPU로 절정을 이루었다. 2000년대 초반에는 CPU 작동 주파수와 주 메모리 작동 주파수 간의 격차 확대와 더불어 더욱 난해한 ILP 기술로 인한 CPU 전력 소모 증가로 인해 CPU 설계자들은 ILP 기술을 통한 더 높은 성능 달성에서 좌절을 겪었다.
그 후 CPU 설계자들은 트랜잭션 처리와 같은 상업용 컴퓨팅 시장에서 아이디어를 빌려왔다. 이러한 시장에서는 여러 프로그램의 총체적 성능, 즉 처리량 컴퓨팅이 단일 스레드 또는 프로세스의 성능보다 더 중요했다.
이러한 강조점의 역전은 듀얼 및 그 이상의 코어 프로세서 설계의 확산과 특히 인텔의 덜 슈퍼스칼라적인 P6 아키텍처와 유사한 새로운 설계에서 입증된다. 여러 프로세서 제품군의 최신 설계는 엑스박스 360의 트리플 코어 파워PC 설계와 플레이스테이션 3의 7코어 셀 마이크로프로세서와 같은 비디오 게임 콘솔 CPU를 포함하여 칩 수준 다중 처리를 특징으로 한다.
덜 흔하지만 점점 더 중요해지는 프로세서(및 실제로 일반 컴퓨팅) 패러다임은 데이터 병렬성을 다룬다. 앞서 논의된 프로세서들은 모두 어떤 종류의 스칼라 장치로 언급된다. 이름에서 알 수 있듯이 벡터 프로세서는 하나의 명령어 컨텍스트에서 여러 데이터 조각을 처리한다. 이는 각 명령어마다 하나의 데이터 조각을 처리하는 스칼라 프로세서와 대조된다. 플린 분류를 사용하여, 이러한 두 가지 데이터 처리 방식은 일반적으로 단일 명령어 스트림, 다중 데이터 스트림(SIMD) 및 단일 명령어 스트림, 단일 데이터 스트림(SISD)이라고 각각 불린다. 데이터 벡터를 처리하는 프로세서를 만드는 데 엄청난 유용성이 있는 이유는 대량의 데이터 세트에 대해 동일한 연산(예: 합계 또는 스칼라곱)을 수행해야 하는 경향이 있는 작업을 최적화하는 데 있다. 이러한 유형의 작업의 일부 고전적인 예로는 멀티미디어 애플리케이션(이미지, 비디오 및 사운드)뿐만 아니라 많은 유형의 과학 및 엔지니어링 작업이 있다. 스칼라 프로세서는 데이터 세트의 각 명령어와 값에 대한 가져오기, 디코딩 및 실행의 전체 프로세스를 완료해야 하는 반면, 벡터 프로세서는 하나의 명령으로 비교적 큰 데이터 세트에 대해 단일 연산을 수행할 수 있다. 이는 애플리케이션이 많은 단계를 필요로 하고 하나의 연산을 큰 데이터 세트에 적용하는 경향이 있을 때만 가능하다.
크레이-1과 같은 대부분의 초기 벡터 프로세서는 거의 전적으로 과학 연구 및 암호학 애플리케이션과 관련되어 있었다. 그러나 멀티미디어가 주로 디지털 미디어로 전환되면서 범용 프로세서에서 어떤 형태의 SIMD가 필요해졌다. 부동소수점 장치가 범용 프로세서에서 흔해지기 시작한 직후, SIMD 실행 장치에 대한 사양과 구현도 1990년대 중반에 범용 프로세서에 나타나기 시작했다. HP의 멀티미디어 가속 확장(MAX) 및 인텔의 MMX와 같은 이러한 초기 SIMD 사양 중 일부는 정수 전용이었다. 이는 일부 소프트웨어 개발자에게 상당한 장애물이 되었는데, SIMD의 이점을 누리는 많은 애플리케이션이 주로 부동소수점 숫자를 다루기 때문이었다. 점진적으로 개발자들은 이러한 초기 설계를 개선하고 재구성하여 현재의 일반적인 SIMD 사양 중 일부를 만들었으며, 이는 일반적으로 하나의 명령어 집합과 관련된다. 주목할 만한 현대적 예로는 인텔의 스트리밍 SIMD 확장(SSE)과 파워PC 관련 AltiVec(VMX로도 알려짐)이 있다.
많은 현대 아키텍처(임베디드 아키텍처 포함)는 종종 하드웨어 성능 카운터(HPC)를 포함하여 실행 중인 소프트웨어 메트릭의 저수준(명령어 수준) 수집, 벤치마킹, 디버깅 또는 분석을 가능하게 한다. HPC는 또한 반환 지향형 프로그래밍(ROP) 또는 시그레턴 지향 프로그래밍(sigreturn-oriented programming, SROP) 익스플로잇 등과 같은 소프트웨어의 비정상적이거나 의심스러운 활동을 발견하고 분석하는 데 사용될 수 있다. 이는 일반적으로 소프트웨어 보안 팀에서 악성 바이너리 프로그램을 평가하고 찾는 데 사용된다.
많은 주요 벤더(예: IBM, 인텔, AMD, Arm)는 CPU의 하드웨어 레지스터에서 데이터를 수집하여 메트릭을 얻는 데 사용할 수 있는 소프트웨어 인터페이스(일반적으로 C/C++로 작성됨)를 제공한다. 운영 체제 벤더는 또한 `perf`(리눅스)와 같은 소프트웨어를 제공하여 실행 중인 커널 및 애플리케이션의 CPU 이벤트를 기록하고, 벤치마킹하거나, 트레이싱한다.
하드웨어 카운터는 CPU의 핵심 요소(기능 단위, 캐시, 주기억장치 등)와 관련된 포괄적인 성능 메트릭을 수집하는 데 낮은 오버헤드를 제공하는 방법으로, 소프트웨어 프로파일러에 비해 상당한 이점이 있다. 또한, 일반적으로 프로그램의 기본 소스 코드를 수정할 필요가 없다. 하드웨어 설계는 아키텍처마다 다르기 때문에 하드웨어 카운터의 특정 유형과 해석도 달라진다.