JP7032647B2 - 演算処理装置及び演算処理装置の制御方法 - Google Patents

演算処理装置及び演算処理装置の制御方法 Download PDF

Info

Publication number
JP7032647B2
JP7032647B2 JP2018079011A JP2018079011A JP7032647B2 JP 7032647 B2 JP7032647 B2 JP 7032647B2 JP 2018079011 A JP2018079011 A JP 2018079011A JP 2018079011 A JP2018079011 A JP 2018079011A JP 7032647 B2 JP7032647 B2 JP 7032647B2
Authority
JP
Japan
Prior art keywords
instruction
rss
allocation
decoder
execution
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.)
Active
Application number
JP2018079011A
Other languages
English (en)
Other versions
JP2019185646A (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
Priority to JP2018079011A priority Critical patent/JP7032647B2/ja
Priority to US16/361,281 priority patent/US10983790B2/en
Publication of JP2019185646A publication Critical patent/JP2019185646A/ja
Priority to US17/114,549 priority patent/US11231926B2/en
Application granted granted Critical
Publication of JP7032647B2 publication Critical patent/JP7032647B2/ja
Active 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
    • 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/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute

Description

本発明は,演算処理装置及び演算処理装置の制御方法に関する。
演算処理装置は、プロセッサまたはCPU(Central Processing Unit)である。プロセッサは、メインメモリからフェッチした命令(以下、フェッチ命令と称する)を登録する命令キャッシュと、命令キャッシュからフェッチしたフェッチ命令を一旦格納する命令バッファとを有する。さらに、プロセッサは、命令バッファ内の命令をプログラムの順番(インオーダ)でデコードする命令デコーダと、デコードされた命令(以下、実行命令と称する)を命令キューに格納するリザベーションステーションとを有する。そして、リザベーションステーションにキューインされた実行命令は、命令実行の準備が整うと、順不同(アウトオブオーダー)で演算器により実行される。これら命令バッファ、命令デコーダは、パイプラインの構成を有し、プロセッサ内のクロックに同期して命令を順番に処理する。
スーパースカラプロセッサは、上記の演算器を複数有し、複数の演算器が複数のデコードされた命令を並列に実行することができる。
上記のプロセッサについては、例えば、以下の特許文献1、2、3にも開示される。
特開2002-55814号公報 特開2004-30424号公報 特開2010-257199号公報
デコード処理のスループットを上げるために、命令デコーダは複数のスロットを有し、複数のスロットで複数のフェッチ命令を並列してデコードする。そして、命令デコーダは、デコードされた複数の実行命令を並列にリザベーションステーションにキューインする。命令デコーダは、プロセッサ内のパイプライン全体の動作を制御する要となる処理ユニットであるので、上記のように命令デコーダの複数スロットが複数のフェッチ命令を並列に処理することでパイプラインのスループットを向上できる。
一方、プロセッサの消費電力削減のために、リザベーションステーションの入力ポート数を制限することが行われる。この場合、命令デコーダのスロット数(K個)よりもリザベーションステーションの入力ポート数(L個)が少ないため、命令デコーダで並列に生成したK個の命令を1サイクルで1つのリザベーションステーションに並列にキューインすることができない。その結果、命令デコーダはK個のデコードされた命令を複数サイクルで1つのリザベーションステーションにキューインすることになり、命令デコーダのスループットの低下を招く。
また、スーパースカラプロセッサは、複数の演算器を有し、複数の命令を並列に処理する。そして、プロセッサの動作周波数を上げるために、複数の演算器それぞれに専用のリザベーションステーションを設けることが行われる。この場合、あるリザベーションステーションにキューインされた実行命令は、それに対応する演算器で実行されるが、他の演算器では実行されない。そのため、1つのリザベーションステーションに多くの実行命令が割振られると、それに対応する演算器に実行命令の処理が集中し、複数の演算器のスループットの低下を招く。
そこで,本実施の形態の第1の側面の目的は,プロセッサ内のスループットの低下を抑制した演算処理装置及び演算処理装置の制御方法を提供することにある。
本実施の形態の第1の側面は,それぞれが、プログラムのインオーダーでフェッチされたフェッチ命令をデコードし実行命令を生成するK個(Kは複数)のデコーダスロットを有する命令デコーダと、
L個(Lは複数でK>L)の入力ポートと、前記実行命令を前記L個の入力ポートを介してキューインする命令キューとをそれぞれ有する第1乃至第4のリザベーションステーション(以下RSと称する)と、
前記第1及び第2のRSをそれぞれが専用に有し、前記第1及び第2のRSそれぞれにキューインされた実行命令をそれぞれが専ら実行する第1及び第2の演算ユニットと、
前記第3及び第4のRSをそれぞれが専用に有し、前記第3及び第4のRS内それぞれにキューインされた実行命令をそれぞれが専ら実行する第1及び第2のロードストアユニット(以下LSユニットと称する)と、
前記命令デコーダの前記K個のデコーダスロットそれぞれが生成するK個の前記実行命令を、前記第1乃至第4のRSのいずれかに割り振るアロケーションユニットとを有し、
前記アロケーションユニットは、
(1)前記実行命令が前記第1及び第2の演算ユニットで実行でき、前記第1及び第2のLSユニットで実行できない第1の命令の場合、前記第1の命令を第1の割振りテーブルに基づいて前記第1または第2のRSに割振り、
(2)前記実行命令が前記第1及び第2のLSユニットで実行でき、前記第1及び第2の演算ユニットで実行できない第2の命令の場合、前記第2の命令を第2の割振りテーブルに基づいて前記第3または第4のRSに割振り、
(3)前記実行命令が前記第1及び第2のLSユニットと前記第1及び第2の演算ユニットとで実行できる第3の命令の場合、前記第3の命令を第3の割振りテーブルに基づいて前記第1乃至第4のRSのいずれかに割振り、
前記第1、第2、第3の割振りテーブルは、前記K個のデコーダスロットそれぞれに対応するK個の割振り先RSを有し、
前記第1の割振りテーブルは、前記K個の割振り先RSを、前記第1及び第2のRSをそれぞれ前記L個以下で、且つ前記第1及び第2のRSの命令キューの空きがより多いとより少ないについて第1の順番の組み合わせで有し、
前記第2の割振りテーブルは、前記K個の割振り先RSを、前記第3及び第4のRSをそれぞれ前記L個以下で、且つ前記第1の順番の組み合わせで有し、
前記第3の割振りテーブルは、前記K個の割振り先RSを、第1の複数デコーダスロットに対して、前記第1の割振りテーブルの前記第1の複数デコーダスロットに対する割振り先RSとし、前記第1の複数デコーダスロットと異なる第2の複数デコーダスロットに対して、前記第2の割振りテーブルの前記第2の複数デコーダスロットに対する割振り先RSとし、且つ前記第1の順番の組み合わせで有する、演算処理装置である。
第1の側面によれば,プロセッサ内のスループットの低下を抑制できる。
本実施の形態における情報処理装置の構成例を示す図である。 本実施の形態におけるプロセッサの構成例を示す図である。 本実施の形態における命令デコーダの一例を示す図である。 リザベーションステーションの入力ポート数を制限した構成例を示す図である。 各演算器に専用のリザベーションステーションを設け、演算器のバックツーバックのパスの経路例を示す図である。 本実施の形態におけるアロケーションユニットの構成例を示す図である。 割振りテーブルの第1の例を示す図である。 割振りテーブルの第2の例を示す図である。 第1の実施の形態におけるアロケーションユニットALC_UNTの割振り制御部16の動作を示すフローチャート図である。 割振りテーブルによる各スロットD0-D3の命令の割振り例を示す図である。 比較例として好ましくない割振りテーブルによる各スロットD0-D3の命令の割振り例を示す図である。 第2の実施の形態におけるアロケーションユニットALC_UNTの割振り制御部16の動作を示すフローチャート図である。 図12のS40(RSE割振りテーブルの選択とそれに基づく割振り処理)を示すフローチャート図である。 図12のS60(RSA割振りテーブルの選択とそれに基づく割振り処理)を示すフローチャート図である。 図12のS80(RSX割振りテーブルの選択とそれに基づく割振り処理)を示すフローチャート図である。 第3の実施の形態における4つの演算器の構成例を示す図である。 第3の実施の形態における割振り制御部の動作のフローチャート図である。 第4の実施の形態におけるプロセッサの構成例を示す図である。 第4の実施の形態におけるアロケーションユニットの割振り制御部の動作を示すフローチャート図である。 ループキャッシュに登録された命令列の例に対するチェインIDとチェインテーブルIDを示す図である。 チェインテーブルの一例を示す図である。 チェイン命令列内のRSE命令、RSE0命令、RSE1命令の存在の有無と、図21のチェインテーブルのIDの3ビットRSE0,RSE1,RSAのうちRSE0、RSE1のフィールドとの対応を示す図表である。
図1は、本実施の形態における情報処理装置の構成例を示す図である。情報処理装置10は、例えばHPC(High Performance Computer)やサーバなどのコンピュータである。情報処理装置は、複数の演算処理装置(プロセッサまたはCPU)CPU_0,CPU_1と、複数のメインメモリMEM_0, MEM_1と、インターコネクト制御部11とを有する。演算処理装置は、それぞれのメモリにアクセス可能である。さらに、複数の演算処理装置CPU_0,CPU_1は、インターコネクト制御部(チップ)11を介して、ストレージ等の複数の外部装置12_0、12_1や図示しないネットワークなどに接続される。インターコネクト制御部11は、外部装置やネットワークに対して入出力制御を行う。
[第1の実施の形態]
[プロセッサの構成例]
図2は、本実施の形態におけるプロセッサの構成例を示す図である。図2に示したプロセッサは、演算器として、ロードストアユニットとして動作するオペランドアドレス生成器OP_ADD_GEN(EAGA,EAGB)と、固定小数点演算器EXA,EXBとを有する。オペランドアドレス生成器は、アドレス計算するための加減算回路と、データを格納する1次データキャッシュメモリL1_DCACHEと、キャッシュミスした場合のメインメモリへのアクセス制御ユニットを有する。従って、オペランドアドレス生成器も一種の演算器である。
また、固定小数点演算器は、加減算回路と論理演算器と乗算器や除算器などを有する。プロセッサは、固定小数点演算器に加えて、浮動小数点演算器を有してもよい。但し、図2では浮動小数点演算器を省略している。以下の実施の形態では、便宜的に浮動小数点演算器を省略して説明する。
また、図2の例では、2つのオペランドアドレス生成器OP_ADD_GENと、2つの固定小数点演算器EXA,EXBを有する。ただし、これらの個数は、一例であり、命令デコーダI_DEC内のスロット数に応じた個数であればよい。
プロセッサ全体の構成について、処理の流れに沿って以下説明する。命令フェッチアドレス生成器I_F_ADD_GENがフェッチアドレスを生成し、プログラム内の実行順に(インオーダーで)1次命令キャッシュL1_ICACHEからフェッチされたフェッチ命令が一旦命令バッファI_BUFに格納される。そして、命令デコーダI_DECが、命令バッファ内のフェッチ命令をインオーダーで入力しデコードし、実行に必要な情報を付加した実行命令を生成する。
命令デコーダで生成された実行命令は、アロケーションユニット(割り振りユニット)ALC_UNTにより、インオーダーで、リザベーションステーションと呼ばれるキュー構造のストレージにキューインされ蓄積される。リザベーションステーションは、命令を実行する演算器や回路ごとに設けられ、例えば、オペランドアドレス生成器EAGA,EAGBに対応する2個のRSA(Reservation Station for Address generation)、固定小数点演算器EXA,EXBに対応する2個のRSE(Reservation Station for Execution)、分岐予測ユニットBR_PRDに対応するRSBR(Reservation Station for Branch)を有する。プロセッサが複数の浮動小数点演算器を有する場合は、それに対応する複数のリザベーションステーションを有する。
以下、リザベーションステーションは、省略してRSと称することもある。
そして、各リザベーションステーション内にキューインされた実行命令は、命令実行に必要な入力オペランドが前の命令の演算処理が完了してレジスタファイルから読み出し可能であるか(リードアフタライト制約が満たされるか)や、演算器を使用できるかなど、命令の実行条件が整ったものから、順不同で(アウトオブオーダーで)対応する演算器等で実行される。
一方、命令デコーダでデコードされて生成された実行命令は、そのプログラム内の実行順通りに命令識別子(Instruction Identification: IID)を割り振られ、アロケーションユニットALC_UNTにより、インオーダーでコミットスタックエントリCSE(Commit Stack Entry、以下CSEと称する)に送られる。CSEは、割り振られてきた実行命令をインオーダーで格納するキュー構造のストレージと、演算器からの命令の処理完了報告に応答してキュー内の情報等に基づき演算のコミット処理(完了処理)を行う命令コミット処理ユニットとを有する。
割り振られてきた実行命令は、CSE内のキューにインオーダーで格納され、命令の処理完了報告を待つ。そして、上記したとおり、各リザベーションステーションから実行命令がアウトオブオーダーで演算器に送信され、演算器により実行される。その後、命令の処理完了報告がCSEに送られると、CSEの命令コミット処理ユニットが、キューに格納された処理完了報告待ちの命令の中から処理完了報告に対応する実行命令をインオーダーで完了処理し、レジスタなどの回路資源の更新を行う。
プロセッサは、更に、ソフトウエアからアクセス可能なアーキテクチャレジスタファイル(または汎用ジスタファイル)ARC_REGと、演算器による演算結果を一時的に格納するリネーミングレジスタファイルREN_REGとを有する。それぞれのレジスタファイルは複数のレジスタを有する。実行命令をアウトオブオーダーで実行することを可能にするため、リネーミングレジスタファイルは、演算結果を一時的に格納し、演算の完了処理で、リネーミングレジスタに格納した演算結果がアーキテクチャレジスタファイル内のレジスタに格納され、リネーミングレジスタファイル内のレジスタが開放される。また、CSEは、完了処理でプログラムカウンタPCをインクリメントする。
分岐処理用のRSBRにキューインされた分岐命令は、分岐予測ユニットBR_PRDによって分岐予測され、予測結果に基づいて命令フェッチアドレス生成器I_F_ADD_GENが分岐先アドレスを生成する。
また、プロセッサ内には、2次命令キャッシュL2_CACHEを有し、2次命令キャッシュは図示しないメモリアクセスコントローラを介してメインメモリM_MEMにアクセスする。
命令デコーダI_DECは、インオーダーでフェッチした複数のフェッチ命令、例えば4個(K個)のフェッチ命令を並列に入力し、デコードして4つの実行命令を原則として並列にアロケーションユニットALC_UNTを介して、実行命令を実行可能な演算器のRSに割振る。このように命令デコーダを複数のスロットD0-D3で構成することで、フェッチ命令のデコード処理のスループットを向上する。
[命令デコーダの構成例]
図3は、本実施の形態における命令デコーダの一例を示す図である。命令デコーダI_DECは、4つのデコーダスロットD0-D3を有する。各デコーダスロットD0-D3は、入力されるフェッチ命令F_INSTをラッチする入力バッファと、フェッチ命令をデコードして実行命令を生成する実行命令生成部13と、実行命令EX_INSTを発行する実行命令発行部14とを有する。実行命令は、フェッチされた命令のオペコードを実行可能にするためのデコード結果を含んだ命令である。例えば、どのリザベーションステーションを使用するか、どの演算器を使用するか、オペランドにどのデータを使用するかなど、演算に必要な情報を含む命令である。実行命令生成部13は、フェッチされた命令オペコードをデコードし、演算実行に必要な情報を得て実行命令を生成する。
図示されるとおり、命令デコーダの各スロットD0-D3は、4つのフェッチ命令F_INSTを並列に入力し、4つの実行命令EX_INSTを原則として並列に出力する。この並列処理を繰り返すことで、命令デコーダのスループットが向上する。
図2,3に記載したスーパースカラプロセッサにおいて、構成を最適化して、低消費電力化やクロック周波数を高くする等の改良を行うが必要になる。以下、3つの改良例(1)(2)(3)を説明する。
(1)消費電力抑制の一つの方法として、各リザベーションステーションRSA,RSEの実行命令の入力ポート数を、命令デコーダI_DECのスロット数4(K個)よりも少ない2(L個)に制限する。図2において、各リザベーションステーションRSA0,RSA1,RSE0,RSE1の入力ポートの数は2である。その結果、例えば、アロケーションユニットALC_UNTは、命令デコーダI_DECが並列に出力する4個の実行命令を、2つのリザベーションステーションRSE0,RSE1それぞれに2個の実行命令を並列に割振る。または、アロケーションユニットALC_UNTは、命令デコーダI_DECが並列に出力する4個の実行命令を、2つのリザベーションステーションRSA0,RSA1それぞれに2個の実行命令を並列に割振る。さらに、命令デコーダI_DECが並列に出力する4個の実行命令を、4つのリザベーションステーションRSA0,RSA1,RSE0,RSE1それぞれに1個の実行命令を並列に割振ることもできる。
このように、リザベーションステーションの入力ポート数を命令デコーダのスロット数より少ない数に制限することで、リザベーションステーションの動作に伴う消費電力を抑制できる。ただし、命令デコーダI_DECの4つのスロットD0-D3のスループットの低下を防止する必要がある。
(2)リザベーションステーションのパイプライン回路のクロック周波数を高くする一つの方法として、各演算器にそれぞれ専用のリザベーションステーションを設ける。
つまり、図2に示したとおり、2つの固定小数点演算器EXA,EXBに対して2つのリザベーションステーションRSE0,RSE1を設け、RSE0は演算器EXAに命令を発行するが演算器EXBには発行せず、逆に、RSE1は演算器EXBに命令を発行するが演算器EXAには発行しない。このような構成にすることで、各RSE0,RSE1のキューに格納される実行待ちの命令に対してアウトオブオーダーで利用できる回路資源を多くすることができる。
さらに、各RSE0,RSE1のキューで実行待ちの複数の命令から対応する演算器に発行する命令を選択する論理段数を減らすことができる。その理由は、各RSを各演算器専用にすることで、1つの演算器に対して発行できるRS内の命令数を減らすことができ、少ない命令数から演算器に発行する命令を選択する論理段数を減らすことができる。その結果、リザベーションステーションのパイプライン回路の段数を減らすことで、1クロックサイクルの処理時間が短くなり、クロック周波数を高くできる。
オペランドアドレス生成器EAGA,EAGBとリザベーションステーションRSA0,RSA1も、固定小数点演算器EXA,RXB及びRSE0,RSE1と同様の関係とする。
(3)演算器のクロック周波数を高くする別の方法として、演算器のバックツーバック(Back to Back)のパスを自身の演算器やRSにフィードバックする方法が考えられる。バックツーバックのパスは、演算器の演算結果を次の演算の入力オペランドに供給するパスや、一つ前の演算結果から次の演算で発行できる実行命令を各リザベーションステーションから検出するパスなどである。このパスを、それぞれの演算器において、自身の演算結果を自身の演算器やRSにフィードバックし、他の演算器や他のRSにフィードバックしないことで、演算器自身の演算結果は自身の演算器の入力オペランドにのみフィードバックすれば良くなる。また、リザベーションステーションへのフィードバックに対して探索するRS内で待機中の実行命令の数を少なくできる。そのため、クロックサイクル時間を短くできクロックの高周波化が可能になる。
[リザベーションステーションと演算器の構成例]
図4は、リザベーションステーションの入力ポート数を制限した構成例を示す図である。図4により、前述した改良例(1)について説明する。
図4には、4つのデコーダスロットD0-D3を有する命令デコーダI_DECと、実行命令の演算器のリザベーションステーションへの割り振りを行うアロケーションユニットALC_UNTと、リザベーションステーションRS_0の構成例が示される。
リザベーションステーションRS_0は、2つの入力ポートIN_PO_00, IN_PO_01と、各入力ポートから入力される実行命令をキューインして蓄積する入力キューIN_QUEと、入力キューIN_QUEで待機中の命令の中から、演算器に発行する命令を選択する命令選択回路15とを有する。入力ポートIN_PO_00から入力する実行命令は、入力キューIN_QUEの0番から探索していって1番目に若い空いている番号にキューインし、同様に、入力ポートIN_PO_01から入力する実行命令は、入力キューIN_QUEの0番から探索していって2番目に若い空いている番号にキューインする。各入力キューは、例えば、8個の実行命令を格納可能である。
そして、命令選択回路15は、実行可能状態になった命令を、入力キューIN_QUEで待機中の命令から選択し、その命令をRS_0に対応する演算器EX_0に発行する。前述したとおり、RSでの命令の発行は、アウトオブオーダーで行われる。リザベーションステーションRS_1もRS_0と同様の構成と動作を有する。
前述したとおり、リザベーションステーションRS_0の入力ポート数を2と、命令デコーダI_DECのスロット数4より少なく制限することで、RS内で待機中の命令数を減らして消費電力抑制とクロックの高周波化を図ることができる。
図5は、各演算器に専用のリザベーションステーションを設け、演算器のバックツーバックのパスの経路例を示す図である。図5により、前述した改良例(2)(3)について説明する。
図5には、リザベーションステーションRS_0,RS_1と、それぞれに対応する演算器EX_0,EX_1と、リネーミングレジスタファイルREN_REGと、アーキテクチャレジスタファイルARC_REGが示される。リネーミングレジスタファイル及びアーキテクチャレジスタファイルと、各演算器への接続は省略されている。
図5では、第一に、2つの演算器EX_0,EX_1にそれぞれ、専用のリザベーションステーションRS_0,RS_1が設けられる。そして、リザベーションステーションRS_0にキューインされた命令は、演算器EX_0に発行されるが、演算器EX_1に発行されることはない。逆に言えば、もう一つのリザベーションステーションRS_1内の命令が、演算器EX_0の回路資源を使用することはない。これにより、リザベーションステーションRS_0内にキューインされた複数の実行命令は、演算器EX_0の回路資源を専有して利用できる。また、リザベーションステーションRS_0内の命令選択回路は、入力キュー内で待機中の少ない数の命令から、演算器EX_0に発行すべき命令を選択できる。
第二に、演算器EX_0は、リザベーションステーションRS_0から実行命令を発行される。実行命令には、例えば、オペコードに加えて入力オペランドに対応するレジスタ番号、演算結果を格納するレジスタ番号などの命令実行に必要は情報が含まれている。演算器EX_0は、アーキテクチャレジスタファイルのレジスタ番号に対応するレジスタの値を入力オペランドに設定し、オペコードに対応する演算を実行し、演算結果を一旦リネーミングレジスタファイル内のレジスタに格納する。そして、命令の完了処理で、リネーミングレジスタ内の演算結果がアーキテクチャレジスタに格納される。アーキテクチャレジスタは、ソフトウエアからアクセス可能であり、以降の命令はアーキテクチャレジスタ内の値を入力オペランドに供給して演算を実行する。
演算器EX_0には、演算結果をリネーミングレジスタやアーキテクチャレジスタを経由せずに直接入力オペランドにバイパスするバックツーバックのパスBB_00を有する。このようなパスの利用は、次のようなプログラムにおいて実行サイクルを短縮することができる。
Add x0, x0, x0
Add x0, x0, x0
Add x0, x0, x0
Add x0, x0, x0
上記のプログラムでは、アーキテクチャレジスタ内のレジスタx0の値にレジスタx0の値を加算して、同じレジスタx0に書き込む加算命令Addが4回連続する。つまり、4つの加算命令は、それぞれ1つ前の加算命令の加算結果を次の加算命令が入力に利用するという依存性を有する。そこで、一つ前の加算命令の加算結果を、リネーミングレジスタ及びアーキテクチャレジスタを経由せずに、上記のパスB_00を経由して演算器EX_0の入力オペランドに供給すれば、各加算命令の実行サイクルを最短化することができる。
上記の改良(1)(2)(3)をプロセッサに適用する場合、以下の点に注目して、アロケーションユニットALC_UNTが、命令デコーダI_DECの4つのスロットD0-D3が生成する実行命令を各リザベーションステーションRSへ割振るようにすることが望ましい。
改良(1)をプロセッサに適用した場合、アロケーションユニットが、各リザベーションステーションの入力ポート数を超えた数の実行命令を割振ると、命令デコーダI_DECが並列に生成する4つの実行命令を1サイクルで出力することができない。その結果、命令デコーダは、全実行命令がリザベーションステーションへの割り振りを完了するまで、次のフェッチ命令のデコード処理を待たされることになり、命令デコーダのスループットが低下する。
改良(2)をプロセッサに適用した場合、アロケーションユニットが、実行命令をあるリザベーションステーションにかたよって割振ると、複数の演算器のうち特定の演算器への命令の発行が集中し、他の演算器への命令発行が少なくなる。このような命令の特定の演算器へのかたよりは、複数の演算器によるスループットの低下を招く。
改良(3)をプロセッサに適用した場合、演算の依存性がある連続する命令列を異なる演算器を割振ると、最短のパスであるバックツーバックのパスを利用することができず、命令と命令との間に無処理時間の隙間が発生し、実質的に演算レイテンシが長くなる。
[アロケーションユニット]
図6は、本実施の形態におけるアロケーションユニットの構成例を示す図である。アロケーションユニットALC_UNTは、命令デコーダI_DECの4つのスロットD0-D3が出力する実行命令をどのリザベーションステーションに割振るかを示す割振りテーブルALC_tableと、割振りテーブルを参照して、各スロットD0-D3の実行命令をどのリザベーションステーションに割振るかを決定する割振り制御部16と、割振り制御部が決定した各スロットD0-D3の割振り先情報に基づいて、各スロットD0-D3の実行命令を割振り先のリザベーションステーションに割振る割振り部17とを有する。
命令デコーダI_DECは、各スロットD0-D3に入力されたフェッチ命令をデコードする過程で、その実行命令を割振ることができるRSの判別を行う。このRSの判別では、固定小数点演算器EXA,EXBの両方に割振ることができる命令をRSE命令と、オペランドアドレス生成器EAG(EAGA,EAGB)に割振ることができる命令をRSA命令と、そして、EXA,EXB,EAGの全てに割振ることができる命令をRSX命令とそれぞれ称する。また、RSE命令はRSAの演算器では実行できず、RSA命令はRSEの演算器では実行できない。
一例として、固定小数点演算器EXA,EXBは、加減算器と、AND,OR等の論理演算器と、乗算器などを有するのに対して、オペランドアドレス生成器EAGA,EAGBは、加減算器と、メインメモリにアクセスするロードストアユニットを有する。このような場合、AND命令はRSE命令、LOAD命令はRSA命令、そして、ADD命令はRSX命令と判別される。
命令デコーダI_DECは、さらに、フェッチ命令をデコードする過程で、フェッチ命令の1つ前の命令と依存関係があるか否かを判定し、依存関係がある場合そのフェッチ命令にスレーブフラグ(SLAVE_FG)を付加する。
そして、命令デコーダI_DECは、各スロットD0-D3でのフェッチ命令のデコード過程で検出した、命令種別(RSE命令、RSA命令、RSX命令)と、依存関係があるか否かを示すスレーブフラグSLAVE_FGを、割振り情報として、割振り制御部16に送信する。
割振り制御部16は、割振り情報に基づいて割振りテーブルを参照し、各スロットD0-D3の実行命令の割振り先リザベーションステーションを決定し、割振り部17と命令デコーダI_DECに送信する。さらに、割振り部17は、スロットD0-D3それぞれの割振り先情報に基づいて、各スロットD0-D3の実行命令を、原則並列に、割振り先のリザベーションステーションに割振る。
各リザベーションステーションは、実行命令を対応する演算器に発行した場合、入力キューに空きが発生したことを通知する命令発行通知I_I_NTFを、命令デコーダI_DECに通知する。
命令デコーダI_DECは、各リザベーションステーションの入力キューの空き情報を得るために、各RSの入力キューの利用カウンタUSED_CTRを有する。この利用カウンタUSED_CTRは、4つのリザベーションステーション別(USED_CTR_RSA0,RSA1,RSE0,RSE1)に有する。これらの利用カウンタは、割振り制御部ALC_UNTから各スロットD0-D3の割振り先RS情報ALC_D_INFに基づいて割振られた命令数分インクリメントされ、RSからの命令発行通知I_I_NTFに応答してデクリメントされる。その結果、命令デコーダI_DECは、これらの利用カウンタのカウント値を各RSの入力キューの最大エントリ数から減じることで、各RSの入力キューの空き数を把握することができる。
[割振りテーブルの例]
図7は、割振りテーブルの第1の例を示す図である。割振りテーブル内のD0-D3は命令デコーダの4つのスロットを示す。また、割振りテーブルRSE_table1, RSA_table_1, RSX_table_1及びRSX_table_2は、各スロットD0-D3から出力される実行命令が上記のRSE命令、RSA命令、RSX命令かに基づいて選択される割振りテーブルである。これらの割振りテーブルは基本となる割振りテーブルであり、第1の実施の形態で使用される。
さらに、割振りテーブルのスロットD0-D3と各割振りテーブルRSE_table1, RSA_table_1, RSX_table_1及びRSX_table_2の交差点には、割振り先RSが示される。この割振り先RSの種類は以下のとおりである。
RSEm:RSE0,RSE1のうち、空き数が多い方(more)のRS
RSEf:RSE0,RSE1のうち、空き数が少ない方(fewer)のRS
RSAm:RSA0,RSA1のうち、空き数が多い方(more)のRS
RSAf:RSA0,RSA1のうち、空き数が少ない方(fewer)のRS
他の割振りテーブルRSE_table_2, RSA_table_2, RSX_table_3~RSX_table_6については、後の実施の形態で説明する。
図8は、割振りテーブルの第2の例を示す図である。この割振りテーブルも図7の第1の例と同様の構成であり、割振りテーブルRSE_table_1, RSA_table_1, RSX_table_1及びRSX_table_2と、RSX_table_3及びRSX_table_4は、図7の第1の例と割振り先の配置が異なる。どのように異なるかは後述する。
図9は、第1の実施の形態におけるアロケーションユニットALC_UNTの割振り制御部16の動作を示すフローチャート図である。前述したとおり、割振り制御部16には、命令デコーダI_DECから、各スロットD0-D3の割振り情報として、実行命令がRSE命令、RSA命令、RSX命令のいずれかの命令種別情報とスレーブフラグSLAVE_FGが付加されたか否かの情報が供給される。
そして、割振り制御部16は、スレーブフラグに基づいて、割振り対象の実行命令がそれの1つ前の命令と依存関係があり、且つ1つ前の命令と同じRSに割り振り可能か否か判定し(S1)、可能な場合(S1のYES)、割振り対象の実行命令を1つ前の命令と同じRSに割振り先RSを決定する(S2)。
また、割振り制御部16は、次の様に割り振り先RSを決定する。
(1)割振り対象の実行命令がRSE命令の場合(S3のYES)、割振りテーブルRSE_table_1に基づいて割振り先RSを決定する(S4)。
(2)さらに、割振り対象の実行命令がRSA命令の場合(S5のYES)、割振りテーブルRSA_table_1に基づいて割振り先RSを決定する(S6)。
(3)さらに、割振り対象の実行命令がRSX命令の場合(S7のYES)、割振りテーブルRSX_table_1またはRSX_table_2に基づいて割振り先RSを決定する(S8)。どちらのテーブルにするかは、リザベーションステーションRSE0,RSE1の合計空き数と、RSA0,RSA1の合計空き数とを比較し、RSE側の合計空き数が多ければ、割振りテーブルRSX_table_1を選択する。
そして、RSE,RSA,RSX命令のいずれにも該当しない場合(S7のNO)、RSE、RSAには割り振らない(S9)。このような命令は、分岐命令やNOP(Non Operation)命令などである。
図10は、割振りテーブルによる各スロットD0-D3の命令の割振り例を示す図である。図10には、割振りテーブルRSE_table_1とRSX_table_1の例が示される。そして、具体例を示すテーブルT1には、各スロットD0-D3が出力する命令種別の具体例と、各スロットに対応して参照するテーブル参照tableと、割振り先RSとが示される。
[RSE命令用割振りテーブルRSE_table_1の特徴]
RSE命令用の割振りテーブルRSE_table_1は、各スロットD0-D3に対して、割振り先RSをRSEm/RSEf/RSEm/RSEfとする。これは図7の第1の例である。つまり、スロットD0,D2のRSE命令の割振り先をRSEmとし、スロットD1,D3のRSE命令の割振り先をRSEfとする。また、スロットD0-D3に対して割振り先が全てRSEになっている。そして、割振り先RSとしてRSE0,RSE1を2個以下(RSの入力ポート数2以下)で同数有する。更に、スロットD0-D3に対して、空きが多いRS/空きが少ないRS/空きが多いRS/空きが少ないRSという第1の順番(m/f/m/f)になっている。
この様な割振りテーブルに基づいてRSへ割振ると、全スロットD0-D3がRSE命令の場合、2つのRSE命令はRSEmに割り振られ、2つのRSE命令はRSEfに割り振られる。つまり、この割振りテーブルRSE_table_1を使用すると、RSEmとRSEfそれぞれには最大で2つの命令しか同時に割り振られない。
各リザベーションステーションの入力ポート数は2であるので、全スロットD0-D3がRSE命令の場合、命令デコーダI_DECのスロット数4に対して各リザベーションステーションの入力ポート数2の構成に対し、その4つのRSE命令を1クロックサイクルで並列にリザベーションステーションRSE0,RSE1に割振ることができる。
さらに、4つのRSE命令のうちプログラム内の実行順が最も先のスロットD0のRSE命令は、空きが多いRSEmに割り当てられ、最も後のスロットD3のRSE命令は空きが少ないRSEfに割り当てられる。また、スロットD1,D2間では、空きが少ないRSEfと空きが多いRSEmとにそれぞれ割り当てられる。
これにより、RSE0,RSE1間の空き数を均一化することができ、RSE0,RSE1に対応する演算器EXA,EXBの処理命令数を均一化でき、複数の演算器の使用効率を高めることができる。この理由は、命令デコーダの4つのスロットD0-D3の命令は、例えば、先頭スロットD0の命令が分岐命令であり且つ分岐先が他のスロットD1-D3のいずれの命令でもない場合が想定されるので、後ろのスロットの命令ほど実行される確率が低下するからである。したがって、割振りテーブルRSE_table_1では、実行順が先のスロットD0に空き数が多いRS(RSEm)を、後のスロットD3に空き数が少ないRS(RSEf)を割振り先にしている。
この点、割振りテーブルRSE_table_1は、図8の第2の例のように、RSEm/RSEm/RSEf/RSEfにしても同様の割振り効果を得ることができる。
[RSA命令用割振りテーブルRSA_table_1の特徴]
図10には示していないが、図7の割振りテーブル例のRSA命令用の割振りテーブルRSA_table_1は、RSE命令用の割振りテーブルTSE_table_1と同様に、スロットD0-D3の順番に、RSAm/RSAf/RSAm/RSAfと、RSAmが2つ、RSAfが2つで、全てRSAになっている。つまり、スロットD0,D2のRSA命令の割振り先をRSAmとし、スロットD1,D3のRSA命令の割振り先をRSAfとする。また、スロットD0-D3に対して割振り先が全てRSAになっている。そして、割振り先RSとしてRSA0,RSA1を2個以下(RSの入力ポート数2以下)で同数有する。更に、空きが多いRS/空きが少ないRS/空きが多いRS/空きが少ないRSという第1の順番(m/f/m/f)になっている。その結果、RSE用テーブルと同じ機能を有する。
[RSX命令用割振りテーブルRSX_table_1の特徴]
一方、RSX命令用の割振りテーブルRSX_table_1は、各スロットD0-D3に対して、割振り先RSをRSEm/RSEf/RSAm/RSAfにする。これも図7に示した例である。つまり、割振り先は、RSEm,RSEf,RSAm,RSAfがそれぞれ1つであり、RSEかRSAかについては、D0-D3に対してRSE/RSE/RSA/RSAという順番(E/E/A/A)になっている。さらに、RSE命令用テーブルとRSA命令用テーブルと同様に、空きが多いRS/空きが少ないRS/空きが多いRS/空きが少ないRSという第1の順番(m/f/m/f)になっている。そして、4つの割振り先RSは、RSE0,RSE1,RSA0,RSA1を同数有する。
この割振りテーブルによれば、スロットD0,D1のRSX命令の割振り先をRSEm,RSEfとし、スロットD1,D3のRSX命令の割振り先をRSAm,RSAfとする。この様に割振ると、全スロットD0-D3がRSX命令の場合、2つのRSX命令はRSEに割り振られ、2つのRSA命令はRSAに割り振られる。
そのため、全スロットD0-D3がRSX命令の場合、その4つのRSX命令を、2つのRSX命令はRSE0,RSE1に、残りの2つのRSX命令はRSAm,RSAfに、1クロックサイクルで並列に割振ることができる。
さらに、4つのRSX命令のうちプログラム内の実行順が最も先のスロットD0のRSX命令は空きが多いRSEmに割り当てられ、最も後のスロットD3のRSX命令は空きが少ないRSAfに割り当てられる。そして、スロットD1,D2では、割振りテーブルRSE_table_1と同様に、スロットD1のRSX命令は空きが少ないRSEfに割り当てられ、スロットD2のRSX命令は空きが多いRSAmに割り当てられる。
その結果、RSE0,RSE1,RSA0,RSA1間の空き数を均一化することができ、RSE0,RSE1に対応する演算器EXA,EXBと、RSA0,SA1に対応する演算器EAGA,EAGBの処理命令数を均一化でき、複数の演算器の使用効率を高めることができる。
[RSX命令用割振りテーブルRSX_table_2の特徴]
同様に、図7の2番目のRSX命令用の割振りテーブルRSX_table_2は、1番目のRSX命令用割振りテーブルRSX_table_1とRSEとRSAの順番が逆に(A/A/ E/E)なっているが、両者は同様にRSEm,RSEf,RSAm,RSAfがそれぞれ1つであり、更に、RSE命令用テーブルとRSA命令用テーブルと同様に、空きが多いRS/空きが少ないRS/空きが多いRS/空きが少ないRSという第1の順番(m/f/m/f)になっている。
上記のように、RSE用、RSA用、RSX用割振りテーブルは全て、4つのスロットD0-D3について、同じRSの数が最大2であり、空きが多いRSmと少ないRSfの組み合わせが第1の順番(m/f/m/f)になっている。
図8の第2の割振りテーブルは、RSE_table_1では、RSEが2つ、RSAが2つであるが、図7と異なり、空きが多いRSmと少ないRSfの組み合わせが第2の順番(m/m/f/f)になっている。そして、4つの割振り先RSは、RSE0,RSE1,RSA0,RSA1を同数有する。RSA_table_1、RSX_table_1, RSX_table_2も同様に第2の順番である。
そして、RSX_table_3, RSX_table_4についても、図7では第1の順番(m/f/m/f)であり、図8では第2の順番(m/m/f/f)になっている。
RSE_table_2, RSA_table_2, RSX_table_5, RSX_table_6は、図7と図8で同じである。
図7、図8の2種類のRSX命令用割振りテーブルRSX_table_1, RSX_table_2は、次のような特徴も有する。すなわち、RSX命令用割振りテーブルRSX_table_1,2は、4個の割振り先RSを、第1の複数デコーダスロットD0,D1(またはD0,D2)に対して、RSE命令用割振りテーブルの第1の複数デコーダスロットD0,D1(またはD0,D2)に対する割振り先RSとし、第1の複数デコーダスロットと異なる第2の複数デコーダスロットD2,D3(またはD1,D3)に対して、RSA命令用割振りテーブルの第2の複数デコーダスロットD2,D3(またはD1,D3)に対する割振り先RSとし、且つ第1の順番の組み合わせで有する。
[具体例]
そこで、図10のテーブルT1の例を参照すると、スロットD0-D3の4つの命令がどのような組み合わせであっても、同じRSEまたはRSAに3個以上の命令が割り振られることはない。また、同じ命令種別のRS間では、空きが多いRS数と少ないRS数が同じで且つ順番が先のスロット側が空きが多いRS(RSm)であり、同じ命令種別間の命令数が均一化されるようになっている。
テーブルT1の具体例では、スロットD0-D3に命令種別がRSE命令/RSX命令/RSE命令/RSX命令となっているので、各スロットS0-D3の参照テーブルは、その命令種別に対応したRSE命令用割振りテーブルRSE_table_1かRSX命令用割振りテーブルRSX_table_1のいずれかとなる。その結果、スロットD0-D3の命令の割振り先は、RSEm/RSEf/RSEm/RSAfとなる。
この割振り先の結果を見ると、RSEmには2つの命令が、RSEfとRSAfにはそれぞれ1つの命令が割り振られる。つまり、同じRSEまたはRSAに3個以上の命令が割り振られることはない。
このことは、前述の改良(1)の構成において、命令デコーダ内の4つのスロットD0-D3の4つの命令が、同じクロックサイクルで並列にリザベーションステーションに割り振られるので、命令デコーダの処理のスループットを低下させることはない。
図11は、比較例として好ましくない割振りテーブルによる各スロットD0-D3の命令の割振り例を示す図である。RSE_table_1の割振り先は、図10と同じRSEm/RSEf/RSEm/RSEfであるのに対して、RSX_table_1の割振り先は、図10と異なりRSAm/RSEm/RSAf/RSEfである。比較例の好ましくない点は、図7の例のように、両テーブルが第1の順番(m/f/m/f)に統一されていないことである。または、図8のように、両テーブルが第2の順番(m/m/f/f)に統一されていないことである。
具体例のテーブルT2では、図10のテーブルT1と同じ様に、命令種別はD0-D3でRSE/RSX/RSE/RSX、参照テーブルもT1と同じだが、割振り先RSはRSEm/RSEm/RSEm/RSEfとなり、同じRSEmに3つの命令が割り振られることになる。これでは、1サイクルで命令デコーダの命令をRSEmのRSに割振ることができない。
この比較例から理解できるとおり、RSE_table_1, RSA_table_1のテーブル例で説明すると、図7では、割振り先の空き数(m,f)の組み合わせは第1の順番(m/f/m/f)で統一されているのに対して、図8では、割振り先の空き数(m,f)の組み合わせは第2の順番(m/m/f/f)で統一されている。
RSX_table_1, RSX_table_2の例でも、図7では割振り先の空き数(m,f)の組み合わせは第1の順番(m/f/m/f)であり、図8では第2の順番(m/m/f/f)である。そのため、割振り先のRSEかRSAかの組み合わせは、図7では順番(E/E/A/A)または(A/A/E/E)であるのに対して、図8では順番(E/A/E/A)または(A/E/A/E)である。
このように、RSXの割振りテーブルは、第1の順番(m/f/m/f)または第2の順番(m/m/f/f)のいずれかでRSE,RSAのテーブルと統一されていれば、RSEとRSAの組み合わせは、順番(E/E/A/A)または(A/A/E/E)でも、順番(E/A/E/A)または(A/E/A/E)でも良い。
[第2の実施の形態]
第2の実施の形態では、前述の改良(2)に対応して、RSEとRSAの間の割振り命令数を均一化するとともに、RSE0,RSE1,RSA0,RSA1全てで割振り命令数を均一化する割振りテーブルを使用して実行命令の割振りを行う。そのために、アロケーションユニットは、図7または図8の割振りテーブルRSE_table_1, RSA_table_1, RSX_table_1, RSX_table_2に加えて、RSE_table_2, RSA_table_2, RSX_table_3, RSX_table_4, RSX_table_5, RSX_table_6も使用して割振り処理を行う。以下の説明では図7を例にして説明するが、図8の例で割り振っても良い。
図12は、第2の実施の形態におけるアロケーションユニットALC_UNTの割振り制御部16の動作を示すフローチャート図である。割振り制御部16は、割振り対象の実行命令がそれの1つ前の命令と依存関係があり、且つ1つ前の命令と同じRSに割り振り可能か否か判定し(S1)、可能な場合(S1のYES)、割振り対象の実行命令を1つ前の命令と同じRSに割振り先RSを決定する(S2)。ここまでの割振りは図9と同じである。
また、割振り制御部16は、次の様に割り振り先RSを決定する。
(1)割振り対象の実行命令がRSE命令の場合(S3のYES)、RSE割振りテーブルの選択とそれに基づく割振りを実行する(S40)。
(2)さらに、割振り対象の実行命令がRSA命令の場合(S5のYES)、RSA割振りテーブルの選択とそれに基づく割振りを実行する(S60)。
(3)さらに、割振り対象の実行命令がRSX命令の場合(S7のYES)、RSX割振りテーブルの選択とそれに基づく割振りを実行する(S80)。
そして、RSE,RSA,RSX命令のいずれにも該当しない場合(S7のNO)、RSE、RSAには割り振らない(S9)。
図13は、図12のS40(RSE割振りテーブルの選択とそれに基づく割振り処理)を示すフローチャート図である。割振り制御部16は、命令がRSE命令の場合、RSE0とRSE1の空き数の差分が第1の閾値TH1以上ある場合は(S41のYES)、全てのスロットD0-D3でRSEmに割振るRSE_table_2を選択しRSE命令を割振る(S42)。第1の閾値TH1未満の場合は(S41のNO)、第1の実施の形態と同様に、基本の割振りテーブルRSE_table_1を選択しRSE命令を割振る(S43)。このように、RSE0とRSE1の空き数の差分が大きいか否かに応じて、RSE_table_2とRSE_table_1とを使い分けることで、RSE0,RSE1の空き数が可能な限り均一化される。
図14は、図12のS60(RSA割振りテーブルの選択とそれに基づく割振り処理)を示すフローチャート図である。割振り制御部16は、命令がRSA命令の場合、RSA0とRSA1の空き数の差分が第2の閾値TH2以上ある場合は(S61のYES)、全てのスロットD0-D3でRSAmに割振るRSA_table_2を選択しRSA命令を割振る(S62)。第2の閾値TH2未満の場合は(S61のNO)、第1の実施の態と同様に、基本の割振りテーブルRSA_table_1を選択しRSA命令を割振る(S63)。図13のRSEの例と同様に、RSA0とRSA1の空き数の差分が大きいか否かに応じて、RSA_table_2とRSA_table_1とを使い分けることで、RSA0,RSA1の空き数が可能な限り均一化される。
図15は、図12のS80(RSX割振りテーブルの選択とそれに基づく割振り処理)を示すフローチャート図である。割振り制御部16は、最大空き数のRSAの空き数と他のRSの空き数との差分が第3の閾値TH3以上ある場合(S81のYES)、全てのスロットD0-D3でRSAmに割振るRSX_table_6を選択しRSX命令を割振る(S82)。逆に、最大空き数のRSEの空き数と他のRSの空き数との差分が第3の閾値TH3以上ある場合(S83のYES)、全てのスロットD0-D3でRSEmに割振るRSX_table_5を選択しRSX命令を割振る(S84)。
割振り制御部16は、RSA0,RSA1の合計空き数がRSE0,RSE1の合計空き数より第4の閾値TH4以上多い場合(S85のYES)、全てRSAで第1の順番(m/f/m/f)の組み合わせRSAm/RSAf/RSAm/RSAfのRSX_table_4を選択しRSX命令を割振る(S86)。逆に、RSE0,RSE1の合計空き数がRSA0,RSA1の合計空き数より第4の閾値TH4以上多い場合(S87のYES)、全てRSEで第1の順番(m/f/m/f)の組み合わせRSEm/RSEf/RSEm/RSEfのRSX_table_3を選択しRSX命令を割振る(S88)。
最後に、割振り制御部16は、第1の実施の形態の図9の工程S8と同様に、RSA0,RSA1の合計空き数がRSE0,RSE1の合計空き数より多い場合(S89のYES)、RSX_table_2で割振り(S90)、多くない場合(S89のNO)、RSX_table_1で割振る(S91)。
上記のように割振りテーブルを空き数の関係に応じて選択することで、RSE内、RSA内、RSEとRSA間、全RS間で割り振られる命令数を均一化することができる。但し、RSE_table_2、RSA_table_2、RSX_table_5、RSX_table_6を選択した場合、4つの割振り先が同じRSになるので、その場合は命令デコーダは2クロックサイクルで同じRSに命令を割振る。命令デコーダの命令割振りに基づくスループットと、全演算器による処理数の均一化によるスループットのいずれを重要視するかで、これらのテーブルの選択を行わないか、行うかを決めるようにしてもよい。
図6に示したとおり、アロケーションユニット内の割振りテーブルALC_tableには、命令デコーダI_DECは、RSA0,RSA1,RSE0,RSE1の使用カウンタの値に基づくの空き数の情報が供給されるので、図12~図15に基づいて、割振りテーブル内の最適なテーブルが選択され、選択された参照テーブル情報が割振り制御部16に供給される。この最適なテーブルの選択を割り振り制御部16が行ってもよい。
[第3の実施の形態]
図16は、第3の実施の形態における4つの演算器の構成例を示す図である。図16に示した構成例では、オペランドアドレス生成器EAGA,EAGBは、加減算器ADD/SUBとロードストア部LOAD/STOREとを有する。第1の固定小数点演算器EXAは、加減算器ADD/SUBと論理演算器AND/ORと除算器DIVとを有し、そして、第2の固定小数点演算器EXBは、加減算器ADD/SUBと論理演算器AND/ORと乗算器MUL(Multiplexer)とを有する。除算器DIVや乗算器MULは、回路実装コストが高く使用頻度が少ないので、いずれか一方の固定小数点演算器に設けられる例である。
上記のような4つの演算器の構成の場合、命令デコーダは、除算命令などRSE0の演算器だけで実行できるRSE0命令と、乗算命令などRSE1の演算器だけで実行できるRSE1命令とを、RSE0,RSE1両方の演算器で実行できるRSE命令と区別して判別する。そして、アロケーションユニットの割振り制御部は、RSE0命令と判別された場合、割振りテーブルや依存性による割振りではなく、割振り先をRSE0と決定し、RSE1命令と判別された場合、同様に割振り先をRSE1と決定する。
図17は、第3の実施の形態における割振り制御部の動作のフローチャート図である。図17では、図12のフローチャートに工程S10-S13が追加される。すなわち、割振り制御部は、命令デコーダが生成する実行命令がRSE0命令の場合(S10のYES)、その命令をRSE0に割振り(S11)、実行命令がRSE1命令の場合(S12のYES)、その命令をRSE1に割振る(S13)。それ以降は、図12と同じである。
[第4の実施の形態]
図18は、第4の実施の形態におけるプロセッサの構成例を示す図である。図18において図2と異なる構成は、命令デコーダI_DECとアロケーションユニットALC_UNTとの間に、ループキャッシュLP_CACHEと命令セレクタI_SELとを有することである。命令デコーダI_DECは、図示しないが、図2と同じように4スロットD0-D3を有する。
ループキャッシュは、プログラムの実行順の命令列内にループを検出すると、命令デコーダI_DECが出力する1ループ分の実行命令を登録(記憶)する。そして、それ以降は、命令デコーダからではなく、ループキャッシュから1ループ内の実行命令を出力する。そして、命令セレクタI_SELはループキャッシュ側の実行命令を選択し、アロケーションユニットALC_UNTに出力する。ループキャッシュが1ループ内の実行命令の出力を繰り返している間、命令デコーダ以前の命令フェッチアドレス生成器I_F_ADD_GEN、L1命令キャッシュL1_ICACHE、命令バッファI_BUF、命令デコーダI_DECの動作を停止し、省電力化する。但し、命令デコーダによるRSの使用カウンタによる各RSの使用エントリ数の管理等は継続される。そして、ループキャッシュから実行命令が出力中、アロケーションユニット内の割振り部17は、ループキャッシュから出力される実行命令を割振りテーブルに基づくRSに割振る。
第1の実施の形態等の図9,図12,図17では、命令デコーダが入力されたフェッチ命令が、一つ前の命令に依存する命令であることを検知すると、そのフェッチ命令に対応する実行命令にスレーブフラグSLAVE_FGを付加する。そして、アロケーションユニットが、スレーブフラグ付き実行命令について、一つ前の命令に割振ったRSと同じRSに割振り可能であれば、同じRSに割振る。これにより、演算器に設けられたバックツーバックのパスを使用して演算サイクルを最短化する。
しかし、依存が検出された実行命令がRSE0命令である場合、一つ前の実行命令は、割振りテーブルに基づいてRSに割振られるので、必ずしも同じRSE0に割振られているとは限らない。このように、スレーブフラグを付加する方法では、依存のある命令が必ずしも同じRSに割振られるとは限らず、演算器の実行サイクルの最短化を実現できない場合がある。
一方、図18のように、ループキャッシュには1つのループ内の全ての実行命令が登録される。したがって、ループキャッシュ内に登録される命令列から、依存性のある命令列(以下、チェイン命令列と称する)を全て判別することができる。
そこで、第4の実施の形態では、アロケーションユニットが、ループキャッシュ内に登録された実行命令列を判定し、チェイン命令列を検出するたびに、インクリメントされるチェインIDを、検出したチェイン命令列の命令に割り当てる。このチェインIDはループキャッシュ内に登録される。そして、チェイン命令列内の命令種別に基づいて、そのチェイン命令列内の命令をどのRSに割振るかを、チェインテーブル(後で詳述する)に基づいて選択する。
図19は、第4の実施の形態におけるアロケーションユニットの割振り制御部の動作を示すフローチャート図である。割振り制御部は、依存性のある実行命令に付加されるスレーブフラグではなく、チェインIDが付加された実行命令について、チェインテーブルが指定する割振り先RSに割り振り可能か否かを判定する(S14)。そして、チェインテーブルのRSに割り振り可能な場合、そのチェインID付実行命令をチェインテーブルの割振り先RSに割振る(S15)。
図20は、ループキャッシュに登録された命令列の例に対するチェインIDとチェインテーブルIDを示す図である。ループキャッシュ内に16命令が登録されていたとする。そのうち、命令番号1-4と、7-12が依存性のあるチェイン命令列と判定されたとする。
その場合、ループキャッシュまたはアロケーションユニットが、ループキャッシュ内の命令列を判定して、命令番号1-4のチェイン命令列にチェインID「0」を割り当て、命令番号7-12のチェイン命令列にチェインID「1」を割り当てる。チェインIDは、ループキャッシュに登録する。
図21は、チェインテーブルの一例を示す図である。チェインテーブルのIDは、各チェインIDのチェイン命令列内のRSE0命令、RSE1命令、RSA命令の3ビットで構成される。したがって、チェインテーブルIDは[000]-[111]の8種類である。
図22は、チェイン命令列内のRSE命令、RSE0命令、RSE1命令の存在の有無と、図21のチェインテーブルのIDの3ビットRSE0,RSE1,RSAのうちRSE0、RSE1のフィールドとの対応を示す図表である。RSE命令とはRSE0でもRSE1でも実行できる命令である。図22の表では、左側の3列がチェイン命令列内にRSE命令、RSE0命令、RSE1命令が含まれるか否かを示し、右側の2列が図21のチェインテーブルに示されるRSE0とRSE1のフィールドの値を示す。
例えば、左側の3列において、チェイン命令列内にRSE命令とRSE0命令が含まれRSE1命令が含まれていない場合(RSE=1, RSE0=1, RSE1=0)、右側の2列はRSE0=1, RSE1=0とする。左側3列のRSE命令はRSE0命令とRSE1命令のいずれとも言えるので、RSE0=1に基づいて、右側2列ではRSE0=1, RSE1=0とする。チェイン命令列内にRSE0命令が含まれRSE1命令とRSE命令が含まれない場合も(RSE=0, RSE0=1, RSE1=0)、右側の2列はRSE0=1, RSE1=0とする。左側3列のRSE0命令とRSE1命令を入れ替えても同じである。
また、左側の3列において、チェイン命令列内にRSE命令が含まれずRSE0命令とRSE1命令が含まれている場合(RSE=0, RSE0=1, RSE1=1)、右側の2列はRSE0=1, RSE1=1とする。チェイン命令列内にRSE命令が含まれ、RSE0命令とRSE1命令が含まれている場合(RSE=1, RSE0=1, RSE1=1)も、右側の2列はRSE0=1, RSE1=1とする。
更に、左側の3列において、チェイン命令列内にRSE命令が含まれRSE0命令とRSE1命令が含まれていない場合(RSE=1, RSE0=0, RSE1=0)も、右側の2列はRSE0=1, RSE1=1とする。
そして、図22には示していないが、RSA命令については、単純に、チェイン命令列内にRSA命令が含まれている場合、チェインテーブルのRSAもRSA=1となる。
図22において、チェインテーブルID=[000]の場合、チェイン命令列は全てRSX命令である。従って、チェイン命令列内の命令は4つのRSE0,RSE1,RSA0,RSA1のいずれに割り振っても演算可能である。そこで、チェインIDの番号を4で除した余り=0場合にRSA0、同余り=1の場合にRSA1、同余り=2の場合にRSE0、同余り=3の場合にRSE1を、それぞれ割振り先とする。この場合、同じチェインIDの命令(同じチェイン命令列内の命令)の割振り先は同じRSに固定されるので、割振り先RSの演算器の処理をバックツーバックのパスを利用して最短サイクルで繰り返すことができる。
チェインテーブルID=[001]の場合、チェイン命令列はRSX命令とRSA命令である。従って、チェイン命令列内の命令は、2つのRSA0、RSA1のいずれに割り振っても演算可能である。そこで、チェインIDの番号を2で除した余り=0の場合にRSA0、同余り=1の場合にRSA1を、それぞれ割振り先とする。この場合、同じチェインIDの命令(同じチェイン命令列内の命令)の割振り先はRSA0またはRSA1のいずれかに固定される。
チェインテーブルID=[010]の場合、チェイン命令列はRSX命令とRSE命令とRSE1命令(またはRSX命令とRSE1命令)である。従って、チェイン命令列内の命令は、RSE1を割振り先とする。この場合、同じチェインIDの命令(同じチェイン命令列内の命令)の割振り先はRSE1に固定される。
同様に、チェインテーブルID=[100]の場合、チェイン命令列はRSX命令とRSE命令とRSE0命令(またはRSX命令とRSE0命令)である。従って、チェイン命令列内の命令は、RSE0を割振り先とする。この場合、同じチェインIDの命令(同じチェイン命令列内の命令)の割振り先はRSE0に固定される。
チェインテーブルID=[011]の場合、チェイン命令列はRSX命令とRSA命令とRSE命令とRSE1命令(またはRSX命令とRSA命令とRSE1命令)である。割振り先をRSAに固定すると、RSA命令のロードストア処理により演算器の最短サイクルでの演算処理が中断されることが予測される。従って、チェイン命令列内の命令は、RSE1を割振り先とする。この場合、同じチェインIDの命令(同じチェイン命令列内の命令)の割振り先はRSE1に固定される。但し、RSA命令は例外的にRSAに割振られる。つまり、RSA命令でRSE1の演算器の最短サイクルによる演算処理が中断される場合を除いて、RSE1の演算器の演算処理を最短化できる。
同様に、チェインテーブルID=[101]の場合、チェイン命令列はRSX命令とRSA命令とRSE命令とRSE0命令(またはRSX命令とRSA命令とRSE0命令)である。上記のチェインテーブルID=[011]と同様の理由で、チェイン命令列内の命令は、RSE0を割振り先とする。この場合、同じチェインIDの命令(同じチェイン命令列内の命令)の割振り先はRSE0に固定される。但し、RSA命令は例外的にRSAに割振られる。つまり、RSA命令でRSE0の演算器の最短サイクルによる演算処理が中断される場合を除いて、RSE0の演算器の演算処理を最短化できる。
チェインテーブルID=[110]の場合、チェイン命令列はRSX命令とRSE命令とRSE1命令とRSE0命令(またはRSX命令とRSE1命令とRSE0命令)である。この場合、チェイン命令列内の命令は、2つのRSE1、RSE0のいずれに割り振っても演算可能の可能性がある。
そこで、チェインIDの番号を2で除した余り=0の場合にRSE0、同余り=1の場合にRSE1を割振り先とする。この場合、同じチェインIDの命令(同じチェイン命令列内の命令)の割振り先はRSE0またはRSE1のいずれかに固定される。但し、RSE0命令は例外的に必ずRSE0に割振られ、RSE1命令は例外的に必ずRSE1に割振られる。同じチェイン命令列内の命令をRSE0,RSE1のいずれか一方に固定して割振ることで、固定されたRSの演算器による最短サイクルによる演算処理を期待することができる。
チェインテーブルID=[111]の場合、チェイン命令列はRSX命令とRSE命令とRSE1命令とRSE0命令とRSA命令(またはRSX命令とRSE1命令とRSE0命令とRSA命令)である。この場合、チェイン命令列内の命令は、2つのRSE1、RSE0のいずれに割り振っても演算可能の可能性がある。また、固定的にRSAに割振ると演算器の最短サイクル処理が中断することがありうる。
そこで、チェインIDの番号を2で除した余り=0の場合にRSE0、同余り=1の場合にRSE1を割振り先とする。この場合、同じチェインIDの命令(同じチェイン命令列内の命令)の割振り先はRSE0またはRSE1のいずれかに固定される。但し、RSE0命令は例外的に必ずRSE0に割振られ、RSE1命令は例外的に必ずRSE1に割振られる。同様に、RSA命令は例外的にRSA0,RSA1のいずれかに割振られる。同じチェイン命令列内の命令をRSE0,RSE1のいずれか一方に固定して割振ることで、固定されたRSの演算器による最短サイクルによる演算処理を期待することができる。
第4の実施の形態では、ループキャッシュ内に1つのループ内の全命令列が登録されるので、その命令列を分析して依存性のあるチェイン命令列を検出する。そして、チェイン命令列内のRSE0命令、RSE1命令、RSA命令の3ビットで分類されるチェインテーブルを検索し、チェインテーブルに示された割振り先RSでチェイン命令列の命令を割振る。これにより、チェイン命令列の命令の割振り先がチェインテーブルに示された割振り先RSに固定されるので、固定的に割振られるRSの演算器による最短サイクルでの演算処理を最大限に利用することができる。
以上の実施の形態をまとめると,次の付記のとおりである。
(付記1)
それぞれが、プログラムのインオーダーでフェッチされたフェッチ命令をデコードし実行命令を生成するK個(Kは複数)のデコーダスロットを有する命令デコーダと、
L個(Lは複数でK>L)の入力ポートと、前記実行命令を前記L個の入力ポートを介してキューインする命令キューとをそれぞれ有する第1乃至第4のリザベーションステーション(以下RSと称する)と、
前記第1及び第2のRSをそれぞれが専用に有し、前記第1及び第2のRSそれぞれにキューインされた実行命令をそれぞれが専ら実行する第1及び第2の演算ユニットと、
前記第3及び第4のRSをそれぞれが専用に有し、前記第3及び第4のRS内それぞれにキューインされた実行命令をそれぞれが専ら実行する第1及び第2のロードストアユニット(以下LSユニットと称する)と、
前記命令デコーダの前記K個のデコーダスロットそれぞれが生成するK個の前記実行命令を、前記第1乃至第4のRSのいずれかに割り振るアロケーションユニットとを有し、
前記アロケーションユニットは、
(1)前記実行命令が前記第1及び第2の演算ユニットで実行でき、前記第1及び第2のLSユニットで実行できない第1の命令の場合、前記第1の命令を第1の割振りテーブルに基づいて前記第1または第2のRSに割振り、
(2)前記実行命令が前記第1及び第2のLSユニットで実行でき、前記第1及び第2の演算ユニットで実行できない第2の命令の場合、前記第2の命令を第2の割振りテーブルに基づいて前記第3または第4のRSに割振り、
(3)前記実行命令が前記第1及び第2のLSユニットと前記第1及び第2の演算ユニットとで実行できる第3の命令の場合、前記第3の命令を第3の割振りテーブルに基づいて前記第1乃至第4のRSのいずれかに割振り、
前記第1、第2、第3の割振りテーブルは、前記K個のデコーダスロットそれぞれに対応するK個の割振り先RSを有し、
前記第1の割振りテーブルは、前記K個の割振り先RSを、前記第1及び第2のRSをそれぞれ前記L個以下で、且つ前記第1及び第2のRSの命令キューの空きがより多いとより少ないについて第1の順番の組み合わせで有し、
前記第2の割振りテーブルは、前記K個の割振り先RSを、前記第3及び第4のRSをそれぞれ前記L個以下で、且つ前記第1の順番の組み合わせで有し、
前記第3の割振りテーブルは、前記K個の割振り先RSを、第1の複数デコーダスロットに対して、前記第1の割振りテーブルの前記第1の複数デコーダスロットに対する割振り先RSとし、前記第1の複数デコーダスロットと異なる第2の複数デコーダスロットに対して、前記第2の割振りテーブルの前記第2の複数デコーダスロットに対する割振り先RSとし、且つ前記第1の順番の組み合わせで有する、演算処理装置。
(付記2)
前記第1の割振りテーブルは、前記K個の割振り先RSを、前記第1及び第2のRSのうち前記命令キューの空きがより多いRSとより少ないRSとを同数で有し、
前記第2の割振りテーブルは、前記K個の割振り先RSを、前記第3及び第4のRSのうち前記命令キューの空きがより多いRSとより少ないRSとを同数で有し、
前記第3の割振りテーブルは、前記K個の割振り先RSを、前記第1及び第2のRSと、前記第3及び第4のRSとを同数で有する、付記1に記載の演算処理装置。
(付記3)
前記第1の順番の組み合わせは、少なくとも前記インオーダーで最先のデコーダスロットに対して前記より多いRSを、前記インオーダーで最後のデコーダスロットに対して前記より少ないRSを有する、付記2に記載の演算処理装置。
(付記4)
前記第3の割振りテーブルは、
(1)前記第1の複数デコーダスロットが、前記インオーダーで最先の複数デコーダスロットで、前記第2の複数デコーダスロットが、前記インオーダーで最後の複数デコーダスロットであるA型第3の割振りテーブルと、
(2)前記第1の複数デコーダスロットが、前記インオーダーで最後の複数デコーダスロットで、前記第2の複数デコーダスロットが、前記インオーダーで最先の複数デコーダスロットであるB型第3の割振りテーブルと、を有し、
前記アロケーションユニットは、
(1)前記第1及び第2のRSの命令キューの空き合計が前記第3及び第4のRSの命令キューの空き合計より多い場合、前記A型第3の割振りテーブルに基づいて前記第3の実行命令を割振り、
(2)前記第1及び第2のRSの命令キューの空き合計が前記第3及び第4のRSの命令キューの空き合計より少ない場合、前記B型第3の割振りテーブルに基づいて前記第3の実行命令を割振る、付記3に記載の演算処理装置。
(付記5)
前記第3の割振りテーブルは、
(1)前記第1の複数デコーダスロットが、前記インオーダーで奇数の複数デコーダスロットで、前記第2の複数デコーダスロットが、前記インオーダーで偶数の複数デコーダスロットであるA型第3の割振りテーブルと、
(2)前記第1の複数デコーダスロットが、前記インオーダーで奇数の複数デコーダスロットで、前記第2の複数デコーダスロットが、前記インオーダーで偶数の複数デコーダスロットであるB型第3の割振りテーブルと、を有し、
前記アロケーションユニットは、
(1)前記第1及び第2のRSの命令キューの空き合計が前記第3及び第4のRSの命令キューの空き合計より多い場合、前記A型第3の割振りテーブルに基づいて前記第3の実行命令を割振り、
(2)前記第1及び第2のRSの命令キューの空き合計が前記第3及び第4のRSの命令キューの空き合計より少ない場合、前記B型第3の割振りテーブルに基づいて前記第3の実行命令を割振る、付記3に記載の演算処理装置。
(付記6)
前記アロケーションユニットは、
前記実行命令が前記第1の命令の場合、前記第1のRSの前記命令キューの空き数と前記第2のRSの前記命令キューの空き数の差分が第1の基準値以上の場合、前記第1の割振りテーブルに代えて、前記K個のデコーダスロット全てに対して前記第1または第2のRSのうち前記命令キューの空きがより多いRSを割振り先にするA型第1の割振りテーブルに基づいて、前記第1の命令(RSE命令)を割り振る、付記1に記載の演算処理装置。
(付記7)
前記アロケーションユニットは、
前記実行命令が前記第2の命令の場合、前記第3のRSの前記命令キューの空き数と前記第4のRSの前記命令キューの空き数の差分が第2の基準値以上の場合、前記第2の割振りテーブルに代えて、前記K個のデコーダスロット全てに対して前記第3または第4のRSのうち前記命令キューの空きがより多いRSを割振り先にするA型第2の割振りテーブルに基づいて、前記第2の命令を割り振る、付記1に記載の演算処理装置。
(付記8)
前記アロケーションユニットは、
前記実行命令が前記第3の命令の場合で、最も前記命令キューの空き数が多い最大空きRSの空き数と、前記最大空きRS以外のRSの空き数との差分が第3の基準値以上の場合に、
(1)前記最大空きRSが前記第1または第2のRSなら、前記A型第3またはB型第3の割振りテーブルに代えて、前記K個のデコーダスロット全てに対して前記第1または第2のRSのうち前記命令キューの空きがより多いRSを割振り先にするE型第3の割振りテーブルに基づいて、前記第3の命令を割り振り、
(2)前記最大空きRSが前記第3または第4のRSなら、前記A型第3またはB型第3の割振りテーブルに代えて、前記K個のデコーダスロット全てに対して前記第3または第4のRSのうち前記命令キューの空きがより多いRSを割振り先にするF型第3の割振りテーブルに基づいて、前記第3の命令を割り振る、付記4または5に記載の演算処理装置。
(付記9)
前記アロケーションユニットは、
前記実行命令が前記第3の命令の場合で、前記第1及び第2のRSの前記命令キューの第1合計空き数と、前記第3及び第4のRSの前記命令キューの第2合計空き数との差分が第4の基準値以上の場合に、
(1)前記第1合計空き数が前記第2合計空き数より多いなら、前記A型第3またはB型第3の割振りテーブルに代えて、前記K個の割振り先RSを、前記第1及び第2のRSのうち前記命令キューの空きがより多いRSとより少ないRSとを同数で、且つ前記より多いRSを前記インオーダーで最先に、前記より少ないRSを前記インオーダーで最後に有するC型第3の割り当てテーブルに基づいて、前記第3の命令を割り振り、
(2)前記第1合計空き数が前記第2合計空き数より少ないなら、前記A型第3またはB型第3の割振りテーブルに代えて、前記K個の割振り先RSを、前記第3及び第4のRSのうち前記命令キューの空きがより多いRSとより少ないRSとを同数で、且つ前記より多いRSを前記インオーダーで最先に、前記より少ないRSを前記インオーダーで最後に有するD型第3の割り当てテーブルに基づいて、前記第3の命令を割り振る、付記8に記載の演算処理装置。
(付記10)
前記アロケーションユニットは、
割振り対象の前記実行命令が、前記インオーダーで1つ前の実行命令と演算の依存関係を有し、前記1つ前の実行命令と同じRSに割振り可能な場合、前記割振り対象の実行命令を、前記割振りテーブルに基づかずに、前記1つ前の実行命令と同じRSに割り振る、付記1に記載の演算処理装置。
(付記11)
前記第1の演算ユニットと前記第2の演算ユニットが、互いに排他的な演算回路を有し、
前記アロケーションユニットは、
前記実行命令が前記第1の演算ユニットで実行可能で前記第2の演算ユニットで実行不能な第1演算ユニット専用命令の場合、前記割振りテーブルに基づかず、前記第1のRSに割り振り、
前記実行命令が前記第1の演算ユニットで実行不能で前記第2の演算ユニットで実行可能な第2演算ユニット専用命令の場合、前記割振りテーブルに基づかず、前記第2のRSに割り振る、付記1に記載の演算処理装置。
(付記12)
それぞれが、プログラムのインオーダーでフェッチされたフェッチ命令をデコードし実行命令を生成するK個(Kは複数)のデコーダスロットを有する命令デコーダと、
L個(Lは複数でK>L)の入力ポートと、前記実行命令を前記L個の入力ポートを介してキューインする命令キューとをそれぞれ有する第1乃至第4のリザベーションステーション(以下RSと称する)と、
前記第1及び第2のRSをそれぞれが専用に有し、前記第1及び第2のRSそれぞれにキューインされた実行命令をそれぞれが専ら実行する第1及び第2の演算ユニットと、
前記第3及び第4のRSをそれぞれが専用に有し、前記第3及び第4のRS内それぞれにキューインされた実行命令をそれぞれが専ら実行する第1及び第2のロードストアユニット(以下LSユニットと称する)と、
前記命令デコーダの前記K個のデコーダスロットそれぞれが生成するK個の前記実行命令を、前記第1乃至第4のRSのいずれかに割り振るアロケーションユニットとを有する演算処理装置の制御方法であって、
前記アロケーションユニットは、
(1)前記実行命令が前記第1及び第2の演算ユニットで実行でき、前記第1及び第2のLSユニットで実行できない第1の命令の場合、前記第1の命令を第1の割振りテーブルに基づいて前記第1または第2のRSに割振り、
(2)前記実行命令が前記第1及び第2のLSユニットで実行でき、前記第1及び第2の演算ユニットで実行できない第2の命令の場合、前記第2の命令を第2の割振りテーブルに基づいて前記第3または第4のRSに割振り、
(3)前記実行命令が前記第1及び第2のLSユニットと前記第1及び第2の演算ユニットとで実行できる第3の命令の場合、前記第3の命令を第3の割振りテーブルに基づいて前記第1乃至第4のRSのいずれかに割振り、
前記第1、第2、第3の割振りテーブルは、前記K個のデコーダスロットそれぞれに対応するK個の割振り先RSを有し、
前記第1の割振りテーブルは、前記K個の割振り先RSを、前記第1及び第2のRS(RSE0/1)をそれぞれ前記L個以下で、且つ前記第1及び第2のRSの命令キューの空きがより多いとより少ないについて第1の順番の組み合わせで有し、
前記第2の割振りテーブルは、前記K個の割振り先RSを、前記第3及び第4のRSをそれぞれ前記L個以下で、且つ前記第1の順番の組み合わせで有し、
前記第3の割振りテーブルは、前記K個の割振り先RSを、第1の複数デコーダスロットに対して、前記第1の割振りテーブルの前記第1の複数デコーダスロットに対する割振り先RSとし、前記第1の複数デコーダスロットと異なる第2の複数デコーダスロットに対して、前記第2の割振りテーブルの前記第2の複数デコーダスロットに対する割振り先RSとし、且つ前記第1の順番の組み合わせで有する、演算処理装置の制御方法。
(付記13)
それぞれが、プログラムのインオーダーでフェッチされたフェッチ命令をデコードし実行命令を生成する命令デコーダと、
入力ポートと、前記実行命令を前記入力ポートを介してキューインする命令キューとをそれぞれ有する第1乃至第4のリザベーションステーション(以下RSと称する)と、
前記第1及び第2のRSをそれぞれが専用に有し、前記第1及び第2のRSそれぞれにキューインされた実行命令をそれぞれが専ら実行する第1及び第2の演算ユニットと、
前記第3及び第4のRSをそれぞれが専用に有し、前記第3及び第4のRS内それぞれにキューインされた実行命令をそれぞれが専ら実行する第1及び第2のロードストアユニット(以下LSユニットと称する)と、
前記命令デコーダが生成するループ内の実行命令を有するループ内実行命令列を一時的に記憶するループキャッシュと、
前記命令デコーダが生成する前記実行命令を、または前記ループキャッシュ内に記憶された前記ループ内実行命令列の実行命令を、前記第1乃至第4のRSのいずれかに割り振るアロケーションユニットと、
前記第1及び第2の演算ユニットの実行結果及び前記第1及び第2のロードストアユニットの演算結果を格納する汎用レジスタファイルとを有し、
前記第1及び第2の演算ユニットは、実行結果を自身の入力に前記汎用レジスタファイルを介さずに供給するバイパス経路を有し、前記実行結果を自身以外の演算ユニットに前記汎用レジスタファイルを介さずに供給するバイパス経路を有さず、
前記第1及び第2のLSユニットは、実行結果を自身の入力に前記汎用レジスタファイルを介さずに供給するバイパス経路を有し、前記実行結果を自身以外のLSユニットに前記汎用レジスタファイルを介さずに供給するバイパス経路を有さず、
前記アロケーションユニットは、
前記ループキャッシュ内の前記ループ内命令列が、1つ前の実行命令の演算結果を次の実行命令の演算に利用する依存関係を持つ連続する複数の実行命令を有するチェイン命令列を含む場合、
前記チェイン命令列が、前記第1の演算ユニットで実行でき、前記第2の演算ユニットと前記第1及び第2のLSユニットで実行できない第1の実行命令を含み、前記第1の演算ユニットで実行できず、前記第2の演算ユニットと前記第1のLSユニットと第2のLSユニットのいずれかで実行できる第2の実行命令を含まない場合、前記チェイン命令列内の実行命令を前記第1のRSに割り振る、演算処理装置。
(付記14)
前記アロケーションユニットは、
前記チェイン命令列が、前記第1のLSユニットまたは前記第2のLSユニットで実行でき、前記第1の演算ユニット及び第2の演算ユニットで実行できない第3の実行命令を含み、前記第1のLSユニット及び第2のLSユニットで実行できず、前記第1の演算ユニット及び第2の演算ユニットのいずれかで実行できる第4の実行命令を含まない場合、前記チェイン命令列内の実行命令を前記第3のRSまたは第4のRSに割り振る、付記13に記載の演算処理装置。
(付記15)
前記アロケーションユニットは、
前記チェイン命令列が、前記第1及び第2の演算ユニットと、前記第1及び第2のLSユニットのいずれかで実行できる汎用実行命令だけを含む場合、前記チェイン命令列内の実行命令を前記第1乃至第4のRSのいずれかの1つのRSに割り振る、付記13に記載の演算処理装置。
以下は、上記付記の文言と実施の形態の符号との対応の一例である。上記の第1及び第2の演算ユニットはEXA,EXB、第3及び第4の演算ユニットはEAGA,EAGB、第1の命令はRSE命令、第2の命令はRSA命令、第3の命令はRSX命令、第1、第2、第3の割振りテーブルはRSE_t1、RSA_t1、RSX_t1,t2、第1の順番の組み合わせはRSEm,RSEf,RSEm,RSEf、RSAm,RSAf,RSAf,RSAm、RSEm,RSEf,RSAm,RSAf、RSEm,RSEm,RSEf,RSEf、又はRSAm,RSAm,RSAf,RSAf、RSEm,RSAm,RSEf,RSAfである。さらに、A型第3の割振りテーブルはRSX_t1、B型第3の割振りテーブルはRSX_t2、C型第3の割振りテーブルはRSX_t3、D型第3の割振りテーブルはRSX_t4、E型第3の割振りテーブルはRSX_t5、F型第3の割振りテーブルはRSX_t6である。A型第1の割振りテーブルはRSE_t2、A型第2の割振りテーブルはRSA_t2である。
RS:リザベーションステーション
EAGA,EAGB:オペランドアドレス生成器
RSA:オペランドアドレス生成器のリザベーションステーション
EXA,EXB:固定小数点演算器
RSE:固定小数点演算器のリザベーションステーション
I_BUF:命令バッファ
I_DEC:命令デコーダ
D0-D3:スロット
ALC_UNT:アロケーションユニット
LP_CACHE:ループキャッシュ
I_SEL:命令セレクタ
IN_PO_0,IN_PO_1:入力ポート
IN_QUE_0,IN_QUE_1:入力キュー
ALC_table:割振りテーブル

Claims (13)

  1. それぞれが、プログラムのインオーダーでフェッチされたフェッチ命令をデコードし実行命令を生成するK個(Kは複数)のデコーダスロットを有する命令デコーダと、
    L個(Lは複数でK>L)の入力ポートと、前記実行命令を前記L個の入力ポートを介してキューインする命令キューとをそれぞれ有する第1乃至第4のリザベーションステーション(以下RSと称する)と、
    前記第1及び第2のRSをそれぞれが専用に有し、前記第1及び第2のRSそれぞれにキューインされた実行命令をそれぞれが専ら実行する第1及び第2の演算ユニットと、
    前記第3及び第4のRSをそれぞれが専用に有し、前記第3及び第4のRS内それぞれにキューインされた実行命令をそれぞれが専ら実行する第1及び第2のロードストアユニット(以下LSユニットと称する)と、
    前記命令デコーダの前記K個のデコーダスロットそれぞれが生成するK個の前記実行命令を、前記第1乃至第4のRSのいずれかに割り振るアロケーションユニットとを有し、
    前記アロケーションユニットは、
    (1)前記実行命令が前記第1及び第2の演算ユニットで実行でき、前記第1及び第2のLSユニットで実行できない第1の命令の場合、前記第1の命令を第1の割振りテーブルに基づいて前記第1または第2のRSに割振り、
    (2)前記実行命令が前記第1及び第2のLSユニットで実行でき、前記第1及び第2の演算ユニットで実行できない第2の命令の場合、前記第2の命令を第2の割振りテーブルに基づいて前記第3または第4のRSに割振り、
    (3)前記実行命令が前記第1及び第2のLSユニットと前記第1及び第2の演算ユニットとで実行できる第3の命令の場合、前記第3の命令を第3の割振りテーブルに基づいて前記第1乃至第4のRSのいずれかに割振り、
    前記第1、第2、第3の割振りテーブルは、前記K個のデコーダスロットそれぞれに対
    応するK個の割振り先RSを有し、
    前記第1の割振りテーブルは、前記K個の割振り先RSを、前記第1及び第2のRSをそれぞれ前記L個以下で、且つ前記第1及び第2のRSの命令キューの空きがより多いとより少ないについて第1の順番の組み合わせで有し、
    前記第2の割振りテーブルは、前記K個の割振り先RSを、前記第3及び第4のRSをそれぞれ前記L個以下で、且つ前記第1の順番の組み合わせで有し、
    前記第3の割振りテーブルは、前記K個の割振り先RSを、第1の複数デコーダスロットに対して、前記第1の割振りテーブルの前記第1の複数デコーダスロットに対する割振
    り先RSとし、前記第1の複数デコーダスロットと異なる第2の複数デコーダスロットに対して、前記第2の割振りテーブルの前記第2の複数デコーダスロットに対する割振り先RSとし、且つ前記第1の順番の組み合わせで有する、演算処理装置。
  2. 前記第1の割振りテーブルは、前記K個の割振り先RSを、前記第1及び第2のRSのうち前記命令キューの空きがより多いRSとより少ないRSとを同数で有し、
    前記第2の割振りテーブルは、前記K個の割振り先RSを、前記第3及び第4のRSのうち前記命令キューの空きがより多いRSとより少ないRSとを同数で有し、
    前記第3の割振りテーブルは、前記K個の割振り先RSを、前記第1及び第2のRSと、前記第3及び第4のRSとを同数で有する、請求項1に記載の演算処理装置。
  3. 前記第1の順番の組み合わせは、少なくとも前記インオーダーで最先のデコーダスロットに対して前記より多いRSを、前記インオーダーで最後のデコーダスロットに対して前記より少ないRSを有する、請求項2に記載の演算処理装置。
  4. 前記第3の割振りテーブルは、
    (1)前記第1の複数デコーダスロットが、前記インオーダーで最先の複数デコーダスロットで、前記第2の複数デコーダスロットが、前記インオーダーで最後の複数デコーダスロットであるA型第3の割振りテーブルと、
    (2)前記第1の複数デコーダスロットが、前記インオーダーで最後の複数デコーダスロットで、前記第2の複数デコーダスロットが、前記インオーダーで最先の複数デコーダスロットであるB型第3の割振りテーブルと、を有し、
    前記アロケーションユニットは、
    (1)前記第1及び第2のRSの命令キューの空き合計が前記第3及び第4のRSの命令キューの空き合計より多い場合、前記A型第3の割振りテーブルに基づいて前記第3の実行命令を割振り、
    (2)前記第1及び第2のRSの命令キューの空き合計が前記第3及び第4のRSの命令キューの空き合計より少ない場合、前記B型第3の割振りテーブルに基づいて前記第3の実行命令を割振る、請求項3に記載の演算処理装置。
  5. 前記第3の割振りテーブルは、
    (1)前記第1の複数デコーダスロットが、前記インオーダーで偶数の複数デコーダスロットで、前記第2の複数デコーダスロットが、前記インオーダーで奇数の複数デコーダスロットであるA型第3の割振りテーブルと、
    (2)前記第1の複数デコーダスロットが、前記インオーダーで奇数の複数デコーダスロットで、前記第2の複数デコーダスロットが、前記インオーダーで偶数の複数デコーダスロットであるB型第3の割振りテーブルと、を有し、
    前記アロケーションユニットは、
    (1)前記第1及び第2のRSの命令キューの空き合計が前記第3及び第4のRSの命令キューの空き合計より多い場合、前記A型第3の割振りテーブルに基づいて前記第3の実行命令を割振り、
    (2)前記第1及び第2のRSの命令キューの空き合計が前記第3及び第4のRSの命令キューの空き合計より少ない場合、前記B型第3の割振りテーブルに基づいて前記第3の実行命令を割振る、請求項3に記載の演算処理装置。
  6. 前記アロケーションユニットは、
    前記実行命令が前記第1の命令の場合、前記第1のRSの前記命令キューの空き数と前記第2のRSの前記命令キューの空き数の差分が第1の基準値以上の場合、前記第1の割振りテーブルに代えて、前記K個のデコーダスロット全てに対して前記第1または第2のRSのうち前記命令キューの空きがより多いRSを割振り先にするA型第1の割振りテーブルに基づいて、前記第1の命令(RSE命令)を割り振る、請求項1に記載の演算処理装置
  7. 前記アロケーションユニットは、
    前記実行命令が前記第2の命令の場合、前記第3のRSの前記命令キューの空き数と前記第4のRSの前記命令キューの空き数の差分が第2の基準値以上の場合、前記第2の割振りテーブルに代えて、前記K個のデコーダスロット全てに対して前記第3または第4のRSのうち前記命令キューの空きがより多いRSを割振り先にするA型第2の割振りテーブルに基づいて、前記第2の命令を割り振る、請求項1に記載の演算処理装置。
  8. 前記アロケーションユニットは、
    前記実行命令が前記第3の命令の場合で、最も前記命令キューの空き数が多い最大空きRSの空き数と、前記最大空きRS以外のRSの空き数との差分が第3の基準値以上の場合に、
    (1)前記最大空きRSが前記第1または第2のRSなら、前記A型第3またはB型第3の割振りテーブルに代えて、前記K個のデコーダスロット全てに対して前記第1または第2のRSのうち前記命令キューの空きがより多いRSを割振り先にするE型第3の割振りテーブルに基づいて、前記第3の命令を割り振り、
    (2)前記最大空きRSが前記第3または第4のRSなら、前記A型第3またはB型第3の割振りテーブルに代えて、前記K個のデコーダスロット全てに対して前記第3または第4のRSのうち前記命令キューの空きがより多いRSを割振り先にするF型第3の割振りテーブルに基づいて、前記第3の命令を割り振る、請求項4または5に記載の演算処理装置。
  9. 前記アロケーションユニットは、
    前記実行命令が前記第3の命令の場合で、前記第1及び第2のRSの前記命令キューの第1合計空き数と、前記第3及び第4のRSの前記命令キューの第2合計空き数との差分が第4の基準値以上の場合に、
    (1)前記第1合計空き数が前記第2合計空き数より多いなら、前記A型第3またはB型第3の割振りテーブルに代えて、前記K個の割振り先RSを、前記第1及び第2のRSのうち前記命令キューの空きがより多いRSとより少ないRSとを同数で、且つ前記より多いRSを前記インオーダーで最先に、前記より少ないRSを前記インオーダーで最後に有するC型第3の割り当てテーブルに基づいて、前記第3の命令を割り振り、
    (2)前記第1合計空き数が前記第2合計空き数より少ないなら、前記A型第3またはB型第3の割振りテーブルに代えて、前記K個の割振り先RSを、前記第3及び第4のRSのうち前記命令キューの空きがより多いRSとより少ないRSとを同数で、且つ前記より多いRSを前記インオーダーで最先に、前記より少ないRSを前記インオーダーで最後に有するD型第3の割り当てテーブルに基づいて、前記第3の命令を割り振る、請求項8に記載の演算処理装置。
  10. それぞれが、プログラムのインオーダーでフェッチされたフェッチ命令をデコードし実行命令を生成するK個(Kは複数)のデコーダスロットを有する命令デコーダと、
    L個(Lは複数でK>L)の入力ポートと、前記実行命令を前記L個の入力ポートを介してキューインする命令キューとをそれぞれ有する第1乃至第4のリザベーションステーション(以下RSと称する)と、
    前記第1及び第2のRSをそれぞれが専用に有し、前記第1及び第2のRSそれぞれにキューインされた実行命令をそれぞれが専ら実行する第1及び第2の演算ユニットと、
    前記第3及び第4のRSをそれぞれが専用に有し、前記第3及び第4のRS内それぞれにキューインされた実行命令をそれぞれが専ら実行する第1及び第2のロードストアユニット(以下LSユニットと称する)と、
    前記命令デコーダの前記K個のデコーダスロットそれぞれが生成するK個の前記実行命令を、前記第1乃至第4のRSのいずれかに割り振るアロケーションユニットとを有する演算処理装置の制御方法であって、
    前記アロケーションユニットは、
    (1)前記実行命令が前記第1及び第2の演算ユニットで実行でき、前記第1及び第2のLSユニットで実行できない第1の命令の場合、前記第1の命令を第1の割振りテーブルに基づいて前記第1または第2のRSに割振り、
    (2)前記実行命令が前記第1及び第2のLSユニットで実行でき、前記第1及び第2の演算ユニットで実行できない第2の命令の場合、前記第2の命令を第2の割振りテーブルに基づいて前記第3または第4のRSに割振り、
    (3)前記実行命令が前記第1及び第2のLSユニットと前記第1及び第2の演算ユニットとで実行できる第3の命令の場合、前記第3の命令を第3の割振りテーブルに基づいて前記第1乃至第4のRSのいずれかに割振り、
    前記第1、第2、第3の割振りテーブルは、前記K個のデコーダスロットそれぞれに対
    応するK個の割振り先RSを有し、
    前記第1の割振りテーブルは、前記K個の割振り先RSを、前記第1及び第2のRS(RSE0/1)をそれぞれ前記L個以下で、且つ前記第1及び第2のRSの命令キューの空きがより多いとより少ないについて第1の順番の組み合わせで有し、
    前記第2の割振りテーブルは、前記K個の割振り先RSを、前記第3及び第4のRSをそれぞれ前記L個以下で、且つ前記第1の順番の組み合わせで有し、
    前記第3の割振りテーブルは、前記K個の割振り先RSを、第1の複数デコーダスロットに対して、前記第1の割振りテーブルの前記第1の複数デコーダスロットに対する割振
    り先RSとし、前記第1の複数デコーダスロットと異なる第2の複数デコーダスロットに対して、前記第2の割振りテーブルの前記第2の複数デコーダスロットに対する割振り先RSとし、且つ前記第1の順番の組み合わせで有する、演算処理装置の制御方法。
  11. それぞれが、プログラムのインオーダーでフェッチされたフェッチ命令をデコードし実行命令を生成する命令デコーダと、
    入力ポートと、前記実行命令を前記入力ポートを介してキューインする命令キューとをそれぞれ有する第1乃至第4のリザベーションステーション(以下RSと称する)と、
    前記第1及び第2のRSをそれぞれが専用に有し、前記第1及び第2のRSそれぞれにキューインされた実行命令をそれぞれが専ら実行する第1及び第2の演算ユニットと、
    前記第3及び第4のRSをそれぞれが専用に有し、前記第3及び第4のRS内それぞれにキューインされた実行命令をそれぞれが専ら実行する第1及び第2のロードストアユニット(以下LSユニットと称する)と、
    前記命令デコーダが生成するループ内の実行命令を有するループ内実行命令列を一時的に記憶するループキャッシュと、
    前記命令デコーダが生成する前記実行命令を、または前記ループキャッシュ内に記憶された前記ループ内実行命令列の実行命令を、前記第1乃至第4のRSのいずれかに割り振るアロケーションユニットと、
    前記第1及び第2の演算ユニットの実行結果及び前記第1及び第2のロードストアユニ
    ットの演算結果を格納する汎用レジスタファイルとを有し、
    前記第1及び第2の演算ユニットは、実行結果を自身の入力に前記汎用レジスタファイ
    ルを介さずに供給するバイパス経路を有し、前記実行結果を自身以外の演算ユニットに前記汎用レジスタファイルを介さずに供給するバイパス経路を有さず、
    前記第1及び第2のLSユニットは、実行結果を自身の入力に前記汎用レジスタファイルを介さずに供給するバイパス経路を有し、前記実行結果を自身以外のLSユニットに前記汎用レジスタファイルを介さずに供給するバイパス経路を有さず、
    前記アロケーションユニットは、
    前記ループキャッシュ内の前記ループ内実行命令列が、1つ前の実行命令の演算結果を次の実行命令の演算に利用する依存関係を持つ連続する複数の実行命令を有するチェイン命令列を含む場合、
    前記チェイン命令列が、前記第1の演算ユニットで実行でき、前記第2の演算ユニットと前記第1及び第2のLSユニットで実行できない第1の実行命令を含み、前記第1の演算ユニットで実行できず、前記第2の演算ユニットと前記第1のLSユニットと第2のLSユニットのいずれかで実行できる第2の実行命令を含まない場合、前記チェイン命令列内の実行命令を前記第1のRSに割り振る、演算処理装置。
  12. 前記アロケーションユニットは、
    前記チェイン命令列が、前記第1のLSユニットまたは前記第2のLSユニットで実行でき、前記第1の演算ユニット及び第2の演算ユニットで実行できない第3の実行命令を含み、前記第1のLSユニット及び第2のLSユニットで実行できず、前記第1の演算ユニット及び第2の演算ユニットのいずれかで実行できる第4の実行命令を含まない場合、前記チェイン命令列内の実行命令を前記第3のRSまたは第4のRSに割り振る、請求項11に記載の演算処理装置。
  13. 前記アロケーションユニットは、
    前記チェイン命令列が、前記第1及び第2の演算ユニットと、前記第1及び第2のLSユニットのいずれかで実行できる汎用実行命令だけを含む場合、前記チェイン命令列内の実行命令を前記第1乃至第4のRSのいずれかの1つのRSに割り振る、請求項11に記載の演算処理装置。
JP2018079011A 2018-04-17 2018-04-17 演算処理装置及び演算処理装置の制御方法 Active JP7032647B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2018079011A JP7032647B2 (ja) 2018-04-17 2018-04-17 演算処理装置及び演算処理装置の制御方法
US16/361,281 US10983790B2 (en) 2018-04-17 2019-03-22 Arithmetic processing unit and control method for arithmetic processing unit
US17/114,549 US11231926B2 (en) 2018-04-17 2020-12-08 Arithmetic processing unit and control method for arithmetic processing unit

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018079011A JP7032647B2 (ja) 2018-04-17 2018-04-17 演算処理装置及び演算処理装置の制御方法

Publications (2)

Publication Number Publication Date
JP2019185646A JP2019185646A (ja) 2019-10-24
JP7032647B2 true JP7032647B2 (ja) 2022-03-09

Family

ID=68161550

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018079011A Active JP7032647B2 (ja) 2018-04-17 2018-04-17 演算処理装置及び演算処理装置の制御方法

Country Status (2)

Country Link
US (2) US10983790B2 (ja)
JP (1) JP7032647B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11144324B2 (en) * 2019-09-27 2021-10-12 Advanced Micro Devices, Inc. Retire queue compression

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002055814A (ja) 2000-08-08 2002-02-20 Fujitsu Ltd 適切な発行先に命令を発行する命令発行装置
JP2004030424A (ja) 2002-06-27 2004-01-29 Fujitsu Ltd 命令処理装置および命令処理方法
JP2004038752A (ja) 2002-07-05 2004-02-05 Fujitsu Ltd プロセッサ及び命令制御方法
JP2004038751A (ja) 2002-07-05 2004-02-05 Fujitsu Ltd プロセッサ及び命令制御方法
JP2006313422A (ja) 2005-05-06 2006-11-16 Nec Electronics Corp 演算処理装置及びデータ転送処理の実行方法
US20140373022A1 (en) 2013-03-15 2014-12-18 Soft Machines, Inc. Method and apparatus for efficient scheduling for asymmetrical execution units
JP2018005488A (ja) 2016-06-30 2018-01-11 富士通株式会社 演算処理装置及び演算処理装置の制御方法

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5341482A (en) * 1987-03-20 1994-08-23 Digital Equipment Corporation Method for synchronization of arithmetic exceptions in central processing units having pipelined execution units simultaneously executing instructions
CA2123442A1 (en) * 1993-09-20 1995-03-21 David S. Ray Multiple execution unit dispatch with instruction dependency
US5742784A (en) * 1995-01-25 1998-04-21 International Business Machines Corporation System for reordering of instructions before placement into cache to reduce dispatch latency
US6324639B1 (en) * 1998-03-30 2001-11-27 Matsushita Electric Industrial Co., Ltd. Instruction converting apparatus using parallel execution code
US6260138B1 (en) * 1998-07-17 2001-07-10 Sun Microsystems, Inc. Method and apparatus for branch instruction processing in a processor
US6405303B1 (en) * 1999-08-31 2002-06-11 Advanced Micro Devices, Inc. Massively parallel decoding and execution of variable-length instructions
SE0003446L (sv) * 2000-09-27 2002-03-28 Ericsson Telefon Ab L M En pipelinemikroprocessor och ett förfarnade relaterande därtill
US7093111B2 (en) * 2003-07-31 2006-08-15 International Business Machines Corporation Recovery of global history vector in the event of a non-branch flush
US7284029B2 (en) * 2003-11-06 2007-10-16 International Business Machines Corporation 4-to-2 carry save adder using limited switching dynamic logic
US7216141B2 (en) * 2003-11-06 2007-05-08 International Business Machines Corporaiton Computing carry-in bit to most significant bit carry save adder in current stage
US8966223B2 (en) * 2005-05-05 2015-02-24 Icera, Inc. Apparatus and method for configurable processing
EP2159688A4 (en) * 2007-06-20 2011-01-05 Fujitsu Ltd INSTRUCTION MANAGEMENT CONTROL AND INSTRUCTION MANUAL CONTROL PROCEDURES
JP2010257199A (ja) 2009-04-24 2010-11-11 Renesas Electronics Corp プロセッサ及びプロセッサにおける命令発行の制御方法
US8627044B2 (en) * 2010-10-06 2014-01-07 Oracle International Corporation Issuing instructions with unresolved data dependencies
US9304848B2 (en) * 2013-01-15 2016-04-05 International Business Machines Corporation Dynamic accessing of execution elements through modification of issue rules
CN105993000B (zh) * 2013-10-27 2021-05-07 超威半导体公司 用于浮点寄存器混叠的处理器和方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002055814A (ja) 2000-08-08 2002-02-20 Fujitsu Ltd 適切な発行先に命令を発行する命令発行装置
JP2004030424A (ja) 2002-06-27 2004-01-29 Fujitsu Ltd 命令処理装置および命令処理方法
JP2004038752A (ja) 2002-07-05 2004-02-05 Fujitsu Ltd プロセッサ及び命令制御方法
JP2004038751A (ja) 2002-07-05 2004-02-05 Fujitsu Ltd プロセッサ及び命令制御方法
JP2006313422A (ja) 2005-05-06 2006-11-16 Nec Electronics Corp 演算処理装置及びデータ転送処理の実行方法
US20140373022A1 (en) 2013-03-15 2014-12-18 Soft Machines, Inc. Method and apparatus for efficient scheduling for asymmetrical execution units
JP2018005488A (ja) 2016-06-30 2018-01-11 富士通株式会社 演算処理装置及び演算処理装置の制御方法

Also Published As

Publication number Publication date
US20210089302A1 (en) 2021-03-25
US10983790B2 (en) 2021-04-20
US11231926B2 (en) 2022-01-25
US20190317762A1 (en) 2019-10-17
JP2019185646A (ja) 2019-10-24

Similar Documents

Publication Publication Date Title
JP3547482B2 (ja) 情報処理装置
US9965274B2 (en) Computer processor employing bypass network using result tags for routing result operands
CN100357884C (zh) 用于处理指令的方法、处理器以及系统
JP3919764B2 (ja) 例外条件を解消するために同時マルチスレッド・プロセッサでディスパッチ・フラッシュを使用する方法
GB2509974A (en) Allocating threads to resources using speculation metrics
WO2009006607A1 (en) Dynamically composing processor cores to form logical processors
WO2001048599A1 (en) Method and apparatus for managing resources in a multithreaded processor
US11204770B2 (en) Microprocessor having self-resetting register scoreboard
US10372458B2 (en) Method and apparatus for a self-clocked, event triggered superscalar processor
JP7032647B2 (ja) 演算処理装置及び演算処理装置の制御方法
US11755329B2 (en) Arithmetic processing apparatus and method for selecting an executable instruction based on priority information written in response to priority flag comparison
US11829187B2 (en) Microprocessor with time counter for statically dispatching instructions
US11954491B2 (en) Multi-threading microprocessor with a time counter for statically dispatching instructions
US20230315474A1 (en) Microprocessor with apparatus and method for replaying instructions
US20230350680A1 (en) Microprocessor with baseline and extended register sets
US11829762B2 (en) Time-resource matrix for a microprocessor with time counter for statically dispatching instructions
US20230342153A1 (en) Microprocessor with a time counter for statically dispatching extended instructions
US11829767B2 (en) Register scoreboard for a microprocessor with a time counter for statically dispatching instructions
US20230273796A1 (en) Microprocessor with time counter for statically dispatching instructions with phantom registers
US20230409489A1 (en) Apparatus and Method for Selecting Dynamic Latency for Level 2 Cache
US20240020122A1 (en) Executing phantom loops in a microprocessor
US20230350685A1 (en) Method and apparatus for a scalable microprocessor with time counter
US20230393852A1 (en) Vector coprocessor with time counter for statically dispatching instructions
CN116339969A (zh) 微操作的自适应动态分派
CN116339489A (zh) 处理器中微操作的扼制融合的系统、装置和方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210113

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20211130

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20211214

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220107

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: 20220125

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220207

R150 Certificate of patent or registration of utility model

Ref document number: 7032647

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150