KR20100007972A - 명령 제어 장치 및 명령 제어 방법 - Google Patents

명령 제어 장치 및 명령 제어 방법 Download PDF

Info

Publication number
KR20100007972A
KR20100007972A KR1020097025599A KR20097025599A KR20100007972A KR 20100007972 A KR20100007972 A KR 20100007972A KR 1020097025599 A KR1020097025599 A KR 1020097025599A KR 20097025599 A KR20097025599 A KR 20097025599A KR 20100007972 A KR20100007972 A KR 20100007972A
Authority
KR
South Korea
Prior art keywords
instruction
command
instructions
thread
unit
Prior art date
Application number
KR1020097025599A
Other languages
English (en)
Other versions
KR101122180B1 (ko
Inventor
도시오 요시다
Original Assignee
후지쯔 가부시끼가이샤
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 후지쯔 가부시끼가이샤 filed Critical 후지쯔 가부시끼가이샤
Publication of KR20100007972A publication Critical patent/KR20100007972A/ko
Application granted granted Critical
Publication of KR101122180B1 publication Critical patent/KR101122180B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)

Abstract

본 발명은 처리를 나타내는 명령의 연속으로 이루어지는 스레드를 복수 실행하는 SMT 기능을 갖는 CPU(10)에서, 복수의 스레드의 명령이 나타나 있는 처리를 디코드하는 디코드부(109)와, 스레드로부터 명령을 입수하여 유지하고, 유지된 명령을, 스레드 중에서의 순서에 따라 디코드부(109)에 투입하는 명령 버퍼(104)와, 디코드부(109)에서 해독된 명령의 처리를 실행하는 실행 파이프라인(220)을 구비하고, 디코드부(109)가, 상기한 명령의 디코드에 있어서, 그 명령이 실행 가능한 조건이 갖추어져 있는지의 여부를 확인하고, 조건이 갖추어져 있지 않은 명령 이후의, 명령 버퍼(104)에서 유지되어 있는 명령에 대해서 이 디코드부(109)에 대하여 재투입을 요구하는 것으로 하였다.
Figure P1020097025599
명령, 스레드, SMT, 디코드, 버퍼, 파이프라인

Description

명령 제어 장치 및 명령 제어 방법{INSTRUCTION CONTROL DEVICE AND INSTRUCTION CONTROL METHOD}
본 발명은 처리를 나타내는 명령의 연속으로 이루어지는 스레드(thread)를 복수 동시에 실행하는 동시 멀티 스레딩 기능을 구비한 명령 제어 장치 및 명령 제어 방법에 관한 것이다.
처리를 나타내는 명령은, CPU로 대표되는 명령 제어 장치의 내부에서, 명령의 취입(페치(fetch)), 명령의 해독(디코드), 명령의 실행, 실행 결과의 확정(커밋(commit)) 등과 같은 일련의 단계를 거쳐 처리된다. 종래, 명령 제어 장치에서의 이러한 각 단계의 처리를 고속화하기 위하여, 파이프라인이라고 불리는 처리 기구가 있다. 파이프라인에서는, 페치나 디코드 등과 같은 각 단계의 처리가, 각각 독립된 소(小)기구로 행해진다. 이에 의해, 예를 들면 어떤 명령의 실행과 동시 병행으로 다른 명령을 실행하는 것 등이 가능해져서, 명령 제어 장치에서의 처리가 고속화된다.
최근에는, 이러한 파이프라인을 복수 구비하고, 한층 처리의 고속화가 도모된 슈퍼스칼라(superscalar)라고 불리는 처리 기구가 일반화되어 있다. 그리고, 이 슈퍼스칼라에서의 처리의 한층 더한 고속화를 실현하는 기능으로서, 아웃·오브 ·오더 실행(out-of-order execution)이라고 불리는 기능이 있다.
도 1은 슈퍼스칼라에서의 아웃·오브·오더 실행을 나타내는 개념도이다.
이 도 1에는 슈퍼스칼라에서의 아웃·오브·오더 실행의 일례(一例)가 나타나 있다.
도 1의 예에서는 4개의 명령이 처리되고 있다. 각 명령은 페치(스텝 S501), 디코드(스텝 S502), 실행(스텝 S503), 및 커밋(스텝 S504)이라는 4단계를 거쳐 처리된다. 여기서, 페치(스텝 S501), 디코드(스텝 S502), 및 커밋(스텝 S504)은 4개의 명령에 대하여, 프로그램 상에서의 처리순으로 처리를 실행하는 인·오더 실행(in-order execution)에 의해 행해진다. 그리고, 명령의 실행(스텝 S503)이 프로그램 상에서의 처리순에 따르지 않고 실행하는 아웃·오브·오더 실행에 의해 행해진다.
4개의 명령은 프로그램 상에서의 처리순으로 페치(스텝 S501)되어 디코드(스텝 S502)된 후, 그 처리순에는 따르지 않고, 실행(스텝 S501)에 필요한 계산 데이터 등(오퍼랜드(operand))이 얻어진 것으로부터 실행(스텝 S503)으로 이행된다. 도 1의 열에서는, 4개의 명령에 대해서 오퍼랜드가 동시에 얻어지고, 각 명령이 서로 동시에 시작되고 있다.
이와 같이, 아웃·오브·오더 실행에 의하면, 복수의 명령을 프로그램 상에서의 처리순에 따르지 않고 동시 병행으로 처리할 수 있으므로, 명령 제어 장치에서의 처리가 고속화된다.
실행(스텝 S503) 후에는, 4개의 명령에 관한 커밋(스텝 S504)이 인·오더 실 행에 의해 프로그램 상에서의 처리순으로 행해진다. 이 처리순에서의 선행 명령보다 앞서 실행(스텝 S503)이 종료한 후속 명령은, 선행 명령의 실행(스텝 S503)이 종료할 때까지 커밋 대기의 상태로 된다. 도 1의 예에서는, 4개의 명령에 대한 실행(스텝 S503)이 4단(段)으로 나뉘어 도시되어 있고, 도면 중에 상단의 것일수록 프로그램 상에서의 처리순이 빠르다. 이 도 1의 예에서는, 최상단에 도시되어 처리순이 가장 빠른 명령의 실행(스텝 S503)에 가장 시간이 걸리기 때문에, 다른 3개의 명령에 대해서는 커밋 대기로 되어 있다.
그런데, 최근, 명령 제어 장치에서 처리되는 프로그램 대부분은, 일련의 복수의 명령으로 이루어지고 서로 동시 병행으로 실행하는 것이 가능한 처리 단위(스레드)를 복수 조합하여 구성되어 있다.
명령 제어 장치의 대부분은 명령을 실행하기 위하여 복수의 연산기를 구비하고 있다. 그리고, 명령 실행시에는, 대부분의 경우, 각 사이클에서 그들 복수의 연산기 중 일부밖에 사용되지 않기 때문에, 연산기의 가동률에는 상당한 여유가 있다.
그래서, 연산기의 가동률을 향상시키는 기술로서, 각 사이클에서, 어떤 스레드에 대해서는 사용하지 않게 된 연산기를 다른 스레드에 할당해서 복수의 스레드의 명령을 동시 병행으로 처리하는 동시 멀티 스레딩(SMT : Simultaneous Multi Threading) 기능이라는 기술이 제안되어 있다.
도 2는 SMT 기능의 일례를 개념적으로 나타내는 도면이다.
이 도 2에서는, 스레드 A 및 스레드 B라는 2종류의 스레드에 속하는 명령이 SMT 기능으로 실행되는 형태가 나타나 있다. 도 2에서의 종축 방향으로 나열되는 4개의 셀 각각은 명령 제어 장치에서 명령의 실행을 행하는 연산기를 나타내고 있고, 각 셀에 기재되어 있는 「A」 및 「B」의 문자는 각각 그 셀에 대응하는 연산기에 의해 실행되는 명령이 속하는 스레드 종류를 나타내고 있다.
또한, 횡축에는 명령 제어 장치에서의 클록 사이클이 나타나 있다. 도 2의 예에서는, 제 1 사이클(스텝 S511)에서는, 상단의 2개의 연산기에 의해 스레드 A의 명령이 실행되고 하단의 2개의 연산기에 의해 스레드 B의 명령이 실행되고 있다. 제 2 사이클(스텝 S512)에서는, 최상단과 최하단의 2개의 연산기에 의해 스레드 A의 명령이 실행되고 중단(中段)의 2개의 연산기에 의해 스레드 B의 명령이 실행되고 있다. 또한, 제 3 사이클(스텝 S513)에서는, 상측의 3개의 연산기에 의해 스레드 A의 명령이 실행되고 최하단의 1개의 연산기에 의해 스레드 B의 명령이 실행되고 있다.
이와 같이, SMT 기능에서는 복수의 스레드의 명령이 각 사이클에 동시 병행으로 실행된다.
도 3은 SMT 기능의 일례를 나타내는 도 2와는 다른 개념도이다.
이 도 3의 예에서는, 스레드 A 및 스레드 B라는 2종류의 스레드에 속하는 명령이 교대로 페치되고 디코드된 후, 실행에 대해서는, 각 명령의 실행에 필요한 오퍼랜드나 연산기가 얻어진 경우에, 도 2에 나타낸 바와 같이 2종류의 스레드간에서 명령의 실행이 동시 병행으로 행해진다. 도 3의 예에서는, 도면 중에 사선으로 나타낸 타이밍(T1)에서, 2종류의 스레드간에 명령의 실행이 동시 병행으로 행해지고 있다.
또한, 커밋에 대해서는, 동일 종류의 스레드간에서는 선행 명령의 커밋이 모두 종료할 때까지 후속 명령의 커밋을 행할 수 없지만, 상이한 종류의 스레드간에서는 선행 명령의 커밋의 종료를 기다리지 않고 후속 명령의 커밋이 행해진다. 도 3의 예에서는, 스레드 A에 대해서 페치된 명령의 커밋의 종료를 기다리지 않고, 스레드 B에 대해서 페치된 명령의 커밋이 행해지고 있다.
이상, 도 2 및 도 3을 참조하여 설명한 바와 같이, SMT 기능에 의하면, 복수 종류의 스레드간에서 명령의 실행을 서로 동시 병행으로 실행할 수 있고, 상이한 종류의 스레드간에서는 선행 명령의 커밋의 종료를 기다리지 않고 후속 명령의 커밋을 행할 수 있으므로, 명령 제어 장치의 처리 효율의 향상이 도모된다.
이러한 SMT 기능을 구비한 명령 제어 장치에서는, 복수 종류의 스레드간에서의 명령의 동시 병행으로의 실행을 가능하게 하기 위하여, 프로그램 상에서 액세스가 지시되는 소위 프로그램 가시(可視)의 구성 요소가 스레드수만큼 구비되어 있다. 한편, 연산기나 디코드부에 대해서는 복수 종류의 스레드간에서 공통으로 사용되는 경우가 많다. 상술한 바와 같이 연산기에 대해서는, 복수의 연산기를 복수 종류의 스레드간에서 나누어 사용하므로, 각 연산기를 스레드수만큼 구비하지 않아도 복수 종류의 스레드간에서의 명령의 동시 병행으로의 실행이 가능하다. 그러나, 디코드부에 대해서는, 회로 구성이 복잡하고 회로 규모가 크기 때문에, 상기한 연산기와는 상이하고 1개밖에 구비할 수 없는 경우가 많다. 이 경우, 디코드부는 복수 종류의 스레드간에서 공통으로 사용되게 되어, 한번에는 1개의 스레드의 명령 을 디코드할 수 있을 뿐이다. 여기서, 명령 중에는, 동일 스레드 중에서 선행 명령과의 동시 실행이 금지된 것이 있다. 이와 같이, 어떠한 요인에 의해 명령의 처리를 실행할 수 없는 상태로 되는 것을 스톨(stall)이라고 부른다. 또한, 그 스톨을 야기한 요인의 것을 스톨 요인이라고 부른다.
종래, 스톨하는 것이 확인된 명령에 대해서는, 필요한 조건이 갖추어져 스톨 요인이 해소될 때까지 디코드부에 그대로 두어진다.
도 4는 싱글 스레딩 타입의 명령 제어 장치에서, 명령의 디코드부에서의 스톨이 발생한 형태를 나타내는 개념도이다.
이 도 4의 예에서는, 명령 페치부(501)에 의한 1회의 페치로 8개의 명령이 명령 버퍼(502)에 취입된다. 명령 버퍼(502)는 디코드 이전의 명령이 8개, 스레드 중의 처리순과 동일한 순서로 유지되는 복수의 엔트리(IBR : Instruction BuffeR)(502a)를 갖고 있다.
명령 버퍼(502)는 IBR(502a)에 저장되어 있는 명령을, 순차적으로 4개, 디코드부(503)에 투입한다. 디코드부(503)는 이들 투입되어 오는 명령이 1개씩 저장되는 4개의 레지스터(IWR : Instruction Word Register)(503a)를 구비하고 있고, 4개의 명령이 순차적으로 각 IWR(503a)에 저장된다. 그리고, 디코드부(503)에서는 이들 저장된 4개의 명령의 디코드가 순차적으로 행해진다. 그리고, 디코드부(503)는 디코드 완료된 4개의 명령을 후단의 실행부로 인도한다. 이 때, 명령 중에, 상기한 바와 같이, 바로는 실행할 수 없고 스톨하는 것이 확인된 명령이 있는 경우에는, 실행부로의 인도는 그 명령 앞까지에서 멈춰 버린다. 도 4의 예에서는, 디코 드된 4개의 명령 중 3번째의 명령에 대해서 스톨하는 것이 확인되고 있고, 실행부로의 인도가 2번째의 명령까지에서 멈춰 있다.
SMT 기능을 갖는 명령 제어 장치에서, 어떤 스레드의 명령이 디코드부에서 스톨하게 되면, 디코드부가 1개의 스레드의 명령으로 점유되게 되어, 다른 스레드의 명령의 디코드를 할 수 없게 된다.
여기서, 단일 스레드의 프로그램을 처리하는 싱글 스레딩 타입의 명령 제어 장치에 대한 것이지만, 스톨하는 것이 확인된 명령을 소정의 메모리 내로 옮겨서 디코드부를 후속 명령에 내어주고, 그 스톨하는 것이 확인된 명령에 대해서는 선행 명령의 실행 결과가 얻어진 후에 실행한다는 기술이 제안되어 있다(예를 들면, 특허문헌 1 참조.). 이 기술에 의하면, 상기한 아웃·오브·오더 실행이 정체없이 행해진다. 그러나, 이 기술을 SMT 기능을 갖는 명령 제어 장치에 적용해도, 스톨하는 것이 확인된 명령과 동일한 스레드의 후속의 명령은, 그 스톨하는 것이 확인된 명령에 대해서 스톨 요인이 해소되어 커밋이 종료할 때까지 커밋 대기로 되어 버리므로, 일시적으로 디코드부의 점유가 회피되어도, 결국은 그 스레드의 명령에 의한 디코드부의 점유가 일어나게 된다.
또한, 1개의 스레드의 명령에 대해서 스톨하는 것이 확인된 경우에, 그 명령을 무효화하여 디코드부를 다른 스레드에 내어주고, 그 명령에 대해서는 스톨이 해소된 후에 바꿔서 페치부터 다시 한다는 기술이 제안되어 있다(예를 들면, 특허문헌 2 참조.).
도 5는 1개의 스레드의 명령에 대해서 스톨하는 것이 확인된 경우에, 그 명 령을 무효화하여 디코드부를 다른 스레드에 내어주는 기술을 나타내는 개념도이다.
이 도 5의 예에서는, 명령 페치부(511)에 의해, 2종류의 스레드의 명령이 8개씩 교대로 명령 버퍼(512)에 취입되고, 명령 버퍼(512)에 의해, 4개씩 교대로 디코드부(513)에 투입된다. 그리고, 디코드부(513)에서의 디코드시에, 어떤 스레드에서의 4개의 명령 중 1개가 스톨하는 것이 확인된 경우에는, 디코드부(513)에서 그 명령과 그 스레드 중에서의 후속의 명령이 무효화된다. 그 결과, 디코드부(513)에서의 점유가 해소되어, 다른 스레드의 명령의 디코드가 가능해진다. 또한, 무효화된 스레드의 명령에 대해서는, 명령 페치부(511)에 의한 취입부터 다시 된다.
특허문헌 1 : 일본국 특개평7-271582호 공보
특허문헌 2 : 일본국 특개2001-356903호 공보
따라서, 상기한 특허문헌 2에 기재된 기술에서는, 스톨하는 것이 확인된 명령에 대해서는 바꿔서 페치부터 다시 하게 되므로, 그 명령에 대해서 일단 행해진 페치가 낭비되게 되어, 명령 제어 장치에서의 처리의 효율이 저하한다는 문제가 있다.
본 발명은 상기 사정을 감안하여, 명령을 효율 좋게 처리할 수 있는 명령 제어 장치 및 명령 제어 방법을 제공하는 것을 목적으로 한다.
발명의 개시
상기 목적을 달성하는 본 발명의 명령 제어 장치는,
복수 명령을 갖는 스레드로부터 명령을 취득하는 명령 페치부와,
상기 취득된 명령을 유지하는 명령 버퍼와,
상기 명령 버퍼로부터 출력된 명령을 유지하여 해독하는 명령 디코드부와,
상기 해독된 명령을 실행하는 명령 실행부와,
상기 명령 버퍼에 유지된 명령을 상기 명령 디코드부에 투입하는 경우에서, 상기 명령 버퍼에 유지된 명령에 선행하는 명령이 상기 명령 실행부를 사용 중일 때에는, 상기 명령 디코드부가 유지하는 명령과 상기 명령 디코드부가 유지하는 명령의 후속 명령을 무효화하는 동시에, 상기 명령 디코드부가 유지하는 명령과 상기 명령 디코드부가 유지하는 명령의 후속 명령을 상기 명령 버퍼에 다시 유지시키는 명령 투입 제어부를 갖는 것을 특징으로 한다.
이 본 발명의 명령 제어 장치에 의하면, 상기 명령 실행부가 선행하는 명령에 의해 사용 중일 때에, 상기 명령 디코드부가 유지하는 명령 이후의 명령이 무효화된다. 이 때문에, 다른 실행 가능한 명령에 상기 명령 디코드부를 내어주는 것이 가능해진다. 또한, 일단 무효화된 명령에 대해서는, 상기 명령 버퍼에 의해 다시 유지되기 때문에, 상기 스레드로부터의 명령의 입수의 수고 등이 낭비되지는 않고 효율적이다. 즉, 이 본 발명의 명령 제어 장치에 의하면, 명령을 효율 좋게 처리할 수 있다.
또한, 본 발명의 명령 제어 장치에 있어서,
「상기 명령 페치부는, 복수의 상기 스레드로부터 명령을 취득하고,
상기 명령 버퍼는, 상기 취득된 복수의 스레드에 포함되는 명령을 유지하고,
상기 명령 디코드부는, 상기 복수의 스레드 중 어느 1개의 스레드에 속하는 명령을 유지하고,
상기 명령 투입 제어부가, 상기 명령 버퍼에 다시 유지시킨 상기 스레드에 속하는 상기 명령 디코드부가 유지하는 명령과 상기 명령 디코드부가 유지하는 명령의 후속 명령을 상기 명령 디코드부에 재투입하는 경우에는, 상기 스레드와는 상이한 스레드에 속하는 명령을 상기 명령 디코드부에 유지하는 것을 특징으로 한다」고 하는 형태는 바람직한 형태이다.
이 바람직한 형태의 명령 제어 장치에 의하면, 복수의 스레드의 명령을 처리함에 있어서, 1개의 스레드에 대해서 상기 명령 버퍼에 의해 명령이 다시 유지되는 경우에는, 다른 스레드의 명령에 상기 명령 디코드부가 내어지므로, 복수의 스레드의 명령을 효율적으로 처리할 수 있다.
이 복수의 스레드의 명령을 처리하는 바람직한 형태의 명령 제어 장치에 있어서,
「상기 명령 디코드부는, 상기 스레드와는 상이한 스레드에 속하는 명령을 상기 명령 투입 제어부가 유지하고 있지 않은 경우에는, 상기 명령 투입 제어부에 상기 재투입을 요구하지 않고, 상기 재투입의 대상으로 되는 명령을 유지한다」고 하는 형태는 더욱 바람직한 형태이다.
이 더욱 바람직한 형태의 명령 제어 장치에 의하면, 상기 명령 디코드부를 내어주어야 할 다른 스레드가 존재하지 않는 경우나, 다른 스레드에서 처리해야 할 명령이 존재하지 않는 경우 등과 같은, 상기 명령 디코드부에 명령을 두고 있어도 지장이 없는 경우에는, 상기 명령 디코드부에 재투입의 대상으로 되는 명령이 유효하게 유지되므로 불필요한 재투입이 회피되어, 한층 효율적으로 명령을 처리할 수 있다.
또한, 본 발명의 명령 제어 장치에 있어서,
「상기 명령 투입 제어부는, 상기 재투입의 대상으로 되는 명령이 실행 가능한 것을 나타내는 정보를 갖고, 상기 명령 디코드부로부터 상기 재투입이 요구된 경우에, 상기 정보 정보에 의거하여 상기 재투입을 행한다」고 하는 형태도 바람직한 형태이다.
이 바람직한 형태의 명령 제어 장치에 의하면, 상기 재투입의 대상으로 되는 명령이 실행 가능하다는 것이 상기 정보를 통하여 상기 명령 투입 제어부에 전해지므로, 그 명령 투입 제어부가 적절한 타이밍에서 재투입을 행할 수 있다.
또한, 본 발명의 명령 제어 장치에 있어서,
「상기 명령 투입 제어부는, 상기 명령 디코드부에 투입하는 상기 명령을 유지하는 명령 투입 버퍼를 갖고, 상기 명령 투입 버퍼에 유지되어 있는 명령이 모두 상기 명령 디코드부에 의해 디코드된 경우에는, 상기 명령 투입 버퍼를 개방한다」고 하는 형태도 바람직하다.
이 바람직한 형태의 명령 제어 장치에 의하면, 상기 명령 투입 버퍼가 적절히 개방되므로, 그 명령 투입 버퍼를 반복하여 스무드하게 이용할 수 있고, 한층 효율적으로 명령을 처리할 수 있다.
또한, 본 발명의 명령 제어 장치에 있어서,
「상기 명령 디코드부는, 상기 해독한 명령이 실행 가능한 조건은 갖추고 있지 않다고 판단한 경우에는, 상기 명령 투입 제어부에 대하여, 상기 명령의 후속 명령의 재투입을 요구한다」고 하는 형태도 바람직한 형태이다.
이 바람직한 형태의 명령 제어 장치에 의하면, 상기 명령에 대해서 실행 가능한 조건을 갖추고 있지 않은지의 여부에 대해서가, 명령의 처리가 확실히 파악되는 상기 명령 디코드부에서 판단되므로, 상기 명령 투입 제어부로의 재투입의 요구가 오류없이 행해지게 된다.
또한, 상기 목적을 달성하는 본 발명의 명령 제어 방법은,
명령을 유지하는 명령 버퍼부와, 상기 명령 버퍼부로부터 출력된 명령을 유지하여 해독하는 명령 디코드부와, 해독된 명령을 실행하는 명령 실행부를 갖는 명령 제어 장치의 명령 제어 방법에 있어서,
상기 명령 버퍼에 유지된 명령을 상기 명령 디코드부에 투입하는 경우에서, 상기 명령 버퍼에 유지된 명령에 선행하는 명령이 상기 명령 실행부를 사용 중인지의 여부를 판단하고,
상기 명령 버퍼에 유지된 명령에 선행하는 명령이 상기 명령 실행부를 사용 중일 때에는, 상기 명령 디코드부가 유지하는 상기 명령과 상기 명령 디코드부가 유지하는 명령의 후속 명령을 무효화하고,
상기 명령 디코드부가 유지하는 명령과 상기 명령 디코드부가 유지하는 명령의 후속 명령을 상기 명령 버퍼에 다시 유지시키는 것을 특징으로 한다.
이 본 발명의 명령 제어 방법에 의하면, 상기한 명령 제어 장치와 마찬가지로 명령을 효율 좋게 처리할 수 있다.
본 발명에 의하면, 명령을 효율 좋게 처리할 수 있는 명령 제어 장치 및 명령 제어 방법을 얻을 수 있다.
도 1은 슈퍼스칼라에서의 아웃·오브·오더 실행을 나타내는 개념도.
도 2는 SMT 기능의 일례를 개념적으로 나타내는 도면.
도 3은 SMT 기능의 일례를 나타내는 도 2와는 다른 개념도.
도 4는 싱글 스레딩 타입의 명령 제어 장치에서, 명령의 디코드부에서의 스톨이 발생한 형태를 나타내는 개념도.
도 5는 1개의 스레드의 명령에 대해서 스톨하는 것이 확인된 경우에, 그 명령을 무효화하여 디코드부를 다른 스레드에 내어주는 기술을 나타내는 개념도.
도 6은 명령 제어 장치의 일실시 형태인 CPU(10)를 나타내는 하드웨어 구성도.
도 7은 도 6의 CPU(10)에서의 스톨 명령에 관련된 처리를 나타내는 개념도.
도 8은 도 6의 CPU(10)를, 스톨 명령에 관련된 처리에 대해서 설명하기 위해 일부를 간략화하고, 일부를 기능 블록으로 나타낸 도면.
도 9는 명령의 페치로부터, 디코드부(109)로의 명령의 투입까지의 처리의 흐름을 나타내는 개념도.
도 10은 각 IBR(104a)에 대응되어 있는 버퍼 정보를 나타내는 도면.
도 11은 싱글 스레딩 타입의 CPU에서 실행되는 프리젠테이션(presentation) 을 설명하기 위한 설명도.
도 12는 본 실시 형태의 CPU(10)에 의해 실행되는 프리젠데이션을 설명하기 위한 설명도.
도 13은 디코드부(109)에서 스톨하는 것이 확인된 경우의 처리의 흐름을 나타내는 개념도.
도 14는 디코드부(109)에서 스톨하는 것이 확인된 경우의 처리의 흐름을, IWR(109a) 내에 저장되는 명령의 천이(遷移)로 나타내는 도면.
도 15는 D 리버스(D-reverse) 지시 회로를 나타내는 도면.
도 16은 D 리버스가 실행되었을 때의, CPU(10)에서의 각 포인터의 제어의 흐름을 나타내는 개념도.
도 17은 보존용 포인터(253)의 내용의 생성을, 구체적인 수치예를 사용하여 표형식으로 나타내는 도면.
도 18은 스톨의 발생에서부터 재차(再次)의 프리젠데이션과 디코드가 행해질 때까지의 처리의 흐름을 나타내는 플로 차트.
도 19는 부재(不在) 검출 회로를 나타내는 도면.
도 20은 스톨의 발생에서부터 스톨 요인에 대한 감시를 거쳐 재차의 프리젠데이션의 실행에 이르는 처리를 나타내는 플로 차트.
도 21은 1회의 디코드에서 D 릴리스(release)되는 4개의 명령이 2개의 IBR(109a)에 걸치게 되는 경우에서의 IBR(109a)의 개방을 설명하기 위한 설명도.
도 22는 CSE(127)에서, 레지스터의 갱신이 인·오더 실행에 의해 행해지는 구조를 나타내는 개념도.
도 23은 명령의 처리의 효율화와는 다른 효과가 얻어지는 상황을 설명하는 도면.
도 24는 스루풋의 향상이라는 다른 효과도(圖)에 대해서 설명하는 도면.
발명을 실시하기 위한 최량의 형태
이하 도면을 참조하여 명령 제어 장치의 일실시 형태에 대해서 설명한다.
도 6은 명령 제어 장치의 일실시 형태인 CPU(10)를 나타내는 하드웨어 구성도이다.
이 도 6에 나타낸 CPU(10)는 2종류의 스레드의 명령을 동시에 처리하는 SMT 기능을 갖는 명령 제어 장치이며, 이 CPU(10)에서는 다음 7개의 스테이지의 처리가 순차적으로 행해진다. 즉, 2종류의 스레드의 명령을 교대로 인·오더 실행으로 페치하는 페치 스테이지(스텝 S101), 페치된 명령이 나타나 있는 처리를 인·오더 실행으로 디코드하는 디코드 스테이지(스텝 S102), 디코드된 명령을, 그 명령의 처리의 실행에 필요로 하는 연산기에 접속되어 있는 후술(後述)하는 리저베이션 스테이션(reservation station)에 인·오더 실행으로 저장하고, 그 저장된 명령을 연산기에 아웃·오브·오더 실행으로 인도하는 디스패치(dispatch) 스테이지(스텝 S103), 리저베이션 스테이션에 저장된 명령의 실행에 필요한 오퍼랜드(operand)를 레지스터로부터 아웃·오브·오더 실행으로 판독하는 레지스터 판독 스테이지(스텝 S104), 리저베이션 스테이션에 저장된 명령을 레지스터로부터 판독된 오퍼랜드를 사용하여 아웃·오브·오더 실행으로 실행하는 실행 스테이지(스텝 S105), CPU(10) 외의 메모리로의 실행 결과의 기록 등을 아웃·오브·오더 실행으로 행하는 메모리 스테이지(스텝 S106), 및, 실행 결과에 따라 오퍼랜드 저장용의 레지스터 등을 갱신하여 그 실행 결과를 프로그램으로부터 가시의 상태로 하는 커밋을 인·오더 실행으로 행하는 커밋 스테이지(스텝 S107)라고 하는 7개의 스테이지의 처리가 순차적으로 행해진다.
이하, 각 스테이지에 대해서 상세하게 설명한다.
페치 스테이지(스텝 S101)에서는, 2종류의 스레드(스레드 0, 스레드 1) 각각에 대해서 준비되어 있는 2개의 프로그램 카운터(101)가, 각 스레드의 기재순으로 몇번째의 명령을 취입할지를 지시한다. 그리고, 각 프로그램 카운터(101)가 명령의 취입(페치)을 지시하는 타이밍에서, 명령 페치부(102)가 명령 1차 캐시(103)로부터 그 지시된 명령을 명령 버퍼(104)에 취입한다. 2개의 프로그램 카운터(101)는 교대로 동작하고, 1번의 페치에서는, 어느 한쪽의 프로그램 카운터(101)가, 대응하는 스레드의 명령의 취입을 지시한다. 또한, 본 실시 형태에서는, 1회의 페치로, 8개의 명령의 취입이 인·오더 실행에 의해 스레드 중의 처리순으로 행해진다. 여기서, 인·오더 실행에 의한 처리순이 스레드 중에서의 명령의 기재순으로부터 분기되는 경우가 있다. 이 CPU(10)는 이러한 분기의 유무, 및, 스레드 중에서의 분기처를 예측하는 분기 예측부(105)를 구비하고 있다. 그리고, 명령 페치부(102)는 그 분기 예측부(105)의 예측 결과를 참조하여 페치를 행한다.
여기서, 본 실시 형태의 CPU(10)에 의해 실행되는 프로그램은 외부 메모리 (도시되지 않음)에 저장되어 있다. 그리고, CPU(10)는 이 CPU(10)에 내장되고 2차 캐시(106)에 접속된 시스템 버스 인터페이스(107)를 통하여 그 외부 메모리 등과 접속되어 있다. 프로그램 카운터(101)가 명령의 페치를 지시하면, 명령 페치부(102)가 분기 예측부(105)의 예측 결과를 참조하여 명령 1차 캐시(103)에 8개의 명령을 요구한다. 그러면, 요구된 8개의 명령이, 외부 메모리로부터, 시스템 버스 인터페이스(107)와 2차 캐시(106)를 경유하여 명령 1차 캐시(103)에 입력되고, 명령 1차 캐시(103)가 그들의 명령을 명령 버퍼(104)로 인도한다.
디코드 스테이지(스텝 S102)에서는, 명령 버퍼(104)가, 명령 페치부(102)에 의해 취입되어 유지되고 있는 8개의 명령 중 4개의 명령을 디코드부(109)에 인·오더 실행으로 투입한다. 디코드부(109)는 투입된 4개의 명령 각각을 인·오더 실행으로 디코드한다. 또한, 디코드시에는, 각 명령에 대하여, 명령 식별자(IID : Instruction IDentification)로서 「0」 내지 「63」의 번호가, 각 스레드에 대해서 디코드순으로 할당된다. 여기서, 본 실시 형태에서는, 스레드 0의 명령이 디코드될 때에는, 「0」 내지 「31」의 IID가 할당되고, 스레드 1의 명령이 디코드될 때에는, 「32」 내지 「63」의 IID가 할당된다. 이 때, 디코드부(109)는 스레드 0용으로 32개, 스레드 1용으로 32개의 합계 64개의 엔트리를 갖는 후술하는 커밋 스택 엔트리(CSE)(127)의, 디코드 대상의 명령이 속하는 엔트리군에서의 빈 엔트리에, 디코드 대상의 명령에 할당한 IID를 세트한다.
디코드부(109)가, 각각 IID가 할당된 디코드 완료된 4개의 명령 각각에 대해서, 각 명령의 처리의 실행에 필요로 하는 연산기를 결정한다. 그리고, 디코드 완 료된 각 명령을, 그 명령의 처리의 실행에 필요로 하는 연산기에 접속되어 있는 리저베이션 스테이션에 인·오더 실행으로 저장된다.
리저베이션 스테이션은 복수의 디코드 완료된 명령을 유지하고, 디스패치 스테이지(스텝 S103)에서는 각 명령을 아웃·오브·오더 실행으로 연산기로 인도한다. 즉, 리저베이션 스테이션은 스레드 중의 처리순에 관계없이, 처리의 실행에 필요한 오퍼랜드와 연산기가 확보된 명령으로부터 연산기로 인도된다. 이 때, 인도 가능한 명령이 복수 존재하는 경우에는, 그들 복수의 명령 중 앞서 디코드된 명령부터 연산기로 인도한다. 본 실시 형태의 CPU(10)에는, 다음 4종류의 리저베이션 스테이션이 구비되어 있다. 즉, 어드레스 생성용 리저베이션 스테이션(RSA : Reservation Station for Address generation)(110), 정수 연산용 리저베이션 스테이션(RSE : Reservation Station for fix point Execution)(111), 부동 소수점 연산용 리저베이션 스테이션(RSF : Reservation Station for Floating point)(112), 및, 분기용 리저베이션 스테이션(RSBR : Reservation Station for BRanch)(113)의 4종류의 리저베이션 스테이션이 구비되어 있다. 여기서, RSA(110)와 RSE(111)와 RSF(112)는, 각각 대응하는 연산기에, 오퍼랜드 저장용의 레지스터를 통하여 접속되어 있다. 이에 대하여, RSBR(113)은, 상기한 분기 예측부(105)에 접속되어 있고, 분기 예측부(105)에서의 예측 결과의 확정 대기나, 예측 실패인 경우의 명령의 재페치 지시 등을 행하는 역할을 하고 있다.
레지스터 판독 스테이지(스텝 S104)에서는, 레지스터 내의 오퍼랜드가 아웃·오브·오더 실행으로 판독된다. 즉, 스레드 중의 처리순에 관계없이, 명령을 연 산기로 인도한 리저베이션 스테이션에 접속되어 있는 레지스터 내의 오퍼랜드가 판독되어, 대응하는 연산기에 건네진다. CPU(10)에는 정수계 레지스터(GPR : General Purpose Register)(114)와 부동 소수점계 레지스터(FPR : Floating Point Register)(116)의 2종류의 레지스터가 구비되어 있다. 여기서, GPR(114) 및 FPR(116)은 양쪽 모두 프로그램 가시의 레지스터이며, 스레드 0과 스레드 1 각각에 대해서 구비되어 있다. 또한, GPR(114) 및 FPR(116) 각각에는 명령의 실행 결과를 각 레지스터의 갱신시까지 유지하는 버퍼가 접속되어 있다. GPR(114)에는 정수계 레지스터 갱신 버퍼(GUB : GPR Update Buffer)(115)가 접속되고, FPR(116)에는 부동 소수점계 레지스터 갱신 버퍼(FPR : FPR Update Buffer)(116)가 접속되어 있다.
어드레스 생성 및 정수 연산은 정수의 오퍼랜드를 사용하여 행해지므로, GPR(114)은 상기한 RSA(110)와 RSE(111)에 접속되어 있다. 또한, 본 실시 형태에서는, GPR(114)의 갱신 전의 단계의 GUB(115)에 유지되어 있는 오퍼랜드를 사용한 정수 연산도 허가되어 있으므로, 이 GUB(115)도 RSA(110)와 RSE(111)에 접속되어 있다. 또한, 부동 소수점 연산은 부동 소수점 형식의 오퍼랜드를 사용하여 행해지므로, FPR(116)은 상기한 RSF(112)에 접속되어 있다. 또한, 본 실시 형태에서는 FUB(117)에 유지되어 있는 오퍼랜드를 사용한 부동 소수점 연산도 허가되어 있으므로, FUB(117)도 RSF(112)에 접속되어 있다.
또한, 본 실시 형태의 CPU(10)에는, 2개의 어드레스 생성 연산기(EAGA와 EAGB : Effective Address Generation units A and B)(118, 119), 2개의 정수 연산기(EXA와 EXB)(120, 121), 및, 2개의 부동 소수점 연산기(FLA와 FLB)(122, 123)가 구비되어 있다. 그리고, GPR(114)과 GUB(115)는 정수의 오퍼랜드를 사용하는 EAGA(118)와 EAGB(119)와 EXA(120)와 EXB(121)에 접속되어 있고, FPR(116)과 FUB(117)는 부동 소수점 형식의 오퍼랜드를 사용하는 FLA(122)와 FLB(123)에 접속되어 있다.
실행 스테이지(스텝 S105)에서는, 연산기에 의해 명령의 실행이 아웃·오브·오더 실행으로 행해진다. 즉, 스레드 중의 처리순에 관계없이, 상기한 복수 종류의 연산기 중, 리저베이션 스테이션으로부터 명령이 건네지고, 레지스터로부터 연산에 필요한 오퍼랜드가 건네진 연산기가, 그 건네진 명령의 처리를, 그 건네진 오퍼랜드를 사용하여 실행한다. 또한, 실행 스테이지(스텝 S105)에서는, 어떤 연산기의 실행 중에, 다른 연산기에 명령과 오퍼랜드의 인도가 행해졌을 때에는, 그들 연산기가 동시 병행으로 처리를 실행한다.
이 실행 스테이지(스텝 S105)에서는, EAGA(118)에, RSA(110)로부터 어드레스 생성 처리의 명령이 건네지고, GPR(114)로부터 정수의 오퍼랜드가 건네지면, EAGA(118)는 그 정수의 오퍼랜드를 사용하여 어드레스 생성 처리를 실행한다. 또한, EXA(120)에, RSE(111)로부터 정수 연산 처리의 명령이 건네지고, GPR(114)로부터 정수의 오퍼랜드가 건네지면, EXA(120)는 그 정수의 오퍼랜드를 사용하여 정수 연산 처리를 실행하고, FLA(122)에, RSF(112)로부터 부동 소수점 연산 처리의 명령이 건네지고, FPR(116)로부터 부동 소수점 형식의 오퍼랜드가 건네지면, FLA(122)는 그 부동 소수점 형식의 오퍼랜드를 사용하여 부동 소수점 연산 처리를 실행한다.
EAGA(118) 및 EAGB(119)의 실행 결과는 시스템 버스 인터페이스(107)를 통한 외부 메모리로의 액세스에 사용되므로, 이들 연산기는 외부 메모리로부터의 데이터의 판독구인 페치 포트(fetch port)(124)와, 기입구인 스토어 포트(store port)(125)에 접속되어 있다. EXA(120)와 EXB(121)의 실행 결과는 GPR(114)을 갱신하기 위한 중계 버퍼 GUB(115)에 접속되고, 또한 메모리의 갱신을 위한 중간 버퍼의 역할을 하는 상기한 스토어 포트(125)에 접속된다. 또한, FLA(122)와 FLB(123)의 실행 결과는 FPR(116)을 갱신하기 위한 중간 버퍼 FUB(117)에 접속되고, 또한 메모리의 갱신을 위한 중간 버퍼의 역할을 하는 상기한 스토어 포트(125)에 접속된다.
메모리 스테이지(스텝 S106)에서는, 실행 결과의 외부 메모리로의 기록 등과 같은 외부 메모리로의 액세스가 아웃·오브·오더 실행으로 행해진다. 즉, 그러한 액세스를 필요로 하는 처리의 명령이 복수 있는 경우, 스레드 중의 처리순에 관계없이 실행 결과가 얻어진 순으로 액세스가 행해진다. 이 메모리 스테이지(스텝 S106)에서는, 액세스는 데이터 1차 캐시(126), 2차 캐시(106), 및 시스템 버스 인터페이스(107)를 통하여, 페치 포트(124)나 스토어 포트(125)에 의해 행해진다. 또한, 외부 메모리로의 액세스가 종료하면, 페치 포트(124)나 스토어 포트(125)로부터 CSE(127)에 접속선(도시되지 않음)을 통하여 실행 완료 통지가 전송된다.
또한, EXA(120), EXB(121), FLA(122), 및 FLB(123)는 번잡함을 피하기 위해 도시가 생략된 접속선에 의해 CSE(127)에 접속되어 있다. 그리고, 각 연산기에서 실행되는 처리가, 외부 메모리로의 액세스를 필요로 하지 않고 각 연산기에서의 실 행의 종료에 의해 완료하는 처리일 경우에는, 실행의 종료시에 각 연산기로부터 CSE(127)에 실행 완료 통지가 전송된다.
커밋 스테이지(스텝 S107)에서는, CSE(127)가 GPR(114), FPR(116), 프로그램 카운터(101), 및, CPU(10)에서 상술한 처리 이외의 다른 처리에 사용되는 오퍼랜드를 유지하는 컨트롤 레지스터(128)를, 인·오더 실행으로 다음과 같이 갱신한다. 상기한 연산기로부터 CSE(127)에 전송되어 오는 실행 완료 통지에는, 그 실행 완료 통지에 대응하는 명령의 IID와, 그 명령의 종료 후의 갱신 대상의 레지스터 등과 같은 실행 결과의 확정(커밋)에 필요한 정보(커밋 정보)가 기재되어 있다. CSE(127)는 실행 완료 통지가 전송되어 오면, CSE(127)가 갖는 64개의 엔트리 중, 실행 완료 통지에 기재된 IID와 동일한 IID가 세트되어 있는 엔트리에, 그 실행 완료 통지에 기재된 커밋 정보를 저장한다. 그리고, 이미 저장되어 있는 각 명령에 대응하는 커밋 정보에 따른 레지스터의 갱신을, 인·오더 실행에 의해, 스레드 중의 처리순에 따라 행한다. 또한, 이 커밋이 종료하면, 상기한 리저베이션 스테이션에 유지되어 있던, 그 커밋에 대응하는 명령이 소거된다.
CPU(10)는 대략 이와 같이 구성되고, 이상에 설명한 7개의 스테이지에 따라 동작한다.
그런데, 디코드된 명령 중에는, 동일 스레드 중에서 선행하는 다른 명령과의 동시 실행이 금지된 명령이나, 실행에 필요한 실행 자원의 공간이 없어서 바로는 실행할 수 없어 스톨하게 되는 명령(스톨 명령)이 있다. CPU(10)에서의 본 실시 형태로서의 특징은 이러한 스톨 명령에 관련된 처리에 있다. 이하, 이 점에 주목 하여 설명을 계속한다.
도 7은 도 6의 CPU(10)에서의 스톨 명령에 관련된 처리를 나타내는 개념도이다.
이 도 7의 예에서는, 스텝 S201로부터 스텝 S204까지의 사이에, 스레드 0에 속하는 명령과 스레드 1에 속하는 명령이 교대로 4개씩 디코드된다. 여기서, 이 도 7의 예에서는, 스텝 S203에서 처리되는 스레드 0의 4개의 명령 중 어느 하나가 스톨 명령으로 되어 있다. 본 실시 형태의 CPU(10)에서는, 이 스톨 명령 이후의 명령이, 도 7에 나타낸 바와 같이, 디코드 후에, 상기한 명령 버퍼(104)에서, 스텝 S201에서 처리되는 선행의 명령의 커밋이 종료하여 필요한 오퍼랜드가 얻어져서 실행 가능한 조건이 갖추어질 때까지 유지된다. 그리고, 조건이 갖추어지면, 스톨 명령 이후의 명령에 대해서는, 재차(再次) 디코드부터 다시 된다.
여기서, 본 실시 형태의 CPU(10)에서는, 회로 구성이 복잡해서 회로 규모가 큰 디코드부(109)는, 도 6에 나타낸 바와 같이 1개까지밖에 구비되어 있지 않아서, CPU(10)는 2종류의 스레드간에서 이 디코드부(109)가 공통으로 사용되는 구성으로 되어 있다.
본 실시 형태에서는 한쪽의 스레드의 명령이 스톨 명령이어도, 그 스톨 명령 이후의 명령이 명령 버퍼(104)에서, 실행 가능한 조건이 갖추어질 때까지 유지되므로, 디코드부(109)는 그 스톨 명령이 속하는 스레드로부터 개방되어, 이미 한쪽의 스레드에 내어진다. 이에 의해, 도 7에 나타낸 바와 같이, 스레드 0에서의 처리가 정체되어도, 스레드 1에서의 명령이 정체없이 처리된다.
이하, 이 스톨 명령에 관련된 처리에 대해서, 도 6의 설명과 일부 중복하는 부분이 있지만 상세히 설명한다.
도 8은 도 6의 CPU(10)를, 스톨 명령에 관련된 처리에 대해서 설명하기 위해 일부를 간략화하고, 일부를 기능 블록으로 나타낸 도면이다.
마찬가지로, 이 도 8에서는 도 6의 블록과 일대일로 대응하는 구성 요소에 대해서는 도 6과 동일한 번호를 붙여서 나타내고 있다.
CPU(10)는 스레드 0용 프로그램 카운터(101_0)와 스레드 1용 프로그램 카운터(101_1)의 2개의 프로그램 카운터를 구비하고 있고, 이들 2개의 프로그램 카운터로부터, 명령의 페치를 실행하는 취지의 지시가 교대로 발행된다.
명령 페치부(102)는 2개의 프로그램 카운터로부터의 지시에 따라, 도 6의 명령 1차 캐시(103)를 통하여 명령을 명령 버퍼(109)에 취입한다.
명령 버퍼(104)는 이 취입된 명령을 유지하는 동시에, 그 유지한 명령을 디코드부(109)에 투입한다. 디코드부(109)는 투입된 명령을 디코드하고, 또한, 디코드 완료된 명령에 대해서 실행 가능한 조건이 갖추어져 있는지의 여부, 즉, 그 명령이 스톨하는지의 여부를 확인한다.
디코드부(109)는 조건이 갖추어져 있는 명령에 대해서는 후단의 리저베이션 스테이션(210)에 건네고, 조건이 갖추어져 있지 않은 스톨 명령 이후의 명령에 대해서는 무효화한다. 이에 의해, 디코드부(109)는 해방되어, 새로운 디코드가 가능해진다. 또한, 본 실시 형태에서는, 무효화된 명령에 대해서는 스톨 요인이 해소된 후에 디코드부(109)로부터 명령 버퍼(109)로 재투입이 요구된다. 여기서, 이 도 8에서는, 도 6에 나타낸 4종류의 리저베이션 스테이션이 간략화되어 1개의 박스로 나타나 있다.
도 9는 명령의 페치로부터, 디코드부(109)로의 명령의 투입까지의 처리의 흐름을 나타낸 개념도이다.
본 실시 형태에서는, 명령은 명령 페치부(102)에 의해 2종류의 스레드에 대해서 교대로 8개씩 명령 버퍼(104)에 취입되고, 명령 버퍼(104)에 의해 디코드부(109)에 4개씩 투입된다. 디코드부(109)에서는 그 디코드부(109)가 갖는 4개의 레지스터인 제 0 단으로부터 제 3 단까지의 IWR(109a) 각각에 명령이 저장된다. 또한, IWR(109a)로의 저장은 제 0 단의 IWR(109a)부터 차례대로 행해진다. 여기서, 명령 버퍼(104)로부터 디코드부(109)의 4개의 IWR(109a)로의 명령의 투입을, 프리젠테이션(presentation)이라고 부른다.
이하, 명령 페치부(102)에 의한 페치로부터, 명령 버퍼(104)에 의한 프리젠테이션까지의 처리에 대해서 더욱 상세히 설명한다.
본 실시 형태에서는, 명령 버퍼(104)는 각각 8개의 명령을 저장 가능한 IBR(104a)을, 제 0 단으로부터 7 단째까지의 합계 8단을 구비하고 있고, 페치마다, 각 IBR(104a)에 8개의 명령이 각 스레드 중의 처리순으로 저장된다. 여기서, 페치시에는, 명령은 제 0 단으로부터 7 단째까지의 IBR(104a)에 다음과 같은 버퍼 정보로 정의된 순번으로 저장된다.
도 10은 각 IBR(104a)에 대응되어 있는 버퍼 정보를 나타내는 도면이다.
이 도 10에 나타낸 바와 같이, 각 IBR(104a)에는 그 IBR(104a)이 명령의 현 재의 저장처로서 할당되어 있는지의 여부를 나타내는 VALID 정보(I1), 다음 페치 명령의 저장처로서 할당되는 IBR(104a)의 단수(段數)를 나타내는 NEXT_SEQ_IBR 정보(I2), 명령 페치부(102)로부터 명령 1차 캐시(103)에 대하여 다음 페치 대상의 명령이 요구되어 있는지의 여부를 나타내는 NEXT_SEQ_VALID 정보(I3), 현재 저장되어 있는 명령이 그 IBR(104a)에 대해서 이루어진 최신의 페치의 결과인지의 여부를 나타내는 STATUS_VALID 정보(I4)가 대응되어 있다.
페치된 8개의 명령은, 명령의 저장처로서 할당되어 있는 것이 VALID 정보(I1)로 나타나 있는 IBR(104a)에 저장된다. 또한, 저장 후에는, 그 IBR(104a)의 STATUS_VALID 정보(I4)가, 현재 저장되어 있는 명령이 그 IBR(104a)에 대해서 이루어진 최신의 페치의 결과인 것을 나타내는 내용으로 갱신된다. 또한, 다음 명령 페치가 발행되면, 그 IBR 번호가 IBR(104a)의 NEXT_SEQ_IBR 정보(I2)가 나타내는 단수로 저장되고, IBR(104a)에서의 VALID 정보(I1)가 갱신된다.
상기한 4개의 정보 중, 특히, VALID 정보(I1)와 NEXT_SEQ_IBR 정보(I2)와 NEXT_SEQ_VALID 정보(I3)에 의해, 8단분(段分)의 IBR(104a)로의 명령의 저장 순서가 정의된다. 또한, STATUS_VALID 정보(I4)에 의해, 현재 저장되어 있는 명령이 그 IBR(104a)에 의한 최신의 정보인 것이 확인된다.
다음에, 프리젠테이션에 대해서 설명한다.
여기서, 본 실시 형태의 CPU(10)는 2종류의 스레드의 명령을 동시에 처리하는 SMT 기능을 구비한 명령 제어 장치이지만, 이하에서는 우선 설명의 간단화를 위해, 우선 1종류의 스레드의 명령을 처리하는 싱글 스레딩 타입의 CPU에서의 프리젠 테이션에 대해서 설명한다.
도 11은 싱글 스레딩 타입의 CPU에서 실행되는 프리젠테이션을 설명하기 위한 설명도이다.
프리젠테이션은 프로그램의 처리순, 즉, 명령 페치부(601)에 의해 페치된 순번으로, 명령 버퍼(602)로부터 디코드부(603)의 4개의 IWR(603a)에 대하여 행해진다. 이러한 순번대로의 프리젠테이션을 가능하게 하기 위해, 이 도 11에 나타낸 포인터(604)가 사용된다.
포인터(604)에는 다음과 같은 3개의 정보가 기재되어 있다.
즉, 금회(今回) 프리젠테이션의 대상으로 되는 명령을 최초로 취출하는 IBR(104a)의 단수를 나타내는 E_CURRENT_IBR 정보(I5)와, 그 IBR(104a)에 계속해서 명령이 취출되는 IBR(104a)의 단수를 나타내는 E_NEXT_SEQ_IBR 정보(I6)와, 금회 프리젠테이션의 대상으로 되는 4개의 명령 중 선두의 명령이 IBR 중에 페치순으로 나열되어 있는 8개의 명령 중 몇번째의 명령인지를 나타내는 E_NSI_CTR 정보(I7)의 3개의 정보가 기재되어 있다.
명령 버퍼(602)는 프리젠테이션시에는 포인터(604)를 참조하여, E_CURRENT_IBR 정보(I5)가 나타내는 단수의 IBR(104a) 중의 8개의 명령 중, E_NSI_CTR 정보(I7)가 나타내는 명령부터 세어서 4개분의 명령을, 제 0 단으로부터 제 3 단까지의 4개의 IWR(603a) 중 제 0 단의 IWR(603a)부터 순차적으로 저장해 간다.
또한, E_CURRENT_IBR 정보(I5)가 나타내는 단수의 IBR(104a) 중 8개의 명령 이 최후까지 IWR(603a)에 저장된 시점에서, E_CURRENT_IBR 정보(I5)의 내용이 E_NEXT_SEQ_IBR 정보(I6)의 내용으로 갱신되고, E_NSI_CTR 정보(I7)가 나타내는 번수(番數)에 「4」가 가산된다. 또한, E_NEXT_SEQ_IBR 정보(I6)의 내용이, 상기한 갱신 후의 E_CURRENT_IBR 정보(I5)가 나타내는 단수의 IBR(104a)에 계속해서 명령이 취출되는 IBR(104a)의 단수로 갱신된다.
이러한 포인터(604)를 참조한 프리젠테이션에 의해, 명령 버퍼(602)는 페치순으로 4개의 명령을 취출하여 4개의 IWR(603a)에 순차적으로 저장할 수 있다.
다음에, 2종류의 스레드의 명령을 동시에 처리하는 SMT 기능을 구비한 본 실시 형태의 CPU(10)에서의 프리젠테이션에 대해서 설명한다.
도 12는 본 실시 형태의 CPU(10)에서 실행되는 프리젠테이션을 설명하기 위한 설명도이다.
이 도 12에 나타낸 바와 같이, 도 11에 나타낸 포인터(604)와 동등한 포인터가 2종류의 스레드 각각에 대해서 구비되어 있다. 즉, 스레드 0용 포인터(251)와, 스레드 1용 포인터(252)가 구비되어 있다. 마찬가지로, 본 실시 형태에서는 후술하는 재차의 프리젠테이션시에 사용되는, 금회의 명령의 취출에 참조된 포인터를 보존하는 보존용 포인터(253)도 구비되어 있다.
스레드 0용 포인터(251)에는 금회 스레드 0의 명령을 최초로 취출하는 IBR(104a)의 단수를 나타내는 TH0_CURRENT_IBR 정보(I8)와, 스레드 0의 명령을 그 IBR(104a)에 계속해서 취출하는 IBR(104a)의 단수를 나타내는 TH0_NEXT_SEQ_IBR 정보(I9)와, 금회 취출하는 스레드 0의 선두의 명령이 몇번째의 명령인지를 나타내는 TH0_NSI_CTR 정보(I10)의 3개의 정보가 기재되어 있다.
또한, 스레드 1용 포인터(252)에는 금회 스레드 1의 명령을 최초로 취출하는 IBR(104a)의 단수를 나타내는 TH1_CURRENT_IBR 정보(I11)와, 스레드 1의 명령을 그 IBR(104a)에 계속해서 취출하는 IBR(104a)의 단수를 나타내는 TH1_NEXT_SEQ_IBR 정보(I12)와, 금회 취출하는 스레드 1의 선두의 명령이 몇번째의 명령인지를 나타내는 TH1_NSI_CTR 정보(I13)의 3개의 정보가 기재되어 있다.
또한, 보존용 포인터(253)에는 선두의 명령을 취출한 IBR(104a)의 단수를 나타내는 D_TH_CURRENT_IBR 정보(I14)와, 그 IBR(104a)에 계속해서 명령을 취출하는 IBR의 단수를 형식적으로 나타내는 D_TH_NEXT_SEQ_IBR 정보(I15)와, 취출한 선두의 명령이 몇번째의 명령인지를 나타내는 D_TH_NSI_CTR 정보(I16)의 3개의 정보가 기재되어 있다.
또한, 본 실시 형태에서는 스레드 0과 스레드 1의 2종류의 스레드 중, 금회 프리젠테이션의 대상으로 되는 스레드의 번호가 저장되는 대상 스레드 지시부(254)가 구비되어 있다. 또한, 후술하는 재차의 프리젠테이션의 대상으로 되는 스레드의 번호가 저장되는 재프리젠테이션 대상 스레드 지시부(255)도 구비되어 있다.
프리젠테이션시에는 우선 2개의 포인터 중, 대상 스레드 지시부(254)에 저장되어 있는 번호의 스레드의 포인터가 선택된다. 또한, 이 때의 대상 스레드 지시부(254)에 저장되어 있는 번호가 재프리젠테이션 대상 스레드 지시부(255)에 복사되고, 상기한 선택된 포인터 내의 3개의 정보가 보존용 포인터(253) 내의 3개의 정보로서 복사된다.
다음에, 명령 버퍼(104)는 선택된 포인터를 참조하여, 그 포인터 중의 정보가 나타내는 단수의 IBR 중의 8개의 명령 중, 그 포인터 중의 정보가 나타내는 명령을 포함하는 4개의 명령을, 제 0 단으로부터 제 3 단까지의 4개의 IWR(603a) 중 제 0 단의 IWR(603a)부터 순차적으로 저장해 간다. 그리고, 프리젠테이션 후에는, 그 포인터 중 3개의 정보를 적절히 갱신한다.
재프리젠테이션시의 재프리젠테이션 대상 스레드 지시부(255) 및 보존용 포인터(253)의 동작에 대해서는 후술한다.
이러한 각 스레드에 대응하는 포인터를 참조한 프리젠테이션에 의해, 명령 버퍼(104)는 페치순으로 4개의 명령을 취출하여 4개의 IWR(109a)에 순차적으로 저장할 수 있다.
이와 같이, 디코드부(109)의 4개의 IWR(109a)에 명령이 저장되면, 디코드부(109)에서 각 명령의 디코드가 행해지고, 또한 디코드 완료된 각 명령에 대해서, 실행 가능한 조건이 갖추어지지 않고 스톨하게 되는지의 여부가 확인된다. 그리고, 디코드부(109)는 실행 가능한 조건이 갖추어져 있어 스톨하지 않는 유효한 명령에 대해서는 후단의 리저베이션 스테이션(210)에 건네고, 조건이 갖추어져 있지 않은 스톨 명령 이후의 명령에 대해서는 무효화한다.
도 13은 디코드부(109)에서 스톨하는 것이 확인된 경우의 처리의 흐름을 나타내는 개념도이다.
이 도 13의 예에서는, 명령 버퍼(104)로부터, 스레드 0에 대해서 프리젠테이션이 행해지고, 그 스레드 0 중 4개의 명령이 디코드부(109)의 4개의 IWR(109a)에 저장되어 있다. 그리고, 디코드 후에, 제 2 단의 IWR(109a) 내의 명령에 대해서 스톨하는 것이 확인되어, 그 명령과, 후속하는 제 3 단의 IWR(109a) 내의 명령이 무효화된다.
무효화된 명령에 대해서는, 스톨하는 것이 확인된 시점에서, 디코드부(109)로부터, 명령 버퍼(104)에 대하여, 스톨 요인이 해소된 후에 재차의 프리젠테이션을 행하도록 요구가 발행된다. 스톨 요인 해소 후의 재차의 프리젠테이션을 요구하는 것을, 이하, D 리버스(D-reverse)라고 부른다.
한편, 스톨하는 것이 확인되지 않은 유효한 제 0 단의 IWR(109a) 내의 명령과, 제 1 단의 IWR(109a) 내의 명령은 리저베이션 스테이션(210)에 인도된다. 명령이 유효하게 리저베이션 스테이션(210)에 인도하는 것을, 이하, D 릴리스라고 부른다.
본 실시 형태에서는, 디코드부(109)에서 스톨하는 것이 확인된 경우에는, 그 스톨하는 것이 확인된 명령(스톨 명령) 이후의 명령의 무효화와 상기한 D 릴리스에 의해, 디코드부(109)가 개방된다. 그리고, 그 개방된 디코드부(109)가, 스톨 명령이 속하는 스레드(도 13의 예에서는 스레드 0)와는 다른 스레드(도 13의 예에서는 스레드 1)의 명령의 디코드에, 스톨 요인이 해소될 때까지 계속 이용된다.
도 14는 디코드부(109)에서 스톨하는 것이 확인된 경우의 처리의 흐름을, IWR(109a) 내에 저장되는 명령의 천이(遷移)로 나타내는 도면이다.
이 도 14의 예에서는, 어떤 사이클에서 스레드 0에 대해서 프리젠테이션이 행해지고, 그 때에, 제 2 단의 IWR(109a) 내의 명령(C)이 스톨하고, 명령 버 퍼(104)에 대하여 D 리버스가 행해지고 있다. 그 결과, 이 사이클에서 제 2 단의 IWR(109a) 내의 명령(C)과, 후속의 제 3 단의 IWR(109a) 내의 명령(D)이 무효화된다. 동시에, 제 0 단의 IWR(109a) 내의 명령(A) 및 제 1 단의 IWR(109a) 내의 명령(B)에 대해서는 유효한 명령으므로 D 릴리스되어, 리저베이션 스테이션(210)에 건네진다. 이 무효화와 D 릴리스에 의해, 이 사이클에서 디코드부(109)는 개방된다.
다음 사이클에서는, 상기한 개방된 디코드부(109)에 대하여 스레드 1에 관한 프리젠테이션이 행해지고 있다. 그리고, 이 사이클에서 디코드부(109)에 프리젠테이션된 스레드 1의 4개의 명령(a, b, c, d)에 대해서는 모두 유효로서, 모두 D 릴리스되어, 리저베이션 스테이션(210)에 건네지고 있다.
이와 같이, 본 실시 형태에서는, 디코드부(109)에서 한쪽의 스레드의 명령에 대해서 스톨하는 것이 확인된 경우에는 상기한 무효화와 D 릴리스에 의해 디코드부(109)가 개방되어, 디코드부(109)가 다른쪽의 스레드에 내어진다. 이에 의해, 이 CPU(10)에서 2종류의 스레드의 명령이 정체없이 효율적으로 처리되어진다.
그런데, 디코드부(109)에서의 스톨은 동일 스레드의 복수의 명령에 대해서 발생하는 경우가 있다. 여기서, 본 실시 형태에서는 스톨 명령 이후의 명령이 모두 무효화되므로, 스톨이 복수의 명령에 대해서 발생한 경우라도, D 리버스는 그들 복수의 명령 중, 단수가 가장 적은 IWR(109a) 내의 명령에 대해서만 행해지면 충분하다. 그래서, 본 실시 형태에서는 디코드부(109)에, 스톨이 복수의 명령에 대해서 발생한 경우에, 단수가 가장 적은 IWR(109a) 내의 명령에 관한 D 리버스의 실행 을 지시하는 D 리버스 지시 회로가 구비되어 있다.
도 15는 D 리버스 지시 회로를 나타내는 도면이다.
이 도 15에 나타낸 D 리버스 지시 회로(109_1)는 프리젠테이션된 명령에 대해서 스톨이 생기는 것을 검출하는, 각각이 IWR(109a)에 접속된 4개의 스톨 검출 회로(109_1a)를 구비하고 있다. 각 스톨 검출 회로(109_1a)는 대응하는 IWR(109a) 내의 명령에 대해서, 실행 자원이 모자라거나, 또는, 그 명령이 동일 스레드 중에서 선행하는 다른 명령과의 동시 실행이 금지된 싱크(sync) 속성의 명령인 등과 같은 스톨 요인의 존재를 확인하여, 스톨 요인의 존재가 확인된 경우에 「1」을 출력한다.
또한, 상이한 스레드에서 공유하는 실행 자원이 모자랄 경우는, 스톨 요인으로 되지만, 이에 의한 D 리버스 지시는 행하지 않는다. 이는 만일 공유의 실행 자원이 모자라서 D 리버스를 행하게 되면, D 리버스 후 다른 스레드가 명령 디코드를 할 때에 마침 그 공유 자원이 개방되어 사용하게 되어서, 다음 사이클에서 공유 자원이 충분하지 않고 동일한 스레드가 다시 D 리버스를 반복하는 경우가 생길 수 있기 때문이다.
또한, 이 도 15에 나타낸 D 리버스 지시 회로(109_1)는 제 1 단의 IWR(109a)에 접속된 스톨 검출 회로(109_1a)가, 스톨 요인의 존재를 확인한 검출 회로 중에서 단수가 가장 적은 IWR(109a)에 접속된 것인 경우에 「1」을 출력하는 제 1 연산자(109_1b)를 구비하고 있다. 또한, D 리버스 지시 회로(109_1)는 제 2 단의 IWR(109a)에 접속된 스톨 검출 회로(109_1a)가, 스톨 요인의 존재를 확인한 검출 회로 중에서 단수가 가장 적은 IWR(109a)에 접속된 것인 경우에 「1」을 출력하는 제 2 연산자(109_1c)와, 제 3 단의 IWR(109a)에 접속된 스톨 검출 회로(109_1a)가, 스톨 요인의 존재를 확인한 검출 회로 중에서 단수가 가장 적은 IWR(109a)에 접속된 것인 경우에 「1」을 출력하는 제 3 연산자(109_1d)를 구비하고 있다.
이 D 리버스 지시 회로(109_1)에 의해, 스톨 요인을 갖는 명령 중, 단수가 가장 적은 IWR(109a) 내의 명령이 제 0 단의 IWR(109a) 내의 명령일 경우에는, 제 0 단의 IWR(109a)에 접속된 스톨 검출 회로(109_1a)로부터만 「1」이 출력되고, 이 「1」이 제 0 단의 IWR(109a) 내의 명령에 대한 D 리버스의 실행을 지시하는 D0_REVERSE 신호(S0)로서, 그 D0_REVERSE 신호(S0)용의 신호선에 출력된다. 또한, 단수가 가장 적은 IWR(109a) 내의 명령이 제 1 단의 IWR(109a) 내의 명령일 경우에는, 제 1 연산자(109_1b)로부터만 출력되는 「1」이, 제 1 단의 IWR(109a) 내의 명령에 대한 D 리버스의 실행을 지시하는 D1_REVERSE 신호(S1)로서, 그 D1_REVERSE 신호(S1)용의 신호선에 출력된다. 또한, 단수가 가장 적은 IWR(109a) 내의 명령이 제 2 단의 IWR(109a) 내의 명령일 경우에는, 제 2 연산자(109_1c)로부터만 출력되는 「1」이, 제 2 단의 IWR(109a) 내의 명령에 대한 D 리버스의 실행을 지시하는 D2_REVERSE 신호(S2)로서, 그 D2_REVERSE 신호(S2)용의 신호선에 출력된다. 또한, 단수가 가장 적은 IWR(109a) 내의 명령이 제 3 단의 IWR(109a) 내의 명령일 경우에는, 제 3 연산자(109_1c)로부터만 출력되는 「1」이, 제 3 단의 IWR(109a) 내의 명령에 대한 D 리버스의 실행을 지시하는 D3_REVERSE 신호(S3)로서, 그 D3_REVERSE 신호(S3)용의 신호선에 출력된다.
본 실시 형태에서는 이 D 리버스 지시 회로(109_1)에 의해, 스톨하는 것이 복수의 명령에 대해서 확인된 경우에, 단수가 가장 적은 IWR(109a) 내의 명령에 관한 D 리버스의 실행이 지시된다.
다음에, D 리버스가 실행되었을 때의, CPU(10)에서의 각 포인터의 제어에 대해서 설명한다.
도 16은 D 리버스가 실행되었을 때의, CPU(10)에서의 각 포인터의 제어의 흐름을 나타내는 개념도이다.
이 도 16에는 상기한 도 12에 나타낸 스레드 0용 포인터(251), 스레드 1용 포인터(252), 보존용 포인터(253), 및 대상 스레드 지시부(254)가 디코드부(109)로의 명령의 투입을 제어하는 역할도 하고 있는 명령 버퍼(104)에 구비되어 있는 형태가 나타나 있다. 또한, 본 실시 형태에서는 명령 버퍼(104)에, D 리버스가 실행되었을 때의 재차의 프리젠테이션시에 참조되는 D 리버스용 포인터(256)가 구비되어 있다.
또한, 상기한 도 12에 나타낸 재프리젠테이션 대상 스레드 지시부(255)는, 이 도 16에 나타낸 바와 같이 디코드부(109)에 구비되어 있다.
상기한 도 12를 참조하여 설명한 통상의 프리젠테이션일 때에는, 프리젠테이션마다, 스레드 0용 포인터(251) 또는 스레드 1용 포인터(252)가 갱신된다. 또한, 대상 스레드 지시부(254)가 지시하는 스레드용의 포인터의 갱신 전의 내용이 보존용 포인터(253)에 복사되고, 이 때의 대상 스레드 지시부(254)의 지시 내용이 재프리젠테이션 대상 스레드 지시부(255)에 복사된다.
여기서, D 리버스가 실행되었을 때에는, D 리버스용 포인터(256)의 내용이 보존용 포인터(253)의 내용을 사용하여 다음과 같이 생성된다.
도 17은 보존용 포인터(253)의 내용의 생성을, 구체적인 수치예를 사용하여 표형식으로 나타내는 도면이다.
이 도 17의 예에서는, 프리젠테이션된 스레드 0의 4개의 명령 중, 제 2 단의 IWR(109a) 내의 명령에 대해서 D 리버스가 실행되고 있다.
우선, 스레드 0의 4개의 명령의 프리젠테이션시에는, 대상 스레드 지시부(254)에 저장되어 있는 스레드의 번호는 「0」이다. 이 때에 참조되는 스레드 0용 포인터(251)에서의 TH0_CURRENT_IBR 정보(I8), TH0_NSI_CTR 정보(I10), 및 TH0_NEXT_SEQ_IBR 정보(I9)가, 이 도 17의 예에서는 각각 「1」, 「5」, 「3」으로 되어 있다. 이들 3개의 정보가 참조됨으로써, 명령 버퍼(104)에서의 제 0 단으로부터 제 7 단까지의 IBR(104a) 중 제 1 단의 IBR(104a) 중의 5번째의 명령으로부터 8번째의 명령까지의 4개가 프리젠테이션된다. 그리고, 프리젠테이션 후에 스레드 0용 포인터(251)의 내용이 다음회의 프리젠테이션용으로 「3」, 「1」, 「5」로 갱신된다. 또한, 갱신 전의 내용이 보존용 포인터(253)에 보존되고, 대상 스레드 지시부(254)에 저장되어 있던 스레드의 번호 「0」이 재프리젠테이션 대상 스레드 지시부(255)에 복사된다.
여기서, 상기한 D2_REVERSE 신호(S2)용의 신호선에, 「1」이 D2_REVERSE 신호(S2)로서 출력되고, 그 결과, 프리젠테이션된 4개의 명령 중 제 2 단의 IWR(109a) 내의 명령에 대해서 D 리버스가 실행되면, 보존용 포인터(253)에 보존되 어 있는 그 프리젠테이션시의 스레드 0용 포인터(251)의 내용으로부터, D 리버스용 포인터(256)의 내용이 생성된다. 이 도 17의 예에서는, D 리버스가 실행된 것이 제 2 단의 IWR(109a) 내의 명령이므로, 상기한 제 1 단의 IBR(104a) 중 5번째부터 세어서 3개째에 상당하는 7번째의 명령에 대해서 D 리버스가 실행되게 된다. 본 실시 형태에서는, 디코드부(109)에서 이 D 리버스가 실행된 명령 이후의 명령이 무효화되므로, 재차의 프리젠테이션에서는 이 D 리버스가 실행된 명령이 선두로 된다. 즉, D 리버스용 포인터(256)에서의 CURRENT_IBR 정보, NSI_CTR 정보, 및 NEXT_SEQ_IBR 정보가, 이 도 17에 나타낸 바와 같이, 각각 「1」, 「7」, 「3」으로 된다.
이와 같이 D 리버스용 포인터(256)의 내용이 생성되면, 도 16에 나타낸 바와 같이, 재프리젠테이션 대상 스레드 지시부(255)가 지시하는, D 리버스 실행시에 복사된 스레드용의 포인터의 내용이, 그 생성된 D 리버스용 포인터(256)의 내용으로 갱신된다. 이 갱신된 포인터의 내용은, 재차의 프리젠테이션이 실행되어 그 스레드에 관한 처리가 재개될 때까지 유지된다. 그리고, D 리버스 후에, 스톨 요인이 해소되면, 그것까지 유지되어 있던 상기한 포인터의 내용에 의거하여 프리젠테이션이 행해진다.
이상, 설명한 스톨의 발생에서부터 재차의 프리젠테이션의 실행까지의 처리의 흐름을 플로 차트로 정리한다.
도 18은 스톨의 발생에서부터 재차의 프리젠테이션과 디코드가 행해질 때까지의 처리의 흐름을 나타내는 플로 차트이다.
우선, 디코드부(109)에서 스톨이 검출되면(스텝 S301), 스톨하는 것이 확인된 명령 이후의 명령이 디코드부(109)에서 무효화되어, 그 명령에 관한 D 리버스가 실행된다(스텝 S302). 계속해서, 상술한 D 리버스용 포인터(256)의 내용의 생성과, 스톨하는 것이 확인된 명령이 속하는 스레드용의 포인터의 갱신이 실행된다(스텝 S303). 본 실시 형태에서는 여기까지의 처리가 1 사이클에서 실행된다.
여기서, D 리버스가 실행된 사이클과 동일한 사이클에서, 예를 들면 선행 명령의 커밋이 종료하여 필요한 오퍼랜드가 얻어진 등이라고 하는 바와 같이, 스톨 요인이 해소된 것으로 가정한다. 본 실시 형태에서는, 이 경우, 상기한 스텝 S301로부터 스텝 S303까지의 처리가 실행된 사이클의 다음 사이클에서는, 스톨하는 것이 확인된 명령이 속하는 스레드와는 다른 스레드에 대한 처리에 우선하여, 스톨하는 것이 확인된 명령이 속하는 스레드에 관한 재차의 프리젠테이션이 실행된다(스텝 S304). 그리고, 그 재차의 프리젠테이션(스텝 S304)의 다음 사이클에서, 스톨하는 것이 확인된 명령 이후의 명령이 디코드된다(스텝 S305).
이 도 18의 플로 차트가 나타내는 처리는 스톨 요인이 최단으로 해소된 것으로 가정하였을 때의 처리이며, 이러한 가정 이외의 경우에는, D 리버스가 실행된 후의 사이클에서는, 스톨 요인이 해소될 때까지, 스톨하는 것이 확인된 명령이 속하는 스레드와는 다른 스레드에 디코드부(109)가 내어져서, 이 스레드에 대한 처리가 우선적으로 실행된다.
여기서, CPU(10)에서 실행되는 프로그램에 따라서는, 상기한 바와 같이 스톨이 발생하였을 때에 스톨하는 것이 확인된 명령이 속하는 스레드와는 다른 스레드 의 처리를 우선적으로 실행하려고 해도, 그 다른 스레드가, CPU(10)에서 실행되고 있지 않는 아이들(idle) 상태에 있거나, 또는, 그 다른 스레드의 명령이 페치되어 있지 않고 처리 가능한 명령이 없는 상태에 있거나 하여, 우선해야 할 대상이 존재하지 않는 경우가 있다. 본 실시 형태에서는, 이러한 경우에는, 상술한 스톨 명령 이후의 명령의 무효화 및 D 리버스의 실행이 정지되고, 스톨 명령 이후의 명령이 디코드부(109)의 IWR(109a) 내에 그대로 두어진다. 본 실시 형태에서는, 이러한 처리를 가능하게 하기 위해, 우선해야 할 대상의 부재(不在)를 검출하는 부재 검출 회로가 구비되어 있다.
도 19는 부재 검출 회로를 나타내는 도면이다.
이 도 19에 나타낸 바와 같이, 본 실시 형태에서는, 현재 처리 중인 스레드와는 다른 스레드가 아이들 상태에 있는 경우에는, 그것이 OS로부터 통지된다. 또한, 현재 처리 중인 스레드와는 다른 스레드에 대해서 명령이 페치되어 있지 않고 처리 가능한 명령이 없는 상태에 있는 경우에는, 그것이 명령 버퍼(104)로부터 통지된다.
도 19에 나타낸 부재 검출 회로(257)는 상기한 2종류의 통지 중, 어느 한쪽의 통지가 있는 경우에 「1」을 출력하는 OR 연산자(257a)와, 이 OR 연산자(257a)가 「1」을 출력한 경우에, 스톨 명령 이후의 명령의 무효화 및 D 리버스의 실행의 억지 요건이 있는 것을 디코드부(109)에 통지하는 통지 회로(257b)를 구비하고 있다. 이 부재 검출 회로(257)로부터 상기한 억지 요건이 있는 것이 통지되면, 스톨 명령 이후의 명령이 디코드부(109)에 그대로 두어지게 된다.
이러한 억지 요건이 없고, 스톨 명령 이후의 명령의 무효화 및 D 리버스가 실행되어, 그들 명령이 속하는 스레드와는 다른 스레드에 디코드부(109)가 내어졌을 때에는, 그 다른 스레드의 명령의 처리가 우선적으로 행해지는 동시에, 명령 버퍼(104)에서 스톨 요인에 대한 감시가 행해진다. 그리고, 스톨 요인이 해소된 취지의 정보가 얻어지면, 명령 버퍼(104)는 스톨 명령이 속하는 스레드에 대해서 상술한 재차의 프리젠테이션을 행한다.
도 20은 스톨의 발생에서부터 스톨 요인에 대한 감시를 거쳐 재차의 프리젠테이션의 실행에 이르는 처리를 나타내는 플로 차트이다.
실행 자원을 확보할 수 없거나, 또는, 싱크 속성의 명령에 대해서 오퍼랜드가 얻어지고 있지 않는 것과 같은 스톨 요인 때문에 명령에 대해서 스톨하는 것이 확인되고, 그 명령에 대해서 D 리버스가 실행되면(스텝 S401), 명령 버퍼(109)에서 스톨 요인에 대한 감시가 행해진다(스텝 S402). 이 감시는 실행 자원으로서 사용되는 레지스터의 공간 상황이나 오퍼랜드가 저장되는 레지스터의 내용을 매(每)사이클 확인함으로써 행해진다. 그리고, 이 감시에서, 스톨 요인이 계속되고 있는 취지의 정보가 얻어진 경우에는(스텝 S402에서의 YES 판정), 명령 버퍼(109)는 스톨하고 있지 않은 다른 스레드의 명령의 프리젠테이션을 행한다(스텝 S403). 한편, 스톨 요인이 해소되어 있는 취지의 정보가 얻어진 경우에는(스텝 S402에서의 NO 판정), 명령 버퍼(109)는 스톨하고 있던 스레드의 명령에 대해서 재차의 프리젠테이션을 행한다(스텝 S404).
다음에, 명령 버퍼(109)의 IBR(109a)의 개방에 대해서 설명한다.
본 실시 형태에서는, 명령 버퍼(109)의 IBR(109a)은 IBR(109a) 중 8개의 명령 모두에 대해서 디코드부(109)에 의해 D 릴리스된 시점에서, 그들 8개의 명령이 소거되어 개방된다. 스톨의 발생이 없으면, IBR(109a) 중 8개의 명령은 디코드부(109)에서의 1회의 디코드로 4개씩 D 릴리스되므로, 2회의 디코드가 종료한 시점에서 IBR(109a)이 개방되게 된다.
여기서, 스톨의 발생에 따른 어중간한 위치로부터의 재차의 프리젠테이션이 있으면, 1회의 디코드로 D 릴리스되는 4개의 명령이 2개의 IBR(109a)에 걸치게 되는 경우가 있다. 본 실시 형태에서는, 이러한 경우에, IBR(109a)을 효율적으로 개방하기 위해, 다음과 같은 연구가 실시되고 있다.
도 21은 1회의 디코드로 D 릴리스되는 4개의 명령이 2개의 IBR(109a)에 걸치게 되는 경우에서의 IBR(109a)의 개방을 설명하기 위한 설명도이다.
이 도 21의 예에서는, 제 1 단의 IBR(109a) 중 5번째의 명령부터 세어서 4개의 명령이 디코드부(109)에 프리젠테이션된다. 여기서, 제 1 단의 IBR(109a) 중의 명령은 3개째에 상당하는 7번째의 명령에서 끝나므로, 상기한 포인터로 나타내는 다음에 명령이 취출되는 IBR(109a)의 단수에 따라, 그 단수의 IBR(109a) 중의 0번째의 명령이 4개째의 명령으로서 프리젠테이션된다. 도 21의 예에서는, 보존용 포인터(253)의 D_TH_NEXT_SEQ_IBR 정보(I15)가 나타낸 바와 같이, 다음에 명령이 취출되는 IBR(109a)의 단수는 「3」이며, 제 3 단의 IBR(109a) 중 0번째의 명령이 4개째의 명령으로서 프리젠테이션되고 있다.
프리젠테이션된 4개의 명령은 제 0 단으로부터 제 3 단까지의 4개의 IWR(109a)에 순차적으로 저장되고, 이 저장된 순번으로 디코드되어 D 릴리스된다. 이 때, 도 21의 예에서는, 제 2 단의 IWR(109a) 내의 명령이 D 릴리스된 시점에서, 명령 버퍼(104)의 제 1 단의 IBR(104a) 중 모든 명령에 대해서 D 릴리스되게 된다. 본 실시 형태에서는, 이와 같이, IBR(104a) 개방의 조건이 갖추어진 경우에는, 모든 IWR의 명령 디코드의 종료를 기다리지 않고 그 IBR(104a)의 개방이 행해진다. 도 21의 예에서는 제 2 단의 IWR(109a) 내의 명령이 D 릴리스된 시점에서, 제 1 단의 IBR(104a)의 개방이 행해지게 된다. 본 실시 형태에서는 이러한 개방 방법에 의해 처리의 효율화가 도모되고 있다.
이상, 설명한 바와 같이, 본 실시 형태의 CPU(10)에서는, 디코드부(109)에서 명령에 대해서 스톨하는 것이 확인된 경우에는, 동일 스레드 중에서 스톨 명령 이후의 명령이 무효화됨으로써, 디코드부(109)가 다른 스레드에 내어진다. 그리고, 스톨 명령이 속하는 스레드에 대해서는, 스톨 요인의 해소 후에, 프리젠테이션부터 재개된다. 이러한 처리에 의해, 도 8의 CPU(10)에서의, 리저베이션 스테이션(210)으로의 명령의 투입까지의 처리가 2종류의 스레드에 대해서 스무드하게 행해지게 된다.
이하, 도 8을 참조하여, CPU(10)에서의, 리저베이션 스테이션(210)으로의 명령 투입 이후의 처리에 대해서 설명한다.
디코드부(109)는, 상술한 바와 같이, 디코드 완료된 명령에 대하여, 「0」 내지 「63」의 IID를, 각 스레드에서의 디코드순으로 할당한다. 그리고, 디코드 완료된 명령을 IID와 함께 리저베이션 스테이션(210)에 건네준다. 또한, 본 실시 형태에서는, CSE(12)는, 상술한 바와 같이, 스레드 0용의 32개 엔트리군(127_0)과, 스레드 1용의 32개의 엔트리군(127_1)을 갖고 있다. 그리고, 디코드부(109)는 디코드 완료된 명령을 리저베이션 스테이션(210)에 건네줄 때에는, CSE(127)에서의, 디코드 대상의 명령이 속하는 스레드용의 엔트리군에서의 빈 엔트리에, 디코드 대상의 명령에 할당한 IID를 세트한다.
리저베이션 스테이션(210)은 실행에 필요한 입력 데이터가 갖추어진 명령 중 저장되어 있는 오래된 명령부터, 순차적으로 실행 파이프라인(220)에 투입한다.
실행 파이프라인(220) 각각은 도 6에 나타낸 6종류의 연산기 각각에 상당한다. 그리고, 실행 파이프라인(220)에서의 실행이 종료하면, 실행 결과가 레지스터 갱신 버퍼(230)에 저장된다. 이 레지스터 갱신 버퍼(230)는 도 6에 나타낸 GUB(115) 및 FUB(117)에 상당한다. 또한, 실행 파이프라인(220)에서의 실행 종료시에는, CSE(127)를 향하여 실행 완료 통지가 전송된다. 이 실행 완료 통지에는 그 실행 완료 통지에 대응하는 명령의 IID와, 그 명령의 커밋에 필요한 커밋 정보가 기재되어 있다. CSE(127)는 실행 완료 통지가 전송되어 오면, CSE(127)가 갖는 64개의 엔트리 중, 실행 완료 통지에 기재된 IID와 동일한 IID가 세트되어 있는 엔트리에, 그 실행 완료 통지에 기재된 커밋 정보를 저장한다.
또한, CSE(127)는 각 엔트리군(127_0, 127_1)에 저장되어 있는 각 명령에 대응하는 커밋 정보에 따른 레지스터의 갱신을, 인·오더 실행에 의해, 스레드 중의 처리순에 따라 행하는 명령 커밋부(127_3)를 갖고 있다.
도 22는 CSE(127)에서, 레지스터의 갱신이 인·오더 실행에 의해 행해지는 구조를 나타내는 개념도이다.
CSE(127)가 갖는 상기한 명령 커밋부(127_3)는 스레드 0에서 다음에 커밋해야 할 명령의 IID가 기재되는 스레드 0용 아웃 포인터(127_3a)와, 스레드 1에서 다음에 커밋해야 할 명령의 IID가 기재되는 스레드 1용 아웃 포인터(127_3b)와, 실제로 커밋하는 명령을 결정하는 CSE-윈도우(127_3c)를 갖고 있다.
CSE-윈도우(127_3c)는 스레드 0용 아웃 포인터(127_3a)의 IID가 세트되어 있는 엔트리와, 스레드 1용 아웃 포인터(127_3b)의 IID가 세트되어 있는 엔트리 중 어느 하나를 선택하여, 상기한 커밋 정보가 저장되어 있는 엔트리에 대응하는 명령을 커밋 대상으로 결정한다. 양쪽의 엔트리에 커밋 정보가 저장되어 있는 경우에는, 기본적으로 커밋 대상의 스레드를 교대로 교환한다.
이와 같이 커밋 대상의 명령이 결정되면, 명령 커밋부(127_3)는, 도 8에 나타낸 바와 같이, 그 명령이 속하는 스레드에 대응하는 프로그램 카운터 및 컨트롤 레지스터를 갱신한다. 또한, 명령 커밋부(127_3)는 도 6의 GPR(114)이나 FPR(116)에 상당하는, 스레드마다 설치되어 있는 레지스터(240_0, 240_1) 중, 커밋 대상의 명령이 속하는 스레드에 대응하는 레지스터를 갱신하도록 레지스터 갱신 버퍼(230)에 지시를 발행한다. 또한, 상기한 CSE(127)에 유지되어 있는 그 커밋 대상의 명령이 소거된다.
이상, 설명한 바와 같이, 본 실시 형태의 CPU(10)에서는 디코드부(109)에서 명령에 대해서 스톨하는 것이 확인된 경우에는, 디코드부(109)가 다른 스레드에 내어짐으로써 처리의 원활화와 효율화가 도모되고 있다.
그런데, 여기까지, SMT 기능을 갖는 CPU(10)에서의 복수 스레드의 명령의 처리를, 상기한 D 리버스나 재차의 프리젠테이션의 실행 등과 같은 연구에 의해 효율적으로 행하는 것에 대해서 설명해 왔다.
여기서, 이러한 연구에 의하면, 복수 스레드의 명령의 처리의 효율화에 더해서, 후술하는 다른 효과도 얻을 수 있다. 또한, 이 다른 효과에 대해서는, 본 실시 형태와 같은 SMT 기능을 갖는 CPU(10)뿐만 아니라, 싱글 스레딩 타입의 CPU에서도 얻을 수 있다. 이하, 이 다른 효과에 대해서, 설명을 간단한 것으로 하기 위해, 싱글 스레딩 타입의 CPU에서의 처리를 예로 들어 설명한다.
우선, 이 다른 효과가 어떠한 상황에서 얻어지는지에 대해서 설명한다.
도 23은 명령의 처리의 효율화와는 다른 효과가 얻어지는 상황을 설명하는 도면이다.
CPU에서 처리되는 명령 중에는, 디코드시에 복수의 명령 부분으로 분해되어, 복수 사이클에 걸쳐 디코드되는 멀티 플로(multi-flow) 명령이라고 불리는 명령이 있다. 도 23의 예에서는, 도면 중 1개째의 사이클(스텝 S451)에서, 디코드부(301)의 4개의 IWR(301a)에 저장된 4개의 명령(A, B, C, D) 중, 제 2 단의 IWR(301a)에 저장된 명령(C)이 2플로 타입의 멀티 플로 명령으로 되어 있다. 여기서, 이 명령에 후속하는 명령(D)이 선행 명령의 D 릴리스가 종료할 때까지 디코드할 수 없다. 제 2 단의 IWR(301a)에 저장된 명령(C)은 디코드에 2사이클을 필요로 하므로, 도 23에 나타낸 바와 같이 후속의 명령(D)이 스톨하게 된다. 계속되는 2개째의 사이클(스텝 S452)에서는, 명령(C)의 2사이클째의 디코드가 행해져서 후속의 명령(D)의 스톨이 계속되고, 3개째의 사이클(스텝 S453)에서, 드디어 후속의 명령(D)이 D 릴리스되어 실행이 개시된다.
여기서, 이 도 23에 나타낸 3개의 사이클 각각에서의 디코드수를 보면, 1개째의 사이클(스텝 S452)에서는 3개, 2개째의 사이클(스텝 S452)에서는 1개, 3개째의 사이클(스텝 S452)에서는 1개로 된다. 이와 같이, 이 도 23에 나타낸 예에서는, 1개밖에 명령이 디코드되지 않는 사이클이 연속해서 2사이클 계속되게 되어, 디코드에 관한 스루풋이 낮다.
그래서, 이러한 상황에, 상기한 D 리버스나 재차의 프리젠테이션의 실행 등과 같은 연구를 다음과 같이 활용함으로써, 디코드에 관한 스루풋이 향상된다고 하는, SMT 기능의 명령의 처리의 효율화와는 다른 효과를 얻을 수 있다.
도 24는 스루풋의 향상이라는 다른 효과도(圖)에 대해서 설명하는 도면이다.
이 도 24의 예에서도, 상기한 도 23과 마찬가지로, 명령 버퍼(401)의 4개의 IWR(401a)에 저장된 4개의 명령(A, B, C, D) 중, 제 2 단의 IWR(401a)에 저장된 명령(C)이 2플로 타입의 멀티 플로 명령이다.
여기서, 이 도 24의 예에서는, 1개째의 사이클(스텝 S461)에서 싱크 속성의 명령(D)에 대해서, 선행 명령이 멀티 플로 명령인 것으로부터 스톨이 발생하는 것이 확인되면, 즉시 그 명령(D)이 무효화되고, 명령 버퍼(도시되지 않음)에 대하여디코드부(401)로부터, 이 명령(D)에 대해서 D 리버스가 실행된다. 계속되는 2개째의 사이클(스텝 S462)에서는, 명령(C)의 2사이클째의 디코드가 행해진다. 그리고, 이 2개째의 사이클(스텝 S462)에서 명령(D)의 스톨 요인이 해소되므로, 다음 3개째 의 사이클(스텝 S463)에서는, 명령(D) 이후의 4개의 명령(D, E, F, G)이 4개의 IWR(401a)에 저장되어 디코드가 행해진다. 이 도 24에 나타낸 3개의 사이클 각각에서의 디코드수를 보면, 1개째의 사이클(스텝 S452)에서는 3개, 2개째의 사이클(스텝 S452)에서는 1개, 3개째의 사이클(스텝 S452)에서는 4개로 된다.
상기한 도 23의 예와 같이, D 리버스나 재차의 프리젠테이션의 실행 등이 행해지지 않을 때에는, 스톨 명령이 디코드될 때는, 그 명령밖에 디코드되지 않는 반면, 이 도 24에 나타낸 예와 같이, D 리버스나 재차의 프리젠테이션의 실행 등이 행해지면, 스톨 명령이 디코드될 때는, 그 명령 이후의 명령도 디코드되게 되므로 스루풋 향상의 효과가 얻어지게 된다.
또한, 여기까지 싱글 스레딩 타입의 CPU의 처리를 예로 들어, 멀티 플로 명령을 처리할 때의 스루풋 향상의 효과에 대해서 설명하였지만, 이러한 효과는 SMT 기능을 갖는 CPU에서 멀티 플로 명령을 처리할 때에도 동일하게 얻을 수 있다.
또한, 상기에서는 SMT 기능을 갖는 CPU로서, 2종류의 스레드의 명령을 동시에 처리하는 CPU(10)를 예시하였지만, SMT 기능을 갖는 CPU는, 예를 들면 3종류의 스레드의 명령을 동시에 처리하는 것 등이어도 된다.

Claims (7)

  1. 복수 명령을 갖는 스레드(thread)로부터 명령을 취득하는 명령 페치(fetch)부와,
    상기 취득된 명령을 유지하는 명령 버퍼와,
    상기 명령 버퍼로부터 출력된 명령을 유지하여 해독하는 명령 디코드부와,
    상기 해독된 명령을 실행하는 명령 실행부와,
    상기 명령 버퍼에 유지된 명령을 상기 명령 디코드부에 투입하는 경우에서, 상기 명령 버퍼에 유지된 명령에 선행하는 명령이 상기 명령 실행부를 사용 중일 때에는, 상기 명령 디코드부가 유지하는 명령과 상기 명령 디코드부가 유지하는 명령의 후속 명령을 무효화하는 동시에, 상기 명령 디코드부가 유지하는 명령과 상기 명령 디코드부가 유지하는 명령의 후속 명령을 상기 명령 버퍼에 다시 유지시키는 명령 투입 제어부를 갖는 것을 특징으로 하는 명령 제어 장치.
  2. 제 1 항에 있어서,
    상기 명령 페치부는, 복수의 상기 스레드로부터 명령을 취득하고,
    상기 명령 버퍼는, 상기 취득된 복수의 스레드에 포함되는 명령을 유지하고,
    상기 명령 디코드부는, 상기 복수의 스레드 중 어느 1개의 스레드에 속하는 명령을 유지하고,
    상기 명령 투입 제어부가, 상기 명령 버퍼에 다시 유지시킨 상기 스레드에 속하는 상기 명령 디코드부가 유지하는 명령과 상기 명령 디코드부가 유지하는 명령의 후속 명령을 상기 명령 디코드부에 재투입하는 경우에는, 상기 스레드와는 상이한 스레드에 속하는 명령을 상기 명령 디코드부에 유지하는 것을 특징으로 하는 명령 제어 장치.
  3. 제 2 항에 있어서,
    상기 명령 디코드부는, 상기 스레드와는 상이한 스레드에 속하는 명령을 상기 명령 투입 제어부가 유지하고 있지 않은 경우에는, 상기 명령 투입 제어부에 상기 재투입을 요구하지 않고, 상기 재투입의 대상으로 되는 명령을 유지하는 것을 특징으로 하는 명령 제어 장치.
  4. 제 1 항 내지 제 4 항 중 어느 한 항에 있어서,
    상기 명령 투입 제어부는, 상기 재투입의 대상으로 되는 명령이 실행 가능한 것을 나타내는 정보를 갖고, 상기 명령 디코드부로부터 상기 재투입이 요구된 경우에, 상기 정보 정보에 의거하여 상기 재투입을 행하는 것을 특징으로 하는 명령 제어 장치.
  5. 제 1 항 내지 제 4 항 중 어느 한 항에 있어서,
    상기 명령 투입 제어부는, 상기 명령 디코드부에 투입하는 상기 명령을 유지하는 명령 투입 버퍼를 갖고, 상기 명령 투입 버퍼에 유지되어 있는 명령이 모두 상기 명령 디코드부에 의해 디코드된 경우에는, 상기 명령 투입 버퍼를 개방하는 것을 특징으로 하는 명령 제어 장치.
  6. 제 1 항 내지 제 5 항 중 어느 한 항에 있어서,
    상기 명령 디코드부는, 상기 해독한 명령이 실행 가능한 조건은 갖추고 있지 않다고 판단한 경우에는, 상기 명령 투입 제어부에 대하여, 상기 명령의 후속 명령의 재투입을 요구하는 것을 특징으로 하는 명령 제어 장치.
  7. 명령을 유지하는 명령 버퍼부와, 상기 명령 버퍼부로부터 출력된 명령을 유지하여 해독하는 명령 디코드부와, 해독된 명령을 실행하는 명령 실행부를 갖는 명령 제어 장치의 명령 제어 방법에 있어서,
    상기 명령 버퍼에 유지된 명령을 상기 명령 디코드부에 투입하는 경우에서, 상기 명령 버퍼에 유지된 명령에 선행하는 명령이 상기 명령 실행부를 사용 중인지의 여부를 판단하고,
    상기 명령 버퍼에 유지된 명령에 선행하는 명령이 상기 명령 실행부를 사용 중일 때에는, 상기 명령 디코드부가 유지하는 상기 명령과 상기 명령 디코드부가 유지하는 명령의 후속 명령을 무효화하고,
    상기 명령 디코드부가 유지하는 명령과 상기 명령 디코드부가 유지하는 명령의 후속 명령을 상기 명령 버퍼에 다시 유지시키는 것을 특징으로 하는 명령 제어 방법.
KR1020097025599A 2007-06-20 2007-06-20 명령 제어 장치 및 명령 제어 방법 KR101122180B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2007/062426 WO2008155840A1 (ja) 2007-06-20 2007-06-20 命令制御装置及び命令制御方法

Publications (2)

Publication Number Publication Date
KR20100007972A true KR20100007972A (ko) 2010-01-22
KR101122180B1 KR101122180B1 (ko) 2012-03-20

Family

ID=40156006

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097025599A KR101122180B1 (ko) 2007-06-20 2007-06-20 명령 제어 장치 및 명령 제어 방법

Country Status (6)

Country Link
US (1) US20100100709A1 (ko)
EP (1) EP2169539A4 (ko)
JP (1) JP5168277B2 (ko)
KR (1) KR101122180B1 (ko)
CN (1) CN101689109A (ko)
WO (1) WO2008155840A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10346173B2 (en) 2011-03-07 2019-07-09 Oracle International Corporation Multi-threaded instruction buffer design
US8984511B2 (en) * 2012-03-29 2015-03-17 Advanced Micro Devices, Inc. Visibility ordering in a memory model for a unified computing system
US10095518B2 (en) * 2015-11-16 2018-10-09 Arm Limited Allowing deletion of a dispatched instruction from an instruction queue when sufficient processor resources are predicted for that instruction
CN110832653A (zh) 2017-07-07 2020-02-21 大金工业株式会社 振动传感器和压电元件

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW353732B (en) * 1994-03-31 1999-03-01 Ibm Processing system and method of operation
TW260765B (ko) * 1994-03-31 1995-10-21 Ibm
US5933627A (en) * 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
US6016542A (en) * 1997-12-31 2000-01-18 Intel Corporation Detecting long latency pipeline stalls for thread switching
US6889319B1 (en) * 1999-12-09 2005-05-03 Intel Corporation Method and apparatus for entering and exiting multiple threads within a multithreaded processor
US6609193B1 (en) * 1999-12-30 2003-08-19 Intel Corporation Method and apparatus for multi-thread pipelined instruction decoder
US6694425B1 (en) * 2000-05-04 2004-02-17 International Business Machines Corporation Selective flush of shared and other pipeline stages in a multithread processor
JP3564445B2 (ja) * 2001-09-20 2004-09-08 松下電器産業株式会社 プロセッサ、コンパイル装置及びコンパイル方法
JP3769249B2 (ja) * 2002-06-27 2006-04-19 富士通株式会社 命令処理装置および命令処理方法
JP3727324B2 (ja) * 2004-04-26 2005-12-14 松下電器産業株式会社 プロセッサ及びコンパイル装置
US7657883B2 (en) * 2005-02-04 2010-02-02 Mips Technologies, Inc. Instruction dispatch scheduler employing round-robin apparatus supporting multiple thread priorities for use in multithreading microprocessor
US7613904B2 (en) * 2005-02-04 2009-11-03 Mips Technologies, Inc. Interfacing external thread prioritizing policy enforcing logic with customer modifiable register to processor internal scheduler
JP2006343872A (ja) * 2005-06-07 2006-12-21 Keio Gijuku マルチスレッド中央演算装置および同時マルチスレッディング制御方法

