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

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

Info

Publication number
KR101086792B1
KR101086792B1 KR1020097026495A KR20097026495A KR101086792B1 KR 101086792 B1 KR101086792 B1 KR 101086792B1 KR 1020097026495 A KR1020097026495 A KR 1020097026495A KR 20097026495 A KR20097026495 A KR 20097026495A KR 101086792 B1 KR101086792 B1 KR 101086792B1
Authority
KR
South Korea
Prior art keywords
thread
entry
register
read
execution
Prior art date
Application number
KR1020097026495A
Other languages
English (en)
Other versions
KR20100009592A (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 KR20100009592A publication Critical patent/KR20100009592A/ko
Application granted granted Critical
Publication of KR101086792B1 publication Critical patent/KR101086792B1/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/22Microcontrol or microprogram arrangements
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • G06F9/30127Register windows
    • 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/30098Register arrangements
    • G06F9/30141Implementation provisions of register files, e.g. ports
    • 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

Abstract

복수의 스레드를 동시 멀티 스레드 방식으로 동작하기 위한 명령 실행 제어 장치에 있어서, 아키텍처 레지스터(22-0, 22-1)를 스레드마다에 구비하고, 레지스터 파일(20)로부터 기능의 실행에 필요한 오퍼랜드 데이터를 판독할 경우에, 미리 레지스터 파일(20)로부터 판독 스레드를 선택하는 선택 회로(32, 24)를 설치한다. 빠른 단계에서 아키텍처 레지스터의 선택을 행하는 것이 가능하게 되어, 아키텍처 페지스터를 선택하는 부분의 회로는 늘어나지만, 회로의 배선량에 대해서는 판독 스레드의 아키텍처 레지스터의 선택을 행하고 있는 것으로 삭감을 하는 것이 가능해 진다.
Figure R1020097026495
레저베이션 스테이션, 레지스터 갱신 버퍼, 레지스터 파일, 스레드 선택 회로

Description

명령 실행 제어 장치 및 명령 실행 제어 방법{INSTRUCTION EXECUTION CONTROLLER AND INSTRUCTION EXECUTION CONTROL METHOD}
본 발명은, 복수의 스레드가, 동시 멀티 스레드 방식으로 동작하고, 아웃·오브·오더 처리로, 명령 제어를 행하는 명령 실행 제어 장치 및 명령 실행 제어 방법에 관한 것으로, 특히, 동시 멀티 스레드 방식으로 동작하는 레지스터 파일의 판독 제어를 행하는 명령 실행 제어 장치 및 명령 실행 제어 방법에 관한 것이다.
CPU(Central Processor 유닛)의 처리의 고속화가, 요구되고 있다. 이 때문에, 종래부터 다양한 기술을 사용하여 CPU의 처리를 향상시켜 왔다. 그 방법으로서, 파이프 라인 처리나, 병렬로 처리를 행하는 수퍼 스칼라 방식이나, 프로그램 명령의 순서대로 실행을 행하지 않고, 입력 데이터가 갖추어진 명령으로부터 실행을 행하는 아웃·오브·오더 실행 방식이 있다.
아웃·오브·오더 실행 방식은, 전번의 명령 처리에 필요한 데이터가 갖추어지지 않고 있어도, 후의 명령 처리에 필요한 데이터가 갖추어지고 있었을 경우, 후의 명령으로부터 우선 실행하는 CPU의 성능을 향상하기 위한 기술이다(예를 들면, 특허 문헌 1 참조).
예를 들면, 프로그램에 기술된 순으로 명령을 처리할 경우에, 전번의 명령 처리(1)가, 메모리 액세스를 따르는 명령이며, 후의 명령 처리(2)가, 메모리 액세스를 따르지 않는 명령이라고 가정하면, 명령 처리(1)의 메모리 액세스와 병행되고, 명령 처리(2)를 실행하고, 명령 처리(2)의 실행 후, 메모리 액세스의 종료한 명령 처리(1)를 실행한다.
또한, 단일의 프로그램을 주행하는 것이 아니고, 복수의 프로그램을 주행함으로써, CPU의 처리를 향상시키는 멀티 스레드 방식도 제안되어 있다(예를 들면, 특허 문헌 2 참조).
복수의 프로그램을 주행하는 멀티 스레드 방식은, CPU의 프로그래머블한 자원을, 복수 조(組) 용의(用意)해 둠으로써 소프트웨어로부터 보면, 외관상은, 복수의 CPU로 보이기 때문에, 복수의 프로그램을 실행하는 것이 가능해 지는 구조이다.
도 16은, 종래의 CPU의 구성도이다. CPU는, 주기억(111), 명령 캐시(112), 명령 디코더(113), 레저베이션 스테이션(114), 연산 실행 유닛(115), 아키텍처 레지스터(116)를 구비한다. 이 레저베이션 스테이션(114)은, 기능의 실행에 필요한 오퍼랜드 데이터를, 아키텍처 레지스터(116)로부터 판독하고, 연산 유닛(115)의 연산 처리나 주기억 오퍼랜드 어드레스 생성 처리의 제어를 행한다.
아키텍처 레지스터(116)는, 일시적으로 오퍼랜드 데이터를 기억하는 것이며, CPU의 일부로서, 연산 속도와 동등한 판독, 기입 속도를 요구되기 때문에, 메모리가 아니고, 거대한 레지스터에서 구성된다. 예를 들면, 트랜지스터의 량을 적게 하고, 고밀도로 설치가능한 레지스터 파일로 구성하고 있다.
이 멀티 스레드의 방식의 하나로서, VMT(Vertical Multi Threading) 방식이 있다. 이 방식은, 동시에, 1개의 프로그램밖에 주행할 수 없지만, 장시간의 데이터 대기가 발생했을 때나, 일정한 시간의 간격 등에서, 프로그램을 전환하여 주행한다. VMT 방식의 회로량은, 프로그래머블한 자원을, 프로그램의 수분 용의하지 않으면 안되지만, 동시에, 1개의 프로그램이 주행하기 위해서, 추가하는 회로량도 적고, 실현이 용이하다.
도 16에서 설명하면, 레지스터 파일(116)을, 스레드마다의 아키텍처 레지스터에서 구성하고, 프로그램의 전환에 따라, 일방(一方)의 아키텍처 레지스터를 아크테이브, 타방(他方)의 아키텍처 레지스터를 슬리프로 설정하고, 주행 프로그램에 대응한 아키텍처 레지스터로부터 오퍼랜드 데이터를 판독한다.
한편, 다른 멀티 스레드의 방식으로서, 복수의 프로그램을 동시에 주행하는 동시 멀티 스레드 방식(SMT 방식)이 있다. 이 방식은, 복수의 프로그램이 동시에 주행하기 때문에, 단일의 프로그램이 주행하고 있었을 때보다도, 회로의 제어가 복잡해지는 것이나, 리소스의 증가가 예상되지만, 동시에 복수의 프로그램이 주행하기 때문에, 효율적으로 회로를 사용하는 것이 가능해 진다.
이 동시 멀티 스레드 방식에서도, 복수의 스레드의 아키텍처 레지스터를 레지스터 파일로 구성하고, 이 복수의 스레드의 아키텍처 레지스터로부터, 해당하는 스레드의 오퍼랜드 데이터를 판독할 필요가 있다.
특허 문헌 1 : 일본국 특개2007-87108호 공보
특허 문헌 2 : 특표2006-502504호 공보(WO2004/034209호)
이렇게, 동시 멀티 스레드 방식에서는, 복수의 스레드의 아키텍처 레지스터를 레지스터 파일로 구성하고, 또한 동시에 복수의 프로그램을 주행하기 위해, 기능의 실행에 필요한 오퍼랜드 데이터를 판독하기 위해서는, 단일 스레드에서의 주행보다, 아키텍처 레지스터를 선택하는 회로량이 증가한다. 또한, 동시에 다른 스레드의 오퍼랜드 데이터를 판독할 경우에는, 회로의 배선량이 증가할 우려가 있다.
이 때문에, 단일 스레드의 경우와 비교해, 레지스터 파일의 판독 주파수를 향상하는 것은 어렵게 된다. 이에 따라, 연산 속도가 향상하도록, 아웃·오브·오더 방식이나, 동시 멀티 스레드 방식을 채용해도, CPU의 성능 향상을 도모하는 것이 곤란하다는 문제가 생긴다.
따라서, 본 발명의 목적은, 동시 멀티 스레드 방식의 처리에 있어서, 복수의 스레드의 아키텍처 레지스터를 구성하는 레지스터 파일로부터, 기능의 실행에 필요한 오퍼랜드 데이터를, 고속으로 판독하기 위한 명령 실행 제어 장치 및 명령 실행 제어 방법을 제공하는 것에 있다.
또한, 본 발명의 다른 목적은, 레지스터 파일을, 복수의 스레드의 아키텍처 레지스터를 구성해도, 레지스터 파일로부터의 판독을 위한 회로량이나 배선량의 증가를, 보다 적게 하기 위한 명령 실행 제어 장치 및 명령 실행 제어 방법을 제공하는 것에 있다.
또한, 본 발명의 다른 목적은, 레지스터 파일을, 복수의 스레드의 아키텍처 레지스터를 구성해도, 레지스터 파일로부터의 판독을 위한 회로량이나 배선량의 증가를, 보다 적게 하고, 동시 멀티 스레드 처리의 주파수를 향상하기 위한 명령 실행 제어 장치 및 명령 실행 제어 방법을 제공하는 것에 있다.
이 목적을 달성하기 위해, 본 발명의 명령 실행 제어 장치는, 아웃·오브·오더 실행을 처리하기 위한 연산 처리와 주기억 오퍼랜드 어드레스 생성을 제어하는 레저베이션 스테이션과, 기능의 실행에 의해 얻을 수 있는 데이터를 저장하고, 또한 프로그램으로부터는 관측되지 않는 레지스터 갱신 버퍼와, 복수의 스레드가 동시 멀티 스레드 방식으로 동작하기 위한, 스레드마다의 아키텍처 레지스터와, 동시에 판독하는 것이 가능한 스레드 수가 아키텍처 레지스터의 스레드 수보다 적은 스레드 수에 제한하는 판독 스레드 선택 회로를 갖는 레지스터 파일과, 상기 레저베이션 스테이션의 엔트리의 실행에 의해, 상기 레지스터 파일로부터 오퍼랜드 데이터를 판독할 때는, 상기 엔트리의 실행 이전에, 상기 엔트리의 판독 스레드를 선택하고, 상기 판독 스레드 선택 회로를 제어하는 스레드 선택 회로를 갖고, 상기 엔트리의 연산 또는 오퍼랜드 생성의 실행시에, 상기 스레드 선택 회로에서 선택된 스레드의 아키텍처 레지스터로부터 오퍼랜드 데이터를 판독한다.
또한, 본 발명의 명령 실행 제어 방법은, 레저베이션 스테이션에 의해, 연산기 및 주기억 오퍼랜드 생성기에, 아웃·오브·오더 실행의 처리를 제어하는 스텝과, 상기 실행에 의해 얻을 수 있는 데이터를, 프로그램으로부터는 관측되지 않는 레지스터 갱신 버퍼에 저장하는 스텝과, 상기 레저베이션 스테이션의 엔트리의 실행에 의해, 상기 레지스터 파일로부터 오퍼랜드 데이터를 판독할 때는, 상기 엔트리의 실행 이전에, 상기 엔트리의 판독 스레드를 선택하는 스텝과, 동시 멀티 스레드 방식의 스레드마다의 아키텍처 레지스터와, 동시에 판독하는 것이 가능한 스레드 수가 아키텍처 레지스터의 스레드 수보다 적은 스레드 수에 제한하는 판독 스레드 선택 회로를 갖는 레지스터 파일을, 상기 판독 스레드에서 선택하는 스텝과, 상기 엔트리의 연산 또는 오퍼랜드 생성의 실행시에, 상기 스레드 선택 회로에서 선택된 스레드의 아키텍처 레지스터로부터 오퍼랜드 데이터를 판독하는 스텝을 갖는다.
또한, 본 발명에서는, 바람직하게는, 상기 레저베이션 스테이션은, 연산과 오퍼랜드 어드레스 생성에 필요한 오퍼랜드 데이터를, 상기 레지스터 갱신 버퍼나 즉치(卽値)로부터 판독할 경우에는, 동시에 판독하는 것이 가능한 스레드 수를 제한하지 않는다.
또한, 본 발명에서는, 바람직하게는, 상기 레저베이션 스테이션은, 상기 엔트리에 의한 명령의 실행에 의해 얻을 수 있는 데이터를, 상기 레지스터 갱신 버퍼에 저장하고, 상기 엔트리의 명령이 완료했을 때에, 상기 레지스터 갱신 버퍼의 오퍼랜드 데이터를, 상기 아키텍처 레지스터에 저장한다.
또한, 본 발명에서는, 바람직하게는, 상기 레저베이션 스테이션은, 상기 레저베이션 스테이션의 엔트리가, 상기 레지스터 파일로부터 오퍼랜드 데이터를 판독할 필요한 있을지를 판정하고, 또한 상기 스레드 선택 회로에서 선택된 엔트리의 스레드와 일치할지를 판정하고, 상기 엔트리가, 상기 판독이 필요해서, 상기 스레드와 일치한 엔트리를, 상기 실행을 위해 선택한다.
또한, 본 발명에서는, 바람직하게는, 상기 레저베이션 스테이션은, 상기 판정에 의해, 기능의 실행에 필요한 오퍼랜드 데이터를 상기 레지스터 갱신 버퍼로부터 판독하고, 즉치를 사용하는 것이 가능한 엔트리를, 엔트리의 스레드에 관계없이 실행하는 엔트리에 선택한다.
또한, 본 발명에서는, 바람직하게는, 상기 스레드 선택 회로는, 상기 레지스터 파일로부터 판독하는 것이 가능한 스레드를, 특정한 스레드에 한정하지 않으면 안되는 것을 검출하고, 상기 특정의 스레드를 선택한다.
또한, 본 발명에서는, 바람직하게는, 상기 스레드 선택 회로는, 상기 레지스터 파일로부터 판독하는 것이 가능한 스레드를, 특정한 스레드에 한정할 필요가 없는 것을 검출하고, 동작하고 있는 스레드를 나타내는 신호에 의해, 동작하지 않는 스레드의 선택을 금지한다.
또한, 본 발명에서는, 바람직하게는, 상기 스레드 선택 회로는, 상기 레지스터 파일로부터 판독하는 것이 가능한 스레드를, 특정한 스레드에 한정할 필요가 없는 것을 검출하고, 동작하고 있는 스레드에서, 레저베이션 스테이션의 엔트리에 1개도 실행할 수 없는 상태인 스레드가 존재할지를 판정하고, 상기 스레드가 존재한다고 판정했을 때에, 동작하고 있는 다른 스레드의 엔트리로부터 발행가능한 상태인 스레드가 존재할 경우, 1개도 발행할 수 없는 상태인 스레드의 스레드 선택을 금지한다.
또한, 본 발명에서는, 바람직하게는, 상기 스레드 선택 회로는, 상기 레지스터 파일로부터 판독하는 것이 가능한 스레드를, 특정한 스레드에 한정할 필요가 없는 것을 검출하고, 일정 기간 완료할 수 없는 명령이 레저베이션 스테이션의 엔트리에 존재할지를 판정하고, 상기 엔트리가 존재한다고 판정했을 경우, 일정한 간격으로, 상기 완료되어있지 않은 스레드의 엔트리를 선택한다.
또한, 본 발명에서는, 바람직하게는, 상기 스레드 선택 회로는, 상기 레지스터 파일로부터 판독하는 것이 가능한 스레드를, 특정한 스레드에 한정할 필요가 없는 것을 검출하고, 상기 스레드 선택 회로에서 선택되지 않고 있는 시간이 가장 긴 스레드를 선택한다.
복수의 스레드를 동시 멀티 스레드 방식으로 동작할 경우, 아키텍처 레지스터를 스레드마다의 구비하고, 레지스터 파일로부터 기능의 실행에 필요한 오퍼랜드 데이터를 판독할 경우에, 미리 레지스터 파일로부터 판독 스레드를 선택해 두기 때문에, 빠른 단계에서 아키텍처 레지스터의 선택을 행하는 것이 가능해 진다. 아키텍처 레지스터를 선택하는 부분의 회로는 늘어나지만, 회로의 배선량에 대해서는 판독 스레드의 아키텍처 레지스터의 선택을 행하고 있는 것으로 삭감을 하는 것이 가능해 진다.
또한, 레저베이션 스테이션의 엔트리에서, 아키텍처 레지스터 이외로부터 오퍼랜드 데이터를 판독할 경우에는, 아키텍처 레지스터로부터 판독할 경우와는 달리, 모든 스레드가 동시에 판독, 동시에 판독 스레드에는 제한되는 않게 판독하는 것이 가능하다.
도 1은 본 발명의 정보 처리 장치의 일 실시예의 블록도.
도 2는 본 발명의 일 실시예의 명령 실행 제어 장치의 구성도.
도 3은 도 2의 명령 실행 제어 장치의 상세 구성도.
도 4는 도 2의 명령 실행 제어 장치의 레지스터 파일의 구성도.
도 5는 도 4의 레지스터 파일의 설명도.
도 6은 도 3의 레저베이션 스테이션의 엔트리의 실행 선택 처리 흐름도.
도 7은 도 3의 엔트리 생성 회로의 엔트리 등록시의 실행 선택 처리 흐름도.
도 8은 도 3의 명령 실행 제어 장치에 의한 아키텍처 레지스터 갱신 처리의 설명도.
도 9는 도 3의 스레드 선택 회로의 스레드 선택 처리 흐름도.
도 10은 도 9의 엔트리 상태에 의한 스레드 선택 처리 흐름도.
도 11은 도 9의 완료 명령 대기 시의 스레드 선택 처리의 설명도.
도 12는 도 11의 스레드 선택 처리 흐름도.
도 13은 도 9의 제 1, 제 2 선택 방법을 위한 스레드 선택 회로의 회로도.
도 14는 도 9의 제 3 선택 방법을 위한 스레드 선택 회로의 회로도.
도 15는 도 9의 제 4 선택 방법을 위한 스레드 선택 회로의 회로도.
도 16은 종래의 명령 실행 제어 장치의 설명도.
부호의 설명
1 : 명령 페치 어드레스 생성기
2 : 1차 명령 캐시
3 : 명령 버퍼
4 : 명령 디코더
5, 6, 7, 8 : 레저베이션 스테이션
10 : 오퍼랜드 어드레스 생성기
12, 15 : 연산기
13, 16 : 갱신 버퍼
14, 17 : 레지스터
20 : 레지스터 파일
22-0, 22-1 : 아키텍처 레지스터
24 : 판독 스레드 선택 회로
26 : 오퍼랜드 데이터 선택 회로
32 : 스레드 선택 회로
34 : 실행 엔트리 선택 회로
36 : 레지스터 판독 ID 버퍼
이하, 본 발명의 실시예를, 도면에 따라, 정보 처리 장치, 명령 실행 제어 장치의 전체 구성, 명령 실행 제어 장치, 스레드 선택 회로, 다른 실시예의 순으로 설명한다. 그러나, 본 발명은, 하기 실시예에 한하지 않고, 각각의 변형이 가능하다.
(정보 처리 장치)
도 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)는, 페치해 온 명령을, 인·오더로 디코드하고, 디코드 된 명령은, 기능의 실행을 제어하는 레저베이션 스테이션 유닛(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)에 판독한다.
또한, 디코드 된 명령이, RSE6, RSF7에 엔트리를 작성했을 경우에는, 각각 연산기(12, 15)를 동작하고, 대응하는 연산 처리를 행한다. 디코드 된 명령이, RSA5, RSE6, RSF7에 엔트리를 작성할 경우에, GUB13과 FUB16에 대응하는 레지스터 리네임을 행함으로써 아웃·오브·오더 실행을 행하는 것이 가능해 지고, 실행 결과는, GUB13, FUB16에 저장된다.
레저베이션 스테이션(5, 6, 7)에 의해, 아웃·오브·오더로 실행된 명령은, CSE9의 제어에 의해, 프로그램의 순서대로, 명령의 완료를 행한다. 그리고, 완료한 명령에 대해서만, 고정 소수점 레지스터(14)나 부동 소수점 레지스터(17)나 프로그램 카운터(PC, 넥스트_PC)(18, 19) 등의 프로그래머블한 자원의 갱신을 행한다.
분기 예측 기구(21)는, 분기 명령용 레저베이션 스테이션(8)으로부터의 명령에 의해, 분기 예측을 행하고, 명령 페치 어드레스 생성기(1)를 제어한다.
여기에서, 여기에서, 스레드마다의 구비되어 있는 프로그래머블한 자원인 아키텍처 레지스터의 고정 소수점 레지스터(14)와 부동 소수점 레지스터(17)에 대해서는, 많은 레지스터가 있기 때문에, 레지스터 파일(20)로 구성되어 있다. 그러 나, 스레드마다의 구비되어 있는 프로그래머블한 자원인 넥스트 프로그램 카운터(18)와 프로그램 카운터(19)에 대해서는, 작은 레지스터 때문에, 레지스터 파일을 사용할 일은 없고, 실장되어 있다.
따라서, 후술하는 바와 같이, 레저베이션 스테이션 유닛(5, 6, 7, 8)에 의해, 연산 사이클마다의, 스레드를 선택하고, 선택된 스레드의 엔트리의 실행을, 오퍼랜드 어드레스 생성기(10), 연산기(12, 15)에 지시하고, 또한 레지스터 파일(20)로부터 선택된 스레드의 오퍼랜드 데이터의 판독, 기입을 행하고, 동시 멀티 스레드 처리를 실행한다.
(명령 실행 제어 장치의 전체 구성)
도 2는, 본 발명의 명령 실행 제어 장치의 일 실시예의 블록도이며, 도 1의 RSE5, RSE6, RSF7 및 레지스터 파일(20)의 상세도를 도시한다.
이 실시예에서는, 2개의 스레드(스레드 0 과 1)가 동시에 동작할 경우에 관하여 설명하지만, 스레드 수가 3개 이상이 되어도 실현은 가능하다.
도 2에서, 도 1에서 도시한 것과 동일한 것은, 동일한 기호로 도시하고 있고, 레저베이션 스테이션 유닛(5, 6, 7)은, 스레드 선택 회로(32)와, 실행 엔트리 선택 회로(34)에 접속된다.
이 레저베이션 스테이션 유닛(5, 6, 7)의 엔트리는, 스레드 0과 1을 공유해서 사용한다. 즉, 엔트리는, 엔트리의 스레드를 나타내는 스레드 ID, 오퍼랜드 데이터를 아키텍처 레지스터로부터 판독하는 것을 나타내는 신호와 판독 어드레스, 레지스터 갱신 버퍼로부터 판독하는 것을 나타내는 신호와 판독 어드레스, 명령 디 코드 시에 명령마다의 할당가능한 명령의 번호를 나타내는 명령 식별자 등을 저장하고 있다.
2개의 스레드의 아키텍처 레지스터(22-0, 22-1)는, 동시에 판독하는 것이 가능한 스레드와, 동시에 기입하는 것이 가능한 스레드가 1개로 되는 레지스터 파일(20)로 구성된다. 판독 스레드와 기입 스레드는, 동일한 스레드일 필요는 없다.
도 2에 도시하는 바와 같이, 레지스터 파일(20)은, 스레드 0과 1의 아키텍처 레지스터(22-0, 22-1)와, 판독 스레드 선택 회로(24)와, 판독 오퍼랜드 데이터 선택 회로(26)로 구성된다.
스레드 선택 회로(32)가, 판독 스레드를 선택하고, 판독 스레드 ID를 판독 스레드 선택 회로(24)에 보낸다. 판독 스레드 선택 회로(24)는, 판독 스레드 ID가 지시하는 스레드의 아키텍처 레지스터(22-0, 22-1)를 선택한다. 그리고, 실행 엔트리 선택 회로(34)로부터 실행 엔트리에 포함되는 판독 어드레스가, 판독 오퍼랜드 데이터 선택 회로(26)에 보내진다.
판독 오퍼랜드 데이터 선택 회로(26)는, 판독 어드레스에 따라서, 기능의 실행 회로(10, 12, 15)에 필요한 부분의 데이터를 판독하고, 기능의 실행에 사용한다. 실행 엔트리 선택 회로(34)는, 레저베이션 스테이션으로부터 실행하는 엔트리를 선택하고, 선택된 엔트리가, 레지스터 파일(20), 레지스터 갱신 버퍼(13, 16), 즉치(卽値) 레지스터(28)로부터, 기능의 실행에 필요한 부분의 데이터를 판독하고, 기능의 실행을 행한다.
이 동작을 설명한다. 복수의 스레드가 동시 멀티 스레드 방식으로 동작할 경우, 레저베이션 스테이션(5, 6, 7)의 엔트리 구성은, 스레드 사이에서 공유한다. 그리고, 아키텍처 레지스터(22-0, 22-1)는, 스레드마다의 구비할 수 있고, 레지스터 파일(20)로 구성된다.
레지스터 파일(20)로부터 기능의 실행에 필요한 오퍼랜드 데이터를 판독할 경우에, 스레드 선택 회로(32)의 레지스터 판독 ID에 의해, 미리 레지스터 파일(20)로부터 판독 스레드를 선택해 둔다. 또한, 판독 스레드의 수를, 아키텍처 레지스터(22-0, 22-1)의 스레드 수보다 적은 스레드 수에 제한한다.
레지스터 파일(20)은, 판독 스레드가 미리 결정되어 있음으로써, 실행 엔트리 선택 회로(34)에 실행 엔트리가 선택되기 이전의 빠른 단계에서, 아키텍처 레지스터(22-0, 22-1)의 선택을 행하는 것이 가능해 진다.
아키텍처 레지스터(22-0, 22-1)를 선택하는 부분의 회로(24)는, 늘어나지만, 회로의 배선량은, 판독 스레드의 아키텍처 레지스터의 선택을 행함으로써 삭감하는 것이 가능해 진다. 이것은, 기능의 실행을 행할 때에, 오퍼랜드 선택(42, 48)으로 실행에 필요한 데이터의 선택을 행하지만, 판독 스레드의 아키텍처 레지스터의 선택을 행하지 않을 경우로 했을 때에는, 아키텍처 레지스터로부터 스레드만큼의 오퍼랜드 데이터가 오퍼랜드 선택(42, 48)에 보내게 된다. 판독 스레드의 아키텍처 레지스터의 선택을 행하고 있음으로써 오퍼랜드 선택(42, 48)에 보내는 배선량을 적게 하는 것이 가능해 진다.
이렇게, 레지스터 파일(20)로부터 판독 스레드를 미리 정함으로써, 레지스터 파일(20)로부터 필요한 오퍼랜드 데이터를, 효율적으로 판독하는 것이 가능해 지 고, 종래의 반도체 기술보다도 좋은 반도체를 사용했을 경우에는, 종래의 주파수를 넘을 수 있는 가능성이 생겨 온다.
스레드 선택 회로(32)는, 미리 레지스터 파일(20)로부터 판독하기 위한 스레드를 선택한다. 기능의 실행이 다른 레저베이션 스테이션이, 예를 들면, RSA5, RSE6이, 동일한 레지스터 파일(20)로부터 오퍼랜드 데이터를 판독하는 경우는, 레지스터 파일(20)이 구비되어 있는 스레드 선택 회로(24)에 따라서, 판독 제어되기 때문에, 레저베이션 스테이션(5, 6)의 실행하는 엔트리가 레지스터 파일(20)로부터 오퍼랜드 데이터를 판독할 때의 스레드는, 동일한 스레드가 된다.
또한, 레저베이션 스테이션 유닛(5, 6, 7)의 엔트리에서, 아키텍처 레지스터(22-0, 22-1) 이외로부터 오퍼랜드 데이터를 판독할 경우에는, 아키텍처 레지스터로부터 판독할 경우와는 달리, 모든 스레드가, 동시에 판독할 수 있다.
즉, 아키텍처 레지스터(22-0, 22-1) 이외에서는, 기능의 실행에 의해 얻을 수 있는 데이터를, 프로그램으로부터는 관측되지 않는 워크 레지스터에서 구성된 레지스터 갱신 버퍼(13, 16)나 즉치 레지스터(28)를 사용한다. 이것들의 레지스터를, 오퍼랜드 데이터로서 사용할 경우에는, 동시에 판독 스레드는, 제한되지는 않아, 판독할 수 있다.
(명령 실행 제어 장치)
도 2의 명령 실행 제어 장치를 상세하게 설명한다. 도 3은, 도 2의 레저베이션 스테이션의 블록도, 도 4는, 도 2의 레지스터 파일 및 기능 실행 회로의 블록도, 도 5는, 도 4의 레지스터 파일의 설명도, 도 6은, 도 3의 레저베이션 스테이션 의 엔트리의 실행 선택 동작의 설명도, 도 7은, 도 3의 엔트리 생성 회로의 엔트리 등록시의 동작 설명도이다.
도 3 내지 도 7은, 도 1의 부동 소수점용 레저베이션 스테이션 유닛(7)을 제외하는 RSA5, RSE6의 블록을 나타낸다. 한편, 도 1의 부동 소수점용 레저베이션 스테이션 유닛(7)도 동일한 구성이며, 동일한 레지스터 파일을 별도로 가진다. 단, CWR과 CRB는 구비하고 있지 않기 때문에, 아키텍처 레지스터(부동 소수점 레지스터(17))의 레지스터 파일로부터 기능의 실행에 필요한 오퍼랜드 데이터를 판독하여 기능의 실행을 행한다.
도 3에 도시하는 바와 같이, 연산용 레저베이션 스테이션 유닛(6)은, 엔트리 생성 회로(60)와, 연산용 레저베이션 스테이션(62)과, 실행 엔트리 선택 회로(64)를 갖는다.
동일하게, 주기억 오퍼랜드 생성용 레저베이션 스테이션 유닛(5)은, 엔트리 생성 회로(50)와, 주기억 오퍼랜드 생성용 레저베이션 스테이션(52)과, 실행 엔트리 선택 회로(54)를 갖는다.
스레드 선택 회로(32)는, 스레드 선택 방법의 하나로서, 명령 디코더(4)로 디코드 된 명령의 스레드 ID를 받고, 후술하는 바와 같이, 스레드를 선택하고, 엔트리 생성 회로(50, 60), 레저베이션 스테이션(52, 62), 레지스터 판독 ID 버퍼(36)에, 선택 스레드를 통지한다.
레저베이션 스테이션(52, 62)은, 도 6에서 설명한 바와 같이, 아웃·오브·오더의 실행을 실현하기 위해서, 각 사이클에서, 스레드 선택 회로(32)로부터의 선 택 스레드 ID를 받고, 필요한 오퍼랜드 데이터의 준비를 할 수 있었던 엔트리로부터 실행하도록, 엔트리에 우선도를 첨부한다.
실행 엔트리 선택 회로(54, 64)는, 레저베이션 스테이션(52, 62)에 등록된 엔트리로부터, 실행하는 엔트리를 선택하고, 연산기(12) 등에 출력한다. 실행할 준비를 할 수 있었던 엔트리가 동시에 몇도 있을 경우에는, 실행 엔트리 선택 회로(54, 64)는, 엔트리의 오래된 것으로부터 순서대로, 선택하여 실행한다.
동일하게, 엔트리 생성 회로(60)는, 도 7에서 설명한 바와 같이, 레저베이션 스테이션(52, 62)에 엔트리를 등록하는 단계에서, 스레드 선택 회로(32)로부터의 선택 스레드 ID를 받고, 필요한 오퍼랜드 데이터의 준비를 할 수 있었던 엔트리로부터 실행하도록, 엔트리에 우선도를 첨부한다.
이 우선도의 제어를 행하기 위해서, 스레드 선택 회로(32)는, 실행 엔트리 선택 회로(54, 64)가, 레저베이션 스테이션(52, 62)의 엔트리를 선택하는 1 사이클 이전에, 스레드를 선택한다. 이 선택 스레드 ID는, 레지스터 판독 ID 버퍼(36)를 얻고, 레지스터 파일(20)에 보내지기 때문에, 레지스터 파일(20)이 판독 스레드가, 미리 결정되어 있다.
이 때문에, 실행 엔트리 선택 회로(54 ,64)에서, 실행 엔트리가 선택되기 이전의 빠른 단계에서, 아키텍처 레지스터(22-0, 22-1)의 선택을 행하는 것이 가능해 진다.
도 6에 의해, 레저베이션 스테이션(52, 62)의 엔트리의 실행 선택 동작을 설명한다. 레저베이션 스테이션(52, 62)은, 등록된 유효한 엔트리에 대하여, 그 엔 트리가, 실행에 필요한 오퍼랜드 데이터를 아키텍처 레지스터로부터 판독 엔트리인지를 조사한다(S10).
그 엔트리가, 오퍼랜드 데이터를 아키텍처 레지스터로부터 판독 엔트리로 판정했을 경우에는, 그 엔트리의 ID가, 실행 엔트리 선택 회로(54, 64)의 1 사이클 이전의 사이클에서, 레지스터 파일로부터 판독 스레드를 선택하는 스레드 선택 회로(32)로 선택된 스레드의 ID와 일치하는 엔트리인지를 판정한다(S12).
스텝(S12)에서, 그 엔트리 ID가, 선택된 스레드의 ID와 일치한다고 판정했을 경우에는, 다음 사이클에서의 실행 엔트리 선택 회로(54, 64)로 선택될 가능성이 있는 엔트리로 판정하고, 그 엔트리에 플래그 「1」을 첨부한다(S14).
한편, 그 엔트리의 ID가, 선택된 스레드의 ID와 일치하지 않는다고 판정했을 경우에는, 그 엔트리는, 다음 사이클에서의 실행 엔트리 선택 회로(54, 64)로 선택될 가능성이 없는 엔트리로 판정하고, 그 엔트리의 플래그를 「0」으로 한다(S16).
스텝(S10)에서, 실행에 필요한 오퍼랜드 데이터를 아키텍처 레지스터 이외의 레지스터 갱신 버퍼로부터 판독할 경우나 즉치를 사용하는 엔트리로 판정되었을 경우에는, 레저베이션 스테이션(52, 62)의 엔트리의 스레드에 관계없이, 실행가능하다. 이 때문에, 레저베이션 스테이션(52, 62)은, 실행하는 준비를 할 수 있었던 엔트리인지를 판정한다(S18).
실행하는 준비를 할 수 있었던 엔트리로 판정했을 경우에는, 다음 사이클에서의 실행 엔트리 선택 회로(54, 64)로 선택될 가능성이 있는 엔트리로 판정하고, 그 엔트리에 플래그 「1」을 첨부한다(S14).
실행하는 준비가 갖추어지지 않은 엔트리로 판정했을 경우에는, 다음 사이클에서의 실행 엔트리 선택 회로(54, 64)로 선택될 가능성의 없는 엔트리로 판정하고, 그 엔트리에 플래그 「0」을 첨부한다(S16).
이렇게 하여, 레저베이션 스테이션(52, 62)에 등록된 엔트리가, 오퍼랜드 데이터를 레지스터 파일로부터 판독 엔트리인지를 조사하고, 판독 엔트리로 판정하면, 선택 스레드의 엔트리인지를 조사하고, 선택 스레드의 엔트리이면, 다음 사이클에서 실행 선택 가능성 있는 엔트리로서, 식별된다.
이 때문에, 다음 사이클에서, 실행 엔트리 선택 회로(54, 64)로 선택되어서, 실행하는 것이 가능하다. 이에 따라, 스레드 ID에서, 아키텍처 레지스터를 우선 선택해도, 다음 사이클에서 실행되는 엔트리와 일치하고, 동시 멀티 스레드 방식을 원활하게 실행할 수 있다.
이러한 우선 접수는, 다단으로 행하면, 보다 빨리, 레지스터 파일의 선택이 가능해 진다. 예를 들면 도 4, 도 8에서 설명하는 커런트 윈도 방식에, 적당하다.
도 7에 의해, 엔트리 생성 회로에 의한 50, 60에 의해, 우선 접수 동작을 설명한다. 도 7은, 명령이 디코드 되어, 엔트리 생성 회로(50, 60)가, 레저베이션 스테이션(52, 62)에 새롭게 엔트리를 등록하는 사이클의 엔트리 선택 동작이다. 엔트리 생성 회로(50, 60)는, 명령 디코더(4)로부터 레저베이션 스테이션(52, 62)에 엔트리를 작성하는 명령을 받으면, 등록하는 엔트리가, 실행에 필요한 오퍼랜드 데이터를 아키텍처 레지스터로부터 판독 엔트리인지를 조사한다(S20).
그 엔트리가, 오퍼랜드 데이터를 아키텍처 레지스터로부터 판독 엔트리로 판 정했을 경우에는, 그 엔트리의 ID가, 이 사이클에서, 레지스터 파일로부터 판독 스레드를 선택하는 스레드 선택 회로(32)로 선택된 스레드의 ID와 일치하는 엔트리인지를 판정한다(S22).
스텝(S22)에서, 그 엔트리 ID가, 선택된 스레드의 ID와 일치한다고 판정했을 경우에는, 다음 사이클로의 실행 엔트리 선택 회로(54, 64)에 선택될 가능성이 있는 엔트리로 판정하고, 그 엔트리에 플래그 「1」을 첨부한다(S24).
한편, 그 엔트리의 ID가, 선택된 스레드의 ID와 일치하지 않는다고 판정했을 경우에는, 그 엔트리는, 다음 사이클에서의 실행 엔트리 선택 회로(54, 64)로 선택될 가능성이 없는 엔트리로 판정하고, 그 엔트리의 플래그를 「0」이라 한다(S26).
스텝(S20)에서, 실행에 필요한 오퍼랜드 데이터를 아키텍처 레지스터 이외의 레지스터 갱신 버퍼로부터 판독할 경우나 즉치를 사용하는 엔트리로 판정되었을 경우에는, 등록하는 엔트리의 스레드에 관계없이, 실행가능하다. 이 때문에, 엔트리 생성 회로(50, 60)는, 실행하는 준비를 할 수 있었던 엔트리인지를 판정한다(S28).
실행하는 준비를 할 수 있었던 엔트리로 판정했을 경우에는, 다음 사이클에서의 실행 엔트리 선택 회로(54, 64)로 선택될 가능성이 있는 엔트리로 판정하고, 그 엔트리에 플래그 「1」을 첨부한다(S24).
실행하는 준비가 갖추어지지 않은 엔트리로 판정했을 경우에는, 다음 사이클에서의 실행 엔트리 선택 회로(54, 64)로 선택될 가능성이 없는 엔트리로 판정하고, 그 엔트리에 플래그 「0」을 첨부한다(S26).
이렇게 하여, 엔트리 생성 회로(50, 60)가, 레저베이션 스테이션(52, 62)에, 엔트리를 등록하는 사이클에서, 등록하는 엔트리가, 오퍼랜드 데이터를 레지스터 파일로부터 판독 엔트리인지를 조사하고, 판독 엔트리로 판정하면, 선택 스레드의 엔트리인지를 조사하고, 선택 스레드의 엔트리이면, 다음 사이클에서 실행 선택 가능성 있는 엔트리로서, 식별된다.
이 때문에, 다음 사이클에서, 실행 엔트리 선택 회로(54, 64)로 선택되어서, 실행하는 것이 가능하다. 이에 따라, 스레드 ID에서, 아키텍처 레지스터를 우선 선택해도, 다음 사이클에서 실행되는 엔트리와 일치하고, 동시 멀티 스레드 방식을 원활하게 실행할 수 있다.
다음으로, 도 5에 의해, 아웃·오브·오더 방식의 레지스터 파일(20)의 아키텍처 레지스터의 레지스터 구성을 설명한다. 스레드마다의 구비되어 있는 아키텍처 레지스터(22-0, 22-1)는, 거대한 레지스터로 구성되어 있다.
한편, 이 아키텍처 레지스터의 내(內), 명령을 실행하는데 필요한 레지스터의 장소는, 스레드마다의 구비되어 있는 커런트 윈도 포인터(CWP)가 지시하는 부분에 한정된다. 이 때문에, 커런트 윈도 포인터(CWP)가 지시하는 레지스터의 부분을, 아키텍처 레지스터(22A)로부터 카피한 것을, 커런트 윈도 레지스터(CWR)(22C)에 저장한다.
이 아키텍처 레지스터(22A)로부터 CWR(22C)로 카피하기 위해, 아키텍처 레지스터(22A)로부터 CWR 치환 버퍼(CRB)(22B)로 한번 저장한 후, CWR(22C)에 저장한다.
커런트 윈도 포인터(CWP)의 레지스터 부분이, CWR(22C)에 저장된 때에, CRB(22B)에는, 커런트 윈도 포인터(CWP)의 전후 1개의 레지스터의 1 부분이 저장된 다. 예를 들면, 커런트 윈도 포인터(CWP)=1의 경우에는, CWR(22C)은, 아키텍처 레지스터(22A)의 CWP=1의 3개의 블록을 저장할 수 있고, CRB(22B)는, 아키텍처 레지스터(22A)의 CWP=0 위의 2개의 블록, 또는 CWP=2 아래의 2개의 블록을 저장한다.
CWR(22C)과 CRB(22B)는, 스레드마다의 구비할 수 있어, 아키텍처 레지스터(22A)와 동일하게, 동시에 판독하는 것이 가능한 스레드가 1개인 레지스터 파일로 구성된다.
레저베이션 스테이션(5, 6, 7)으로부터, 아키텍처 레지스터(22)로부터 필요한 오퍼랜드 데이터를 판독하는 것은, CWR(22C)로부터 오퍼랜드 데이터를 판독하게 된다. 단, 커런트 윈도 포인터를 변경하는 명령(예를 들면, SAVE, RESTORE 명령 등)을 실행하고 있는 사이에는, CRB(22B)로부터 오퍼랜드 데이터를 판독할 경우도 있다.
거대한 아키텍처 레지스터에 대하여, 이러한 레지스터 구성에 의해, 아웃·오브·오더 명령 실행 방식에 있어서, 데이터 리드의 스루 풋(throughput)을 향상하고, 또한 레지스터 량을 삭감할 수 있다(예를 들면, 일본국 특개2007-87108호 공보 참조).
이러한 레지스터 파일의 구성예에서의 오퍼랜드 데이터에 의한 기능 실행을 위한 블럭도를, 도 4에 도시한다. 도 4에서, 도 2, 도 3, 도 5에서 도시한 것과 동일한 것은, 동일한 기호로 도시하고 있다.
도 4에 도시하는 바와 같이, 레지스터 파일(20)은, 도 5에서 설명한 바와 같이, 스레드마다의 아키텍처 레지스터(22-0A, 22-1A)와, 스레드마다의 CRB(22-0B, 22-1B)와, 스레드마다의 CWR(22-0C, 22-1C)을 갖는다. CRB(22-0B, 22-1B)의 각각은, 판독 스레드 선택 회로(24)와, 판독 오퍼랜드 데이터 선택 회로(26)를 구비한다. 동일하게, CWR(22-0C, 22-1C)의 각각은, 판독 스레드 선택 회로(24)와, 판독 오퍼랜드 데이터 선택 회로(26)를 구비한다.
그리고, 레지스터 판독 스레드 ID 버퍼(36)의 레지스터 판독 스레드 ID가, CRB(22-0B, 22-1B), CWR(22-0C, 22-1C)의 각각의 판독 스레드 선택 회로(24)에 주어진다. 또한, 실행 엔트리 선택 회로(54)로부터의 선택 엔트리(오퍼랜드 어드레스를 포함함)가, CRB(22-0B, 22-1B), CWR(22-0C, 22-1C), 레지스터 갱신 버퍼(13), 즉치 레지스터(28), 래치 회로(46)의 각각에 주어진다.
또한, 실행 엔트리 선택 회로(64)로부터의 선택 엔트리(오퍼랜드 어드레스를 포함함)가, CRB(22-0B, 22-1B), CWR(22-0C, 22-1C), 레지스터 갱신 버퍼(13), 즉치 레지스터(28), 래치 회로(40)의 각각에 주어진다.
이 때문에, 레지스터 판독 ID와, 실행 엔트리 선택 회로(54, 64)로 선택된 엔트리에 따라서, CWR(22-0C, 22-1C), CRB(22-0B, 22-1B), 레지스터 갱신 버퍼(13), 즉치(28)의 중(中)으로부터 오퍼랜드 데이터가 판독된다. 그리고, 이것들 오퍼랜드 데이터로부터, 오퍼랜드 선택 회로(42, 48)가, 기능의 실행에 필요한 오퍼랜드 데이터를 선택하고, 래치 회로(44, 49)를 통하여, 연산기(12) 또는 오퍼랜드 어드레스 생성기(10)에 주고, 엔트리에서 지정된 기능의 실행을 행한다.
이 경우도, 엔트리의 선택 사이클 이전에, 스레드 ID가 선택되어, CRB(22-0B) 또는 CRB(22-1B) 중 어느 하나가, CWR(22-0C 또는 22-1C) 중 어느 하나가, 스 레드 ID에서 선택되어 있으므로, 엔트리의 선택에 의해, 즉시, 지정된 오퍼랜드 데이터를 판독할 수 있다.
또한, 이 레지스터 갱신 버퍼(13)로부터, 실행에 필요한 오퍼랜드 데이터를 판독할 경우에는, 레지스터 갱신 버퍼(13)의 엔트리의 어드레스를 이용하여, 판독할 수 있다. 이 때문에, 동시에 다른 스레드의 오퍼랜드 데이터를 판독할 수 있다.
따라서, 레저베이션 스테이션(5, 6)의 엔트리가, 기능의 실행에 필요한 오퍼랜드 데이터를, 레지스터 갱신 버퍼(13)로부터 판독하는 것을 포함하는 엔트리를 실행할 경우에는, 아키텍처 레지스터(22-0A)(22-1A)로부터 판독하는 것과 동일하게, 레지스터 파일(22)로부터 판독 스레드 ID에 제한할 필요는 없고, 매 사이클, 실행하는 준비를 할 수 있었던 엔트리를, 실행 엔트리 선택 회로(54, 64)로 선택하는 것이 가능해 진다.
다음으로, 도 8에 의해, 기능의 실행으로부터 아키텍처 레지스터의 갱신 처리를 설명한다. 연산기(12)나 오퍼랜드 어드레스 생성기(10)에 의한 기능의 실행은, 아키텍처 레지스터(22-0A, 22-1A) 이외의 레지스터 갱신 버퍼(13)로부터 오퍼랜드 데이터 판독하거나, 즉치(28)를 사용하여, 실행하는 것이 가능하다.
도 8에 도시하는 바와 같이, 레지스터 갱신 버퍼(13)는, 기능의 실행에 의해 얻을 수 있는 결과의 데이터를 저장하는 프로그램으로부터는, 관측되지 않는 레지스터이며, 엔트리는, 스레드 0과 1로 공유하여 사용하는 것이 가능하다.
레지스터 갱신 버퍼(13)에 기입된 실행의 결과 데이터는, 실행한 명령이 완 료할 때까지, 레지스터 갱신 버퍼(13)에 데이터를 유지한다. 그리고, 명령이 완료했을 때에(도 1의 CSE9로부터의 명령 완료가 발생했을 때에), 레지스터 갱신 버퍼(13)로부터 데이터를 판독하고, 아키텍처 레지스터(22-0A)(22-1A)와 CWR(22-0C)(22-1C)에, 데이터를 기입하는 처리를 행한다.
후속의 명령은, 아키텍처 레지스터(22-0A)(22-1A)에, 기능의 실행의 결과가 기입될때까지(명령이 실행하고 나서 완료할 때까지의 사이)는, 레지스터 갱신 버퍼(13)로부터, 오퍼랜드 데이터를 판독하여, 기능의 실행을 행하는 것이 가능하다.
(스레드 선택 회로)
다음으로, 전술의 스레드를 선택하는 스레드 선택 회로(32)를 설명한다. 도 9는, 스레드 선택 회로(32)의 스레드 선택 방법의 설명도, 도 10은, 도 9의 제 3 선택 방법의 설명도, 도 11, 도 12는, 도 9의 제 4 선택 방법의 설명도, 도 13 내지 도 15는, 스레드 선택 회로(32)의 회로도이다.
도 9에 도시하는 바와 같이, 레지스터 판독 ID의 스레드 선택 회로(32)의 선택 방법은, 4종류이고, 이 선택 조건에 적합하면, 다음 사이클 레지스터 판독 ID가 결정한다. 4종류의 선택 조건에 잘 맞지 않을 경우에는, 레지스터 판독 ID의 반대 스레드를, 다음 사이클의 레지스터 판독 ID로 선택한다(S38).
우선, 제 1 선택 방법은, 스레드를 한정할 필요가 있을지를 판정한다(S30). 이 제 1 선택 방법은, 스레드 선택 회로(32)로, 가장 우선되는 선택이며, 스레드를 한정할 필요가 있을 경우에는, 반드시, 스레드 선택 회로(32)는, 한정하는 스레드를 선택한다. 레지스터의 판독 스레드를 한정할 필요가 있을 경우로는, 커런트 윈 도 포인터가 변경되었을 때이다.
즉, 도 5에서 설명한 바와 같이, 새롭게 커런트 윈도 포인터(CWP)가 변경되었을 때에, 변경이 있었던 스레드의 커런트 윈도 포인터와 전후의 포인터가 지시하는 레지스터 부분이, 아키텍처 레지스터(22A)로부터 판독된다.
그리고, CRB(22B)에 기입하고, CRB(22B)으로부터 판독하고, CWR(22C)에 기입함으로써 새로운 윈도 포인터의 CWR(22C)를 준비하는 것이 가능해 진다.
커런트 윈도 포인터(CWP)가 변경되어서, 새로운 윈도 포인터의 상태로 할 때까지의 레지스터의 이동 처리 중은, 아키텍처 레지스터(22A)의 판독과, CRB(22B)의 판독과 기입과, CWR(22C)에의 기입을 행하는 스레드에 대해서는, 커런트 윈도 포인터를 변경한 스레드가 우선된다. 이 때문에, 레지스터 파일(22)의 판독 기입하는 것이 가능한 스레드는, 커런트 윈도 포인터를 변경하는 스레드에 제한된다.
따라서, 레지스터의 이동 처리 중은, 레지스터의 이동 처리 중의 스레드와, 레지스터 파일(22)로부터 판독 스레드를 선택하는 스레드 선택 회로(32)로 선택하는 스레드가 일치할 필요가 있다. 한편, 레지스터의 이동 처리는, 동시에, 1개의 스레드만이, 처리하는 것이 가능해서, 2개의 스레드가, 동시에 처리하는 것은, 할 수 없도록 제어된다.
이렇게, 레지스터의 이동 처리 중에 의한 레지스터 파일(22)의 판독 기입의 스레드가 제한되어 있는 사이는, 레지스터의 이동 처리 중의 스레드와 동일한 스레드를 스레드 선택 회로(32)로 반드시 선택하도록 제어한다. 이 때문에, 레저베이션 스테이션의 실행하는 엔트리에서, 아키텍처 레지스터(22)로부터 오퍼랜드 데이 터를 판독하는 엔트리는, 레지스터의 이동 처리 중의 스레드와 일치한다. 이렇게, 레지스터의 이동 처리 중의 스레드 선택 회로(32)는, 레지스터의 이동 처리중의 스레드에 한정해서 선택하도록 동작한다.
또한, 커런트 윈도 포인터(CWP)를 변경하는 명령이 실행되어 있는 도중의 처리에서는, 커런트 윈도 포인터(CWP)가 변경될 때까지는, 레저베이션 스테이션에 의해, 아키텍처 레지스터로부터 오퍼랜드 데이터를 판독할 경우에, CRB(22B)로부터 오퍼랜드 데이터를 판독할 것이 있다.
이때에, 반대인 스레드가, 커런트 윈도 포인터를 변경하고, CRB(22B), CWR(22C)의 판독 기입의 스레드가, 커런트 윈도 포인터(CWP)를 제한하고 있을 때에, 레저베이션 스테이션으로부터 커런트 윈도 포인터를 변경하는 명령의 실행 중에, CRB(22B)로부터 오퍼랜드 데이터를 판독할 일이 없도록, 스레드 선택 회로(32)는, 커런트 윈도 포인터를 변경하고 있는 스레드를 선택한다.
다음으로, 스레드를 특정한 스레드에 한정하지 않을 때의 스레드의 선택 방법은 3개 있다. 스레드를 특정한 스레드에 한정하지 않을 때의 첫 번째의 선택 방법(제 2 선택 방법)은, 스레드 선택 회로(32)가, 동작하고 있는 스레드가 단일인 스레드일 때에는, 동작하고 있는 스레드를 선택한다(S32).
스레드를, 특정한 스레드에 한정하지 않을 때의 두 번째 선택 방법(제 3 선택 방법)은, 발행할 수 없는 엔트리가 존재할 경우에, 발행할 수 없는 스레드와 반대인 스레드를 선택하는 방법이다(S34). 즉, 연산용과 주기억 오퍼랜드 어드레스 생성용의 레저베이션 스테이션(52, 62)의 엔트리에, 1개에서도 실행가능한 상태의 엔트리가 존재하고 있을 때에, 반대인 스레드가, 1개도 실행할 수 없는 상태일 때에는, 1개에서도 실행가능한 상태의 스레드를 선택한다.
도 10에 의해, 제 3 선택 방법을 상세하게 설명한다.
레저베이션 스테이션(52, 62)의 엔트리를 실행가능한 상태라 하는 것은, 스레드 별도로, 엔트리가 유효해서, 인터록이 걸려 있지 않은 상태일지, 혹은, 엔트리가 빈 상태여도, 다음의 사이클에서, 엔트리가 유효해질 가능성이 있는 상태이다.
레저베이션 스테이션(52, 62)의 엔트리에는, 엔트리가 실행하는 준비가 되어 있는 경우에도, 실행하는 것을 할 수 없도록 제어하는(인터록) 것이 가능한 정보를, 엔트리의 1개의 신호로서 구비하고 있다.
이 신호가 한번 세트되면, 이 엔트리는, 실행 엔트리 선택 회로(54, 64)로 선택될 일은 없고, 실행하는 것을 할 수 없는 상태로 되어, 리셋 되면, 실행하는 것이 가능해지고, 실행 엔트리 선택 회로(54, 64)로 선택된다.
스레드 0의 엔트리가 유효해서, 인터록이 걸려 있지 않은 상태일지, 혹은, 엔트리가 빈 상태여도, 다음 사이클에서, 엔트리가 유효해질 가능성이 있는 상태를 검출하면, 스레드 1의 엔트리가 유효해서, 인터록이 걸려 있지 않은 상태일지, 혹은, 엔트리가 빈 상태여도, 다음 사이클에서, 엔트리가 유효해질 가능성이 있는 상태일지를 판정한다(S40). 그리고, 스레드 1의 엔트리가 유효, 인터록 없음 또는 엔트리가 유효해질 가능성이 있을 경우(YES)에는, 이 제 3 선택 방법에서의 스레드 선택을 행하지 않는다.
다음으로, 스레드 1의 엔트리가 유효하지 않은, 인터록 있거나 또는 엔트리가 유효해질 가능성이 없을 경우(NO)에는, 스레드 0에서, 스레드의 엔트리를 전부 클리어하는 신호가 발행되었는지를 판정하고, 클리어하는 신호가 발행된 스레드 0에 대해서는, 이 선택 회로에서 스레드 선택을 행하지 않는다(S42). 클리어 신호가 스레드 0으로 발행되지 않고 있을 경우에는, 스레드 0을 선택한다.
역으로, 스레드 1의 엔트리가 유효해서, 인터록이 걸려 있지 않은 상태일지, 혹은, 엔트리가 빈 상태여도, 다음 사이클에서, 엔트리가 유효해질 가능성이 있는 상태를 검출하면, 스레드 0의 엔트리가 유효해서, 인터록이 걸려 있지 않은 상태일지, 혹은, 엔트리가 빈 상태여도, 다음 사이클에서, 엔트리가 유효해질 가능성이 있는 상태일지를 판정한다(S42). 그리고, 스레드 0의 엔트리가 유효, 인터록 없음 또는 엔트리가 유효해지는 가능성이 있을 경우(YES)에는, 이 제 3 선택 방법에서의 스레드 선택을 행하지 않는다.
다음으로, 스레드 0의 엔트리가 유효하지 않은, 인터록 있음 또는 엔트리가 유효해질 가능성이 없을 경우(NO)에는, 스레드 1에서, 스레드의 엔트리를 전부 클리어하는 신호가 발행되었는지를 판정하고, 클리어하는 신호가 발행된 스레드 1에 대해서는, 이 선택 회로에서 스레드 선택을 행하지 않는다(S46). 클리어 신호가 스레드 1에 발행되지 않고 있을 경우에는, 스레드 1을 선택한다.
도 9로 돌아가서, 스레드를 특정한 스레드에 한정하지 않을 때의 세 번째 선택 방법(제 4 선택 방법)은, 도 11에 도시하는 바와 같이, 실행 대기에서, 일정 기간 완료하는 것을 할 수 없는 상태에 있는 명령이 검출되었을 때에, 그 완료할 수 없는 상태의 명령이, 레저베이션 스테이션의 엔트리에 존재할 경우에는, 일정한 간격으로, 완료할 수 없는 상태의 명령의 스레드를, 스레드 선택 회로(32)로 선택한다(S36). 이 선택 회로는, 2개의 스레드가 동작하고 있을 때에 유효하다.
도 12에 의해, 상세하게 설명한다. 최후에 완료한 명령의 스레드와 반대인 스레드가, 일정 기간 1 명령도 완료하는 것을 할 수 없는 상태에 있는 것인지를 검출한다(S50, S52). 검출하지 않을 경우(NO)에는, 이 방법에서 스레드 선택을 행하지 않는다.
한편, 검출했을 때에(YES), 후술하는 스레드 ID의 조작 기간인지를 판정하고, 조작 기간이 아니면, 이 방법에서 스레드 선택을 행하지 않는다(S54).
역으로, 조작 기간이면, 연산용의 레저베이션 스테이션의 유효한 엔트리의 명령 식별자와, 완료할 수 없는 상태의 명령의 명령 식별자가 일치하는 엔트리가, 레저베이션 스테이션의 엔트리에 존재할지를 판정한다(S56).
존재하면, 클리어 신호가 발행되지 않고 있는 조건에서, 완료할 수 없는 상태의 명령의 스레드를, 스레드 선택 회로로 선택한다(S58, S60).
또한, 이 상태에서, 스레드 선택 회로에서 선택하는 스레드는, 도 11에 도시하는 바와 같이, 일정한 간격으로, 스레드를 선택한다. 스레드 선택기간 동안은, 스레드 선택 회로(32)로 선택하도록 동작하고, 스레드 선택기간 중이 아닐 때는, 스레드 선택을 행하지 않는다(S54).
스레드 별로 나뉘어 있는 스레드의 엔트리를, 전부 클리어하는 신호가 발행되었을 경우에는, 클리어하는 신호가 발행된 스레드에 대해서는, 이 선택 회로에 서, 스레드 선택을 행하지 않는다(S58, S60).
상기의 스레드 선택 회로(32)는, 논리 회로로 구성된다. 도 15의 회로는, 3은, 제 4 선택 방법을 실현하는 회로이며, 그 출력이, 도 14의 회로의 입력이 된다. 도 14의 회로는, 제 3 선택 방법을 실현하는 회로이며, 그 출력이, 도 13의 회로의 입력이 된다. 도 13의 회로는, 제 1, 제 2 선택 방법을 실현하는 회로이며, 최종적인 스레드 선택 ID(THREAD_ID)를 출력한다.
도 13의 최종 단(段)의 회로는, 출력 AND게이트(320)와, 1 입력 반전형 AND게이트(322)와, 1 입력 반전형에서, 출력 반전형 AND게이트(324)와, 한 쌍의 OR게이트(326, 328)를 갖는다.
도 13에서, +FORCE_THREAD_0과, +FORCE_THREAD_1이, 레지스터의 이동 처리 중을 나타내는 신호이며, 스레드를 한정할 필요가 있을 경우를 나타낸다. 이 신호가 온이 되면, OR게이트(326, 328)의 출력과, 이 신호에 의하여, AND게이트(322, 324)로부터, 온이 된 스레드가, 스레드 선택 회로(32)로 선택된다. 즉, 도 9의 스텝(S30)에서 설명한 제 1 선택 방법이 실행된다. 또한, 이 2개의 신호가 동시에 온이 될 일은 없다.
또한, 도 13에서, +THREAD_0_ONLY_ACTIVE와, +THREAD_1_ONLY_ACTIVE가, 단일 스레드에서 동작하고 있을 때에 동작하고 있는 스레드를 나타내는 신호이다. 또한, 이 2개의 신호가 동시에 온이 될 일은 없다. 이 신호가 온이 되면, OR게이트(326 또는 328)와, AND게이트(322, 324)로부터, 온이 된 스레드가, 스레드 선택 회로(32)로 선택된다. 도 9의 스텝(S32)의 제 2 선택 방법이 실행된다.
한편, 도 13의 회로에서, +RS_VALID_NOT_INTLCK_THREAD_0_ONLY 신호와, +RS_VALID_NOT_INTLCK_THREAD_1_ONLY 신호는, 도 14의 제 3 선택 방법에 의한 출력이며, +RSE_COMP_WAIT_THREAD_0과, +RSE_COMP_WAIT_THREAD_1은, 도 15의 제 4 선택 방법의 출력이다.
다음으로, 도 14의 제 3 선택 방법을 실현하는 회로는, 한 쌍의 1 입력 반전형 AND게이트(330, 332)와, 한 쌍의 1 입력 반전형 AND게이트(334, 336)와, 한 쌍의 OR게이트(338, 340)를 갖는다.
도 14에서, +RSE_VALID_NOT_INTLCK_OR_THREAD_0이, 연산용 레저베이션 스테이션의 엔트리에, 스레드 0의 유효한 엔트리에서, 인터록 하지 않는 엔트리가 1개이기도 한 것을 나타내는 신호이다.
또한, +RSA_VALID_NOT_INTLCK_OR_THREAD_0이, 주기억 오퍼랜드 어드레스 생성용 레저베이션 스테이션의 엔트리에, 스레드 0의 유효한 엔트리에서, 인터록 하지 않는 엔트리가 1개이기도 한 것을 나타내는 신호이다.
또한, +IWR_VALID_OR_THREAD_0이, 명령 디코더로부터 스레드 0의 명령이 디코드 되는 것을 나타내는 신호이다. 이것들 중 어느 쪽인가 1개의 신호가 온이면, OR게이트(338)로부터, 레저베이션 스테이션의 스레드 0의 엔트리에는, 실행가능한 엔트리가 존재하는 것을 나타내고 있다.
그리고, OR게이트(340)로부터의 스레드 1의 이 신호가 오프의 때에, 스레드 0의 엔트리를 클리어하는 것을 나타내는 신호 +CLEAR_PIPELINE_THREAD_0이 오프의 때에, AND게이트(334)를 통하여, AND게이트(330)로부터 +RS_VALID_NOT_INTLCK_THREAD_0_ONLY가 출력되고, 도 13의 OR게이트(328)에 입력된다. 이 때문에, 도 13의 회로는, 스레드 0을 선택한다.
스레드 1을 선택할 경우도 동일한 회로 구성이다. 즉, +RSE_VALID_NOT_INTLCK_OR_THREAD_1이, 연산용 레저베이션 스테이션의 엔트리에, 스레드 1의 유효한 엔트리에서, 인터록 하지 않는 엔트리가 1개이기도 한 것을 나타내는 신호이다.
또한, +RSA_VALID_NOT_INTLCK_OR_THREAD_1이, 주기억 오퍼랜드 어드레스 생성용 레저베이션 스테이션의 엔트리에, 스레드 1의 유효한 엔트리에서, 인터록 하지 않는 엔트리가 1개이기도 한 것을 나타내는 신호이다.
또한, +IWR_VALID_OR_THREAD_1이, 명령 디코더로부터 스레드 1의 명령이 디코드 되는 것을 나타내는 신호이다. 이것들 중 어느 것인가 1개의 신호가 온이면, OR게이트(340)로부터, 레저베이션 스테이션의 스레드 1의 엔트리에는, 실행가능한 엔트리가 존재하는 것을 나타내고 있다.
그리고, OR게이트(338)로부터의 스레드 0의 이 신호가 오프의 때에, 스레드 1의 엔트리를 클리어하는 것을 나타내는 신호 +CLEAR_PIPELINE_THREAD_1이 오프의 때에, AND게이트(336)를 통하여, AND게이트(332)로부터 +RS_VALID_NOT_INTLCK_THREAD_1_ONLY가 출력되어, 도 13의 OR게이트(326)에 입력된다. 이 때문에, 도 13의 회로는, 스레드 1을 선택한다.
다음으로, 도 15는, 제 4 선택 방법을 실현하기 위한 스레드 0을 선택하는 회로를 나타낸다. 도 15의 회로는, 엔트리 존재 검출 회로(348-1 ~ 348-n)와, OR 게이트(344)와, AND게이트(346)와, 1 입력 반전형 AND게이트(342)로 구성된다.
엔트리 존재 검출 회로(348-1)는, 다음에 완료하는 명령의 명령 식별자를 나타내는 신호, +CSE_OUT_PTR_THREAD_0과, 연산용의 레저베이션 스테이션의 0번의 엔트리의 명령 식별자를 나타내는 신호 +RSE_0_IID의 일치를 검출하는 일치 회로(350-1)와, 연산용 레저베이션 스테이션의 0번의 엔트리가 스레드 0으로 유효한 것을 나타내는 신호 +RSE_0_VALID_THREAD_0과, 일치 회로(350-1)의 출력의 AND를 연산하는 AND게이트(352-1)로 구성된다.
따라서, 엔트리 존재 검출 회로(348-1)의 출력이, 온의 때에는, 스레드 0의 선두의 명령이, 연산용의 레저베이션 스테이션에 존재하는 것을 나타낸다. 이 존재 검출 회로는, 연산용의 레저베이션 스테이션의 엔트리 n개분 설치되어 있고, OR게이트(344)에 의해, 어느 것인가의 엔트리가 성립했을 경우에는, 스레드 0의 선두의 명령이, 연산용의 레저베이션 스테이션에 존재하는지를 나타내는 신호를 출력한다.
한편, AND게이트(346)에는, 최후에 완료한 명령의 스레드가 스레드 1을 나타내는 신호 +LAST_COMMIT_THREAD_ID_1과, 선두의 명령이 연산 대기 상태를 나타내는 신호 +TOQ_EU_COMP_WAIT_THREAD_0과, 일정 기간 스레드 0의 명령이 완료하지 않고 있는 것을 나타내는 신호 +WARNING_TO_COMMIT_THREAD_0과, 스레드 선택 회로에서 선택하는 기간인 것을 나타내는 신호 +RSE_COMP_WAIT_MODE가 입력되어 있다.
이들 모두의 입력 신호가 온이 되고, 또한 클리어하는 신호를 나타내는 +CLEAR_PIPELINE_THREAD_0이 오프의 때에, OR게이트(344)로부터의 스레드 0의 선두 의 명령이 연산용의 레저베이션 스테이션에 존재하는 신호가 출력하고 있으면, AND게이트(342)로부터 +RSE_COMP_WAIT_THREAD_0 신호가 어서트(assert) 된다.
이 신호는, 도 13의 OR게이트(328)에 입력하고, 도 13의 회로에서, 스레드 0을 선택한다.
한편, 도 15는, 스레드 0의 선택 회로만을 나타내지만, 스레드 1을 선택할 경우도, 동일한 선택 회로이다.
또한, 상기에서 주었던 4개의 종류 중 어느 패턴도 선택하는 스레드가 없었을 경우에는, 도 9의 스텝(S38)에서 설명한 바와 같이, 동시에 동작하는 스레드가 2개의 스레드이기 때문에, 레지스터 판독 ID가 나타내는 스레드와 반대인 스레드를 다음 사이클 레지스터 판독 ID로 한다.
도 13의 회로에서는, 레지스터 판독 ID를 나타내는 신호 +GPR_READ_THREAD_ID의 극성을 반대로 한 신호를, 스레드 1측을 선택하는 논리에 OR하는 OR게이트(326)에 입력함으로써 전술한 모든 조건이 성립하지 않을 경우에는, 다음 사이클 레지스터 판독 ID는, 레지스터 판독 ID의 반대 스레드를 선택하는 것이 가능해 진다.
(다른 실시예)
전술의 실시예에서는, 2개의 스레드(스레드 0과 1)가 동시에 동작하는 동시 멀티 스레드 방식으로 설명했지만, 3개 이상의 스레드가 동시에 동작하는 것에도 적용할 수 있다. 마찬가지로, 아키텍처 레지스터를, 도 5의 커런트 윈도 포인터에 의한 분할 레지스터 구성으로 설명했지만, 다른 구성의 것에도 적용할 수 있다.
이상, 본 발명을 실시예에 의해 설명했지만, 본 발명의 취지의 범위 내에서, 본 발명은, 각각의 변형이 가능해서, 본 발명의 범위로부터 이것들을 배제하는 것은 아니다.
복수의 스레드를 동시 멀티 스레드 방식으로 동작할 경우, 아키텍처 레지스터를 스레드마다의 구비하고, 레지스터 파일로부터 기능의 실행에 필요한 오퍼랜드 데이터를 판독할 경우에, 미리 레지스터 파일로부터 판독 스레드를 선택해 두기 위해, 빠른 단계에서 아키텍처 레지스터의 선택을 행하는 것이 가능해 진다. 아키텍처 레지스터를 선택하는 부분의 회로는 늘어나지만, 회로의 배선량에 대해서는 판독 스레드의 아키텍처 레지스터의 선택을 행하고 있는 것으로 삭감을 하는 것이 가능해 진다.
또한, 레저베이션 스테이션의 엔트리에서, 아키텍처 레지스터 이외로부터 오퍼랜드 데이터를 판독할 경우에는, 아키텍처 레지스터로부터 판독할 경우와는 달리, 모든 스레드가 동시에 판독, 동시에 판독 스레드에는 제한되지 않고 판독하는 것이 가능하다.

Claims (20)

  1. 엔트리를 실행하며, 아웃·오브·오더 실행을 처리하기 위한 연산 처리와 주기억 오퍼랜드 어드레스(operand address) 생성을 제어하는 레저베이션 스테이션(reservation station)과,
    연산 처리와, 주기억 오퍼랜드 어드레스 생성의 기능의 실행에 의해 얻어지는 데이터를 저장하는 레지스터 갱신 버퍼와,
    복수의 스레드가 동시 멀티 스레드 방식으로 동작하기 위한, 스레드마다의 복수의 아키텍처 레지스터와, 동시에 판독가능한 스레드 수가 아키텍처 레지스터의 스레드 수보다 적은 스레드 수로 제한하는 판독 스레드 선택 회로를 갖는 레지스터 파일과,
    상기 레저베이션 스테이션에 접속하고,상기 레저베이션 스테이션의 엔트리의 실행에 의해, 상기 레지스터 파일로부터 오퍼랜드 데이터를 판독할 때는, 상기 엔트리의 실행 이전에, 상기 엔트리의 판독 스레드를 선택하고, 상기 판독 스레드 선택 회로를 제어하는 스레드 선택 회로와,
    상기 레저베이션 스테이션에 접속하고, 상기 엔트리의 연산 또는 오퍼랜드 생성의 실행시에, 상기 스레드 선택 회로에서 선택된 스레드의 아키텍처 레지스터로부터 오퍼랜드 데이터를 판독하는 오퍼랜드 데이터 선택 회로를 갖는 것을 특징으로 하는 명령 실행 제어 장치.
  2. 제 1 항에 있어서,
    상기 레저베이션 스테이션은, 연산과 오퍼랜드 어드레스 생성에 필요한 오퍼 랜드 데이터를, 상기 레지스터 갱신 버퍼나 즉치(卽値)로부터 판독할 경우에는, 동시에 판독하는 것이 가능한 스레드 수를 제한하지 않는 것을 특징으로 하는 명령 실행 제어 장치.
  3. 제 1 항에 있어서,
    상기 레저베이션 스테이션의 상기 엔트리에 의한 명령의 실행에 의해 얻어지는 데이터를, 상기 레지스터 갱신 버퍼에 저장하고, 상기 레저베이션 스테이션으로부터 실행한 명령이 완료했을 때에, 상기 레지스터 갱신 버퍼의 오퍼랜드 데이터를, 상기 아키텍처 레지스터에 저장하는 것을 특징으로 하는 명령 실행 제어 장치.
  4. 제 1 항에 있어서,
    상기 레저베이션 스테이션은,
    상기 레저베이션 스테이션의 엔트리가, 상기 레지스터 파일로부터 오퍼랜드 데이터를 판독할 필요가 있는지를 판정하고, 또한 상기 스레드 선택 회로에서 선택된 엔트리의 스레드와 일치하는지를 판정하고, 상기 엔트리가, 상기 레지스터 파일로부터의 판독이 필요해서, 상기 스레드와 일치한 엔트리를, 상기 기능의 실행을 위해 선택하는 것을 특징으로 하는 명령 실행 제어 장치.
  5. 제 4 항에 있어서,
    상기 레저베이션 스테이션은,
    레지스터 파일로부터 오퍼랜드 데이터를 판독할 필요가 있는지를 판정에 의해, 기능의 실행에 필요한 오퍼랜드 데이터를 상기 레지스터 갱신 버퍼로부터 판독하고, 즉치를 사용하는 엔트리를 실행하는 엔트리로 선택하는 것을 특징으로 하는 명령 실행 제어 장치.
  6. 제 1 항에 있어서,
    상기 스레드 선택 회로는,
    상기 레지스터 파일로부터 판독하는 것이 가능한 스레드를 특정한 스레드로 한정할 필요가 있는 것을 검출하는 때에, 상기 특정한 스레드를 선택하고,
    상기 특정한 스레드는 스레드마다 구비되며, 상기 아키텍쳐 레지스터 내에 기능을 실행하는데 필요한 레지스터의 부분을 지시하는 커런터 윈도우 포인터가 변경된 스레드인 것을 특징으로 하는 명령 실행 제어 장치.
  7. 제 6 항에 있어서,
    상기 스레드 선택 회로는,
    상기 레지스터 파일로부터 판독하는 것이 가능한 스레드를, 특정한 스레드로 한정할 필요가 없는 것을 검출하는 때에, 동작하고 있는 스레드를 나타내는 신호에 의해, 동작하지 않는 스레드의 선택을 금지하는 것을 특징으로 하는 명령 실행 제어 장치.
  8. 제 6 항에 있어서,
    상기 스레드 선택 회로는,
    상기 레지스터 파일로부터 판독하는 것이 가능한 스레드를, 특정한 스레드로 한정할 필요가 없는 것을 검출하는 때에, 동작하고 있는 스레드 중, 레저베이션 스테이션의 엔트리에서 1개도 실행할 수 없는 상태인 스레드가 존재하는지를 판정하여, 상기 스레드가 존재한다고 판정하고, 동작하고 있는 다른 스레드의 엔트리에서 실행가능한 상태인 스레드가 존재할 경우, 실행할 수 없는 상태인 스레드의 선택을 금지하는 것을 특징으로 하는 명령 실행 제어 장치.
  9. 제 6 항에 있어서,
    상기 스레드 선택 회로는,
    상기 레지스터 파일로부터 판독하는 것이 가능한 스레드를, 특정한 스레드로 한정할 필요가 없는 것을 검출하는 때에, 일정 기간 완료할 수 없는 명령이 레저베이션 스테이션의 엔트리에 존재하는지를 판정하여, 상기 엔트리가 존재한다고 판정했을 경우, 일정한 간격으로, 상기 완료할 수 없는 명령의 스레드를 선택하는 것을 특징으로 하는 명령 실행 제어 장치.
  10. 레저베이션 스테이션에 의해, 연산기 및 주기억 오퍼랜드 생성기에, 아웃·오브·오더 실행의 처리를 제어하는 스텝과,
    상기 실행에 의해 얻어지는 데이터를, 레지스터 갱신 버퍼에 저장하는 스텝과,
    상기 레저베이션 스테이션의 엔트리의 실행에 의해, 상기 레지스터 파일로부터 오퍼랜드 데이터를 판독할 때는, 상기 엔트리의 실행 이전에, 상기 엔트리의 판독 스레드를 선택하는 스텝과,
    동시 멀티 스레드 방식의 스레드마다의 아키텍처 레지스터와, 동시에 판독가능한 스레드 수가 아키텍처 레지스터의 스레드 수보다 적은 스레드 수로 제한하는 판독 스레드 선택 회로를 갖는 레지스터 파일을, 상기 판독 스레드에서 선택하는 스텝과,
    상기 엔트리의 연산 또는 오퍼랜드 생성의 실행시에, 상기 스레드 선택 회로에서 선택된 스레드의 아키텍처 레지스터로부터 오퍼랜드 데이터를 판독하는 스텝을 갖는 것을 특징으로 하는 명령 실행 제어 방법.
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
KR1020097026495A 2007-06-20 2007-06-20 명령 실행 제어 장치 및 명령 실행 제어 방법 KR101086792B1 (ko)

Applications Claiming Priority (1)

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

Publications (2)

Publication Number Publication Date
KR20100009592A KR20100009592A (ko) 2010-01-27
KR101086792B1 true KR101086792B1 (ko) 2011-11-25

Family

ID=40155964

Family Applications (1)

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

Country Status (6)

Country Link
US (1) US7958338B2 (ko)
EP (1) EP2159688A4 (ko)
JP (1) JP5104862B2 (ko)
KR (1) KR101086792B1 (ko)
CN (1) CN101689110B (ko)
WO (1) WO2008155799A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102542306B (zh) * 2010-12-31 2016-06-01 重庆重邮信科通信技术有限公司 一种移动终端应用子系统访问用户识别卡文件的方法
JP6477248B2 (ja) * 2015-05-22 2019-03-06 富士通株式会社 演算処理装置及び演算処理装置の処理方法
JP7032647B2 (ja) * 2018-04-17 2022-03-09 富士通株式会社 演算処理装置及び演算処理装置の制御方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006039815A (ja) 2004-07-26 2006-02-09 Fujitsu Ltd マルチスレッドプロセッサおよびレジスタ制御方法
JP2006040141A (ja) 2004-07-29 2006-02-09 Fujitsu Ltd マルチスレッドプロセッサ

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5675758A (en) * 1994-11-15 1997-10-07 Advanced Micro Devices, Inc. Processor having primary integer execution unit and supplemental integer execution unit for performing out-of-order add and move operations
US5778243A (en) * 1996-07-03 1998-07-07 International Business Machines Corporation Multi-threaded cell for a memory
US5872963A (en) * 1997-02-18 1999-02-16 Silicon Graphics, Inc. Resumption of preempted non-privileged threads with no kernel intervention
US6357016B1 (en) * 1999-12-09 2002-03-12 Intel Corporation Method and apparatus for disabling a clock signal within a multithreaded processor
US6904511B2 (en) * 2002-10-11 2005-06-07 Sandbridge Technologies, Inc. Method and apparatus for register file port reduction in a multithreaded processor
US6842848B2 (en) * 2002-10-11 2005-01-11 Sandbridge Technologies, Inc. Method and apparatus for token triggered multithreading
JP3646137B2 (ja) * 2003-03-25 2005-05-11 独立行政法人科学技術振興機構 命令発行方法及び装置、中央演算装置、命令発行プログラム及びそれを記憶したコンピュータ読み取り可能な記憶媒体
US7849297B2 (en) * 2003-08-28 2010-12-07 Mips Technologies, Inc. Software emulation of directed exceptions in a multithreading processor
WO2006114874A1 (ja) * 2005-04-21 2006-11-02 Fujitsu Limited プロセッサ装置
JP5028774B2 (ja) * 2005-09-22 2012-09-19 富士通株式会社 演算処理装置,情報処理装置,及びレジスタファイルの制御方法
JP2007109057A (ja) * 2005-10-14 2007-04-26 Hitachi Ltd プロセッサ
US7509511B1 (en) * 2008-05-06 2009-03-24 International Business Machines Corporation Reducing register file leakage current within a processor

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006039815A (ja) 2004-07-26 2006-02-09 Fujitsu Ltd マルチスレッドプロセッサおよびレジスタ制御方法
JP2006040141A (ja) 2004-07-29 2006-02-09 Fujitsu Ltd マルチスレッドプロセッサ

Also Published As

Publication number Publication date
EP2159688A1 (en) 2010-03-03
JP5104862B2 (ja) 2012-12-19
KR20100009592A (ko) 2010-01-27
US20100095103A1 (en) 2010-04-15
WO2008155799A1 (ja) 2008-12-24
CN101689110A (zh) 2010-03-31
JPWO2008155799A1 (ja) 2010-08-26
US7958338B2 (en) 2011-06-07
EP2159688A4 (en) 2011-01-05
CN101689110B (zh) 2013-07-31

Similar Documents

Publication Publication Date Title
KR101100145B1 (ko) 명령실행 제어장치 및 명령실행 제어방법
JP3927546B2 (ja) 同時マルチスレッド化プロセッサ
US7237094B2 (en) Instruction group formation and mechanism for SMT dispatch
US7469407B2 (en) Method for resource balancing using dispatch flush in a simultaneous multithread processor
US6721874B1 (en) Method and system for dynamically shared completion table supporting multiple threads in a processing system
US9037837B2 (en) Hardware assist thread for increasing code parallelism
US20080109640A1 (en) Method For Changing A Thread Priority In A Simultaneous Multithread Processor
US20080126771A1 (en) Branch Target Extension for an Instruction Cache
US7000233B2 (en) Simultaneous multithread processor with result data delay path to adjust pipeline length for input to respective thread
US7093106B2 (en) Register rename array with individual thread bits set upon allocation and cleared upon instruction completion
US20080276072A1 (en) System and Method for using a Local Condition Code Register for Accelerating Conditional Instruction Execution in a Pipeline Processor
US6981128B2 (en) Atomic quad word storage in a simultaneous multithreaded system
US7194603B2 (en) SMT flush arbitration
US20220214884A1 (en) Issuing instructions based on resource conflict constraints in microprocessor
US7013400B2 (en) Method for managing power in a simultaneous multithread processor by loading instructions into pipeline circuit during select times based on clock signal frequency and selected power mode
US10963380B2 (en) Cache miss thread balancing
US10545765B2 (en) Multi-level history buffer for transaction memory in a microprocessor
US6735687B1 (en) Multithreaded microprocessor with asymmetrical central processing units
KR101086792B1 (ko) 명령 실행 제어 장치 및 명령 실행 제어 방법
JP2020091751A (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
FPAY Annual fee payment

Payment date: 20141021

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee