(57)【要約】【課題】２個の命令を発行する際にスループットを向上させることができる演算処理装置を提供することを課題とする。【解決手段】演算処理装置は、複数のステージングラッチのうち、最終段のステージングラッチを含む第１の複数のステージングラッチ間におけるデータの遷移に単一のクロックのみを必要とするパイプライン動作と、複数のステージングラッチのうち、第１の複数のステージングラッチよりも前段側に位置する第２の複数のステージングラッチ間におけるデータの遷移に複数のクロックを必要とするマルチサイクル動作とにより第１の命令を実行する第１の命令実行部と、第２の命令を実行する第２の命令実行部と、第１の命令と第２の命令とを入力し、第１の命令の実行と第２の命令の実行とが一部重複するように、第１の命令を第１の命令実行部に発行するとともに、第２の命令を第２の命令実行部に発行する命令制御部とを有する。【選択図】図１１
2015036922.tif 000002
【特許請求の範囲】
【請求項１】
複数のステージングラッチを有し、前記複数のステージングラッチのうち、最終段のステージングラッチを含む第１の複数のステージングラッチ間におけるデータの遷移に単一のクロックのみを必要とするパイプライン動作と、前記複数のステージングラッチのうち、前記第１の複数のステージングラッチよりも前段側に位置する第２の複数のステージングラッチ間におけるデータの遷移に複数のクロックを必要とするマルチサイクル動作とにより第１の命令を実行する第１の命令実行部と、
第２の命令を実行する第２の命令実行部と、
前記第１の命令と前記第２の命令とを入力し、前記第１の命令の実行と前記第２の命令の実行とが一部重複するように、前記第１の命令を前記第１の命令実行部に発行するとともに、前記第２の命令を前記第２の命令実行部に発行する命令制御部とを有することを特徴とする演算処理装置。
【請求項２】
前記第２の命令実行部は、
複数の第２のステージングラッチを有し、前記複数の第２のステージングラッチのうち、最初段のステージングラッチを含む第３の複数のステージングラッチ間におけるデータの遷移に単一のクロックのみを必要とするパイプライン動作と、前記複数の第２のステージングラッチのうち、前記第３の複数のステージングラッチよりも後段側に位置する第４の複数のステージングラッチ間におけるデータの遷移に複数のクロックを必要とするマルチサイクル動作とにより、前記第２の命令を実行することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記第２の命令実行部は、
複数の第２のステージングラッチを有し、前記複数の第２のステージングラッチ間におけるデータの遷移に複数のクロックを必要とするとともに、前記複数の第２のステージングラッチ間にそれぞれ位置する回路を、前記演算処理装置が備える他の命令実行部が有する回路とは共有しない非共有マルチサイクル動作により、前記第２の命令を実行することを特徴とする請求項１記載の演算処理装置。
【請求項４】
前記第２の命令実行部は、
複数の第２のステージングラッチを有し、前記複数の第２のステージングラッチのうち、最初段のステージングラッチを含む第３の複数のステージングラッチ間におけるデータの遷移に単一のクロックのみを必要とし、前記第３の複数のステージングラッチ間にそれぞれ位置する回路を、前記演算処理装置が備える他の命令実行部が有する回路とは共有しない非共有パイプライン動作と、前記複数の第２のステージングラッチのうち、前記第３の複数のステージングラッチよりも後段側に位置する第４の複数のステージングラッチ間におけるデータの遷移に単一のクロックのみを必要とし、前記第４の複数のステージングラッチ間にそれぞれ位置する回路を、前記演算処理装置が備える他の命令実行部が有する回路と共有する共有パイプライン動作とにより、前記第２の命令を実行することを特徴とする請求項１記載の演算処理装置。
【請求項５】
前記命令制御部は、
前記第１の命令実行部が前記第１の命令を実行する場合、前記第１の複数のステージングラッチ間又は前記第２の複数のステージングラッチ間に位置するいずれかの回路が、前記第２の命令実行部が前記第２の命令を実行することにより、前記複数の第２のステージングラッチ間に位置する回路と共有されるときは、前記第２の命令の前記第２の命令実行部への発行を抑止することを特徴とする請求項１〜４のいずれか１項に記載の演算処理装置。
【請求項６】
前記命令制御部は、
前記第１の命令の実行における前記パイプライン動作と、前記第２の命令の実行とが一部重複するように、前記第１の命令を前記第１の命令実行部に発行するとともに、前記第２の命令を前記第２の命令実行部に発行することを特徴とする請求項１〜５のいずれか１項に記載の演算処理装置。
【請求項７】
前記命令制御部は、
前記第１の命令の実行における前記パイプライン動作又は前記マルチサイクル動作と、前記第２の命令の実行とが一部重複するように、前記第１の命令を前記第１の命令実行部に発行するとともに、前記第２の命令を前記第２の命令実行部に発行することを特徴とする請求項１〜６のいずれか１項に記載の演算処理装置。
【請求項８】
複数のステージングラッチを有し、前記複数のステージングラッチのうち、最終段のステージングラッチを含む第１の複数のステージングラッチ間におけるデータの遷移に単一のクロックのみを必要とするパイプライン動作と、前記複数のステージングラッチのうち、前記第１の複数のステージングラッチよりも前段側に位置する第２の複数のステージングラッチ間におけるデータの遷移に複数のクロックを必要とするマルチサイクル動作とにより第１の命令を実行する第１の命令実行部と、第２の命令を実行する第２の命令実行部とを有する演算処理装置の制御方法において、
前記演算処理装置が有する命令制御部が、前記第１の命令と前記第２の命令とを入力し、
前記命令制御部が、前記第１の命令の実行と前記第２の命令の実行とが一部重複するように、前記第１の命令を前記第１の命令実行部に発行するとともに、前記第２の命令を前記第２の命令実行部に発行することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
互いに依存関係にある２以上の命令を発行する命令発行制御部と、実行パイプラインとを有する情報処理装置が知られている（例えば、特許文献１参照）。命令発行制御部は、命令デコード部と、命令が使用するリソースの使用状態を管理するリソース管理部とを有する。発行タイミング決定＆リソース割り当て部は、リソースの使用状態に基づきデコード済み命令が使用するリソースが現在から何サイクル後に使用可能になるのかを判断し、デコード済み命令の発行タイミングとして決定し、リソースの使用状態を更新しリソースの割り当てを行う。発行確定命令待機バッファは、発行タイミングの決定及びリソースの割り当てが行われた命令を、その発行タイミングとなるまでの間バッファリングして保持し、その発行タイミングで実行パイプラインに発行する。
【０００３】
また、マルチスレッドプロセッサの、複数のスレッドにより共用使用されるパイプラインのディスパッチ時点において、１つのスレッドをブロックする方法が知られている（例えば、特許文献２参照）。１つのスレッドの命令に対する長い待ち時間の条件は、パイプラインを共用使用するスレッドのすべてを停止させることができる。ディスパッチブロック信号命令は、ディスパッチ時に長い待ち時間の条件を含むスレッドをブロックする。ブロックの長さは、待ち時間の長さと一致するため、長い待ち時間の条件が解除された後に、パイプラインは、ブロックされたスレッドから命令をディスパッチできる。ディスパッチ時に１つのスレッドをブロックすることにより、プロセッサは、ブロックの間、他のスレッドから命令をディスパッチできる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１２−１７３７５５号公報
【特許文献２】特開２００６−３５１００８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
２個の命令をオーバーラップさせて発行すれば、スループットを向上させることができる。しかし、オーバーラップ可能な命令とオーバーラップ困難な命令とがある。オーバーラップ困難な命令であっても、その一部をオーバーラップできれば、スループットを向上させることができる。
【０００６】
１つの側面では、本発明の目的は、２個の命令を発行する際にスループットを向上させることができる演算処理装置及び演算処理装置の制御方法を提供することである。
【課題を解決するための手段】
【０００７】
演算処理装置は、複数のステージングラッチを有し、前記複数のステージングラッチのうち、最終段のステージングラッチを含む第１の複数のステージングラッチ間におけるデータの遷移に単一のクロックのみを必要とするパイプライン動作と、前記複数のステージングラッチのうち、前記第１の複数のステージングラッチよりも前段側に位置する第２の複数のステージングラッチ間におけるデータの遷移に複数のクロックを必要とするマルチサイクル動作とにより第１の命令を実行する第１の命令実行部と、第２の命令を実行する第２の命令実行部と、前記第１の命令と前記第２の命令とを入力し、前記第１の命令の実行と前記第２の命令の実行とが一部重複するように、前記第１の命令を前記第１の命令実行部に発行するとともに、前記第２の命令を前記第２の命令実行部に発行する命令制御部とを有する。
【発明の効果】
【０００８】
一部重複するように第１の命令及び第２の命令を発行することにより、スループットを向上させることができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、演算処理装置としてのプロセッサを含む情報処理システムの構成例を示す図である。
【図２】図２は、プロセッサの構成例を示す図である。
【図３】図３は、図２に示した命令発行制御部の構成例を示す図である。
【図４】図４（Ａ）及び（Ｂ）は、図３の取出し可能命令検出部の一部の構成例を示す図である。
【図５】図５は、演算器のパイプライン動作を示す図である。
【図６】図６は、演算器のマルチサイクル動作を示す図である。
【図７】図７は、スループット１のパイプライン動作を示す図である。
【図８】図８は、命令発行制御部の命令発行例を示す図である。
【図９】図９は、２個の複合マルチサイクル動作の命令発行を示す図である。
【図１０】図１０は、複合マルチサイクル動作及び共有完全パイプライン動作の命令発行を示す図である。
【図１１】図１１は、２個の複合マルチサイクル動作の命令発行を示す図である。
【図１２】図１２は、複合マルチサイクル動作及び共有完全パイプライン動作の命令発行を示す図である。
【図１３】図１３は、発行抑止信号を用いて動作を部分的にオーバーラップさせる方法を示す図である。
【図１４】図１４は、演算命令のサイクルステージを説明するための図である。
【図１５】図１５は、先行命令が複合マルチサイクル動作であり、後続命令が複合マルチサイクル動作である場合のタイミングチャートである。
【図１６】図１６は、先行命令が複合マルチサイクル動作であり、後続命令が純粋マルチサイクル動作である場合のタイミングチャートである。
【図１７】図１７は、先行命令が複合マルチサイクル動作であり、後続命令が共有完全パイプライン動作である場合のタイミングチャートである。
【発明を実施するための形態】
【００１０】
図１は、演算処理装置としてのプロセッサを含む情報処理システムの構成例を示す図である。図１に示す情報処理システムは、例えば複数のプロセッサ１１Ａ、１１Ｂ及びメモリ１２Ａ、１２Ｂと、外部装置との入出力制御を行うインターコネクト制御部１３とを有する。
【００１１】
図２は、プロセッサ１１の構成例を示す図である。プロセッサ１１は、演算処理装置であり、図１のプロセッサ１１Ａ及び１１Ｂに対応し、例えば命令のアウトオブオーダ実行やパイプライン処理の機能を有する。
【００１２】
命令フェッチステージでは、命令フェッチ部２１、命令バッファ２４、分岐予測回路２２、一次命令キャッシュメモリ２３、及び二次キャッシュメモリ３４等が動作する。命令フェッチ部２１は、分岐予測回路２２からフェッチする命令の予測分岐先アドレス、分岐制御部３０から分岐演算により確定した分岐先アドレス等を受け取る。命令フェッチ部２１は、受け取った予測分岐先アドレス、分岐先アドレス、及び命令フェッチ部２１内で作成した分岐しない場合にフェッチする命令の連続した次のアドレス等から、１つのアドレスを選択して次の命令フェッチアドレスを確定する。命令フェッチ部２１は、確定した命令フェッチアドレスを一次命令キャッシュメモリ２３に出力し、出力された確定後の命令フェッチアドレスに対応する命令コードをフェッチする。
【００１３】
一次命令キャッシュメモリ２３は、二次キャッシュメモリ３４の一部のデータを格納しているものであり、二次キャッシュメモリ３４は、メモリコントローラ３５を介してアクセス可能なメモリの一部のデータを格納しているものである。一次命令キャッシュメモリ２３に該当するアドレスのデータが存在しない場合には二次キャッシュメモリ３４からデータをフェッチし、二次キャッシュメモリ３４に該当するデータが存在しない場合にはメモリからデータをフェッチする。本実施形態では、メモリはプロセッサ１１の外部に配置しているため、外部にあるメモリとの入出力制御はメモリコントローラ３５を介して行われる。一次命令キャッシュメモリ２３や二次キャッシュメモリ３４、メモリの該当するアドレスからフェッチされた命令コードは、命令バッファ２４に格納される。
【００１４】
分岐予測回路２２は、命令フェッチ部２１から出力された命令フェッチアドレスを受け取り、命令フェッチと並行して分岐予測を実行する。分岐予測回路２２は、受け取った命令フェッチアドレスを基に分岐予測を行い、分岐の成立又は不成立を示す分岐方向と予測分岐先アドレスとを命令フェッチ部２１へ返す。命令フェッチ部２１は、予測された分岐方向が成立であった場合には次の命令フェッチアドレスとして予測された分岐先アドレスを選択する。
【００１５】
命令発行ステージでは、命令デコーダ２５及び命令発行制御部２６が動作する。命令デコーダ２５は、命令バッファ２４から命令コードを受け取って命令の種別や必要な実行資源等を解析し、解析結果を命令発行制御部２６に出力する。命令発行制御部２６は、リザベーションステーションの構造を持つ。命令発行制御部２６は、命令で参照するレジスタ等の依存関係を見て、依存関係のあるレジスタの更新状況や同じ実行資源を用いる命令の実行状況等から実行資源が命令を実行可能かどうかを判断する。命令発行制御部２６は、実行資源が命令を実行可能であると判断した場合には、レジスタ番号やオペランドアドレス等の命令の実行に必要な情報を実行資源に対して出力する。また、命令発行制御部２６は、実行可能な状態になるまで命令を格納しておくバッファの機能も有する。演算器制御回路２７は、命令発行制御部２６から入力した情報に応じて演算器２８を制御する。
【００１６】
命令実行ステージでは、演算器２８、一次オペランドキャッシュメモリ２９、及び分岐制御部３０等の実行資源が動作する。演算器２８は、レジスタ３１や一次オペランドキャッシュメモリ２９からデータを受け取り、四則演算、論理演算、三角関数演算、及びアドレス計算等の命令に対応した演算を実行し、演算結果をレジスタ３１や一次オペランドキャッシュメモリ２９に出力する。一次オペランドキャッシュメモリ２９は、命令キャッシュメモリ２３と同様に、二次キャッシュメモリ３４の一部のデータを格納しているものである。一次オペランドキャッシュメモリ２９は、ロード命令によるメモリから演算器２８やレジスタ３１へのデータのロードや、ストア命令による演算器２８やレジスタ３１からメモリへのデータのストア等に用いられる。各実行資源は、命令実行の完了通知を命令完了制御部３２へ出力する。
【００１７】
分岐制御部３０は、命令デコーダ２５から分岐命令の種別を受け取り、演算器２８から分岐先アドレスや分岐条件となる演算の結果を受け取って、演算結果が分岐条件を満たしていれば分岐成立、満たしていなければ分岐不成立の判断を行い、分岐方向を確定する。また、分岐制御部３０は、演算結果と分岐予測時の分岐先アドレスと分岐方向が一致するかどうかの判断や、分岐命令の順序関係の制御も行う。分岐制御部３０は、演算結果と予測とが一致した場合には命令完了制御部３２へ分岐命令の完了通知を出力する。一方、演算結果と予測とが一致しなかった場合には分岐予測失敗を意味するので、分岐制御部３０は、命令完了制御部３２へ分岐命令の完了通知とともに後続命令のキャンセル及び再命令フェッチ要求を出力する。
【００１８】
命令完了ステージでは、命令完了制御部３２、レジスタ３１、及び分岐履歴更新部３３が動作する。命令完了制御部３２は、命令の各実行資源から受け取った完了通知を基に、コミットスタックエントリに格納された命令コード順に命令完了処理を行い、レジスタ３１の更新指示を出力する。レジスタ３１は、命令完了制御部３２からレジスタ更新指示を受け取ると、演算器２８や一次オペランドキャッシュメモリ２９から受け取る演算結果のデータを基にレジスタの更新を実行する。分岐履歴更新部３３は、分岐制御部３０から受け取る分岐演算の結果を基に分岐予測の履歴更新データを作成し、分岐予測回路２２に出力する。
【００１９】
図３は、図２に示した命令発行制御部２６の構成例を示す図である。図３には、リザベーションステーションの機能を実現する命令発行制御部２６の構成例を示している。図３に示す命令発行制御部２６は、複数の出力ポートＰＡ及びＰＢを有し、各出力ポートＰＡ及びＰＢからそれぞれ１つの命令を出力することで複数の命令を同時に出力可能なものである。図３には、２つの出力ポートＰＡ及びＰＢを有する例を示している。
【００２０】
命令デコーダ２５でデコードされた命令は、リザベーションステーションのエントリ本体３９の空いているエントリに登録される。登録される内容は、エントリが有効であることを示すバリッドビット（Ｖ）、命令におけるディスティネーションレジスタ等の命令オペランドを識別するタグ、及びデコード済みオペコード等である。リザベーションステーションのエントリ本体３９に登録された命令は、取出し可能命令検出部３６により、実行済命令のタグ等に基づいて先行命令との間のレジスタ依存関係が解析され実行可能であると判定されると、エントリ本体３９から取出し可能な命令として検出される。取出し可能な命令は、ポート調停部３７により出力ポートＰＡ及びＰＢの調停を受け、調停の結果、出力されることが決定した命令は演算器２８へ送出される。なお、命令デコーダ２５から取出し可能命令検出部３６に命令に係る情報をバイパスする経路を設けることで、命令が１クロックサイクルのレイテンシでリザベーションステーションを通過できるようにすることも可能である。発行抑止信号設定部３８は、出力ポートＰＡ及びＰＢの命令がオーバーラップ不可である場合には、発行抑止信号を出力する。発行抑止信号が出力されると、ポート調停部３７による調停は行われず、命令の発行が待機させられる。
【００２１】
図４（Ａ）及び（Ｂ）は、図３の取出し可能命令検出部３６の一部の構成例を示す図であり、エントリｎにバッファされている命令が特定の出力ポートＰＡ又はＰＢから取り出されることを許可又は禁止する論理回路の一例を示す。図４（Ａ）は、出力ポートＰＡについてのエントリｎに対応する回路を示しており、図４（Ｂ）は、出力ポートＰＢについてのエントリｎに対応する回路を示している。
【００２２】
図４（Ａ）に示すように、取出し可能命令検出部３６は、出力ポートＰＡについては、論理積（ＡＮＤ）回路４１、４２、及び否定論理和回路（ＮＯＲ）回路４３を有する。ＡＮＤ回路４１には、信号En_MC_OP及び信号INH_PA_MC_OPが入力される。また、ＡＮＤ回路４２には、信号En_FLA_OP及び信号INH_PA_FLA_OPが入力される。ＮＯＲ回路４３には、ＡＮＤ回路４１及び４２の出力信号が入力され、その演算結果が信号En_ENA_PAとして出力される。
【００２３】
また、図４（Ｂ）に示すように、取出し可能命令検出部３６は、出力ポートＰＢについては、ＡＮＤ回路４４、４５、及びＮＯＲ回路４６を有する。ＡＮＤ回路４４には、信号En_MC_OP及び信号INH_PB_MC_OPが入力される。また、ＡＮＤ回路４５には、信号En_FLA_OP及び信号INH_PB_FLA_OPが入力される。ＮＯＲ回路４６には、ＡＮＤ回路４４及び４５の出力信号が入力され、その演算結果が信号En_ENA_PBとして出力される。
【００２４】
図４（Ａ）及び（Ｂ）において、入力信号En_MC_OPは、エントリｎにバッファされている命令が、使用する演算器２８を複数サイクル（マルチサイクル）占有し続ける命令であることを示す信号である。入力信号INH_PA_MC_OPは、出力ポートＰＡに接続されている演算器２８が、この演算器２８を複数サイクル占有し続ける命令によって既に使用されていることを示し、新たにこの演算器２８を使用する命令が出力ポートＰＡから取り出されることを禁止する信号である。信号En_MC_OPと信号INH_PA_MC_OPとを論理積演算して得られる信号は、エントリｎにバッファされている命令が演算器２８を複数サイクル占有し続ける命令であって、かつ、出力ポートＰＡに接続されている演算器２８が既に使用されていることから、エントリｎの命令が出力ポートＰＡから取り出されることを禁止する信号である。
【００２５】
入力信号En_FL_OPは、エントリｎにバッファされている命令が、最大の出力遅延サイクル数が固定であるパイプライン化された演算器２８を用いる命令であることを示す信号である。ここで、最大の出力遅延サイクル数が固定であるとは、例えば、演算器２８の演算レイテンシが４サイクル又は６サイクルである場合に、レイテンシが高々６サイクルであると演算終了以前に予見できるといった意味である。入力信号INH_PA_FLA_OPは、出力ポートＰＡに接続されている演算器２８であり、最大の出力遅延サイクル数が固定であるパイプライン化された演算器２８について、その演算結果出力のための伝送路が他の命令によって使用される見込みであることを示し、新たにこの演算器２８を使用する命令が出力ポートＰＡから取り出されることを禁止する信号である。信号En_FLA_OPと信号INH_PA_FLA_OPとを論理積演算して得られる信号は、エントリｎにバッファされている命令が最大の出力遅延サイクル数が固定であるパイプライン化された演算器２８を用いる命令であり、かつ、その演算結果出力のための伝送路が他の命令によって使用される見込みであることから、エントリｎの命令が出力ポートＰＡから取り出されることを禁止する信号である。出力信号En_ENA_PAは、エントリｎにバッファされている命令が出力ポートＰＡから取り出されることを許可する信号である。なお、図４（Ｂ）に示す各信号は、前述した図４（Ａ）に示す各信号を出力ポートＰＡと出力ポートＰＢとを入れ換えたものに相当する。
【００２６】
ある演算器の結果出力のための伝送路が他の命令によって使用される状態が起こる場合としては、演算器が複数種類あって、それぞれのレイテンシが異なる場合があげられる。後続命令が用いる小さいレイテンシの演算器の結果出力の伝送路が、先行命令が用いる大きいレイテンシの演算器の結果出力のために使用されることが予め確定している場合には、その伝送路を用いる演算器が接続された出力ポートへの後続命令の出力を禁止する制御を行う。前述した信号En_MC_OP、En_FLA_OPは、命令の種類によって異なる命令実行時の制御を指示する信号であり、命令デコーダ２５から送られる。前段のパイプラインステージから命令がエントリに登録された後に、レイテンシ１サイクルで通過することができるリザベーションステーションを構成するために、これらの信号の直前にバイパス経路を設けてもよい。入力信号INH_PA_MC_OP及びINH_PB_MC_OPは、発行抑止信号設定部３８の発行抑止信号に対応している。
【００２７】
例えば、同時に１命令発行し、アウトオブオーダ実行を行うパイプラインを想定しているが、スーパースカラであっても、インオーダ実行であってもよい。
【００２８】
図５は、演算器（命令実行部）２８のパイプライン動作を示す図である。演算器２８は、例えば、複数のステージングラッチ５１及び組み合わせ回路５２を有する。パイプライン動作では、クロックサイクル毎に組み合わせ回路５２の演算結果が後段のステージングラッチ５１に伝達され、スループット１（毎クロックサイクル結果を出力する）の動作が行われる。パイプライン動作は、複数のステージングラッチ５１を有し、複数のステージングラッチ５１間におけるデータの遷移に単一のクロックのみを必要とする動作である。
【００２９】
図６は、演算器（命令実行部）２８のマルチサイクル動作を示す図である。例えば、前段の組み合わせ回路５２は、後段の組み合わせ回路５２の演算結果６１を入力して演算を行う。この部分では、複数クロックサイクルで結果が出力されるマルチサイクル動作が行われる。マルチサイクル動作は、複数のステージングラッチ５１を有し、複数のステージングラッチ５１間におけるデータの遷移に複数のクロックを必要とする動作である。
【００３０】
図７は、図５に対応し、スループット１のパイプライン動作を示す図である。パイプラン動作では、単一クロックサイクル動作が行われ、各パイプラインステージ７１がスループット１である。命令発行制御部２６は、複数の命令を順に発行し、複数の命令をオーバーラップさせることにより、スループットを向上させることができる。
【００３１】
図８は、命令発行制御部２６の命令発行例を示す図である。純粋マルチサイクル動作８１は、例えば除算・平方根の演算であり、複数のステージングラッチ５１間におけるデータの遷移に複数のクロックを必要とするとともに、複数のステージングラッチ５１間にそれぞれ位置する回路５２を、他の命令の実行の演算器２８の回路とは共有しない非共有マルチサイクル動作である。非共有完全パイプライン動作８２は、例えば乗算・加算の演算であり、他の動作と資源を共有しないパイプライン動作のみの動作である。共有完全パイプライン動作８３は、パイプライン動作８４〜８６のみの動作であり、一部のパイプライン動作８５が他の動作８９と資源（回路）を共有する。複合マルチサイクル動作８７は、パイプライン動作８８、マルチサイクル動作８９及びパイプライン動作９０を有し、マルチサイクル動作８９が他の動作８５と資源（回路）を共有する。
【００３２】
図９は、２個の複合マルチサイクル動作９１及び９５の命令発行を示す図である。横軸は時刻であり、縦軸は命令発行順である。複合マルチサイクル動作９１は、図５及び図６の複数のステージングラッチ５１を有し、パイプライン動作９２、マルチサイクル動作９３及びパイプライン動作９４を順に行う。パイプライン動作９４は、図５に示すように、複数のステージングラッチ５１のうち、最終段のステージングラッチ５１を含む第１の複数のステージングラッチ５１間におけるデータの遷移に単一のクロックのみを必要とする動作である。マルチサイクル動作９３は、図６に示すように、複数のステージングラッチ５１のうち、上記の第１の複数のステージングラッチ５１よりも前段側に位置する第２の複数のステージングラッチ５１間におけるデータの遷移に複数のクロックを必要とする動作である。
【００３３】
複合マルチサイクル動作９５は、図５及び図６の複数の第２のステージングラッチ５１を有し、パイプライン動作９６、マルチサイクル動作９７及びパイプライン動作９８を順に行う。パイプライン動作９６は、図５に示すように、複数の第２のステージングラッチ５１のうち、最初段のステージングラッチ５１を含む第３の複数のステージングラッチ５１間におけるデータの遷移に単一のクロックのみを必要とする動作である。マルチサイクル動作９７は、図６に示すように、複数の第２のステージングラッチ５１のうち、上記の第３の複数のステージングラッチ５１よりも後段側に位置する第４の複数のステージングラッチ５１間におけるデータの遷移に複数のクロックを必要とする動作である。ここで、マルチサイクル動作９３及び９７は、資源を共有しているため、複合マルチサイクル動作９１及び９５は相互にオーバーラップさせることが困難であり、スループット低下の原因になる。本実施形態では、一部オーバーラップさせることにより、スループットを向上させる。その詳細は、後に図１１を参照しながら説明する。
【００３４】
図１０は、複合マルチサイクル動作１０１及び共有完全パイプライン動作１０５の命令発行を示す図である。複合マルチサイクル動作１０１は、パイプライン動作１０２、マルチサイクル動作１０３及びパイプライン動作１０４を順に行う。共有完全パイプライン動作１０５は、複数の第２のステージングラッチ５１を有し、パイプライン動作１０６、パイプライン動作１０７及びパイプライン動作１０８を順に行う。ここで、マルチサイクル動作１０３及びパイプライン動作１０７は、資源を共有しているため、複合マルチサイクル動作１０１及び共有完全パイプライン動作１０５は相互にオーバーラップさせることが困難であり、スループット低下の原因になる。パイプライン動作１０６は、複数の第２のステージングラッチ５１のうち、最初段のステージングラッチ５１を含む第３の複数のステージングラッチ５１間におけるデータの遷移に単一のクロックのみを必要とし、上記の第３の複数のステージングラッチ５１間にそれぞれ位置する回路５２を、他の命令の実行で使用する演算器２８の回路とは共有しない非共有パイプライン動作である。パイプライン動作１０７は、複数の第２のステージングラッチ５１のうち、上記の第３の複数のステージングラッチ５１よりも後段側に位置する第４の複数のステージングラッチ５１間におけるデータの遷移に単一のクロックのみを必要とし、上記の第４の複数のステージングラッチ５１間にそれぞれ位置する回路５２を、他の命令の実行に使用する演算器２８の回路と共有する共有パイプライン動作である。本実施形態では、一部オーバーラップさせることにより、スループットを向上させる。その詳細は、後に図１２を参照しながら説明する。
【００３５】
図１１は、図９に対応し、２個の複合マルチサイクル動作９１及び９５の命令発行を示す図である。マルチサイクル動作９３及び９７は、資源を共有している。そのため、命令発行制御部２６がマルチサイクル動作９３を発行している期間１１１では、図３の発行抑止信号設定部３８は発行抑止信号を取出し可能命令検出部３６に出力する。これにより、期間１１１では、取出し可能命令検出部３６は、マルチサイクル動作９７の発行を禁止する。２個の複合マルチサイクル動作９１及び９５は、相互に一部を時間的にオーバーラップさせることができる。具体的には、パイプライン動作９６は、マルチサイクル動作９３とオーバーラップする。マルチサイクル動作９７は、パイプライン動作９４とオーバーラップする。これにより、スループットを向上させることができる。特に、レイテンシが長い処理をオーバーラップさせることの効果は大きい。
【００３６】
なお、パイプライン動作９６は、マルチサイクル動作９３の他、パイプライン動作９２の一部にもオーバーラップさせることができる。また、パイプライン動作９８は、パイプライン動作９４の一部にオーバーラップさせることができる。
【００３７】
図１２は、図１０に対応し、複合マルチサイクル動作１０１及び共有完全パイプライン動作１０５の命令発行を示す図である。マルチサイクル動作１０３及びパイプライン動作１０７は、資源を共有している。そのため、命令発行制御部２６がマルチサイクル動作１０３を発行している期間１２１では、図３の発行抑止信号設定部３８は発行抑止信号を取出し可能命令検出部３６に出力する。これにより、期間１２１では、取出し可能命令検出部３６は、マルチサイクル動作１０７の発行を禁止する。複合マルチサイクル動作１０１及び共有完全パイプライン動作１０５は、相互に一部を時間的にオーバーラップさせることができる。具体的には、パイプライン動作１０６は、マルチサイクル動作１０３とオーバーラップする。パイプライン動作１０７は、パイプライン動作１０４とオーバーラップする。パイプライン動作１０８は、パイプライン動作１０４とオーバーラップする。これにより、スループットを向上させることができる。特に、レイテンシが長い処理をオーバーラップさせることの効果は大きい。なお、パイプライン動作１０６は、マルチサイクル動作１０３の他、パイプライン動作１０２の一部にもオーバーラップさせることができる。
【００３８】
図１３は、マルチサイクル演算命令の発行抑止信号１３５及び１３６を用いて動作を部分的にオーバーラップさせる方法を示す図である。本実施形態では、部分的なパイプライン制御を導入し、演算処理のオーバーラップを実現するため、オーバーラップ可能な命令の最大数だけ命令情報ラッチを用意する。言い換えると、１つのパイプラインステージが複数クロックサイクルにわたるパイプライン処理を行う。演算器２８に対して２命令までオーバーラップさせようとした場合、演算器２８全体が２つの仮想的なパイプラインステージに分割されているものとして制御する。命令の状態は、２つのパイプラインステージに対応して保持される。図１３のタイミングチャートは、制御信号を示し、発行から数サイクル遅れて実際の演算処理が行われる。同期式回路の場合では、各信号はクロックサイクル単位で変化する。
【００３９】
先行命令は、パイプライン１段目信号１３１及びパイプライン２段目信号１３２を有する。後続命令は、パイプライン１段目信号１３３及びパイプライン２段目信号１３４を有する。命令発行制御部２６は、先行命令に応じて、パイプライン１段目信号１３１を出力し、その後、パイプライン２段目信号１３２を出力する。パイプライン１段目信号１３１が出力されると、発行抑止信号設定部３８は発行抑止信号１３５を出力する。命令発行制御部２６は、発行抑止信号１３５の出力が終了するまで、後続命令のマルチサイクル演算命令の発行を抑止し、発行抑止信号１３５の出力が終了すると、後続命令のマルチサイクル演算の発行を開始する。命令発行制御部２６は、後続命令に応じて、パイプライン１段目信号１３３を出力し、その後、パイプライン２段目信号１３４を出力する。これにより、先行命令のパイプライン１段目信号１３２と後続命令のパイプライン１段目信号１３３とをオーバーラップさせ、スループットを向上させることができる。
【００４０】
図１４は、演算命令のサイクルステージを説明するための図である。サイクルステージでは、Ｐ、Ｂ１、Ｂ２、Ｘ１〜Ｘｎが順に行われる。Ｐは、実行可能な命令の調停及び取り出しを行うパイプライン処理のサイクルステージである。Ｂ１は、レジスタ読み出し１サイクル目のパイプライン処理のサイクルステージである。Ｂ２は、レジスタ読み出し２サイクル目のパイプライン処理のサイクルステージである。Ｘ１〜Ｘｎは、演算の実行サイクルステージである。演算は、演算器２８での演算処理を意味する。Ｘ１は、実行１サイクル目の演算開始のサイクルステージである。Ｘｎ−ｐは、実行（ｎ−ｐ）サイクル目のサイクルステージである。Ｘｎは、実行ｎサイクル目の演算終了のサイクルステージである。サイクルステージＸｎ−ｋでは、演算器制御回路２７により、実行サイクル数ｎが確定する。
【００４１】
図１５〜図１７は、命令発行制御部２６の制御方法を示すタイミングチャートであり、時間の経過に伴う信号及び命令の状態変化を示す。時間は、左から右へ流れている。上段の両方向矢印の線分は命令情報１を保持するラッチの信号状態を示し、下段の両方向矢印の線分は命令情報２を保持するラッチの信号状態を示す。片方向の矢印は、信号及び状態変化についての因果関係を表している。例えば、Ａ→Ｂは、Ａを契機（条件）としてＢが変化することを示している。ただし、Ａが、Ｂの変化の必要条件に過ぎない場合がある。
【００４２】
サイクルは、命令の処理段階（命令ステージ）のことであり、回路構成がパイプライン動作及びマルチサイクル動作のいずれであっても命令ステージは毎クロックサイクル遷移する（同一サイクルが続くような待ち状態はない）ものとして表記する。この例では、発行サイクルＰから実行サイクルＸ１までのレイテンシが３クロックサイクルである例を示している。発行サイクルＰから実行サイクルＸ１までのレイテンシはこれに限られない。発行サイクルＰの前にレジスタ読み出しサイクルＢ１，Ｂ２を行う構成であってもよい。
【００４３】
図１５は、図１１に対応し、先行命令が複合マルチサイクル動作９１であり、後続命令が複合マルチサイクル動作９５である場合を示す図である。先行命令と後続命令とは、レジスタ依存関係がなく、演算順序の制約を持たないものとする。依存関係のある命令同士の場合は、演算処理Ｘ１〜Ｘｍをオーバーラップして実行することができない。
【００４４】
複合マルチサイクル動作を行う先行命令と複合マルチサイクル動作を行う後続命令との演算処理がオーバーラップするクロックサイクル数をｍとする。オーバラップクロックサイクル数ｍは、先行命令の複合マルチサイクル動作９１の最後部パイプライン動作９４のクロックサイクル数と、後続命令の複合マルチサイクル動作９５の先頭部のパイプライン動作９６のクロックサイクル数との和とすることが好適であるが、これより少なくても良い。
【００４５】
複合マルチサイクル動作を行う先行命令が発行されたことにより、発行抑止信号設定部３８は、先行命令のサイクルＰで発行抑止信号に１をセットする。これにより、次のクロックサイクルで発行抑止信号が１となる。発行抑止信号が１となることにより、後続命令のマルチサイクル演算命令に対して発行抑止がかかる。すなわち、発行条件を満たさなくなり、命令発行制御部２６は、命令を発行しなくなる。また、既に発行されている可能性のある次のクロックサイクルでサイクルＰとなるマルチサイクル演算命令に対してはキャンセル処理が行われる。キャンセルにより命令は無効となる。発行抑止信号を１にすることにより、同一の演算回路に対して複数の命令による演算処理が競合することが防がれる。
【００４６】
複合マルチサイクル動作を行う先行命令が発行された後、演算器２８は、サイクルＢ１及びＢ２でレジスタなどからオペランドデータを受け取り、サイクルＸ１からオペランドデータを用いて演算を開始する。先行命令のサイクルＸ１では、命令の情報（有効フラグ、命令種、命令タグ、結果を書き込むレジスタなどを含む）が命令情報１のラッチにセットされる。命令の情報は、演算処理が行われている間保持される。
【００４７】
演算の終了時点をサイクルＸｎと表記するが、演算開始時点ではｎの値は未定である。マルチサイクル演算命令は、演算開始から演算終了までのサイクル数（演算レイテンシ）が発行の時点では不定な命令である。演算命令の種類や、演算データのパターンにより演算レイテンシは変化する。演算レイテンシは、演算器制御回路２７により決定される。マルチサイクル演算命令の場合、演算器制御回路２７は、演算終了のｋ＋ｍサイクル前の実行サイクルＸｎ−ｋ−ｍまでに実行サイクル数ｎを確定することができる。命令発行制御部２６は、先行命令の演算終了のｋ＋ｍサイクル前の実行サイクルＸｎ−ｋ−ｍに演算終了予告信号が演算器制御回路２７から通知され、演算終了サイクルＸｎの時刻が確定する。発行抑止信号設定部３８は、命令情報１を保持しているラッチの有効フラグが、命令が有効であると示していて、命令種が複合マルチサイクル動作の命令であることを示しており、かつ、命令の状態が実行サイクルＸｎ−ｐ−ｍとなっている場合、発行抑止信号を０にリセットする。
【００４８】
その後、例えば、複合マルチサイクル動作を行う先行命令がサイクルＸｎ−ｐ−ｍ＋２に、複合マルチサイクル動作を行う後続命令が発行される。命令情報１を保持しているラッチの有効フラグが、命令が有効であると示していて、かつ、命令の状態がサイクルＸｎ−ｍとなっているとき、命令情報１を保持しているラッチの内容が、命令情報２を保持しているラッチへ移動する。これにより、命令情報１を保持しているラッチに新たに後続命令の情報を保持することが可能となる。この命令情報の移動のタイミングは、サイクルＸｎ−ｍであることが好適である。サイクルＸｎ−ｍではない構成も可能であるが、ｎのとれる値の範囲が狭まり、演算レイテンシｎの最小値の制約が大きくなる。または、オーバーラップ量ｍが小さくなる。
【００４９】
命令情報の移動タイミングをサイクルＸｎ−ｍ’とした場合、具体的なデメリットは、複合マルチサイクル動作を行う先行命令と複合マルチサイクル動作を行う後続命令とについて、命令情報２のラッチの情報が保持されている期間について注目すると、ｍ’≦ｎ−ｍ、つまり、ｍ＋ｍ’≦ｎとなることである。したがって、ｎのとれる値の最小値が大きくなる、又は、オーバーラップ量ｍが小さくなる。
【００５０】
なお、命令情報１のラッチについて注目すると、ｎ−ｍ’≦ｎ−ｍ、つまり、ｍ≦ｍ’である。以上より、ｍ＝ｍ’となることが好適である。
【００５１】
複合マルチサイクル動作を行う後続命令のサイクルＸ１では、複合マルチサイクル動作を行う先行命令と同様に、命令情報１がラッチにセットされる。命令情報１は、複合マルチサイクル演算を行っている間保持される。先行命令がサイクルＸｎになると演算処理は終了し、命令情報２を保持しているラッチの内容は、図示されていない後続の命令処理段階に対応するラッチへ移動する。
【００５２】
複合マルチサイクル動作を行う先行命令のサイクルＸｎ−ｍ＋１からサイクルＸｎまでの間のｍクロックサイクルは、複合マルチサイクル動作を行う後続命令の演算処理（サイクルＸ１以降のｍサイクル）とオーバーラップして実行されており、演算器２８のスループットが向上している。例えば、複合マルチサイクル動作を用いる命令を連続して実行する場合のスループットはｎ／（ｎ−ｍ）倍となる。
【００５３】
次に、後続命令が複合マルチサイクル動作を用いる命令の場合を説明する。後続命令がマルチサイクル演算命令の場合、演算終了のｋ＋ｍサイクル前までに演算レイテンシが確定し、命令発行制御部２６は、サイクルＸｎ−ｋ−ｍサイクルで演算器制御回路２７より演算終了予告信号が通知される。発行抑止信号設定部３８は、命令情報１を保持しているラッチの有効フラグが、命令が有効であると示していて、命令種が複合マルチサイクル動作を用いる命令であることを示しており、かつ、命令の状態がサイクルＸｎ−ｐ−ｍとなっているとき、発行抑止信号を０にリセットする。ここで、先行命令のサイクルＸｎと後続命令のサイクルＸｎ−ｐ−ｍとの間の時刻の前後関係は不定である。
【００５４】
命令情報１を保持しているラッチの有効フラグが、命令が有効であると示していて、命令の状態がサイクルＸｎ−ｍとなっているとき、命令情報１を保持しているラッチの内容が、命令情報２を保持しているラッチへ移動する。先行命令の情報は、命令情報２を保持しているラッチから既に移動しており、衝突しない。ここでは、命令情報１及び２のラッチを持つ場合、ｍ＜＝ｎ−ｍという制約を仮定している。
【００５５】
図１６は、先行命令が複合マルチサイクル動作であり、後続命令が純粋マルチサイクル動作である場合を示す図である。先行命令の複合マルチサイクル動作は、図１５の先行命令と同じである。後続命令の純粋マルチサイクル動作は、図８の純粋マルチサイクル動作８１と同じであり、複数の第２のステージングラッチ５１を有し、複数の第２のステージングラッチ５１間におけるデータの遷移に複数のクロックを必要とするとともに、複数の第２のステージングラッチ５１間にそれぞれ位置する回路５２を、他の命令の実行で使用する演算器２８の回路とは共有しない非共有マルチサイクル動作である。図１６のタイミングチャートは、図１５のタイミングチャートに対して、後続命令のサイクルＸｎ−ｋ−ｍまでは同じである。以下、図１６が図１５と異なる点を説明する。
【００５６】
後続命令（純粋マルチサイクル動作）は、複合マルチサイクル動作を行う先行命令のサイクルＸｎ−ｐ−ｍ＋２のタイミングで発行される。図１６では、図１５に対して、後続命令の状態に起因する発行抑止信号のリセットのタイミングが変わっている。発行抑止信号設定部３８は、命令情報２を保持しているラッチの有効フラグが、保持された命令が有効であると示していて、命令種が純粋マルチサイクル動作の命令であることを示しており、かつ、命令の状態がサイクルＸｎ−ｐとなっているとき、発行抑止信号を０にリセットする。
【００５７】
この場合も、複合マルチサイクル動作を行う先行命令のサイクルＸｎ−ｍ＋１からサイクルＸｎまでの間のｍクロックサイクルは、後続命令の演算処理（サイクルＸ１以降のｍサイクル）とオーバーラップして実行されており、演算器２８のスループットが向上している。
【００５８】
図１７は、図１２に対応し、先行命令が複合マルチサイクル動作１０１であり、後続命令が共有完全パイプライン動作１０５である場合を示す図である。図１７のタイミングチャートは、図１５のタイミングチャートに対して、先行命令のサイクルＸｎ−ｐ−ｍまでは同じである。以下、図１７が図１５と異なる点を説明する。
【００５９】
後続命令（共有完全パイプライン動作）は、複合マルチサイクル動作を行う先行命令のサイクルＸｎ−ｐ−ｍ＋２のタイミングで発行される。先行命令のサイクルＸｎ−ｐ−ｍ＋２サイクルのタイミング以降では、発行抑止信号が０であることにより、後続命令が発行抑止されなくなる。これは、先行命令と後続命令とで演算器２８内の演算回路が競合しなくなったためである。これにより、後続命令は、抑止されずに、パイプライン動作を実行する。
【００６０】
この場合も、複合マルチサイクル動作を行う先行命令のサイクルＸｎ−ｍ＋１からサイクルＸｎまでの間のｍクロックサイクルは、共有完全パイプライン動作を行う後続命令の演算処理（サイクルＸ１以降のｍサイクル）とオーバーラップして実行されており、演算器２８のスループットが向上している。
【００６１】
図１５〜図１７では、命令発行制御部（命令制御部）２６は、最終に行うパイプライン動作及びその前に行うマルチサイクル動作を含む複合マルチサイクル動作の先行命令（第１の命令）と、後続命令（第２の命令）とを入力する。そして、命令発行制御部２６は、先行命令の実行と後続命令の実行とが一部重複するように、先行命令を演算器（命令実行部）２８に発行するとともに、後続命令を演算器（命令実行部）２８に発行する。
【００６２】
図１５では、後続命令は、最初に行うパイプライン動作及びその後に行うマルチサイクル動作を含む複合マルチサイクル動作の命令である。図１６では、後続命令は、非共有のマルチサイクル動作の命令である。図１７では、後続命令は、最初に行う非共有のパイプライン動作及びその後に行う共有のパイプライン動作を含む共有完全パイプライン動作の命令である。発行抑止信号設定部３８は、発行抑止信号のリセットタイミングを命令種によって切り替える。
【００６３】
命令発行制御部２６は、先行命令のマルチサイクル動作が後続命令と資源を共有する期間では後続命令の発行を抑止する。先行命令の最終に行うパイプライン動作は、後続命令の動作とオーバーラップするように発行される。より好ましくは、先行命令の最終に行うパイプライン動作及びその前に行うマルチサイクル動作は、後続命令の動作とオーバーラップするように発行される。これにより、スループットを向上させることができる。
【００６４】
命令発行制御部２６は、先行命令を実行する場合、ステージングラッチ５１間に位置するいずれかの回路５２が、後続命令を実行することによりステージングラッチ５１間に位置する回路と共有されるときは、後続命令の演算器２８への発行を抑止する。
【００６５】
また、命令発行制御部２６は、先行命令の実行における最後のパイプライン動作と、後続命令の実行とが一部重複するように、先行命令及び後続命令を演算器２８に発行する。また、命令発行制御部２６は、先行命令の実行における最後のパイプライン動作又はその前のマルチサイクル動作と、後続命令の実行とが一部重複するように、先行命令及び後続命令を演算器２８に発行する。
【００６６】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００６７】
１１  プロセッサ
２１  命令フェッチ部
２２  分岐予測回路
２３  一次命令キャッシュメモリ
２４  命令バッファ
２５  命令デコーダ
２６  命令発行制御部
２７  演算器制御回路
２８  演算器
２９  一次オペランドキャッシュメモリ
３０  分岐制御部
３１  レジスタ
３２  命令完了制御部
３３  分岐履歴更新部
３４  二次キャッシュメモリ
３５  メモリコントローラ
３６  取出し可能命令検出部
３７  ポート調停部
３８  発行抑止信号設定部
３９  エントリ本体
【図１】
2015036922.tif 000003
【図２】
2015036922.tif 000004
【図３】
2015036922.tif 000005
【図４】
2015036922.tif 000006
【図５】
2015036922.tif 000007
【図６】
2015036922.tif 000008
【図７】
2015036922.tif 000009
【図８】
2015036922.tif 000010
【図９】
2015036922.tif 000011
【図１０】
2015036922.tif 000012
【図１１】
2015036922.tif 000013
【図１２】
2015036922.tif 000014
【図１３】
2015036922.tif 000015
【図１４】
2015036922.tif 000016
【図１５】
2015036922.tif 000017
【図１６】
2015036922.tif 000018
【図１７】
2015036922.tif 000019