KR101100145B1 - 명령실행 제어장치 및 명령실행 제어방법 - Google Patents

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

Info

Publication number
KR101100145B1
KR101100145B1 KR1020097026497A KR20097026497A KR101100145B1 KR 101100145 B1 KR101100145 B1 KR 101100145B1 KR 1020097026497 A KR1020097026497 A KR 1020097026497A KR 20097026497 A KR20097026497 A KR 20097026497A KR 101100145 B1 KR101100145 B1 KR 101100145B1
Authority
KR
South Korea
Prior art keywords
thread
entry
execution
instruction
station
Prior art date
Application number
KR1020097026497A
Other languages
English (en)
Other versions
KR20100009593A (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 KR20100009593A publication Critical patent/KR20100009593A/ko
Application granted granted Critical
Publication of KR101100145B1 publication Critical patent/KR101100145B1/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, 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
    • G06F9/38Concurrent instruction execution, e.g. pipeline, 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
    • 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution

Abstract

복수의 스레드를 동시 멀티스레드(simultaneous multi-thread) 방식으로 동작하기 위한 명령실행 제어장치에 있어서, 동시 멀티스레드로 동작하고 있을 때에, 명령이 일정기간 완료되지 않은 상태를 검출하고, 모든 레저베이션 스테이션(reservation station)(5,6,7)이, 결정된 스레드만 실행할 수 있도록 제어하는 스레드선택회로(30)를 설치하였다. 레저베이션 스테이션(5,6,7)으로부터 실행할 수 없는 엔트리가 있는 상태인 경우에는, 실행계속 되고 있는 스레드의 실행을 정지함으로써 실행할 수 없는 스레드의 엔트리를 실행 가능한 상태로 할 수 있다
Figure R1020097026497
명령실행 제어장치, 동시 멀티스레드(simultaneous multi-thread), 레저베이션 스테이션(reservation station), 스레드(thread)

Description

명령실행 제어장치 및 명령실행 제어방법{INSTRUCTION EXECUTION CONTROLLER AND INSTRUCTION EXECUTION CONTROL METHOD}
본 발명은 복수의 스레드가 동시 멀티스레드(simultaneous multi-thread) 방식으로 동작하고, 아웃 오브 오더(out of order) 처리로 명령제어를 행하는 명령실행 제어장치 및 명령실행 제어방법에 관한 것으로서, 특히, 동시 멀티스레드 방식으로 동작할 경우의 행(hang) 상태의 발생을 방지하는 명령실행 제어장치 및 명령실행 제어방법에 관한 것이다.
CPU(Central Processor Unit)의 처리 고속화가 요구되고 있다. 이 때문에, 종래부터 여러가지 기술을 사용하여 CPU의 처리를 향상시켜 왔다. 그 방법으로서, 파이프라인처리(pipeline processing)나, 병렬 처리(parallel processing)를 행하는 슈퍼스칼라(superscalar) 방식이나, 프로그램 명령의 순서대로 실행을 하지 않고, 입력 데이터가 갖추어진 명령으로부터 실행을 행하는 아웃 오브 오더(out of order) 실행방식이 있다.
아웃 오브 오더 실행방식은, 앞의 명령 처리에 필요한 데이터가 갖추어지지 않고 있어도, 뒤의 명령 처리에 필요한 데이터가 갖추어진 경우, 뒤의 명령부터 먼저 실행하는 CPU의 성능을 향상하기 위한 기술이다(예를 들면, 특허문헌1 참조).
예를 들면, 프로그램에 기술된 순서로 명령을 처리할 경우에, 앞의 명령 처리1이 메모리 액세스를 따르는 명령이고, 뒤의 명령 처리2가 메모리 액세스를 따르지 않는 명령이라고 가정하면, 명령 처리1의 메모리 액세스와 병행하여 명령 처리2를 실행하고, 명령 처리2의 실행 후 메모리 액세스가 종료한 명령 처리1을 실행한다.
또한, 단일의 프로그램을 주행하는 것이 아니고, 복수의 프로그램을 주행함으로써 CPU의 처리를 향상시키는 멀티스레드 방식도 제안되어 있다(예를 들면, 특허문헌2 참조).
복수의 프로그램을 주행하는 멀티스레드 방식은 CPU의 프로그래머블 자원(programmable resource)을 복수 조(組) 준비해 둠으로써 소프트웨어로부터 보면 외관상은 복수의 CPU로 보이기 때문에 복수의 프로그램을 실행하는 것이 가능해지는 구조이다.
이러한 멀티스레드 방식의 하나로서 VMT(Vertical Multi Threading) 방식이 있다. 이 방식은, 동시에 하나의 프로그램만 주행할 수 있지만, 장시간의 데이터 기다림이 발생한 때나, 일정한 시간 간격 등에서 프로그램을 전환하여 주행한다. VMT 방식의 회로량은 프로그래머블 자원을 프로그램 수만큼 준비하지 않으면 안 되지만, 동시에, 하나의 프로그램만 주행하기 때문에 추가하는 회로량도 적고 실현이 용이하다.
한편, 다른 멀티스레드의 방식으로서 복수의 프로그램을 동시에 주행하는 동시 멀티스레드 방식(SMT 방식)이 있다. 이 방식은 복수의 프로그램이 동시에 주행 하기 때문에 단일의 프로그램이 주행하는 때보다 회로의 제어가 복잡해지거나 리소스(resource)의 증가가 예상되지만, 동시에 복수의 프로그램이 주행하기 때문에 효율적으로 회로를 사용하는 것이 가능해 진다.
아웃 오브 오더 실행을 처리하기 위한 레저베이션 스테이션(Reservation Station)의 제어는, 기능을 실행할 준비가 된 엔트리부터 기능 실행을 행하는 것이 가능해 진다.
기능 실행이 파이프라인처리(pipeline processing)로 행해져서 기능 실행에 필요한 시간이 상이한 종류의 명령을 실행할 경우, 레저베이션 스테이션은 기능 실행의 결과를 출력하는 타이밍이 동일하지 않도록 엔트리의 실행을 제어한다.
도 15는 부동(浮動)소수점용 레저베이션 스테이션의 엔트리 실행 제어의 타임 차트 도면이다. 부동소수점 연산에서는 파이프라인처리로 실행된 결과가 결과 레지스터에 저장되지만, 레저베이션 스테이션은 결과 레지스터에 저장되는 타이밍이 겹치지 않게 실행할 엔트리를 선택한다.
도 15에서, 레저베이션 스테이션으로부터 실행되는 엔트리가 실행에 4사이클이 필요한 엔트리(선행 명령)이고, 후속의 명령이 실행에 2사이클이 필요한 엔트리일 경우의 후속 명령의 제어예를 나타낸다.
도 15에서, T1∼T7은 사이클, P는 레저베이션 스테이션으로부터 실행 엔트리를 선택하는 처리, B는 기능 실행에 필요한 오퍼랜드 데이터(operand data)의 판독처리, X는 기능 실행 및 최후의 사이클에서 실행 결과를 결과레지스터에 저장하는 처리, U는 기능 실행의 결과를 레지스터갱신버퍼에 저장하는 처리를 나타낸다.
선행 명령은 기능 실행에 X1, X2, X3, X4의 4사이클이 필요하고, 후속 명령은 기능 실행에 X1, X2의 2사이클이 필요하다. 사이클T1에서 레저베이션 스테이션이 선행 명령을 선택한 경우, U가 겹치지 않기 때문에 T2의 타이밍에서는 2사이클의 후속 명령이 실행 가능해진다. T3의 타이밍에서는, 2사이클의 후속 명령을 실행한 경우 4사이클의 선행 명령과 결과레지스터에 저장되는 타이밍U(T7)이 동일해지기 때문에 실행 불가능이 된다. 그리고, T4의 타이밍에서는 2사이클의 후속 명령이 실행 가능해진다.
도 16은 이러한 파이프라인 제어의 레저베이션 스테이션 선택 동작에 의해, 단일 스레드에서 동작하고 있는 경우의 엔트리 실행예를 나타내고, 도면 중, P, B, X, U가 가리키는 것은, 도 15에서 나타낸 것과 동일하다.
도 16은, 실행에 4사이클이 필요한 엔트리가 연속하여 레저베이션 스테이션으로부터 선택되고 있을 때에, 실행에 2사이클이 필요한 엔트리가 명령디코더로부터 디코딩되고, 그 후에는, 실행에 4사이클이 필요한 엔트리가 명령디코더로부터 연속해서 디코딩된 상황의 타임 차트이다.
레저베이션 스테이션은 실행 가능해진 엔트리로부터 엔트리를 발행(실행)한다. 또한, 동시에 몇 개의 실행 가능한 엔트리가 있을 경우에는 디코딩된 순서대로 엔트리를 선택하여 실행한다.
이 때문에, 기능 실행의 준비가 되어 있는 엔트리이더라도, 먼저 실행하고 있는 엔트리의 결과를 출력하는 타이밍에 따라 실행 가능한 엔트리가 되지 않는 엔트리가 발생할 경우가 있다.
이러한 상황이 연속해서 장시간 계속될 경우가 되면, 레저베이션 스테이션으로부터 실행할 수 없게 된다. 도 16에서는, 실행에 2사이클이 필요한 엔트리가 실행 가능해져서 레저베이션 스테이션으로부터 실행하려고 하더라도, 4사이클의 선행 명령과 결과레지스터에 저장되는 타이밍이 동일해지기 때문에 실행불가능한 상태가 된다.
단일 스레드의 경우에는 레저베이션 스테이션으로부터 발행할 수 없는 상태가 되고나서, 어떤 일정수의 명령이 명령디코더로부터 디코딩되면 명령 완료 제어 기능의 엔트리가 풀(FULL) 상태가 된다.
즉, 레저베이션 스테이션으로부터 발행할 수 없어서 명령 완료를 할 수 없게 되기 때문이다. 후속 명령은 레저베이션 스테이션으로부터는 실행할 수 있지만, 명령 완료는 할 수 없는 상태가 된다.
이 때문에, 명령 완료를 제어하는 기능의 엔트리가 풀(FULL) 상태가 되고, 명령디코더로부터 명령이 디코딩되지 않는 상태(명령디코더가 정지한 상태)가 된다. 명령이 디코딩되지 않기 때문에 레저베이션 스테이션에 새로운 엔트리가 작성되지 않으므로, 실행할 수 없었던 엔트리(도 16의 2사이클 엔트리)가 예를 들면, 사이클T5에서 실행할 수 있게 되고, 명령의 완료도 가능해진다
특허문헌 1: 일본국 공개특허공보 제2007-87108호
특허문헌 2: 일본국 공표특허공보 제2006-502504호(WO2004/034209호)
한편, 동시 멀티스레드 방식에서는 레저베이션 스테이션의 엔트리를 스레드간에 공유하여 구성할 경우, 레저베이션 스테이션의 엔트리의 스레드에 관계없이, 기능 실행의 준비가 된 엔트리 중 먼저 실행하고 있는 엔트리의 결과를 출력하는 타이밍이 동일하게 되는 엔트리를, 실행 가능한 엔트리로서 레저베이션 스테이션으로부터 선택되어 실행된다.
이러한 동시 멀티스레드 방식에서도 싱글스레드(single thread) 방식과 마찬가지로, 기능 실행의 준비가 된 엔트리라고 하더라도, 먼저 실행하고 있는 엔트리의 결과를 출력하는 타이밍에 따라 실행 가능한 엔트리가 되지 않는 엔트리가 발생할 경우가 있다. 이러한 상황이 연속하여 장시간 계속될 경우가 되면, 레저베이션 스테이션으로부터 실행할 수 없게 된다.
도 17은 동시 멀티스레드에서 2개의 스레드0,1이 동작하고 있을 때에, 스레드0에, 실행에 4사이클이 필요한 엔트리가 연속해서 레저베이션 스테이션으로부터 실행되고 있고, 명령디코더로부터 실행에 4사이클이 필요한 명령이 디코딩되고 있는 상황의 예를 나타낸다.
이러한 상황에서, 스레드1에, 실행에 2사이클이 필요한 엔트리가 명령디코더로부터 디코딩되고, 그 후에는, 스레드0에 실행에 4사이클이 필요한 엔트리가 연속해서 디코딩되면, 실행에 2사이클이 필요한 스레드1의 엔트리는 레저베이션 스테이션으로부터 실행하려고 해도, 선행 명령과 결과레지스터에 저장되는 타이밍이 동일해지기 때문에 실행불가능한 상태가 된다.
동시 멀티스레드의 경우에는, 싱글스레드 방식과는 달리 레저베이션 스테이션으로부터 실행할 수 없는 엔트리가 발생한 경우에도, 다른 스레드는 리소스가 풀(FULL) 상태가 되지 않고 동작하는 것이 가능하기 때문에, 단일 스레드와 같이 명령디코더가 정지하는 경우는 없다.
즉, 동시 멀티스레드 방식에서는 스레드0의 명령이 명령을 실행한 후에도 완료할 수 있으므로, 명령디코더는 스레드0의 명령을 디코딩하는 것이 가능하다. 이 때문에, 스레드0이 머무르지 않고 계속해서 동작하는 것이 가능하다.
그러나, 스레드1의 엔트리는 레저베이션 스테이션으로부터 실행할 수 없는 상태가 되기 때문에, 명령을 완료할 수 없게 되어 행(hang) 상태에 빠지게 된다.
즉, 레저베이션 스테이션으로부터 실행할 수 없는 상태인 경우, 일정 기간 명령을 완료하는 것이 이루어져 있지 않은 상태(행 상태)를 이상(異常) 상태로서 검출하고 CPU가 정지하게 된다.
따라서, 본 발명의 목적은 동시 멀티스레드 방식의 처리에 있어서, 행(hang) 상태가 되기 전에 레저베이션 스테이션의 엔트리를 실행 가능한 상태로 하기 위한 명령실행 제어장치 및 명령실행 제어방법을 제공하는 것에 있다.
또한, 본 발명의 다른 목적은 동시 멀티스레드 방식의 처리에 있어서, 레저베이션 스테이션의 엔트리를 실행 가능한 상태로 하는 동시에, 대폭적인 성능저하를 방지하기 위한 명령실행 제어장치 및 명령실행 제어방법을 제공하는 것에 있다.
또한, 본 발명의 다른 목적은 동시 멀티스레드 방식의 처리에 있어서, 레저베이션 스테이션의 엔트리를 실행 가능한 상태로 하여, CPU의 정지를 방지하기 위한 명령실행 제어장치 및 명령실행 제어방법을 제공하는 것에 있다.
과제를 해결하기 위한 수단
이러한 목적의 달성을 위해, 본 발명의 명령실행 제어장치는, 복수의 스레드가 동시 멀티스레드 방식으로 동작하고, 아웃 오브 오더 처리로 명령제어를 행하는 명령실행 제어장치에 있어서, 명령을 디코딩하는 명령디코더와, 명령디코더로부터 명령을 받고, 연산처리를 제어하는 연산처리 레저베이션 스테이션(reservation station)과, 주기억 오퍼랜드 어드레스 생성을 제어하는 주기억 레저베이션 스테이션과, 실행된 명령을 프로그램의 순서대로 명령이 완료하도록 제어하는 명령제어기구와, 상기 명령제어기구가 하나의 스레드의 명령이 일정 기간 완료할 수 없었던 것을 검출한 것에 따라, 상기 모든 레저베이션 스테이션으로부터 실행 가능한 엔트리의 스레드를 동일한 스레드로 선택하도록 제어하는 행(hang) 방지회로를 갖는다.
또한, 본 발명의 명령실행 제어방법은, 복수의 스레드가 동시 멀티스레드 방식으로 동작하고, 아웃 오브 오더 처리로 명령제어를 행하는 명령실행 제어방법에 있어서, 연산처리 레저베이션 스테이션에 의해, 명령디코더로부터의 명령으로부터 엔트리를 작성하고, 실행 준비가 된 엔트리를 연산처리기구에 발행하는 스텝과, 주기억 레저베이션 스테이션에 의해, 상기 명령으로부터 엔트리를 작성하고, 실행 준비가 된 엔트리를 주기억 오퍼랜드 어드레스 생성기에 발행하는 스텝과, 실행된 명령을 프로그램의 순서대로 명령이 완료하도록 제어하는 스텝과, 하나의 스레드의 명령이 일정 기간 완료할 수 없었던 것을 검출한 것에 따라, 상기 모든 레저베이션 스테이션으로부터 실행 가능한 엔트리의 스레드를 동일한 스레드로 선택하는 스텝을 갖는다.
또한 본 발명은, 바람직하게는, 상기 행 방지회로는 상기 일정 기간 완료할 수 없었던 것을 검출한 것에 따라, 상기 레저베이션 스테이션으로부터 실행할 엔트리의 스레드를 동일한 스레드로 선택하기 위한 스레드선택회로를 갖는다.
또한 본 발명은, 바람직하게는, 상기 행 방지 회로는, 상기 스레드선택회로에서 선택된 스레드와, 상기 레저베이션 스테이션의 엔트리의 스레드가 일치했을 때에, 상기 엔트리를 상기 레저베이션 스테이션으로부터 실행하는 것이 가능하게 하기 위한 실행가능선택회로를 더 갖는다.
또한 본 발명은, 바람직하게는, 상기 스레드선택회로는, 시간의 경과에 의해 선택할 스레드를 변경하는 스레드선택회로로 구성된다.
또한 본 발명은, 바람직하게는, 상기 스레드선택회로는, 동작하고 있는 스레드를 나타내는 신호에 따라, 동작하지 않는 스레드의 선택을 금지한다.
또한 본 발명은, 바람직하게는, 상기 행 방지 회로는 상기 완료할 수 없었던 명령이 완료한 때에는, 상기 레저베이션 스테이션의 제어를 정지한다.
또한 본 발명은, 바람직하게는, 상기 레저베이션 스테이션은, 상기 명령디코더로부터의 명령을 상기 레저베이션 스테이션에 엔트리하는 엔트리생성회로와, 상기 레저베이션 스테이션으로부터 실행 가능한 엔트리를 선택하는 실행엔트리선택회로를 갖는다.
또한 본 발명은, 바람직하게는, 상기 연산처리 레저베이션 스테이션은, 상기 실행의 준비가 된 엔트리가 상기 선행 엔트리의 실행 또는 실행 결과의 저장 타이밍과 겹치지 않는 타이밍에서 상기 실행의 준비가 된 엔트리를 실행한다.
발명의 효과
동시 멀티스레드로 동작하고 있을 때에 명령이 일정기간 완료되지 않은 상태를 검출하고, 모든 레저베이션 스테이션이, 결정된 스레드만 실행할 수 있도록 제어하기 때문에, 레저베이션 스테이션으로부터 실행할 수 없는 엔트리가 있는 상태인 경우에는 실행계속 되고 있는 스레드의 실행을 정지함으로써 실행할 수 없는 스레드의 엔트리를 실행 가능한 상태로 할 수 있다.
도 1은 본 발명의 정보처리장치의 일실시예의 블럭도.
도 2는 본 발명의 일실시예의 명령실행 제어장치의 구성도.
도 3은 도 2의 명령실행 제어장치의 동작 흐름도.
도 4는 도 2의 명령실행 제어장치의 동작 설명도.
도 5는 도 2의 명령실행 제어장치에 의한 스레드 선택 동작의 설명도.
도 6은 도 2의 스레드선택회로의 블럭도.
도 7은 도 6의 실행가능 선택회로의 실행 선택처리 흐름도.
도 8은 도 6의 스레드선택회로의 스레드 선택 동작의 설명도.
도 9는 도 2의 부동소수점 레저베이션 스테이션의 동작 설명도.
도 10은 도 2의 고정소수점 레저베이션 스테이션의 동작 설명도.
도 11은 도 6의 스레드선택회로의 스레드 시간 변경 동작의 설명도.
도 12는 도 6의 스레드 결정 회로의 회로도.
도 13은 도 6의 스레드ID 생성회로의 회로도.
도 14는 도 6의 스레드 전환시간 선택회로의 회로도.
도 15는 종래의 레저베이션 스테이션의 엔트리 실행 동작의 설명도.
도 16은 종래의 싱글스레드 방식의 엔트리 실행 동작의 설명도.
도 17은 종래의 멀티스레드 방식의 엔트리 실행 동작의 설명도.
부호의 설명
1: 명령 페치 어드레스 생성기
2: 1차 명령캐시
3: 명령버퍼
4: 명령디코더
5,6,7: 레저베이션 스테이션
10: 오퍼랜드 어드레스 생성기
12,15: 연산기
13,16: 갱신버퍼
14,17: 레지스터
30: 스레드선택회로
50,60,70: 엔트리생성회로
52,62,72: 실행가능선택회로
56,66,76: 실행엔트리선택회로
54: 주기억 레저베이션 스테이션
64,74: 연산처리 레저베이션 스테이션
이하, 본 발명의 실시예를 도면에 따라 정보처리장치, 명령실행 제어장치, 행(hang)방지기구, 스레드선택회로, 다른 실시예의 순으로 설명한다. 그러나, 본 발명은 하기 실시예에 한정되지 않고 여러가지의 변형이 가능하다.
(정보처리장치)
도 1은 본 발명의 정보처리장치의 일실시예의 전체도이다. 도 1에 나타나 있는 바와 같이, 1차 명령캐시(2)와, 1차 데이터캐시(11)는 도면에 나타나 있지 않은 주기억에 접속된 2차 캐시에 접속한다.
명령 페치를 행하기 위해서, 명령 페치 어드레스 생성기(1)는 명령 어드레스를 선택하고, 선택된 명령 어드레스에 대한 명령 페치 리퀘스트를 1차 명령캐시(2)에 제공한다. 1차 명령캐시(2)로부터 페치된 명령은 명령버퍼(3)에 저장된다. 명령버퍼(3)로부터 프로그램의 순서대로 명령디코더(4)에 명령 공급을 행한다.
명령디코더(4)는 프로그램의 순서대로 명령 디코딩을 행한다. 명령디코더(4)는 디코딩하는 명령의 종류에 따라, 명령의 실행을 제어하는 주기억 오퍼랜드 어드레스 생성용 레저베이션 스테이션 유닛(RSA: Reservation Station for Address generate)(5), 고정소수점연산용 레저베이션 스테이션 유닛(RSE: Reservation Station for Execute)(6), 부동소수점연산용 레저베이션 스테이션 유닛(RSF: Reservation Station for Floating)(7), 분기명령용 레저베이션 스테이션 유닛(RSBR: Reservation Station for BRanch)(8)에 필요한 엔트리를 작성한다.
즉, 명령디코더(4)는 페치한 명령을 인 오더(in order)로 디코딩하고, 디코딩된 명령은 기능 실행을 제어하는 레저베이션 스테이션 유닛(5,6,7,8,9)에 명령의 종류에 따라 각각 저장된다. 그리고, 레저베이션 스테이션 유닛은 연산용의 레저베이션 스테이션 유닛(6, 7)과, 주기억 오퍼랜드 어드레스 생성용의 레저베이션 스테이션 유닛(5)을 구비한다.
또한, 모든 디코딩된 명령에 대한 명령의 완료를 제어하는 커밋 스택 엔트리(CSE: Commit Stack Entry)(9)에 엔트리를 작성한다.
디코딩된 명령이 RSA(5)에 엔트리를 작성한 때에, 로드 명령인 경우에는 RSA(5)가 오퍼랜드 어드레스 생성기(10)에 오퍼랜드 어드레스의 생성을 지시하고, 1차 데이터캐시(11)로부터 대응하는 데이터를 고정소수점갱신버퍼(GUB: General Update Buffer)(13)와 부동소수점갱신버퍼(FUB: Floating Update Buffer)(16)에서 판독한다.
또한, 디코딩된 명령이 RSE(6), RSF(7)에 엔트리를 작성한 경우에는 각각 연산기(12, 15)를 동작시켜 대응하는 연산처리를 행한다. 디코딩된 명령이 RSA(5), RSE(6), RSF(7)에 엔트리를 작성한 경우에, GUB(13)과 FUB(16)에 대응하는 레지스터 리네임(register rename)을 행함으로써 아웃 오브 오더 실행을 행하는 것이 가능해 지고, 실행 결과는 GUB(13), FUB(16)에 저장된다.
레저베이션 스테이션(5,6,7)에 의해 아웃 오브 오더로 실행된 명령은, CSE(9)의 제어에 의해 프로그램의 순서대로 명령의 완료를 행한다. 그리고, 완료한 명령에 대하여만 고정소수점 레지스터(14), 부동소수점 레지스터(17), 프로그램 카운터(PC, NEXT_PC)(18,19) 등의 프로그래머블 자원의 갱신을 행한다.
분기예측기구(21)는 분기명령용 레저베이션 스테이션(8)으로부터의 명령에 의해 분기 예측을 행하고, 명령 페치 어드레스 생성기(1)를 제어한다.
따라서, 후술하는 바와 같이 레저베이션 스테이션 유닛(5,6,7,8)에 의해, 연산 사이클마다 스레드를 선택하고, 선택된 스레드의 엔트리 실행을 오퍼랜드 어드레스 생성기(10), 연산기(12, 15)에 지시하고, 또한 레지스터(14, 17)로부터 선택된 스레드의 오퍼랜드 데이터의 판독/기입을 행하고, 동시 멀티스레드 처리를 실행한다.
(명령실행 제어장치)
도 2는 본 발명의 명령실행 제어장치의 일실시예의 블럭도, 도 3은 도 2의 구성의 동작 흐름도, 도 4는 도 3의 동작 설명도, 도 5는 도 2 내지 도 4의 동작에 의한 실행 스레드의 설명도이다. 도 2는 도 1의 RSE(5), RSE(6), RSF(7)의 상세도를 나타낸다. 또한, 본 실시예에서는 2개의 스레드(스레드0과 1)이 동시에 동작할 경우에 대해 설명하겠지만, 스레드 수가 3개 이상이 되어도 실현 가능하다.
도 2에서, 도 1에서 나타낸 것과 동일한 것은 동일한 기호로 나타내고 있고, 레저베이션 스테이션 유닛(5,6,7)은 각각 엔트리생성회로(50,60,70), 실행가능선택회로(52,62,72), 레저베이션 스테이션(54,64,74), 실행엔트리선택회로(56,66,76)로 구성된다. 이 각 실행가능선택회로(52,62,72)에 스레드선택회로(30)가 접속된다.
이러한 레저베이션 스테이션 유닛(5,6,7)의 엔트리는 스레드0과 1을 공유하여 사용한다. 즉, 엔트리는 엔트리가 유효한 것을 나타내는 VALID신호, 엔트리의 스레드를 나타내는 스레드ID, 오퍼랜드 데이터를 아키텍쳐 레지스터로부터 판독하는 것을 나타내는 신호와 판독 어드레스, 레지스터갱신버퍼로부터 판독하는 것을 나타내는 신호와 판독 어드레스, 명령 디코딩시에 명령마다 할당된 명령의 번호를 나타내는 명령 식별자 등을 저장하고 있다.
스레드선택회로(30)는 도 6에서 상세하게 설명한 바와 같이, 일정시간 완료 되지 않은 명령을, 도 1의 CSE(9)가 검출한 것에 따라, 행(hang)방지 모드로 주행 모드를 전환하고, 행 방지 스레드ID를 선택한다.
실행가능선택회로(52,62,72)는 행 방지 모드에서 엔트리생성회로(50,60,70), 레저베이션 스테이션(54,64,74)의 엔트리와, 스레드선택회로(30)의 스레드ID를 비교하여 실행 가능성이 있는 엔트리를 선택한다.
실행엔트리선택회로(56,66,76)는 레저베이션 스테이션(54,64,74)의 엔트리로부터 실행 가능성이 있는 엔트리를 선택하고, 기능실행부(10,12,15)에 발행한다.
이러한 동작을 설명한다. 복수의 스레드가 동시 멀티스레드 방식으로 동작할 경우, 레저베이션 스테이션(54,64,74)의 실행은 아웃 오브 오더 실행이 가능하다. 즉, 레저베이션 스테이션(54,64,74)의 엔트리는 실행을 위해 필요한 오퍼랜드 데이터의 준비가 된 엔트리부터 실행하는 것이 가능해 진다.
실행할 엔트리를 선택하는 실행엔트리선택회로(46,56,66)에 의해 선택된 엔트리가 레저베이션 스테이션(54,64,74)으로부터 실행된다. 실행할 준비가 된 엔트리가 동시에 몇 개 있을 경우에는, 실행엔트리선택회로(46,56,66)는 디코딩된 순서대로 엔트리를 선택하여 실행한다.
또한, 부동소수점용의 레저베이션 스테이션(74)으로부터 실행된 엔트리는 기능 실행이 파이프라인처리로 실행된다. 기능 실행이 종료되면 결과레지스터에 기능 실행의 결과를 저장한다. 또한, 기능 실행이 종료된 것을, 명령 완료 제어를 행하는 기능 CSE(9)에 실행의 완료를 보고한다.
명령완료제어기능 CSE(9)는 프로그램의 순서대로 완료하는 제어를 행한다. 기능 실행이 완료되면 명령의 완료를 행하는 것이 가능해지지만, 프로그램의 순서대로 완료하기 때문에, 가장 오래된 명령이 완료되지 않으면 후속 명령의 실행이 완료되고 있어도 명령의 완료를 할 수 없다. 명령의 완료는 스레드별로 완료되기 때문에 다른 스레드에 의해 명령의 완료 제어를 방해받지 않고, 명령의 완료를 행하는 것이 가능하다.
또한, 도 15에서 설명한 바와 같이 기능 실행이 파이프라인처리로 실행된 결과는 결과레지스터에 저장되지만, 레저베이션 스테이션(74)은 결과레지스터에 저장되는 타이밍이 겹치지 않게 실행할 엔트리를 선택한다.
도 3 내지 도 5를 참조하여, 도 2의 구성 동작을 설명한다. 스레드선택회로(30)는 보통 주행상태에서 CSE(9)가 일정시간 완료되지 않은 명령을 검출한 신호를 발생시켰는지를 판정한다(S10). 스레드선택회로(30)는 CSE(9)로부터 일정시간 완료되지 않은 명령을 검출한 신호를 받으면, 행(hang)방지 모드로 주행 모드를 변경한다(S12).
도 4에 나타낸 보통주행 때에는, 스레드선택회로(30)가 관여하고 있지 않기 때문에, 도 5와 같이 레저베이션 스테이션(5,6,7)으로부터 실행할 명령의 스레드는 각 레저베이션 스테이션(5,6,7)의 각각에서 선택된 엔트리가 실행할 스레드 번호가 된다. 즉, 도 5에 나타나 있는 바와 같이, 레저베이션 스테이션의 엔트리 선택에 스레드의 제한은 부여되지 않고, 실행할 스레드 번호는 레저베이션 스테이션(5,6,7)마다 다르다. 단, 각 레저베이션 스테이션(5,6,7)이 개별적으로 선택하기 때문에 우연히 실행할 스레드 번호가 동일해 질 수는 있다.
한편, 행 방지 모드시에는 행 방지 모드 중에 동작하는 스레드선택회로(30)에 의해 선택된 스레드 번호만 실행 가능한 스레드 번호가 된다. 즉, 도 5와 같이 레저베이션 스테이션(5,6,7)으로부터 실행할 스레드 번호가 같아지도록 제어된다.
그리고, 스레드선택회로(30)는 일정시간 완료될 수 없었던 명령이 완료된 것을 CSE(9)로부터 통지받으면, 도 4와 같이, 보통 주행 모드로 되돌아가고, 스레드 선택 동작을 정지한다(S14).
이와 같이, 보통 주행시는 레저베이션 스테이션이 실행 가능한 엔트리를 스레드에 관계없이 실행하던 것을, 행 방지 모드에 의해, 각 레저베이션 스테이션으로부터 결정된 스레드만 실행할 수 있게 제어한다.
이를 위해, 실행할 수 없는 하나의 스레드의 엔트리보다 후속인 다른 스레드의 엔트리가 연달아 실행되고 있는 상황 때문에, 실행계속 되고 있는 다른 스레드의 실행을 정지함으로써, 실행할 수 없는 하나의 스레드의 엔트리를 실행 가능한 상태로 할 수 있다. 또한, 레저베이션 스테이션이 원인이 아닌 때에 행(hang) 상태가 된 경우에도, 레저베이션 스테이션으로부터는, 결정된 스레드만 실행할 수 있도록 제어한다.
다만, 이러한 제어를 행하면 행 상태가 되지 않고 있는 스레드의 엔트리가 실행을 정지하는 것이기 때문에, 행 상태가 된 경우에도 대폭적인 성능저하가 안되 도록 제어를 행하고, 행 상태가 되어 있는 스레드를 실행한다.
(행(hang) 방지기구)
도 2의 명령실행 제어장치를 더욱 상세하게 설명한다. 도 6은 도 2의 스레드선택회로(30)의 블럭도, 도 7은 도 2, 도 6의 실행가능선택회로의 처리 흐름도, 도 8은 도 6의 구성에 의한 스레드 선택방법의 설명도, 도 9는 도 6의 레저베이션 스테이션의 엔트리의 실행 선택 동작의 설명도, 도 10은 도 6의 고정소수점 레저베이션 스테이션의 엔트리의 실행 선택 동작의 설명도이다.
도 6 내지 도 9는, 도 2의 부동소수점용 레저베이션 스테이션 유닛(7)의 예에 의해 설명한다. 한편, 도 2의 고정소수점용 레저베이션 스테이션 유닛(6), 오퍼랜드 생성 레저베이션 유닛(5)도 동일한 구성이다.
도 6에 의해, 스레드선택회로(30)의 구성을 설명한다. 스레드선택회로(30)는 기본적으로 시간축에 따라 교대로 스레드 번호를 변경하고 출력한다. 도 6에 나타나 있는 바와 같이, 스레드선택회로(30)는 타이머 카운터(timer counter)(32)와, 스레드 전환시간 선택회로(34)와, 스레드ID 생성회로(36)와, 스레드 결정회로(38)와, 행(hang)방지 스레드ID 레지스터(40)와, 행 방지모드 기동회로(42)를 갖는다.
행 방지모드 기동회로(42)는 도 1의 CSE(9)의 일정시간 완료되지 않은 명령을 검출한 검출신호에 따라, 스레드 전환시간 선택회로(34)와, 스레드 결정회로(38)와, 실행가능선택회로(52,62,72)를 기동한다.
스레드 전환시간 선택회로(34)는 동일한 스레드를 연속해서 선택하는 시간을 나타내는 스레드 전환시간을 구비하고, 스레드 전환시간이 되면 스레드 결정회 로(38)에 스레드 전환을 지시한다. 스레드 전환시간은, 1사이클에 의해 1가산되는 타이머 카운터(32)에 의해 카운터 값이 존재하는 값이 되면, 스레드 전환시간을 변경하는 것이 가능하다.
스레드 전환시간과 타이머 카운터의 카운터 값에 의해, 스레드 결정회로(38)는 스레드ID 생성회로(36)의 스레드ID를 선택한다. 스레드ID 생성회로(36)는 행 방지 스레드ID 레지스터(40)의 스레드ID와 다른 스레드ID를 스레드 결정회로(38)에 출력한다. 이 스레드 결정회로(38)에 의해 선택된 스레드가, 행 방지 스레드ID가 되고, 실행가능선택회로(52,62,72)로 송신되어, 레저베이션 스테이션(54,64,74)으로부터 실행할 수 있는 엔트리를 선택한다.
따라서, 스레드 전환시간 선택회로(34)에 의해 스레드 전환시간을 선택함으로써, 시간의 경과에 따라 동일한 스레드를 선택하는 시간을 변경할 수 있다.
다음, 도 7에 의해 실행가능선택회로(52,62,72)를 설명한다. 행 방지 모드 중에는, 실행엔트리선택회로(56,66,76)의 1사이클 전(前)의 사이클에서 레저베이션 스테이션(54,64,74)의 엔트리의 스레드가, 스레드선택회로(30)에 의해 선택된 스레드와 일치하는지를 판정한다(S22). 일치하지 않으면, 스텝 S26으로 진행된다.
한편, 스레드가 일치하는 엔트리에 대해서는, 실행할 준비가 되어 있는지를 판정하고, 실행 준비가 되어 있으면 그 엔트리가 다음 사이클에서의 실행엔트리선택회로(56,66,76)에 의해 선택될 가능성이 있는 엔트리로 결정한다(S24). 예를 들면, 엔트리에 플래그(flag)를 부여한다.
반대로, 선택된 스레드와 일치하지 않는 엔트리는 다음 사이클의 실행엔트리 선택회로에서 선택될 가능성이 없는 것으로 결정한다(S26).
또한, 명령이 디코딩되고 레저베이션 스테이션에 새롭게 엔트리에 등록하는 사이클에서, 엔트리생성회로(50,60,70)로부터 등록하는 엔트리의 스레드가 스레드선택회로(30)에 의해 선택된 스레드와 일치하는지를 판정한다(S20). 일치하지 않으면, 스텝 S26으로 진행된다.
한편, 스레드가 일치하는 엔트리에 대해서는, 실행할 준비가 되어 있는지를 판정하고, 실행 준비가 되어 있으면 그 엔트리가 다음 사이클에서의 실행엔트리선택회로(56,66,76)에 의해 선택될 가능성이 있는 엔트리로 결정한다(S24). 예를 들면, 엔트리에 플래그를 부여한다.
반대로, 선택된 스레드와 일치하지 않는 엔트리는 다음 사이클의 실행엔트리선택회로에서 선택될 가능성이 없는 것으로 결정한다(S26).
스레드선택회로(30)의 스레드 선택예를 도 8에 의해 설명한다. 어떤 스레드의 명령이 일정 기간 완료되지 않은 것을 검출한 때부터 행 방지 모드가 되고, 스레드선택회로(30)가 동작한다.
행 방지 모드로 이행하면, 처음에는 스레드 전환시간이 1사이클 모드가 되고, 스레드선택회로(30)에 의해 1사이클마다 다른 스레드를 선택한다.
타이머 카운터로 100사이클 카운트했을 때에 행 방지 모드가 계속되고 있는 경우에는 스레드 전환시간이 2사이클 모드가 되고, 스레드선택회로(30)에 의해 2사이클마다 다른 스레드를 선택한다.
타이머 카운터로 300사이클 카운트했을 때에 행 방지 모드가 계속되고 있는 경우에는 스레드 전환시간이 4사이클 모드가 되고, 스레드선택회로(30)에 의해 4사이클마다 다른 스레드를 선택한다.
타이머 카운터로 600사이클 카운트했을 때에 행 방지 모드가 계속되고 있는 경우에는 스레드 전환시간이 16사이클 모드가 되고, 스레드선택회로에 의해 16사이클마다 다른 스레드를 선택한다.
이와 같은 스레드선택회로(30)에 의해 선택되는 스레드는, 시간의 경과에 따라 어느 일정기간 연속하여 동일한 스레드를 선택하여 동작하는 것이 몇 개의 패턴으로 변경하는 것이 가능하다.
또한, 명령의 완료가 될 수 없었던 명령이 완료되고, 행 방지 모드로부터 보통 주행상태에 돌아가고, 스레드선택회로(30)도 리셋되어 다시 한번 행 방지 모드가 되었을 경우에는, 최초의 상태(도 8의 경우에는, 1사이클마다 다른 스레드를 선택)부터 선택된다.
이러한 행 방지 모드가 동작하는 것은 동시 멀티스레드에서 동작하는 스레드가 2개 이상인 때이며, 단일의 스레드가 동작하고 있는 경우에는 스레드를 선택할 필요가 없기 때문에 행 방지 모드가 되지 않는다. 또한, 행 방지 모드가 되었을 때에, 동작하고 있지 않은 스레드가 있는 경우에는, 동작하고 있지 않는 스레드는 스레드선택회로에 의해 선택되지 않도록 동작하는 것이 가능하다.
도 9는 이 스레드 선택에 의해, 도 17의 상태로부터 행 방지 모드가 기동했을 때의 레저베이션 스테이션의 제어 상태도이다.
시간T1에서 행 방지 모드가 기동한다. 시간T2에서는, 시간T1에서 스레드선택 회로(30)에 의해 스레드0이 선택되었기 때문에 스레드0의 엔트리를 실행한다. 시간T3에서는, 시간T2에서 스레드선택회로(30)에 의해 스레드1이 선택되었지만, 선행 명령과 결과레지스터에 저장되는 타이밍이 동일해지기 때문에 실행불가능하다.
시간T4에서는, 시간T3에서 스레드선택회로(30)에 의해 스레드0이 선택되었기 때문에 스레드0의 엔트리를 실행한다. 시간T5에서는, 시간T4에서 스레드선택회로(30)에 의해 스레드1이 선택되었기 때문에 지금까지 실행할 수 없었던 스레드1의 엔트리를 실행하는 것이 가능해 진다. 시간T6에서는, 시간T5에서 스레드선택회로(30)에 의해 스레드0이 선택되었기 때문에 스레드0의 엔트리를 실행한다.
이 후, 스레드1의 엔트리의 명령을 완료하면, 레저베이션 스테이션의 제어는 행 방지 모드로부터 보통 주행상태로 되돌아간다.
상기의 설명은, 부동소수점 레저베이션 스테이션을 예로 들어 설명하였다. 고정소수점 레저베이션 스테이션에서는, 도 10에 나타나 있는 바와 같은, 엔트리의 실행 제약이 있다. 즉, 고정소수점용의 레저베이션 스테이션은, 실행된 엔트리는, 기능의 실행이 종료할 때까지 후속의 엔트리에 대해 기능 실행을 행하지 않도록 제어된다.
레저베이션 스테이션으로부터 실행되는 엔트리가, 실행에 2사이클이 필요한 엔트리(선행 명령)이며, 후속의 명령도 실행에 2사이클이 필요한 엔트리인 경우에는, 도 10에 나타나 있는 바와 같이 T1에서 선행 명령이 레저베이션 스테이션으로부터 실행된다. T2의 타이밍에서 후속 명령을 실행할 경우 선행 명령과 실행(X)이 겹치기 때문에 실행 불가능이 되고, T3의 타이밍에서는 실행 가능해 진다.
따라서, 부동소수점의 엔트리 실행 제어로 치환하면, 도 9와 같은 스레드의 엔트리의 실행이 가능해 진다.
이와 같이, 복수의 스레드가 동시 멀티스레드로 동작하고 있을 때에, 기능 실행의 결과레지스터에 저장하는 타이밍 또는 기능 실행의 타이밍에 의해 레저베이션 스테이션으로부터 실행할 수 없게 된 엔트리가, 행 방지 모드에 의해, 레저베이션 스테이션으로부터 실행하는 엔트리의 스레드를 선택함으로써 실행하는 것이 가능해 지고, 행(hang) 상태를 방지할 수 있다.
다음, 이와 같이 전환 사이클을 변경하는 이점을 설명한다. 도 11은 동시 멀티스레드로 동작하고 있을 때에 명령 페치한 데이터를 얻는 시간이 장시간 필요했기 때문에, 레저베이션 스테이션의 스레드1의 엔트리에 명령디코더로부터 명령이 디코딩되지 않은 것이 원인이 되어 행 방지 모드가 되었을 경우의 예를 나타낸다. 이 예는, 스레드0에는 실행에 2사이클이 필요한 엔트리가 연속하고, 고정소수점용의 레저베이션 스테이션에 명령디코더로부터 디코딩되어 실행되고 있을 때, 스레드1에 실행에 2사이클이 필요한 엔트리가 작성되었을 때의 상황이다.
도 11에 나타나 있는 바와 같이 시간T1에서 스레드선택회로(30)는 1사이클 모드로 스레드0을 선택한다. 시간T2에서, 스레드선택회로(30)에 의해 선택된 스레드0의 엔트리가 실행 가능해 진다. 이 때, 스레드선택회로(30)는 1사이클 모드를 위해 스레드1을 선택한다.
시간T3에서, 실행에 필요한 오퍼랜드 데이터가 갖추어졌기 때문에 실행 가능해진 엔트리가 실행하려고 해도, 선행 명령의 실행과 겹치기 때문에 실행할 수 없 다. 이 때, 스레드선택회로는 1사이클 모드를 위해 스레드0을 선택한다. 시간T4에서 스레드0이 실행되고 스레드선택회로(30)에 의해 스레드1을 선택하지만, 시간T5에서 스레드1을 실행할 수 없다.
이 때, 스레드 전환시간에 의해, 1사이클 모드로부터 2사이클 모드로 변경한다. 그리고, 시간T7에서 스레드선택회로(30)에 의해 스레드1이 선택되고, 시간T8에서 스레드1을 실행하는 것이 가능해진다.
도 11에서는, 행 상태로 되어 있지 않은 스레드0의 명령의 실행에 필요한 시간이 2사이클이기 때문에, 스레드1의 엔트리는 2사이클 모드가 되었을 때에 실행 가능해 졌다. 그러나, 스레드0의 명령이 실행에 필요한 시간이 4사이클인 경우에는, 4사이클 모드가 안된다면 스레드1의 엔트리는 실행 가능하지 않게 된다.
이와 같이, 레저베이션 스테이션이 직접의 원인이 아니게 행 방지 모드가 되었을 경우에서 기능 실행이 후속 명령에 대해 블로킹(blocking) 처리를 행하는 실행 제어에 대해서는, 행 방지 모드의 스레드 선택방법인 동일한 스레드를 연속해서 선택하는 시간을, 기능 실행에 필요한 시간의 가장 긴 시간보다 더 긴 시간으로 설정되도록 하는 것이 바람직하다.
이 때문에, 스레드선택회로는 시간의 경과에 따라 선택할 스레드를 변경하는 것이 가능하게 되고, 동일한 스레드를 연속해서 선택하는 시간에 의해 스레드를 전환하는 제어를 행한다.
또한, 시간에 따라 동일한 스레드를 연속해서 선택하는 시간도 변경하는 것이 가능하다.
스레드선택회로에 의해 선택한 스레드의 엔트리만이 실행가능해지기 때문에 보통 주행시보다 성능이 낮아지는 것이 예상되고, 스레드선택회로에 의해 동일한 스레드를 연속해서 선택하는 시간이 긴 만큼 성능은 저하하기 때문에, 단계적으로 동일 스레드를 선택하는 시간을 길게함으로써 대폭적인 성능저하가 발생하는 것을 늦출 수 있다.
(스레드선택회로)
다음, 전술한 스레드를 선택하는 스레드선택회로(30)를 설명한다. 전술한 스레드선택회로(30)는 논리회로로 구성된다. 도 12는 도 6의 스레드 결정회로(38)의 회로도, 도 13은 스레드ID 생성회로(36)의 회로도, 도 14는 스레드 전환시간 선택회로(34)의 회로도이다.
도 12에서, 스레드 결정회로(38)는 AND게이트(380), OR게이트(382), 4개의 AND게이트(384-1∼384-4)로 이루어진다. 이 도 11에서, +WARNING_TO_HUNG_MODE_VALID신호는 행 방지 모드인 것을 나타내는 신호를 1회 래치(latch)한 신호이다. +MULTI_THREAD_MODE신호는 멀티스레드 상태에서 주행하고 있는 것을 나타내는 신호이다. AND게이트(380)는 행 방지 모드이고, 또한 멀티스레드 상태일 때 연다. 즉, 행 방지 모드가 아니거나 멀티스레드 상태가 아닌(싱글스레드 상태) 경우에는 동작하지 않는다.
또한, +HUNG_THREAD_ID_1T_MODE신호는 1사이클마다 선택하는 스레드를 변경 하는 것을 나타내는 신호이며, +NEXT_1T_MODE_THREAD_ID신호가 선택되는 스레드를 나타낸다. 이 선택 스레드를 나타내는 신호는 도 12로부터 얻을 수 있다.
이러한 조합이 1사이클, 2사이클, 4사이클, 16사이클의 4개 구비되어 있고, 4개 AND게이트(384-1∼384-4)로부터 하나 선택된 스레드가 OR게이트(382)를 통해 AND게이트(380)에 입력되고, 다음 사이클의 행 방지 스레드ID가 된다.
다음, 도 13의 스레드ID 생성회로는 1사이클, 2사이클, 4사이클, 16사이클의 스레드를 결정하는 회로이다. 1사이클 모드인 때는, 매 사이클 스레드를 변경하기 위해서, 행 방지 스레드ID를 나타내는 +HUNG_MODE_THREAD_ID의 극성을 반전회로(360)에 의해 반전한다.
2사이클 모드의 회로(362,364,366)는, 스레드를 변경하고 나서 2사이클이 경과한 것을 나타내는 +2T_MODE_THREAD_ID_CHANGE가 온(on) 되어 있으면, 행 방지 스레드ID를 나타내는 +HUNG_MODE_THREAD_ID의 극성을 AND게이트(366)에 의해 반전한다. 또한, +2T_MODE_THREAD_ID_CHANGE가 오프(off) 되어 있으면, 행 방지 스레드ID를 나타내는 +HUNG_MODE_THREAD_ID를 AND게이트(364)로부터 출력한다.
OR게이트(362)의 출력은 +2T_MODE_THREAD_ID_CHANGE가 온(on) 되어 있으면 스레드를 변경하고, 오프(off)이면 스레드를 변경하지 않는 신호를 출력한다.
4사이클과 16사이클도, 동일한 2개의 AND게이트(370,372)(376,378)와, OR게이트(368,374)로 조합시킨 회로에 의해, 4사이클이 경과한 것을 나타내는 +4T_MODE_THREAD_ID_CHANGE, 16사이클이 경과한 것을 나타내는 +16T_MODE_THREAD_ID_CHANGE이 온(on) 되어 있으면 스레드를 변경한다.
또한, 도 14는 스레드 전환시간 변경회로이다. AND게이트(342)에 입력되는 행 방지 모드인 것을 나타내는 +SET_WARNING_TO_HUNG_MODE가 온이고, 이 신호를 1 회 래치한 것을 나타내는 +WARNING_TO_HUNG_MODE_VALID가 오프인 때에, AND게이트(342), OR게이트(340)로부터 1사이클 모드를 기동한다(행 방지 모드의 스타트가 된다).
1사이클 모드가 개시되면, 2사이클 모드로 전환하는 시간을 나타내는 +1T_MODE_TIMER_CHANGE신호가 오프이고 1사이클 모드인 것을 나타내는 +HUNG_THREAD_ID_1T_MODE가 온인 때에는, AND게이트(352)로부터, AND게이트(344)보다 1사이클 모드를 계속한다.
1사이클 모드 중에 전환시간이 되면 +1T_MODE_TIMER_CHANGE신호가 온이 되고, AND게이트(356), OR게이트(354), AND게이트(346)를 통해 2사이클 모드로 변경한다.
같은 방법으로, 2사이클로부터 4사이클, 4사이클로부터 16사이클로의 모드 변경에 관해서도 동일한 회로이다. 즉, AND게이트(353,355)와 OR게이트(351), AND게이트(348), AND게이트(359,349)와 OR게이트(357), AND게이트(350)의 구성이다.
이와 같이, 스레드 전환시간이 유효한 때는 행 방지중만 행하므로, 행 방지 모드인 것을 나타내는 신호를 1회 래치한 것을 나타내는 신호와 AND를 취한다. 이 신호가 스레드 전환 신호가 되고, 1회 래치한 신호가 도 12에 연결되어, 스레드를 선택하는 것이 가능해 진다.
(다른 실시예)
전술한 실시예에서는, 2개의 스레드(스레드0과 1)이 동시에 동작하는 동시 멀티스레드 방식으로 설명했지만, 3개 이상의 스레드가 동시에 동작하는 것에도 적 용할 수 있다.
이상, 본 발명을 실시예에 의해 설명했지만, 본 발명의 취지의 범위 내에서 본 발명은 여러가지 변형이 가능하고, 본 발명의 범위로부터 이들을 배제하는 것이 아니다.
산업상의 이용 가능성
동시 멀티스레드로 동작하고 있을 때에 명령이 일정기간 완료되지 않은 상태를 검출하고, 모든 레저베이션 스테이션이, 결정된 스레드만 실행할 수 있도록 제어하기 때문에, 레저베이션 스테이션으로부터 실행할 수 없는 엔트리가 있는 상태인 경우에는 실행계속 되고 있는 스레드의 실행을 정지함으로써 실행할 수 없는 스레드의 엔트리를 실행 가능한 상태로 할 수 있다.

Claims (15)

  1. 복수의 명령이 포함된 복수의 스레드를 실행하는 명령실행 제어장치에 있어서,
    명령을 디코딩하는 명령디코더와,
    명령디코더로부터의 디코딩 결과를 받고, 연산처리를 제어하는 연산처리 레저베이션 스테이션(reservation station)과,
    주기억 장치에 저장된 오퍼랜드(operand)의 어드레스 생성을 제어하는 주기억 레저베이션 스테이션과,
    실행된 명령을 프로그램의 순서대로 명령이 완료하도록 제어하는 명령제어기구와,
    행(hang) 방지회로를 포함하고,
    상기 행 방지회로는,
    상기 명령제어기구가 하나의 스레드의 명령이 일정 기간에 완료할 수 없었던 것을 검출한 경우에는, 모든 상기 레저베이션 스테이션으로부터 실행 가능한 엔트리의 스레드를 동일한 스레드로 선택하기 위한 스레드선택회로와,
    상기 스레드선택회로에서 선택된 스레드와 상기 레저베이션 스테이션의 엔트리의 스레드가 일치했을 때에, 상기 엔트리를 상기 레저베이션 스테이션으로부터 실행하는 것이 가능하게 하기 위한 실행가능선택회로를 포함하는 것을 특징으로 하는 명령실행 제어장치.
  2. 삭제
  3. 삭제
  4. 제 1 항에 있어서,
    상기 스레드선택회로는 시간의 경과에 의해 선택할 스레드를 변경하는 스레드선택회로로 구성된 것을 특징으로 하는 명령실행 제어장치.
  5. 제 1 항에 있어서,
    상기 스레드선택회로는 동작하고 있는 스레드를 나타내는 신호에 따라, 동작하지 않는 스레드의 선택을 금지하는 것을 특징으로 하는 명령실행 제어장치.
  6. 제 1 항에 있어서,
    상기 행 방지 회로는 상기 완료할 수 없었던 명령이 완료한 때에는, 상기 레 저베이션 스테이션의 제어를 정지하는 것을 특징으로 하는 명령실행 제어장치.
  7. 제 1 항에 있어서,
    상기 레저베이션 스테이션은,
    상기 명령디코더로부터의 명령을 상기 레저베이션 스테이션에 엔트리하는 엔트리생성회로와,
    상기 레저베이션 스테이션으로부터 실행 가능한 엔트리를 선택하는 실행엔트리선택회로를 가지는 것을 특징으로 하는 명령실행 제어장치.
  8. 제 1 항에 있어서,
    상기 연산처리 레저베이션 스테이션은, 상기 실행의 준비가 된 엔트리가 선행 엔트리의 실행 또는 실행 결과의 저장 타이밍과 겹치지 않는 타이밍에서 상기 실행의 준비가 된 엔트리를 실행하는 것을 특징으로 하는 명령실행 제어장치.
  9. 복수의 명령이 포함된 복수의 스레드를 실행하는 명령실행 제어방법에 있어서,
    연산처리 레저베이션 스테이션에 의해, 명령디코더로부터의 디코딩 결과로부터 엔트리를 작성하고, 실행 준비가 된 엔트리를 연산처리기구에 발행하는 스텝과,
    주기억 장치에 저장된 오퍼랜드의 어드레스의 생성을 제어하는 주기억 레저베이션 스테이션에 의해, 상기 명령으로부터 엔트리를 작성하고, 실행 준비가 된 엔트리를 주기억 오퍼랜드 어드레스 생성기에 발행하는 스텝과,
    실행된 명령을 프로그램의 순서대로 명령이 완료하도록 제어하는 스텝과,
    하나의 스레드의 명령이 일정 기간에 완료할 수 없었던 것을 검출한 경우에는, 스레드선택회로를 기동하여 모든 상기 레저베이션 스테이션으로부터 실행 가능한 엔트리의 스레드를 동일한 스레드로 선택하는 스텝과,
    상기 스레드선택회로에서 선택된 스레드와 상기 레저베이션 스테이션의 엔트리의 스레드가 일치하는지를 판정하는 스텝과,
    상기 일치를 판정했을 때에, 상기 엔트리를 상기 레저베이션 스테이션으로부터 실행하는 것이 가능하게 하는 스텝을 가지는 것을 특징으로 하는 명령실행 제어방법.
  10. 삭제
  11. 삭제
  12. 제 9 항에 있어서,
    상기 선택 스텝은,
    시간의 경과에 의해 선택할 스레드를 변경하는 스텝을 가지는 것을 특징으로 하는 명령실행 제어방법.
  13. 제 9 항에 있어서,
    상기 선택 스텝은, 동작하고 있는 스레드를 나타내는 신호에 따라, 동작하지 않는 스레드의 선택을 금지하는 스텝을 가지는 것을 특징으로 하는 명령실행 제어방법.
  14. 제 9 항에 있어서,
    상기 완료할 수 없었던 명령이 완료했을 때에는, 상기 선택 스텝을 종료하는 스텝을 가지는 것을 특징으로 하는 명령실행 제어방법.
  15. 제 9 항에 있어서,
    상기 연산처리 레저베이션 스테이션은 상기 실행의 준비가 된 엔트리가 선행 엔트리의 실행 또는 실행 결과의 저장 타이밍과 겹치지 않는 타이밍에서 상기 실행의 준비가 된 엔트리를 실행하는 스텝을 가지는 것을 특징으로 하는 명령실행 제어방법.
KR1020097026497A 2007-06-20 2007-06-20 명령실행 제어장치 및 명령실행 제어방법 KR101100145B1 (ko)

Applications Claiming Priority (1)

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

Publications (2)

Publication Number Publication Date
KR20100009593A KR20100009593A (ko) 2010-01-27
KR101100145B1 true KR101100145B1 (ko) 2011-12-29

Family

ID=40155965

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097026497A KR101100145B1 (ko) 2007-06-20 2007-06-20 명령실행 제어장치 및 명령실행 제어방법

Country Status (6)

Country Link
US (1) US7958339B2 (ko)
EP (1) EP2159689A4 (ko)
JP (1) JP5104863B2 (ko)
KR (1) KR101100145B1 (ko)
CN (1) CN101681261B (ko)
WO (1) WO2008155800A1 (ko)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11080064B2 (en) 2014-10-28 2021-08-03 International Business Machines Corporation Instructions controlling access to shared registers of a multi-threaded processor
US9575802B2 (en) 2014-10-28 2017-02-21 International Business Machines Corporation Controlling execution of threads in a multi-threaded processor
WO2016097796A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude i/o-dependent load replays in out-of-order processor
US10114646B2 (en) 2014-12-14 2018-10-30 Via Alliance Semiconductor Co., Ltd Programmable load replay precluding mechanism
US9804845B2 (en) 2014-12-14 2017-10-31 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude X86 special bus cycle load replays in an out-of-order processor
JP6286068B2 (ja) * 2014-12-14 2018-02-28 ヴィア アライアンス セミコンダクター カンパニー リミテッド アウトオブオーダープロセッサでのキャッシュ不可に依存するロードリプレイを除外するメカニズム
WO2016097804A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Programmable load replay precluding mechanism
US10108420B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on long load cycles in an out-of-order processor
WO2016097802A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude load replays dependent on long load cycles in an out-order processor
US10133580B2 (en) 2014-12-14 2018-11-20 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude load replays dependent on write combining memory space access in an out-of-order processor
US10089112B2 (en) 2014-12-14 2018-10-02 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on fuse array access in an out-of-order processor
EP3055769B1 (en) 2014-12-14 2018-10-31 VIA Alliance Semiconductor Co., Ltd. Mechanism to preclude load replays dependent on page walks in out-of-order processor
US9740271B2 (en) 2014-12-14 2017-08-22 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude X86 special bus cycle load replays in an out-of-order processor
US10127046B2 (en) 2014-12-14 2018-11-13 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude uncacheable-dependent load replays in out-of-order processor
WO2016097797A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Load replay precluding mechanism
US10083038B2 (en) 2014-12-14 2018-09-25 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on page walks in an out-of-order processor
WO2016097800A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Power saving mechanism to reduce load replays in out-of-order processor
US10146547B2 (en) 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude non-core cache-dependent load replays in an out-of-order processor
US10228944B2 (en) 2014-12-14 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus and method for programmable load replay preclusion
JP6286065B2 (ja) 2014-12-14 2018-02-28 ヴィア アライアンス セミコンダクター カンパニー リミテッド アウトオブオーダープロセッサの書き込み結合メモリ領域アクセスに依存するロードリプレイを除外する装置及び方法
US10088881B2 (en) 2014-12-14 2018-10-02 Via Alliance Semiconductor Co., Ltd Mechanism to preclude I/O-dependent load replays in an out-of-order processor
US10120689B2 (en) 2014-12-14 2018-11-06 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on off-die control element access in an out-of-order processor
US10175984B2 (en) 2014-12-14 2019-01-08 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude non-core cache-dependent load replays in an out-of-order processor
US10108427B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on fuse array access in an out-of-order processor
US10108430B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on off-die control element access in an out-of-order processor
US10108429B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude shared RAM-dependent load replays in an out-of-order processor
US10146539B2 (en) 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd. Load replay precluding mechanism
US10108421B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude shared ram-dependent load replays in an out-of-order processor
US10146540B2 (en) 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude load replays dependent on write combining memory space access in an out-of-order processor
JP6477248B2 (ja) * 2015-05-22 2019-03-06 富士通株式会社 演算処理装置及び演算処理装置の処理方法
JP7020304B2 (ja) * 2018-06-07 2022-02-16 富士通株式会社 演算処理装置及び演算処理装置の制御方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2006114874A1 (ja) 2005-04-21 2006-11-02 Fujitsu Limited プロセッサ装置

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6658447B2 (en) * 1997-07-08 2003-12-02 Intel Corporation Priority based simultaneous multi-threading
US6076157A (en) * 1997-10-23 2000-06-13 International Business Machines Corporation Method and apparatus to force a thread switch in a multithreaded processor
US6212544B1 (en) * 1997-10-23 2001-04-03 International Business Machines Corporation Altering thread priorities in a multithreaded processor
JP2000010800A (ja) * 1998-06-19 2000-01-14 Toshiba Corp 計算機システムに於けるスレッド制御装置、及び同システムに於けるスレッド制御方法
US6807624B1 (en) * 1998-12-17 2004-10-19 Fujitsu Limited Instruction control device and method therefor
JP3490005B2 (ja) 1998-12-17 2004-01-26 富士通株式会社 命令制御装置及びその方法
JP3560482B2 (ja) 1998-12-17 2004-09-02 富士通株式会社 命令制御装置
US6535905B1 (en) * 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
JP3714597B2 (ja) * 2000-07-03 2005-11-09 富士重工業株式会社 鍛造方法及び鍛造装置
US20050033831A1 (en) * 2002-10-08 2005-02-10 Abbas Rashid Advanced processor with a thread aware return address stack optimally used across active threads
US6904511B2 (en) 2002-10-11 2005-06-07 Sandbridge Technologies, Inc. Method and apparatus for register file port reduction in a multithreaded processor
US20040216103A1 (en) * 2003-04-24 2004-10-28 International Business Machines Corporation Mechanism for detecting and handling a starvation of a thread in a multithreading processor environment
JP4327008B2 (ja) * 2004-04-21 2009-09-09 富士通株式会社 演算処理装置及び演算処理装置の制御方法
JP5028774B2 (ja) * 2005-09-22 2012-09-19 富士通株式会社 演算処理装置,情報処理装置,及びレジスタファイルの制御方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2006114874A1 (ja) 2005-04-21 2006-11-02 Fujitsu Limited プロセッサ装置

Also Published As

Publication number Publication date
WO2008155800A1 (ja) 2008-12-24
US7958339B2 (en) 2011-06-07
CN101681261B (zh) 2014-07-16
CN101681261A (zh) 2010-03-24
EP2159689A1 (en) 2010-03-03
JP5104863B2 (ja) 2012-12-19
KR20100009593A (ko) 2010-01-27
US20100095092A1 (en) 2010-04-15
JPWO2008155800A1 (ja) 2010-08-26
EP2159689A4 (en) 2011-01-05

Similar Documents

Publication Publication Date Title
KR101100145B1 (ko) 명령실행 제어장치 및 명령실행 제어방법
US6928647B2 (en) Method and apparatus for controlling the processing priority between multiple threads in a multithreaded processor
JP4287799B2 (ja) プロセッサシステムおよびスレッド切り替え制御方法
JP4610593B2 (ja) デュアルスレッドプロセッサ
EP1886216B1 (en) Controlling out of order execution pipelines using skew parameters
US7454598B2 (en) Controlling out of order execution pipelines issue tagging
JP5861354B2 (ja) 演算処理装置及び演算処理装置の制御方法
CN1529845A (zh) 用于解决多线程处理器中指令饥饿的方法及设备
EP2782004B1 (en) Opportunistic multi-thread method and processor
JP5201140B2 (ja) 同時マルチスレッドの命令完了制御装置
JP5104861B2 (ja) 演算処理装置
JP2005309762A (ja) スレッド切替制御装置。
JP5316407B2 (ja) 演算処理装置および演算処理装置の制御方法
KR100431975B1 (ko) 분기에의한중단이없는파이프라인방식의마이크로프로세서를위한다중명령디스패치시스템
JP5104862B2 (ja) 命令実行制御装置及び命令実行制御方法
US7565512B2 (en) Method, system and apparatus for generation of global branch history
JP5573038B2 (ja) マルチスレッドプロセッサ及びプログラム
US20160342415A1 (en) Arithmetic processing device and processing method of arithmetic processing device
US20150052334A1 (en) Arithmetic processing device and control method of arithmetic processing device

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