짧은 대답
명령을 디코딩하고 실행하는 단계는 이전 명령의 다음 단계와 동시에 실행됩니다. 이 기술을 파이프 라이닝이라고합니다. 아래의 RISC 프로세서를 참조하십시오 .
단일 문제 RISC 아키텍처는 일반적으로 레지스터 등록이 아닌 메모리에 도달하는로드 / 스토어 작업에 걸리는 대기 상태 및 시간으로 인해주기 당 하나의 명령보다 약간 작습니다. 지연 슬롯은이 시간 중 일부를 되돌릴 수있는 아키텍처 후크를 제공합니다. 아래의 RISC 프로세서를 참조하십시오 .
명령주기는 명령을 실행하는 데 필요한 시간입니다. 이는 아키텍처 및 경우에 따라 지침에 따라 다릅니다. 예를 들어, MIPS R2000 / 3000과 같은 명령에 대한 대부분의 명령은 한주기를 사용합니다. 지연 슬롯은 지연 슬롯에서 다른 것 (아마 NOP 일 수도 있음)을 실행할 수 있음을 의미하지만 메모리 액세스 (로드 / 저장, 분기)와 관련된 명령어는 두 번 이상의주기를 필요로합니다. 파이프 라인되지 않은 아키텍처는 여러 클럭 사이클의 명령 사이클을 가질 수 있으며 종종 주소 지정 모드에 따라 다릅니다. 아래의 RISC 프로세서, 기존 CISC 아키텍처 및 하드 와이어드 아키텍처를 참조하십시오.
다중 이슈 디자인은 둘 이상의 명령어를 병렬로 실행하여이 개념을 다소 흐리게 만들 수 있습니다.
CISC 프로세서에는 다양한 시간이 걸리는 명령이있을 수 있습니다. 정확한 클럭주기 수는 아키텍처와 명령어에 따라 다릅니다. CISC ISA에서 수행되는 다양한 클록주기는 파이프 라인이 많은 아키텍처에 구축하기 어려운 이유 중 하나입니다. 아래의 전통적인 CISC 아키텍처를 참조하십시오 .
더 긴 대답
단일 문제 MIPS, SPARC 또는 기타 CPU의 경우, 모든 '첫 번째 근사치'명령은 '지연 슬롯'으로 알려진 것을 가질 수 있지만 한주기에 문제가 발생합니다.
RISC 프로세서
이러한 맥락에서, 단일 이슈 CPU는 CPU가 최신 CPU와 같은 방식으로 즉석 종속성 분석 및 명령어의 병렬 발행을 수행하지 않는 CPU입니다. 그들이 메모에서 읽은 순서. 이것에 대해서는 나중에 더 설명하겠습니다.
대부분의 구형 RISC 프로세서는 단일 이슈 디자인이며 이러한 유형은 여전히 임베디드 시스템에서 널리 사용됩니다. 32 비트 단일 발행물 정수 RISC 코어는 약 25,000-30,000 게이트로 구현 될 수 있으므로이 유형의 CPU 코어는 전력 소비가 매우 적고 설치 공간이 매우 작습니다. 따라서 SOC (system-on-chip) 제품에 쉽고 저렴하게 통합 할 수 있습니다.
RISC CPU 설계는 파이프 라인으로 구성되어 있습니다. 명령 처리는 여러 단계로 수행되며 각 명령은 클럭주기마다 파이프 라인을 통해 다음 단계로 전달됩니다. 대부분의 경우 단일 문제 파이프 라인 된 CPU는 클럭 사이클 당 하나의 명령에 가까운 것을 실행합니다.
일부 아키텍처에는 메모리 액세스에 의한 추가주기가 코드에 표시되는 메모리에서 분기 또는로드 / 저장과 같은 명령어가 있습니다.
예를 들어, SPARC V7 / V8 설계에서 분기 자체가 발생하기 전에 실제로 분기 이후의 다음 명령어가 실행됩니다. 일반적으로 분기 후 NOP를 슬롯에 넣지 만 유용한 것을 찾을 수 있으면 다른 명령을 넣을 수 있습니다.
MIPS R2000 / R3000 아키텍처는로드 / 저장 명령어에서 비슷한 지연 슬롯을 가졌습니다. 메모리에서 값을로드 한 경우 다른 사이클의 레지스터에 실제로 표시되지 않습니다. 방금 발행 한로드 조작에 의존하지 않는 유용한 작업을 찾을 수 있으면 슬롯에 NOP를 넣거나 다른 작업을 수행 할 수 있습니다.
메모리가 CPU보다 느리면 (대부분의 경우) 메모리 액세스시 추가 대기 상태 가 될 수 있습니다 . 대기 상태는 메모리 액세스가 완료 될 때까지 하나 이상의 클럭주기 동안 CPU를 정지시킵니다. 실제로, 이러한 대기 상태와 메모리 액세스를위한 추가 시간은 단일 발행 CPU 설계가 클럭주기 당 평균 하나보다 약간 작은 명령을 의미합니다. 지연 슬롯은 메모리 작업이 진행되는 동안 다른 명령어를 실행하여 코드를 최적화 할 수있는 기회를 제공합니다.
전통적인 CISC 프로세서
CISC 프로세서 는 다양한 시간이 걸리는 명령을 가질 수있는 설계였습니다. 종종 RISC CPU의 소프트웨어에서 수행해야하는 하드웨어에서 직접 구현되는 더 복잡한 명령이있었습니다.
M68K 및 인텔 386까지의 대부분의 메인 프레임 아키텍처와 거의 모든 PC 설계는 기존의 마이크로 코드 CISC CPU였습니다. 이러한 설계는 클럭 당 속도가 느리고 RISC CPU보다 많은 게이트를 사용했습니다.
마이크로 코드
마이크로 코딩 된 아키텍처 (MOS 6502) 의 예는 여기서 에뮬레이션으로 볼 수 있습니다 . 마이크로 코드는 이미지 상단에서 볼 수 있습니다.
마이크로 코드는 명령을 실행하기 위해 CPU 내에서 활성화 된 데이터 흐름 및 동작을 제어합니다. 마이크로 코드의 단계를 반복하여 CPU의 일부를 활성화하거나 ALU를 통해 데이터를 이동하거나 다른 단계를 수행 할 수 있습니다. CPU에서 재사용 가능한 구성 요소는 명령을 실행하기 위해 여러 클럭 사이클에 걸쳐 조정될 수 있습니다. 6502의 경우 일부 파이프 라인 동작은 마이크로 코드에 의해 실행될 수도 있습니다.
마이크로 코딩 된 설계는 명령을 완료하기 위해 여러 클럭 사이클을 잠재적으로 소비하면서 하드 와이어 칩보다 적은 실리콘을 사용했습니다. 설계에 따라 이러한 CPU는 명령 당 시간이 달라집니다.
유선 아키텍처
고정 배선 설계 (마이크로 코드와 상호 배타적 일 필요는 없음)는 동 기적으로 명령을 실행하거나 여러 클록 사이클에서 무언가를 수행하기 위해 자체 조정자를 가질 수 있습니다. 그것들은 일반적으로 더 많은 전용 하드웨어를 희생하여 더 빠르며 따라서 동등한 기능의 마이크로 코드 설계보다 구현 비용이 더 높습니다.
대표적인 예로 Amdahl 470/6 CPU 가 있는데, 이는 특정 IBM System / 370 모델에서 CPU를 대체하는 대체품입니다. Amdahl CPU는 IBM의 370 개 CPU가 마이크로 코드에 크게 기반을 둔 당시의 유선 설계였습니다. Amdahl CPU는 교체 한 IBM CPU보다 약 3 배 빠릅니다.
말할 것도없이, IBM은 즐겁지 않았고, 이로 인해 몇 년 전에 동의 명령이 만료 될 때까지 IBM이 메인 프레임 아키텍처를 열도록하는 법원 싸움이 발생했습니다.
일반적으로이 유형의 고정 배선 설계는 다양한 명령 타이밍 및 형식이 RISC 설계만큼 파이프 라이닝의 범위를 허용하지 않았기 때문에 여전히 RISC CPU만큼 클록 클럭이 빠르지 않았습니다.
다중 문제 설계
대부분의 최신 CPU는 단일 스레드 내에서 한 번에 둘 이상의 명령을 처리 할 수 있는 여러 문제 아키텍처 입니다. 칩은 들어오는 명령 스트림에 대해 동적 종속성 분석을 수행하고 이전 계산 결과에 의존하지 않는 명령을 병렬로 실행할 수 있습니다.
이러한 칩의 처리량은 코드에서 얼마나 많은 병렬 처리를 달성 할 수 있는지에 달려 있지만 대부분의 최신 CPU는 대부분의 코드에서주기 당 여러 명령을 평균합니다.
최신 Intel 및 기타 x86 / X64 ISA CPU에는 구식 CISC 명령어 세트를 파이프 라인 된 RISC 스타일의 다중 문제 코어를 통해 제공 될 수있는 마이크로 명령어 로 해석하는 계층 이 있습니다. 이는 파이프 라이닝 용으로 설계된 ISA (예 : ARM 또는 PowerPC와 같은 RISC 아키텍처)가있는 CPU에는없는 오버 헤드를 추가합니다.
VLIW 디자인
Intel Itanium 이 가장 잘 알려진 VLIW 디자인 은 주류 아키텍처로 사용되지 않았지만 IIRC에는 이러한 유형의 디자인을 사용하는 많은 DSP 아키텍처가 있습니다. VLIW 디자인은 동시에 발행 된 둘 이상의 명령을 포함하는 명령 단어로 여러 문제를 명시 적으로 만듭니다.
이들은 우수한 최적화 컴파일러에 의존했으며, 병렬화의 종속성과 기회를 식별하여 각 명령어에서 사용 가능한 여러 슬롯으로 명령어를 드롭합니다.
VLIW 아키텍처는 매트릭스 / 배열 연산이 광범위한 병렬 처리의 기회를 제공하는 경향이 있기 때문에 수치 적용에 매우 적합합니다. Itanium은 한동안 슈퍼 컴퓨팅 애플리케이션 분야에서 틈새 시장을 가지고 있었고, 이러한 유형의 ISA를 사용하여 하나 이상의 슈퍼 컴퓨터 아키텍처 인 Multiflow TRACE 가 생성되었습니다.
메모리와 캐싱
최신 CPU는 메모리보다 훨씬 빠르므로 메모리에서 직접 읽으면 메모리 액세스가 완료 될 때까지 CPU를 차단하는 수백 가지 대기 상태가 생성 될 수 있습니다. 이제 여러 계층에서 수행되는 캐싱은 캐시에서 가장 최근에 사용한 메모리 위치를 유지합니다. CPU는 일반적으로 루프에서 코드를 실행하는 데 많은 시간을 소비하므로 최근에 사용한 메모리 위치를 재사용 할 때 적중률이 높아집니다. 이 속성을 '참조의 지역성'이라고합니다.
참조의 지역성을 확보하면 CPU는 최적의 속도에 가깝게 작동 할 수 있습니다. 캐시가 다음 레벨로 내려 가면 많은 대기 상태가 발생합니다. 메인 메모리로의 캐시 누락은 수백을 초래할 수 있습니다.
따라서 CPU 칩의 실제 처리량은 메모리 액세스 패턴의 효율성에 크게 좌우 될 수 있습니다. 전체 도서는이를위한 코드 최적화에 대해 작성되었으며 그 자체로는 복잡한 주제입니다.