Also Published As

Publication number Publication date
JPWO2008155840A1 (ja) 2010-08-26
WO2008155840A1 (ja) 2008-12-24
US20100100709A1 (en) 2010-04-22
KR101122180B1 (ko) 2012-03-20
CN101689109A (zh) 2010-03-31
EP2169539A4 (en) 2010-12-29
JP5168277B2 (ja) 2013-03-21
EP2169539A1 (en) 2010-03-31

Similar Documents

Publication Publication Date Title
KR101148495B1 (ko) 파이프라인 프로세서에서 조건 명령 실행을 촉진시키기 위해 로컬 조건 코드 레지스터를 이용하기 위한 방법 및 장치
TWI423123B (zh) 用於推測性指令之無效的通用分支系統、其方法、其識別器與其電腦可讀取儲存媒體
US7734897B2 (en) Allocation of memory access operations to memory access capable pipelines in a superscalar data processing apparatus and method having a plurality of execution threads
JP5631976B2 (ja) マルチスレッドマイクロプロセッサにおける命令の発行をスケジュールするための方法及び装置
CN108196884A (zh) 利用生成重命名的计算机信息处理器
JP4327008B2 (ja) 演算処理装置及び演算処理装置の制御方法
US7203821B2 (en) Method and apparatus to handle window management instructions without post serialization in an out of order multi-issue processor supporting multiple strands
KR101122180B1 (ko) 명령 제어 장치 및 명령 제어 방법
US8261049B1 (en) Determinative branch prediction indexing
US20170139708A1 (en) Data processing
JP5155655B2 (ja) マイクロプロセッサ出力ポート、及び、そこから提供された命令の制御
US7962732B2 (en) Instruction processing apparatus
US9158696B2 (en) Hiding instruction cache miss latency by running tag lookups ahead of the instruction accesses
US20100031011A1 (en) Method and apparatus for optimized method of bht banking and multiple updates
JP5093237B2 (ja) 命令処理装置
US7472264B2 (en) Predicting a jump target based on a program counter and state information for a process
JP4631442B2 (ja) プロセッサ
US20080282051A1 (en) Methods and arrangements for controlling results of memory retrival requests
JPWO2012132214A1 (ja) プロセッサ及びその命令処理方法
US20220075624A1 (en) Alternate path for branch prediction redirect
US20040128488A1 (en) Strand switching algorithm to avoid strand starvation
EP2169540A1 (en) Processing device
JP3971780B2 (ja) 命令制御方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee