RISC / CISC 명령을 실행하는 데 몇 개의 클럭 사이클이 필요합니까?


13

Harris와 Harris의 Digital Design and Computer Architecture 에 따르면 다음과 같은 몇 가지 방법으로 MIPS 프로세서를 구현할 수 있습니다.

단일주기 마이크로 아키텍처가 한 사이클 전체에서 명령을 실행한다. (...)

멀티 사이클 마이크로 아키텍처 짧은주기의 시리즈에서 실행 지침. (...)

파이프 라인 마이크로 아키텍처는 단일 사이클 마이크로 아키텍처에 파이프 라이닝 적용됩니다.

아키텍처는 종종 RISC 또는 CISC로 분류됩니다. 에서 RISC 대 CISC의 :

RISC 프로세서는 한 클록 사이클 내에서 실행될 수있는 간단한 명령 만 사용합니다.

MIPS는 RISC 아키텍처이기 때문에 위의 정의로 혼란스러워서 그들 사이에 모순이 없는지 궁금합니다. 더 구체적으로:

  1. RISC 명령어를 더 짧은주기 (Fetch, Decode, ...)로 분할 할 수 있다면 전체 명령어를 실행하는 데 하나의 클럭 주기만 걸린다는 것을 어떻게 알 수 있습니까? 단계 를 실행하는 데 하나의 클럭 사이클이 필요하지 않습니까?
  2. 그것은 않습니다 정말 하나 RISC 명령을 실행 한 클럭 사이클을? 예를 들어, 캐시 미스가 발생하고 프로세서가 느린 DRAM을 기다려야하는 경우 어떻게됩니까? 이것이 명령 실행을 상당히 연장시키지 않아야합니까?
  3. 하나의 명령주기는 정확히 무엇입니까? 하나의 명령이 완료되는 데 시간이 걸립니까?
  4. 하나의 CISC 명령이 클럭 / 명령주기에 얼마나 걸립니까?

2
보통 하나 이상 :-).
Russell McMahon

답변:


22

RISC와 CISC의 실질적인 정의는 너무 불분명하고 희미 해 졌으므로 이제는 거의 의미가 없습니다. 이제 CISC 아키텍처에는보다 강력한 개별 명령어 (예 : DIV 등)가 포함 된보다 풍부한 명령어 세트가 있고 RISC 명령어 세트는 뼈가 빠르고 빠르다는 점에서 "철학"에 대해 더 많이 생각하는 것이 가장 좋습니다. 복잡한 연산을 구현하기 위해 컴파일러에 맡깁니다. 사실상 x86과 같은 CISC 명령어 세트는 인텔 및 AMD 칩 모두에서 내부 명령어로 변환되며 RISC 프로세서와 같이 더 많이 구현됩니다. 질문에 대답하려면 :

  1. 최초의 아카데믹 RISC 프로세서 (그리고 아마도 최초의 상용 버전이라고 생각합니다)는 실제로 페치 및 디코딩을 포함하여 사이클 당 하나의 명령을 실행했습니다. 각 단계의 작업이 단순하고 잘 정의되어있어 데이터 경로가 매우 깨끗했기 때문에 가능했습니다. (여기서 트레이드 오프는 매우 간단한 명령 만 구현할 수 있습니다). 현실에 부딪히면 상황이 흐려졌습니다. 파이프 라이닝 및 슈퍼 스칼라 아키텍처와 같은 것은 간단한 RISC / CISC 이분법을 불가능하게합니다.

  2. 원래 RISC 칩은 사이클 당 하나의 명령을 실행하려고 시도했으며 레지스터 파일에서 데이터를 사용할 수있는 경우 가능했습니다. 물론 프로세서가 DRAM으로 이동해야하는 경우 (많은) 시간이 더 걸립니다. RISC는주기 당 명령을 "시도"하는 것입니다.

  3. 하나의 명령주기는 페치 사이에 걸리는 시간입니다.

  4. In은 명령 및 명령 세트 아키텍처에 따라 크게 다릅니다. CISC 아키텍처에서도 일부 명령은 매우 빠르게 실행될 수 있습니다 (예 : 왼쪽 또는 오른쪽으로 이동). 일부는 매우 느리게 실행되었습니다 (10 초주기 이상). VAX 아키텍처 (아마도 CISC 철학의 정점)에는 실제로 복잡한 지침이있었습니다. 또한 CISC 아키텍처는 RISC 아키텍처보다 어셈블리에서 프로그래밍하기가 쉽습니다 (고급 언어와 거의 비슷하기 때문에).


5

짧은 대답

  1. 명령을 디코딩하고 실행하는 단계는 이전 명령의 다음 단계와 동시에 실행됩니다. 이 기술을 파이프 라이닝이라고합니다. 아래의 RISC 프로세서를 참조하십시오 .

  2. 단일 문제 RISC 아키텍처는 일반적으로 레지스터 등록이 아닌 메모리에 도달하는로드 / 스토어 작업에 걸리는 대기 상태 및 시간으로 인해주기 당 하나의 명령보다 약간 작습니다. 지연 슬롯은이 시간 중 일부를 되돌릴 수있는 아키텍처 후크를 제공합니다. 아래의 RISC 프로세서를 참조하십시오 .

  3. 명령주기는 명령을 실행하는 데 필요한 시간입니다. 이는 아키텍처 및 경우에 따라 지침에 따라 다릅니다. 예를 들어, MIPS R2000 / 3000과 같은 명령에 대한 대부분의 명령은 한주기를 사용합니다. 지연 슬롯은 지연 슬롯에서 다른 것 (아마 NOP 일 수도 있음)을 실행할 수 있음을 의미하지만 메모리 액세스 (로드 / 저장, 분기)와 관련된 명령어는 두 번 이상의주기를 필요로합니다. 파이프 라인되지 않은 아키텍처는 여러 클럭 사이클의 명령 사이클을 가질 수 있으며 종종 주소 지정 모드에 따라 다릅니다. 아래의 RISC 프로세서, 기존 CISC 아키텍처하드 와이어드 아키텍처를 참조하십시오.

    다중 이슈 디자인은 둘 이상의 명령어를 병렬로 실행하여이 개념을 다소 흐리게 만들 수 있습니다.

  4. 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 칩의 실제 처리량은 메모리 액세스 패턴의 효율성에 크게 좌우 될 수 있습니다. 전체 도서는이를위한 코드 최적화에 대해 작성되었으며 그 자체로는 복잡한 주제입니다.


3

학생들에게 단순화입니다.

모든 사소한 프로세서는 파이프 라인입니다. 한쪽 끝에 프리 페치 유닛 삽질 명령, 실제 작업을 수행하는 중간에 다수의 실행 유닛 , 레지스터에 쓰기 또는 메모리가 완료된 후 완료된 명령을 선언하는 책임 유닛이 있습니다. 여러 실행 단위 (예 : 정수 ALU, 부동 소수점 ALU 및 벡터 단위)가있는 경우 클록주기 당 여러 명령을 발행 할 수 있습니다 ( "레 티어"라고도 함). CPU는 어떻게 사이클 당 하나 이상의 명령을 전달할 수 있습니까? 이것에 대해 더 자세히 설명합니다.

당신이 말했듯이, 캐시 미스 지연이 있다면 어떨까요? 인텔 하이퍼 스레딩은 이에 대한 새로운 솔루션입니다. 2 개의 많은 CPU 상태 레지스터, 1 개의 많은 제어 로직 및 발행 단위. 하나의 가상 CPU가 정지 되 자마자 다른 가상 CPU로 교체하십시오. (이것은 총체적으로 단순화 된 것입니다)

결과적으로 최신 CPU 매뉴얼은 더 모호한 명령 타이밍을 제공하며, 예를 들어 하드웨어를 사용하지 않아야하는 하드웨어에서 실시간으로 비디오출력 하려는 경우 사이클 정확도 타이밍 코드를 작성하는 것이 훨씬 어렵 습니다 .

( "CISC 명령 하나가 클럭 / 명령주기에서 얼마나 오래 걸립니까?"에 대한 구체적인 대답은 "제조업체 참조 설명서를보고 명령 당 타이밍을 갖습니다"입니다)


0

다른 사람들은 좋은 자료를 많이 작성 했으므로 대답을 짧게 유지할 것입니다 : 옛날에는 (1980 년대), 오늘의 8 비트 프로세서 (6800, 6502, Z80, 6809 및 기타)가 고려되었습니다. CISC. 일부 명령어는 2 클럭 사이클에서 실행될 수 있지만 프로세서 상태 레지스터의 플래그 비트 설정 / 삭제와 같은 간단한 인스톨입니다. 다른 명령어는 실행하는 데 2-6에서 최대 9 클럭 사이클까지 걸릴 수 있습니다. 이 프로세서에는 상당히 강력한 명령어가 있었고 Z80에는 메모리의 일련의 바이트에 동일한 값을 쓰는 메모리 블록 지우기 명령어가 있었으며 단일 명령어에서 큰 블록을 효과적으로 지우고 몇 개의 레지스터를 설정하고 실행합니다. LDIR 명령어 (로드, 증분 및 반복).

6502 프로세서 (메모리에서)에는 56 개의 명령이 있지만 13 개의 주소 지정 모드는 강력한 명령 세트를 생성합니다.

RISC는 오래 전부터 다른 접근 방식을 채택했으며 단일 클록 사이클에서 모두 실행되는 몇 가지 명령을 가지고 있습니다. 명령이 수행하는 작업이 간단하여 더 많은 메모리가 필요하기 때문에 프로그램이 더 길고 더 많은 메모리를 차지하는 경향이 있습니다.

RISC 아키텍처의 첫 번째 시도는 트랜스 포터 또는 Acorn Risc 프로세서 중 하나입니까?


아마도 첫 번째 파이프 라인 된 RISC 유형 아키텍처는 Seymour Cray가 디자인 한 CDC 6600이었습니다. RISC라는 용어가 널리 사용되기까지는 수십 년이 걸렸습니다. MIPS, ARM 및 기타 몇 가지 RISC 마이크로 프로세서 설계는 1980 년대 중반 경에이 칩을 사용하는 최초의 상용 하드웨어로 1980-1985 년으로 거슬러 올라갑니다.
ConcernedOfTunbridgeWells

개별 트랜스 퍼터 칩은 매우 빠르지 만 일반적으로 RISC 칩과 연결되는 것과 같은 유형의 아키텍처는 아니 었습니다. en.wikipedia.org/wiki/Transputer#Architecture
ConcernedOfTunbridgeWells

정전기 방지 케이스에는 역사적인 마이크로 프로세서 컬렉션의 일부인 트랜스 퓨터가 몇 개 있습니다. 그것들을 사용하지 않았으며, 그 당시 실험을 해보니 많은 재미를 보았을 것입니다.
Dean

@ConcernedOfTunbridgeWells CDC 6600 명령 세트를 살펴 보았습니다. 이 디자인은 RISC의 일부 원리를 구현하고 예측하는 것처럼 보이지만 부동 소수점 나누기 명령은 실행하는 데 29주기가 걸립니다! 그리고 나누기 명령을 포함시키는 것은 전형적인 RISC 원칙에 위배되지만 매우 흥미로운 의견에 감사드립니다!
crgrace

주요 RISC-ish 속성은 파이프 라인 된 명령 페치 / 디코딩 / 실행 메커니즘 및로드 저장소 아키텍처입니다 (즉, 주소를 계산하기 위해 암시 적 메모리 액세스를 갖는 주소 지정 모드 없음). 실제로 일부 RISC 명령어 세트 (예 : IBM POWER)는 실제로 상당히 크지 만 일관된 실행 시간을 보장하기 위해로드 / 스토어 접근 방식을 사용합니다.
ConcernedOfTunbridgeWells
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.