JPWO2008155799A1 - 命令実行制御装置及び命令実行制御方法 - Google Patents

命令実行制御装置及び命令実行制御方法 Download PDF

Info

Publication number
JPWO2008155799A1
JPWO2008155799A1 JP2009520140A JP2009520140A JPWO2008155799A1 JP WO2008155799 A1 JPWO2008155799 A1 JP WO2008155799A1 JP 2009520140 A JP2009520140 A JP 2009520140A JP 2009520140 A JP2009520140 A JP 2009520140A JP WO2008155799 A1 JPWO2008155799 A1 JP WO2008155799A1
Authority
JP
Japan
Prior art keywords
thread
entry
read
register
execution control
Prior art date
Legal status (The legal status 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 status listed.)
Granted
Application number
JP2009520140A
Other languages
English (en)
Other versions
JP5104862B2 (ja
Inventor
秋月 康伸
康伸 秋月
吉田 利雄
利雄 吉田
智浩 田中
智浩 田中
竜二 菅
竜二 菅
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2008155799A1 publication Critical patent/JPWO2008155799A1/ja
Application granted granted Critical
Publication of JP5104862B2 publication Critical patent/JP5104862B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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)を設ける。早い段階でアーキテクチャレジスタの選択を行うことが可能となり、アーキテクチャレジスタを選択する部分の回路は増えるが、回路の配線量については読み出すスレッドのアーキテクチャレジスタの選択を行っていることで削減をすることが可能となる。

Description

本発明は、複数のスレッドが、同時マルチスレッド方式で動作して、アウト・オブ・オーダー処理で、命令制御を行う命令実行制御装置及び命令実行制御方法に関し、特に、同時マルチスレッド方式で動作するレジスタファイルの読み出し制御を行う命令実行制御装置及び命令実行制御方法に関する。
CPU(Central Processor Unit)の処理の高速化が、要求されている。このため、従来から様々な技術を使用して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の一部として、演算速度と同等の読み出し、書き込み速度を要求されるため、メモリでなく、巨大なレジスタで構成される。例えば、トランジスタの量を少なくして、高密度で実装できるレジスタファイルで構成している。
このマルチスレッドの方式の1つとして、VMT(Vertical
Multi Threading)方式がある。この方式は、同時に、1つのプログラムしか走行できないが、長時間のデータ待ちが発生したときや、一定の時間の間隔などで、プログラムを切り替えて走行する。VMT方式の回路量は、プログラマブルな資源を、プログラムの数分用意しなければならないが、同時に、1つのプログラムが走行するために、追加する回路量も少なく、実現が容易である。
図16で説明すると、レジスタファイル116を、スレッド毎のアーキテクチャレジスタで構成し、プログラムの切り替えに応じて、一方のアーキテクチャレジスタをアクテイブ、他方のアーキテクチャレジスタをスリープに設定し、走行プログラムに対応したアーキテクチャレジスタからオペランドデータを読み出す。
一方、別のマルチスレッドの方式として、複数のプログラムを同時に走行する同時マルチスレッド方式(SMT方式)がある。この方式は、複数のプログラムが同時に走行するために、単一のプログラムが走行していたときよりも、回路の制御が複雑になることや、リソースの増加が予想されるが、同時に複数のプログラムが走行するために、効率よく回路を使用することが可能となる。
この同時マルチスレッド方式でも、複数のスレッドのアーキテクチャレジスタをレジスタファイルで構成し、この複数のスレッドのアーキテクチャレジスタから、該当するスレッドのオペランドデータを読み出す必要がある。
特開2007−87108号公報 特表2006−502504号公報(WO2004/034209号)
このように、同時マルチスレッド方式では、複数のスレッドのアーキテクチャレジスタをレジスタファイルで構成し、且つ同時に複数のプログラムを走行するため、機能の実行に必要なオペランドデータを読み出すためには、単一スレッドでの走行より、アーキテクチャレジスタを選択する回路量が増加する。又、同時に異なるスレッドのオペランドデータを読み出す場合には、回路の配線量が増加するおそれがある。
このため、単一スレッドの場合と比べて、レジスタファイルの読み出し周波数を向上することは難しくなる。これにより、演算速度が向上するように、アウト・オブ・オーダー方式や、同時マルチスレッド方式を採用しても、CPUの性能向上を図ることが、困難であるという問題が生じる。
従って、本発明の目的は、同時マルチスレッド方式の処理において、複数のスレッドのアーキテクチャレジスタを構成するレジスタファイルから、機能の実行に必要なオペランドデータを、高速に読み出すための命令実行制御装置及び命令実行制御方法を提供することにある。
又、本発明の他の目的は、レジスタファイルを、複数のスレッドのアーキテクチャレジスタを構成しても、レジスタファイルからの読み出しのための回路量や配線量の増加を、より少なくするための命令実行制御装置及び命令実行制御方法を提供することにある。
更に、本発明の別の目的は、レジスタファイルを、複数のスレッドのアーキテクチャレジスタを構成しても、レジスタファイルからの読み出しのための回路量や配線量の増加を、より少なくし、同時マルチスレッド処理の周波数を向上するための命令実行制御装置及び命令実行制御方法を提供することにある。
この目的の達成のため、本発明の命令実行制御装置は、アウト・オブ・オーダー実行を処理するための演算処理と主記憶オペランドアドレス生成を制御するリザベーションステーションと、機能の実行によって得られるデータを格納し、且つプログラムからは観測されないレジスタ更新バッファと、複数のスレッドが同時マルチスレッド方式で動作するための、スレッドごとのアーキテクチャレジスタと、同時に読み出すことのできるスレッド数がアーキテクチャレジスタのスレッド数より少ないスレッド数に制限する読み出しスレッド選択回路とを有するレジスタファイルと、前記リザベーションステーションのエントリの実行により、前記レジスタファイルからオペランドデータを読み出すときは、前記エントリの実行前に、前記エントリの読み出しスレッドを選択して、前記読出しスレッド選択回路を制御するスレッド選択回路とを有し、前記エントリの演算又はオペランド生成の実行時に、前記スレッド選択回路で選択されたスレッドのアーキテクチャレジスタからオペランドデータを読み出す。
又、本発明の命令実行制御方法は、リザベーションステーションにより、演算器及び主記憶オペランド生成器に、アウト・オブ・オーダー実行の処理を制御するステップと、前記実行によって得られるデータを、プログラムからは観測されないレジスタ更新バッファに格納するステップと、前記リザベーションステーションのエントリの実行により、前記レジスタファイルからオペランドデータを読み出すときは、前記エントリの実行前に、前記エントリの読み出しスレッドを選択するステップと、同時マルチスレッド方式のスレッドごとのアーキテクチャレジスタと、同時に読み出すことのできるスレッド数がアーキテクチャレジスタのスレッド数より少ないスレッド数に制限する読み出しスレッド選択回路とを有するレジスタファイルを、前記読み出しスレッドで選択するステップと、前記エントリの演算又はオペランド生成の実行時に、前記スレッド選択回路で選択されたスレッドのアーキテクチャレジスタからオペランドデータを読み出すステップとを有する。
更に、本発明では、好ましくは、前記リザベーションステーションは、演算とオペランドアドレス生成に必要なオペランドデータを、前記レジスタ更新バッファや即値から読み出す場合には、同時に読み出すことのできるスレッド数を制限しない。
更に、本発明では、好ましくは、前記リザベーションステーションは、前記エントリによる命令の実行によって得られるデータを、前記レジスタ更新バッファに格納して、前記エントリの命令が完了した時に、前記レジスタ更新バッファのオペランドデータを、前記アーキテクチャレジスタに格納する。
更に、本発明では、好ましくは、前記リザベーションステーションは、前記リザベーションステーションのエントリが、前記レジスタファイルからオペランドデータを読み出す必要のあるかを判定し、且つ前記スレッド選択回路で選択されたエントリのスレッドと一致するかを判定し、前記エントリが、前記読み出しが必要で、前記スレッドと一致したエントリを、前記実行のため選択する。
更に、本発明では、好ましくは、前記リザベーションステーションは、前記判定により、機能の実行に必要なオペランドデータを前記レジスタ更新バッファから読み出し、即値を使用することができるエントリを、エントリのスレッドに関係なく実行するエントリに選択する。
更に、本発明では、好ましくは、前記スレッド選択回路は、前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定しなければならないこと検出して、前記特定のスレッドを選択する。
更に、本発明では、好ましくは、前記スレッド選択回路は、前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、動作しているスレッドを示す信号により、動作していないスレッドの選択を禁止する。
更に、本発明では、好ましくは、前記スレッド選択回路は、前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、動作しているスレッドで、リザベーションステーションのエントリに1つも実行できない状態であるスレッドが存在するかを判定し、前記スレッドが存在すると判定した時に、動作している他のスレッドのエントリから発行できる状態であるスレッドが存在する場合、1つも発行できない状態であるスレッドのスレッド選択を禁止する。
更に、本発明では、好ましくは、前記スレッド選択回路は、前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、一定期間完了できない命令がリザベーションステーションのエントリに存在するかを判定し、前記エントリが存在すると判定した場合、一定間隔で、前記完了できていないスレッドのエントリを選択する。
更に、本発明では、好ましくは、前記スレッド選択回路は、前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、前記スレッド選択回路で選択されていない時間が最も長いスレッドを選択する。
複数のスレッドを同時マルチスレッド方式で動作する場合、アーキテクチャレジスタをスレッドごとに備え、レジスタファイルから機能の実行に必要なオペランドデータを読み出す場合に、あらかじめレジスタファイルから読み出すスレッドを選択しておくため、早い段階でアーキテクチャレジスタの選択を行うことが可能となる。アーキテクチャレジスタを選択する部分の回路は増えるが、回路の配線量については読み出すスレッドのアーキテクチャレジスタの選択を行っていることで削減をすることが可能となる。
又、リザベーションステーションのエントリで、アーキテクチャレジスタ以外からオペランドデータを読み出す場合には、アーキテクチャレジスタから読み出す場合とは異なり、すべてのスレッドが同時に読み出し、同時に読み出すスレッドには制限されることなく読み出すことが可能である。
本発明の情報処理装置の一実施の形態のブロック図である。 本発明の一実施の形態の命令実行制御装置の構成図である。 図2の命令実行制御装置の詳細構成図である。 図2の命令実行制御装置のレジスタファイルの構成図である。 図4のレジスタファイルの説明図である。 図3のリザベーションステーションのエントリの実行選択処理フロー図である。 図3のエントリ生成回路のエントリ登録時の実行選択処理フロー図である。 図3の命令実行制御装置によるアーキテクチャレジスタ更新処理の説明図である。 図3のスレッド選択回路のスレッド選択処理フロー図である。 図9のエントリ状態によるスレッド選択処理フロー図である。 図9の完了命令待ち時のスレッド選択処理の説明図である。 図11のスレッド選択処理フロー図である。 図9の第1、第2の選択方法のためのスレッド選択回路の回路図である。 図9の第3の選択方法のためのスレッド選択回路の回路図である。 図9の第4の選択方法のためのスレッド選択回路の回路図である。 従来の命令実行制御装置の説明図である。
符号の説明
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に、エントリを作成する。
デコードされた命令が、ロード命令であった場合には、RSA5にエントリを作成し、RSA5は、オペランドアドレス生成器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、NEXT_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は、スレッド選択方法の1つとして、命令デコーダ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からCWR22Cにコピーするために、アーキテクチャレジスタ22AからCWR置換バッファ(CRB)22Bに1度格納した後、CWR22Cに格納する。
カレントウィンドウポインタ(CWP)のレジスタ部分が、CWR22Cに格納されたときに、CRB22Bには、カレントウィンドウポインタ(CWP)の前後1つのレジスタの1部分が格納される。例えば、カレントウィンドウポインタCWP=1の場合には、CWR22Cは、アーキテクチャレジスタ22AのCWP=1の3つのブロックを格納され、CRB22Bは、アーキテクチャレジスタ22AのCWP=0の上の2つのブロック、又はCWP=2の下の2つのブロックを格納される。
CWR22CとCRB22Bは、スレッドごとに備えられ、アーキテクチャレジスタ22Aと同様に、同時に読み出すことの可能なスレッドが1つであるレジスタファイルで構成される。
リザベーションステーション5,6,7から、アーキテクチャレジスタ22から必要なオペランドデータを読み出すことは、CWR22Cからオペランドデータを読み出すことになる。ただし、カレントウィンドウポインタを変更する命令(例えば、SAVE,RESTORE命令など)を実行している間には、CRB22Bからオペランドデータを読み出す場合もある。
巨大なアーキテクチャレジスタに対して、このようなレジスタ構成により、アウト・オブ・オーダー命令実行方式において、データリードのスループットを向上し、且つレジスタ量を削減できる(例えば、特開2007−87108号公報参照)。
このようなレジスタファイルの構成例におけるオペランドデータによる機能実行のためのブロック図を、図4に示す。図4において、図2、図3、図5で示したものと同一のものは、同一の記号で示してある。
図4に示すように、レジスタファイル20は、図5で説明したように、スレッド毎のアーキテクチャレジスタ22−0A,22−1Aと、スレッド毎のCRB22−0B,22−1Bと、スレッド毎のCWR22−0C、22−1Cとを有する。CRB22−0B,22−1Bの各々は、読み出しスレッド選択回路24と、読み出しオペランドデータ選択回路26とを備える。同様に、CWR22−0C,22−1Cの各々は、読み出しスレッド選択回路24と、読み出しオペランドデータ選択回路26とを備える。
そして、レジスタ読み出しスレッドIDバッファ36のレジスタ読み出しスレッドIDが、CRB22−0B,22−1B、CWR22−0C,22−1Cの各々の読み出しスレッド選択回路24に与えられる。又、実行エントリ選択回路54からの選択エントリ(オペランドアドレスを含む)が、CRB22−0B,22−1B,CWR22−0C,22−1C,レジスタ更新バッファ13、即値レジスタ28、ラッチ回路46の各々に与えられる。
更に、実行エントリ選択回路64からの選択エントリ(オペランドアドレスを含む)が、CRB22−0B,22−1B,CWR22−0C,22−1C,レジスタ更新バッファ13、即値レジスタ28、ラッチ回路40の各々に与えられる。
このため、レジスタ読み出しIDと、実行エントリ選択回路54,64で選択されたエントリとに従って、CWR22−0C,22−1C,CRB22−0B,22−1B,レジスタ更新バッファ13、即値28の中からオペランドデータが読み出される。そして、これらオペランドデータから、オペランド選択回路42,48が、機能の実行に必要なオペランドデータを選択して、ラッチ回路44,49を介し、演算器12又はオペランドアドレス生成器10に与え、エントリで指定された機能の実行を行う。
この場合も、エントリの選択サイクル前に、スレッドIDが選択され、CRB22−0B又はCRB22−1Bのいずれか、CWR22−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)とCWR22−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から読み出される。
そして、CRB22Bに書き込み、CRB22Bから読み出して、CWR22Cに書き込むことで、新しいウィンドウポインタのCWR22Cを用意することが可能となる。
カレントウィンドウポインタCWPが変更されて、新しいウィンドウポインタの状態にするまでのレジスタの移動処理中は、アーキテクチャレジスタ22Aの読み出しと、CRB22Bの読み出しと書き込みと、CWR22Cへの書き込みを行うスレッドについては、カレントウィンドウポインタを変更したスレッドが優先される。このため、レジスタファイル22の読み書きすることが可能なスレッドは、カレントウィンドウポインタを変更するスレッドに制限される。
従って、レジスタの移動処理中は、レジスタの移動処理中のスレッドと、レジスタファイル22から読み出すスレッドを選択するスレッド選択回路32で選択するスレッドとが一致する必要がある。尚、レジスタの移動処理は、同時に、1つのスレッドのみが、処理することが可能であり、2つのスレッドが、同時に処理することは、できないように制御される。
このように、レジスタの移動処理中によるレジスタファイル22の読み書きのスレッドが制限されている間は、レジスタの移動処理中のスレッドと同じスレッドをスレッド選択回路32で必ず選択するように制御する。このため、リザベーションステーションの実行するエントリで、アーキテクチャレジスタ22からオペランドデータを読み出すエントリは、レジスタの移動処理中のスレッドと一致する。このように、レジスタの移動処理中のスレッド選択回路32は、レジスタの移動処理中のスレッドに限定して選択するように動作する。
又、カレントウィンドウポインタCWPを変更する命令が実行されている途中の処理では、カレントウィンドウポインタCWPが変更されるまでは、リザベーションステーションにより、アーキテクチャレジスタからオペランドデータを読み出す場合に、CRB22Bからオペランドデータを読み出すことがある。
このときに、反対のスレッドが、カレントウィンドウポインタを変更して、CRB22B、CWR22Cの読み書きのスレッドが、カレントウィンドウポインタCWPを制限しているときに、リザベーションステーションからカレントウィンドウポインタを変更する命令の実行中に、CRB22Bからオペランドデータを読み出すことがないように、スレッド選択回路32は、カレントウィンドウポインタを変更しているスレッドを選択する。
次に、スレッドを特定のスレッドに限定しないときのスレッドの選択方法は3つある。スレッドを特定のスレッドに限定しないときの1つ目の選択方法(第2の選択方法)は、スレッド選択回路32が、動作しているスレッドが単一のスレッドのときには、動作しているスレッドを選択する(S32)。
スレッドを、特定のスレッドに限定しないときの2つ目の選択方法(第3の選択方法)は、発行できないエントリが存在する場合に、発行できないスレッドと反対のスレッドを選択する方法である(S34)。即ち、演算用と主記憶オペランドアドレス生成用のリザベーションステーション52,62のエントリに、1つでも実行できる状態のエントリが存在しているときに、反対のスレッドが、1つも実行できない状態であるときには、1つでも実行できる状態のスレッドを選択する。
図10により、第3の選択方法を詳細に説明する。
リザベーションステーション52,62のエントリが実行できる状態というのは、スレッド別に、エントリが有効であり、インターロックがかかっていない状態であるか、もしくは、エントリが空状態であっても、次のサイクルで、エントリが有効になる可能性がある状態のことである。
リザベーションステーション52,62のエントリには、エントリが実行する準備ができている場合でも、実行することができないように制御する(インターロック)ことが可能な情報を、エントリの1つの信号として備えている。
この信号が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に戻り、スレッドを特定のスレッドに限定しないときの3つ目の選択方法(第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信号がアサートされる。
この信号は、図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. アウト・オブ・オーダー実行を処理するための演算処理と主記憶オペランドアドレス生成を制御するリザベーションステーションと、
    機能の実行によって得られるデータを格納するレジスタ更新バッファと、
    複数のスレッドが同時マルチスレッド方式で動作するための、スレッドごとのアーキテクチャレジスタと、同時に読み出すことのできるスレッド数がアーキテクチャレジスタのスレッド数より少ないスレッド数に制限する読み出しスレッド選択回路とを有するレジスタファイルと、
    前記リザベーションステーションのエントリの実行により、前記レジスタファイルからオペランドデータを読み出すときは、前記エントリの実行前に、前記エントリの読み出しスレッドを選択して、前記読出しスレッド選択回路を制御するスレッド選択回路とを有し、
    前記エントリの演算又はオペランド生成の実行時に、前記スレッド選択回路で選択されたスレッドのアーキテクチャレジスタからオペランドデータを読み出すことを
    特徴とする命令実行制御装置。
  2. 請求項1の命令実行制御装置において、
    前記リザベーションステーションは、演算とオペランドアドレス生成に必要なオペランドデータを、前記レジスタ更新バッファや即値から読み出す場合には、同時に読み出すことのできるスレッド数を制限しないことを
    特徴とする命令実行制御装置。
  3. 請求項1の命令実行制御装置において、
    前記リザベーションステーションの前記エントリによる命令の実行によって得られるデータを、前記レジスタ更新バッファに格納して、前記リザベーションステーションから実行した命令が完了した時に、前記レジスタ更新バッファのオペランドデータを、前記アーキテクチャレジスタに格納することを
    特徴とする命令実行制御装置。
  4. 請求項1の命令実行制御装置において、
    前記リザベーションステーションは、
    前記リザベーションステーションのエントリが、前記レジスタファイルからオペランドデータを読み出す必要のあるかを判定し、且つ前記スレッド選択回路で選択されたエントリのスレッドと一致するかを判定し、前記エントリが、前記レジスタファイルからの読み出しが必要で、前記スレッドと一致したエントリを、前記実行のため選択することを
    特徴とする命令実行制御装置。
  5. 請求項4の命令実行制御装置において、
    前記リザベーションステーションは、
    前記判定により、機能の実行に必要なオペランドデータを前記レジスタ更新バッファから読み出し、即値を使用することができるエントリを、エントリのスレッドに関係なく実行するエントリに選択することを
    特徴とする命令実行制御装置。
  6. 請求項1の命令実行制御装置において、
    前記スレッド選択回路は、
    前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定しなければならないこと検出して、前記特定のスレッドを選択することを
    特徴とする命令実行制御装置。
  7. 請求項6の命令実行制御装置において、
    前記スレッド選択回路は、
    前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、動作しているスレッドを示す信号により、動作していないスレッドの選択を禁止することを
    特徴とする命令実行制御装置。
  8. 請求項6の命令実行制御装置において、
    前記スレッド選択回路は、
    前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、動作しているスレッドで、リザベーションステーションのエントリに1つも実行できない状態であるスレッドが存在するかを判定し、前記スレッドが存在すると判定した時に、動作している他のスレッドのエントリから発行できる状態であるスレッドが存在する場合、1つも発行できない状態であるスレッドのスレッド選択を禁止する
    ことを特徴とする命令実行制御装置。
  9. 請求項6の命令実行制御装置において、
    前記スレッド選択回路は、
    前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、一定期間完了できない命令がリザベーションステーションのエントリに存在するかを判定し、前記エントリが存在すると判定した場合、一定間隔で、前記完了できていないスレッドのエントリを選択する
    ことを特徴とする命令実行制御装置。
  10. 請求項6の命令実行制御装置において、
    前記スレッド選択回路は、
    前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、前記スレッド選択回路で選択されていない時間が最も長いスレッドを選択する
    ことを特徴とする命令実行制御装置。
  11. リザベーションステーションにより、演算器及び主記憶オペランド生成器に、アウト・オブ・オーダー実行の処理を制御するステップと、
    前記実行によって得られるデータを、レジスタ更新バッファに格納するステップと、
    前記リザベーションステーションのエントリの実行により、前記レジスタファイルからオペランドデータを読み出すときは、前記エントリの実行前に、前記エントリの読み出しスレッドを選択するステップと、
    同時マルチスレッド方式のスレッドごとのアーキテクチャレジスタと、同時に読み出すことのできるスレッド数がアーキテクチャレジスタのスレッド数より少ないスレッド数に制限する読み出しスレッド選択回路とを有するレジスタファイルを、前記読み出しスレッドで選択するステップと、
    前記エントリの演算又はオペランド生成の実行時に、前記スレッド選択回路で選択されたスレッドのアーキテクチャレジスタからオペランドデータを読み出すステップとを有することを
    特徴とする命令実行制御方法。
  12. 請求項11の命令実行制御方法において、
    前記演算とオペランドアドレス生成に必要なオペランドデータを、前記レジスタ更新バッファや即値から読み出す場合には、同時に読み出すことのできるスレッド数の制限を禁止するステップを更に有することを
    特徴とする命令実行制御方法。
  13. 請求項11の命令実行制御方法において、
    前記エントリによる命令の実行によって得られるデータを、前記レジスタ更新バッファに格納して、前記エントリの命令が完了した時に、前記レジスタ更新バッファのオペランドデータを、前記アーキテクチャレジスタに格納するステップを更に有することを
    特徴とする命令実行制御方法。
  14. 請求項11の命令実行制御方法において、
    前記制御ステップは、
    前記リザベーションステーションのエントリが、前記レジスタファイルからオペランドデータを読み出す必要のあるかを判定するステップと、
    前記スレッド選択回路で選択されたエントリのスレッドと一致するかを判定するステップと、
    前記エントリが、前記読み出しが必要で、前記スレッドと一致したエントリを、前記実行のため選択するステップとを有することを
    特徴とする命令実行制御方法。
  15. 請求項14の命令実行制御方法において、
    前記制御ステップは、
    前記判定により、機能の実行に必要なオペランドデータを前記レジスタ更新バッファから読み出し、即値を使用することができるエントリを、エントリのスレッドに関係なく実行するエントリに選択するステップを有することを
    特徴とする命令実行制御方法。
  16. 請求項11の命令実行制御方法において、
    前記スレッド選択ステップは、
    前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定しなければならないこと検出して、前記特定のスレッドを選択するステップからなることを
    特徴とする命令実行制御方法。
  17. 請求項16の命令実行制御方法において、
    前記スレッド選択ステップは、
    前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、動作しているスレッドを示す信号により、動作していないスレッドの選択を禁止するステップからなることを
    特徴とする命令実行制御方法。
  18. 請求項16の命令実行制御方法において、
    前記スレッド選択ステップは、
    前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、動作しているスレッドで、リザベーションステーションのエントリに1つも実行できない状態であるスレッドが存在するかを判定するステップと、
    前記スレッドが存在すると判定した時に、動作している他のスレッドのエントリから発行できる状態であるスレッドが存在する場合、1つも発行できない状態であるスレッドのスレッド選択を禁止するステップとからなる
    ことを特徴とする命令実行制御方法。
  19. 請求項16の命令実行制御方法において、
    前記スレッド選択ステップは、
    前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、一定期間完了できない命令がリザベーションステーションのエントリに存在するかを判定するステップと、
    前記エントリが存在すると判定した場合、一定間隔で、前記完了できていないスレッドのエントリを選択するステップからなる
    ことを特徴とする命令実行制御方法。
  20. 請求項16の命令実行制御方法において、
    前記スレッド選択ステップは、
    前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、前記スレッド選択回路で選択されていない時間が最も長いスレッドを選択するステップからなる
    ことを特徴とする命令実行制御方法。
JP2009520140A 2007-06-20 2007-06-20 命令実行制御装置及び命令実行制御方法 Expired - Fee Related JP5104862B2 (ja)

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
JPWO2008155799A1 true JPWO2008155799A1 (ja) 2010-08-26
JP5104862B2 JP5104862B2 (ja) 2012-12-19

Family

ID=40155964

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009520140A Expired - Fee Related JP5104862B2 (ja) 2007-06-20 2007-06-20 命令実行制御装置及び命令実行制御方法

Country Status (6)

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

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 富士通株式会社 演算処理装置及び演算処理装置の制御方法

Family Cites Families (14)

* 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
JP4956891B2 (ja) * 2004-07-26 2012-06-20 富士通株式会社 演算処理装置,情報処理装置および演算処理装置の制御方法
JP4520788B2 (ja) * 2004-07-29 2010-08-11 富士通株式会社 マルチスレッドプロセッサ
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

Also Published As

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

Similar Documents

Publication Publication Date Title
JP5104863B2 (ja) 演算処理装置及び演算処理装置の制御方法
KR100309566B1 (ko) 파이프라인프로세서에서다중명령어를무리짓고,그룹화된명령어를동시에발행하고,그룹화된명령어를실행시키는방법및장치
US7254697B2 (en) Method and apparatus for dynamic modification of microprocessor instruction group at dispatch
US9037837B2 (en) Hardware assist thread for increasing code parallelism
US20160055004A1 (en) Method and apparatus for non-speculative fetch and execution of control-dependent blocks
US7363625B2 (en) Method for changing a thread priority in a simultaneous multithread processor
US7000233B2 (en) Simultaneous multithread processor with result data delay path to adjust pipeline length for input to respective thread
US6981128B2 (en) Atomic quad word storage in a simultaneous multithreaded system
US8560813B2 (en) Multithreaded processor with fast and slow paths pipeline issuing instructions of differing complexity of different instruction set and avoiding collision
US7194603B2 (en) SMT flush arbitration
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
US6735687B1 (en) Multithreaded microprocessor with asymmetrical central processing units
US10963380B2 (en) Cache miss thread balancing
US10579378B2 (en) Instructions for manipulating a multi-bit predicate register for predicating instruction sequences
JP2005309762A (ja) スレッド切替制御装置。
CN112241288A (zh) 在硬件中检测条件分支的动态控制流重汇聚点
US20050251662A1 (en) Secondary register file mechanism for virtual multithreading
JP5104862B2 (ja) 命令実行制御装置及び命令実行制御方法
JP2020091751A (ja) 演算処理装置および演算処理装置の制御方法
JP5573038B2 (ja) マルチスレッドプロセッサ及びプログラム
JP2904624B2 (ja) 並列演算処理装置
van der Linden Instruction-level Parallelism
JPH0277840A (ja) データ処理装置

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120612

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120810

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120904

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120917

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151012

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees