(57)【特許請求の範囲】
【請求項１】
入力される第１の命令を実行する第１のパイプライン部と、
入力される第２の命令を実行する第２のパイプライン部と、
前記第１のパイプライン部が前記第１の命令を完了できない場合又は前記第２のパイプライン部が前記第２の命令を完了できない場合に、完了できない前記第１の命令又は前記第２の命令を登録する登録部と、
前記第１のパイプライン部と第２のパイプライン部とのうち、負荷が低いパイプライン部を決定する決定部と、
前記登録部に登録された命令を、前記決定部が決定したパイプライン部に入力する入力部とを有し、
前記第１のパイプライン部は、第１の実行ステージで第１の処理を実行する第１の処理手段と、前記第１の実行ステージの後段の第２の実行ステージで第２の処理を実行する第２の処理手段とを有し、
前記第２のパイプライン部は、第３の実行ステージで第３の処理を実行する第３の処理手段と、前記第３の実行ステージの後段の第４の実行ステージで第４の処理を実行する第４の処理手段とを有し、
前記決定部は、前記第１の処理手段及び第２の処理手段がともに使用中であり且つ前記第３の処理手段及び第４の処理手段がともに不使用の場合に、前記第２のパイプライン部を決定し、
前記第３の処理手段及び第４の処理手段がともに使用中であり且つ前記第１の処理手段及び第２の処理手段がともに不使用の場合に、前記第１のパイプライン部を決定することを特徴とする演算処理装置。
【請求項２】
前記演算処理装置において、
前記決定部は、
前記登録部に登録された命令が、前記第１のパイプライン部又は前記第２のパイプライン部に入力されてから前記登録部に登録されるまでの間に、前記負荷が低いパイプライン部を決定することを特徴とする請求項１記載の演算処理装置。
【請求項３】
命令を格納する記憶装置と、前記記憶装置に接続された演算処理装置とを有する情報処理装置において、
前記演算処理装置は、
入力される第１の命令を実行する第１のパイプライン部と、
入力される第２の命令を実行する第２のパイプライン部と、
前記第１のパイプライン部が前記第１の命令を完了できない場合又は前記第２のパイプライン部が前記第２の命令を完了できない場合に、完了できない前記第１の命令又は前記第２の命令を登録する登録部と、
前記第１のパイプライン部と第２のパイプライン部とのうち、負荷が低いパイプライン部を決定する決定部と、
前記登録部に登録された命令を、前記決定部が決定したパイプライン部に入力する入力部とを有し、
前記第１のパイプライン部は、第１の実行ステージで第１の処理を実行する第１の処理手段と、前記第１の実行ステージの後段の第２の実行ステージで第２の処理を実行する第２の処理手段とを有し、
前記第２のパイプライン部は、第３の実行ステージで第３の処理を実行する第３の処理手段と、前記第３の実行ステージの後段の第４の実行ステージで第４の処理を実行する第４の処理手段とを有し、
前記決定部は、前記第１の処理手段及び第２の処理手段がともに使用中であり且つ前記第３の処理手段及び第４の処理手段がともに不使用の場合に、前記第２のパイプライン部を決定し、
前記第３の処理手段及び第４の処理手段がともに使用中であり且つ前記第１の処理手段及び第２の処理手段がともに不使用の場合に、前記第１のパイプライン部を決定することを特徴とする情報処理装置。
【請求項４】
前記情報処理装置において、
前記決定部は、
前記登録部に登録された命令が、前記第１のパイプライン部又は前記第２のパイプライン部に入力されてから前記登録部に登録されるまでの間に、前記負荷が低いパイプライン部を決定することを特徴とする請求項３記載の情報処理装置。
【請求項５】
第１のパイプライン部が第１の命令を実行するステップと、
第２のパイプライン部が第２の命令を実行するステップと、
登録部が、前記第１のパイプライン部が前記第１の命令を完了できない場合又は前記第２のパイプライン部が前記第２の命令を完了できない場合に完了できない前記第１の命令又は前記第２の命令を登録するステップと、
決定部が、前記第１のパイプライン部と第２のパイプライン部とのうち、負荷が低いパイプライン部を決定するステップと、
入力部が、前記登録部に登録された命令を、前記決定部が決定したパイプライン部に入力するステップとを有し、
前記第１のパイプライン部は、第１の実行ステージで第１の処理を実行する第１の処理手段と、前記第１の実行ステージの後段の第２の実行ステージで第２の処理を実行する第２の処理手段とを有し、
前記第２のパイプライン部は、第３の実行ステージで第３の処理を実行する第３の処理手段と、前記第３の実行ステージの後段の第４の実行ステージで第４の処理を実行する第４の処理手段とを有し、
前記決定するステップは、前記第１の処理手段及び第２の処理手段がともに使用中であり且つ前記第３の処理手段及び第４の処理手段がともに不使用の場合に、前記第２のパイプライン部を決定し、
前記第３の処理手段及び第４の処理手段がともに使用中であり且つ前記第１の処理手段及び第２の処理手段がともに不使用の場合に、前記第１のパイプライン部を決定することを特徴とする演算処理装置のパイプライン制御方法。
【請求項６】
前記演算処理装置のパイプライン制御方法において、
前記決定するステップは、
前記登録部に登録された命令が、前記第１のパイプライン部又は前記第２のパイプライン部に入力されてから前記登録部に登録されるまでの間に、前記負荷が低いパイプライン部を決定するステップを有することを特徴とする請求項５記載の演算処理装置のパイプライン制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願発明は、演算処理装置、情報処理装置及び演算処理装置のパイプライン制御方法に関する。
【背景技術】
【０００２】
例えば以下の技術が知られている。４本の命令パイプラインを有する演算処理装置としてのスーパースカラプロセッサにおいて、リオーダバッファは、命令フェッチ部が主記憶装置から実質的に同時に取り出した４つの命令に関する情報を管理する。取り出された４つの命令は、命令デコード部で同時にデコードされ、命令発行制御部の調停の下、４つのＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃａｌ  Ｕｎｉｔ：算術論理ユニット）で並行して実行される。ここで、例えば、一のＡＬＵにハードウェア障害が発生すると、障害履歴フラグがセットされる。命令発行制御部は、リオーダバッファで管理されている障害が発生した命令に関する情報に従って、障害の発生のない他の３つのＡＬＵを用いて当該命令を再実行させるよう命令フェッチ部、命令デコード部、４つのＡＬＵをそれぞれ制御する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０００−３３９１８５号公報
【特許文献２】特開２００７−２６３９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
複数のパイプライン部を有する演算処理装置において何れかのパイプライン部で命令を完了できない場合に当該命令を登録しておき、当該命令を負荷の低いパイプラインに入力する制御では、登録された複数の候補から一の命令を選択する際に処理時間を要していた。
【課題を解決するための手段】
【０００５】
演算処理装置は、入力される第１の命令を実行する第１のパイプライン部と、入力される第２の命令を実行する第２のパイプライン部とを有する。演算処理装置は更に、第１のパイプライン部が第１の命令を完了できない場合又は第２のパイプライン部が第２の命令を完了できない場合に、完了できない第１の命令又は第２の命令を登録する登録部を有する。演算処理装置は更に、第１のパイプライン部と第２のパイプライン部とのうち、負荷が低いパイプライン部を決定する決定部と、登録部に登録された命令を、決定部が決定したパイプライン部に入力する入力部を有する。第１のパイプライン部は、第１の実行ステージで第１の処理を実行する第１の処理手段と、第１の実行ステージの後段の第２の実行ステージで第２の処理を実行する第２の処理手段とを有し、第２のパイプライン部は、第３の実行ステージで第３の処理を実行する第３の処理手段と、第３の実行ステージの後段の第４の実行ステージで第４の処理を実行する第４の処理手段とを有し、決定部は、第１の処理手段及び第２の処理手段がともに使用中であり且つ前記第３の処理手段及び第４の処理手段がともに不使用の場合に、前記第２のパイプライン部を決定し、第３の処理手段及び第４の処理手段がともに使用中であり且つ第１の処理手段及び第２の処理手段がともに不使用の場合に、第１のパイプライン部を決定する。
【発明の効果】
【０００６】
演算処理装置は、第１のパイプライン部と第２のパイプライン部とのうち負荷が低いパイプライン部を決定する決定部と、登録部に登録された命令を、決定部が決定したパイプライン部に入力する入力部を有する。このため、効率的に複数のパイプライン部の間で負荷分散を図ることができる。
【図面の簡単な説明】
【０００７】
【図１】プロセッサの構成例を示すブロック図である。
【図２】プロセッサの他の構成例を示すブロック図である。
【図３】実施例１によるプロセッサの構成例を示すブロック図である。
【図４】実施例２によるプロセッサの構成例を示すブロック図である。
【図５】図３又は図４に示される再投入パイプライン決定部の構成例を示す図である。
【図６】実施例１又は実施例２によるプロセッサの制御の流れの一例を示すフローチャートである。
【図７】図６に示される再投入パイプライン決定動作の詳細の一例を示すフローチャートである。
【図８】プロセッサにおける一例の処理の様子を示す図である。
【図９】実施例１又は実施例２によるプロセッサにおける一例の処理の様子を示す図である。
【図１０】実施例３によるプロセッサの構成例を示すブロック図である。
【図１１】実施例４によるコンピュータの構成例を示すブロック図である。
【発明を実施するための形態】
【０００８】
まず、複数のステージを備えるパイプライン部を有する演算処理装置としてのマイクロプロセッサの構成例につき説明する。当該マイクロプロセッサは、新規処理要求に係る命令（以下「処理要求に係る命令」を単に「命令」と称する）を発行する命令フェッチ部および命令発行部を備え、更にパイプライン部の各種回路リソース状態を管理するリソース管理ユニットを備える。更に、パイプライン部に投入されたが各種リソース状態によって処理が完了できずにアボートした命令を保持する再投入待ちポート部を備える。アボートとは当該命令の実行が停止（中断）状態となることを示す（以下同様）。更に、パイプライン投入命令選択部を備え、パイプライン投入命令選択部は、命令発行部からの新規命令、あるいはアボート要因が解消して再投入可能な再投入待ちポート部の複数の命令の中から一つの命令を選択してパイプライン部に投入する。一般的に、このパイプライン投入命令選択部は、複数の候補から優先度制御を行い一つの命令を選択するため処理時間が要される。
【０００９】
これに対し実施例によれば、パイプライン部に投入された命令が当該パイプライン部でアボートして待ちポート部に登録される際に、当該命令がアボートした時点において負荷が低いパイプライン部を選択する。そして、当該選択されたパイプライン部を、当該命令に対応する付加情報として待ちポート部に記憶しておき、当該命令のアボート要因が解消されてパイプライン部に再投入する際には当該記憶しておいたパイプライン部に再投入する。その結果、複数のパイプライン部の間の負荷分散を行なうことができる。また、アボートした時点で当該命令を再投入するパイプライン部を予め選択しておくため、パイプライン部へ再投入する際に処理時間をかけずに、効率的に負荷分散を図ることができる。
【００１０】
実施例による演算処理装置としてのプロセッサは、同一の命令処理機能を有する第１及び第２のパイプライン部としての複数のパイプライン部を備える。パイプライン部は、各ステージ毎に投入された命令の処理を行う複数の命令実行ステージを有する。ここで、プロセッサとはＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ），ＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）及びＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）等を含む。当該プロセッサでは、パイプライン部の外部から新規の命令を受けてから完了応答までの間に当該命令がアボートする要因が存在すると、当該命令は複数回パイプライン部に再投入される。ここで投入とは入力を意味し、再投入とは再度の入力を意味する（以下同様）。ここで特定のパイプライン部に負荷が連続して偏っている状況で、ある命令がパイプライン部に投入されてアボート要因が存在して当該命令がアボートし、当該命令のアボート要因が解消した時点で当該命令を再投入する場合を想定する。この場合、上記負荷が連続して偏っているパイプライン部とは異なるパイプライン部を、当該命令を再投入するパイプライン部として予め決定する。予め決定とは、当該命令をパイプライン部に再投入する時点で決定するのではなく、上記アボート要因が存在してアボートした当該命令に係る実行サイクル（又は実行ステージ、以下同様）の間に決定することを意味する。その結果、当該処理のアボート要因が解消して当該命令をパイプライン部に再投入する際には、性能オーバーヘッドなしにパイプライン部の間の負荷を分散させることができる。ここで「性能オーバーヘッドがない」というのは、パイプライン部の間の負荷分散を行なわない従来手法に比べて、本実施例に係るパイプライン負荷分散を行なった場合に、パイプライン部へ投入する命令を選択してパイプライン部へ投入するのに必要な処理時間が、従来手法と変わらないことを意味する。
【００１１】
ここで演算処理装置としてのプロセッサでは、複数のパイプライン部を設け複数の命令を同時実行し、又、各パイプライン部はアウトオブオーダ（Ｏｕｔ−ｏｆ−Ｏｒｄｅｒ）処理により、実行可能な命令から順次処理していくことで性能向上を図る場合がある。アウトオブオーダ処理とは、依存関係にない複数の命令を、プログラム中での出現順序に関係なく実行する処理を言う。ここで、特にパイプライン部の外部からの命令の投入から応答がなされるまでの処理が必ず固定レイテンシで完了する構成、あるいは処理内容が異なるパイプライン部を有する構成の場合を想定する。このような場合、パイプライン部の間の負荷分散を考慮する必要はなく、命令を実行可能な複数のパイプライン部に複数の命令をそれぞれ同時に投入すれば良い。他方同一処理を行なうパイプライン部を複数有し、パイプライン部の外部からの命令の投入から応答がなされるまでの処理のレイテンシが、パイプライン部の動的な状態によって異なる可変レイテンシの構成では、投入するパイプライン部の選択によって複数のパイプライン部の間で負荷の偏りが生じ得る。
【００１２】
パイプライン部の外部からの命令の投入から応答がなされるまでの処理が固定レイテンシでない例として、例えば主記憶装置としてのメインメモリと複数のキャッシュメモリを有するキャッシュ階層を備えるプロセッサにおけるメモリアクセス処理が挙げられる。この場合、プロセッサの命令発行部からパイプライン部に投入されるメモリアクセス命令に対し、当該命令がアボートする要因が複数存在し得る。当該命令がアボートする要因とは、キャッシュヒット／ミスの状態、TLB（Translation Look-aside Buffer）ヒット／ミスの状態、先行するメモリアクセス命令に係る状態等である。又、当該命令のアボート要因が解消するまでに要する時間も、パイプライン部の動的な状態に依存して変化し得る。このようなプロセッサでは、アボート要因が解消された命令からパイプライン部に再投入され、全てのアボート要因が解消し、当該命令が実行された際に、パイプライン部が当該命令に対する応答を返す。
【００１３】
図１は、上述した如くの、アボート要因によりアボートした命令をパイプライン部へ再投入する動作を行うプロセッサの構成例を示す。当該プロセッサでは、パイプライン部の外部から新規の命令を受ける新規命令発行部１１０から、パイプライン投入命令選択部１１１，１１２を介し、２つのパイプライン部１２１，１２２のいずれかに新規の命令が投入される。その結果、当該命令にアボート要因がなければ、当該命令をパイプライン部が実行および完了し、実行が完了するとパイプライン部は処理完了応答を行う。他方パイプライン部１２１，１２２に当該命令のアボート要因が存在する場合、パイプライン部１２１，１２２は当該アボート要因によってアボートした命令を待ちポート部１３１，１３２に登録する。又、このように「アボートした命令を登録する」とは、上記の如く命令がアボート要因によってアボートした際、再投入待ちとなる当該命令に関連する一連の情報を記憶するとともに、アボート要因が解消するまで当該命令をパイプライン部に再投入せずに当該命令を中断することを意味する。その後、待ちポート部１３１，１３２に登録された命令のうち、パイプライン部１２１，１２２の当該命令に対するアボート要因が解消した命令の中から、再投入命令選択部１４１，１４１の各々が命令を選択し、選択した命令を、パイプライン投入命令選択部１１１，１１２を介し、パイプライン部１２１，１２２に再投入する。
【００１４】
ここで図１の構成例では、制御を簡単にするため、プロセッサが、待ちポート部１３１，１３２、再投入命令選択部１４１，１４２を、パイプライン部１２１，１２２ごとにそれぞれ独立に備えるものとした。このため、パイプライン部の外部からの新規の命令の投入先が特定のパイプライン部に偏っていた場合、再投入の段階でも当該偏った状態が維持される。その結果動的に負荷分散を行なうことができない。
【００１５】
図２は、複数のパイプライン部の間で動的に負荷分散を図るプロセッサの構成例を示す。図２の構成例では、図１の構成例と異なり、待ちポート部１３０、再投入命令選択部１４０は２つのパイプライン部１２１，１２２の間で共通とされており、待ちポート部１３０の資源有効活用も可能となる。この構成例では、再投入命令選択部１４０による制御によって負荷分散を図ることができる。すなわち、再投入命令選択部１４０がパイプライン部１２１，１２２の負荷の状況に応じ、負荷の小さい側のパイプライン部に優先的に命令を再投入することにより、パイプライン部１２１，１２２の間の負荷分散を図り得る。しかしながら図２の構成例の場合、再投入命令選択部１４０が実行する処理量が多く、性能オーバーヘッドが大きいという問題点が想定される。すなわち再投入命令選択部１４０は待ちポート部１３０が有する多数のエントリから命令を選択する際に、パイプライン部１２１，１２２の間の負荷分散を考慮して再投入を行う命令および再投入を行うパイプラインを選択するため、処理量が多い。
【００１６】
また、プロセッサ以外の負荷分散方式として、例えばネットワーク機器などでは、パケットのヘッダの内容を解析して処理時間を見積り、負荷分散をすることが知られている。しかしながらプロセッサのパイプライン部で解析可能な情報は命令には付加されていないため、プロセッサのパイプライン部の間の負荷分散は、動的なパイプライン部の挙動に基づいて行うことが望ましい。
【００１７】
論理的には、パイプライン部１２１，１２２に命令を投入する時点で動的に負荷分散を行うことにより、パイプライン部の間で負荷が均等な理想的な状態で動作させることが可能である。具体的には、パイプライン部の外部からの新規な命令をパイプライン部１２１，１２２に投入する新規命令発行部１１０による負荷分散を行う第１の方法が考えられる。更に、パイプライン部１２１，１２２のアボート要因によりアボートした命令をパイプライン部１２１，１２２に再投入する再投入命令選択部１４１，１４２又は１４０による負荷分散を行う第２の方法も考えられる。しかしながら第１の方法の場合、新規命令発行部１１０が命令を投入するパイプライン部を動的に切り替えるため、新規命令発行部１１０による命令の発行動作に性能オーバーヘッドを伴う。更に新規命令発行部１１０がパイプライン部１２１，１２２の外部からパイプライン部１２１，１２２の使用状況をそれぞれ観測して制御を行うため、比較的粗い負荷分散制御となり、リアルタイムな細粒度の制御が行えない場合が想定される。又、上記第２の方法では、再投入命令選択部１４１，１４２又は１４０が待ちポート部１３１，１３２又は１３０の複数のエントリから再投入可能な複数の命令を選択し、更に再投入するパイプライン部を動的に決定する。このため命令を再投入する動作に性能オーバーヘッドが生ずる。このように、新規の命令の発行時あるいは命令のパイプライン部への再投入時、動的なパイプライン使用状況に応じてパイプライン部の間で負荷を分散することは理論的には可能である。しかしながら現実的には性能面、制御の複雑さ、ハードウェアの実現性の面等における問題点が想定される。特に、新規命令発行部１１０及び再投入命令選択部１４１，１４２又は１４０は高性能であることが求められる。このため、パイプライン部１２１，１２２の間の負荷分散を考慮しない、比較的単純な制御であっても、新規命令発行部１１０、あるいは再投入命令選択部１４１，１４２又は１４０の動作の高速化は困難と考えられる。したがってパイプライン部１２１，１２２の間の負荷分散の場合における性能オーバーヘッドを許容できない場合が多いと考えられる。
【００１８】
実施例によれば、パイプライン部の間の負荷分散を行なうために、パイプライン部がある命令を実行している間に、当該命令を実行した結果、アボート要因の存在によりアボートした場合に当該命令を再投入するパイプライン部を決定する。すなわち実施例では、当該命令がアボートした時、最近のパイプライン部の使用状況に基づいてパイプライン部の間の負荷の偏りを検出した場合、負荷の低い側のパイプライン部を、当該命令の再投入先として決定する。命令の再投入時にどのパイプライン部を使用するかを示す情報は、後述するように、例えば待ち合わせポート部が命令毎の情報として保持する。
【００１９】
実施例では、命令を再投入するパイプライン部を決定する際、当該命令がアボートした時の最近の新規の命令あるいはパイプライン部の使用率の状況を参照することができる。例えば、パイプライン部が有するパイプライン段の段数の範囲で直近の状況からパイプライン部の負荷の状況を判断（より具体的にはパイプライン部の間の負荷の偏りを検出）することができる。そのために、パイプライン部が実行中の命令に関する制御情報を流用することができ、その場合にはハードウェア資源の追加はほとんど必要ない。あるいはパイプライン部が有するパイプライン段の段数の範囲を超え、過去にさかのぼった履歴からパイプライン部の使用状況を判断することもできる。この場合、別途パイプライン部の使用状況を記録する履歴テーブルを用意して利用することにより、より大局的な観点から負荷分散を行なうことが可能になる。
【００２０】
図３は実施例１による演算処理装置としてのプロセッサの構成を示す。図３のプロセッサは、与えられた命令に応じてデータ処理を実行する第１及び第２のパイプライン部としてのパイプライン部２１，２２と、パイプライン部２１，２２の外部から与えられる新規な命令をパイプライン部２１，２２に投入する新規命令発行部１０とを有する。新規命令発行部１０は、例えば新規命令の要求元にしたがって命令を投入すべきパイプライン部を決定したり、あるいは同時発行する新規命令の数にしたがって命令を投入すべきパイプライン部を決定する。当該プロセッサは更に、パイプライン投入命令選択部１１，１２を有する。パイプライン投入命令選択部１１は新規命令発行部１０から入力された命令と、再投入命令選択部４１から入力された命令とのうち、何れかを選択しパイプライン投入命令選択部１１を介してパイプライン部２１に投入する。同様にパイプライン投入命令選択部１２は新規命令発行部１０から入力された命令と、再投入命令選択部４２から入力された命令とのうち、何れかを選択しパイプライン投入命令選択部１１を介してパイプライン部２１に投入する。ここで一例として、パイプライン投入命令選択部１１、１２は新規の命令よりも、アボート要因の解消によって再投入される命令の方を優先し、再投入される命令がない場合にのみ新規の命令をパイプライン部２１，２２に投入するようにすることができる。但しこれはあくまで一例であり、パイプライン投入命令選択部１１、１２による命令の選択方法は当該方法に限定されることはない。
【００２１】
パイプライン部２１は、第１の処理手段としてのパイプライン段（パイプラインステージ）２１−１（１段目），第の処理手段としてのパイプライン段２１−２（２段目），及びパイプライン段２１−３（３段目）を有する。新規命令発行部１０からパイプライン部２１に投入された命令は、一の実行サイクルでパイプライン段２１−１に実行され、次の実行サイクルでパイプライン段２１−２に実行され、更に次の実行サイクルでパイプライン段２１−３（３段目）に実行される。そして更に次の実行サイクルで当該命令の実行結果がパイプライン段２１−３から出力される。各パイプライン段２１−１，２１−２，２１−３が実行する処理内容の例につき、図１０とともに後述する。
【００２２】
同様にパイプライン部２２は、第３の処理手段としてのパイプライン段２２−１（１段目），第４の処理手段としてのパイプライン段２２−２（２段目），及びパイプライン段２２−３（３段目）を有する。新規命令発行部１０からパイプライン部２２に投入された命令は、一の実行サイクルでパイプライン段２２−１に実行され、次の実行サイクルでパイプライン段２２−２に実行され、更に次の実行サイクルでパイプライン段２２−３（３段目）に実行される。そして更に次の実行サイクルで当該命令の実行結果がパイプライン段２２−３から出力される。パイプライン段２２−１，２２−２，２２−３は、夫々上記パイプライン段２１−１，２１−２，２１−３と同様の構成を有する。したがって命令をパイプライン部２１，２２のいずれに投入しても同様の実行結果を得ることができる。
【００２３】
上記パイプライン段２１−１，２１−２，２１−３、及びパイプライン段２２−１，２２−２，２２−３の各々は図示の如く有効ビットvalid bitを有する。有効ビットvalid bitは、当該パイプライン段が使用中か否かを示す情報であり、使用中の場合は値“１”を有し、不使用の場合は値“０”を有する。又、上記パイプライン段２１−２（２段目），２１−３（３段目），パイプライン段２２−２（２段目），２２−３（３段目）は、各々、再投入パイプラインＩＤ（pipeline-ID）を有する。再投入パイプラインＩＤは、当該パイプライン段で実行中の命令の最終段２１−３又は２２−３での実行結果でアボート要因が存在した場合に、後に当該命令のアボート要因が解消してパイプライン再投入する際のパイプライン部を示す情報であり、値“０”がパイプライン部２１を示し、値“１”がパイプライン部２２を示す。
【００２４】
実施例１のプロセッサは更に、パイプライン段２１−１（１段目）及びパイプライン段２２−１（１段目）で実行中の命令がアボートしてパイプライン部に再投入される際の、上記、再投入パイプラインＩＤを決定する、決定部としての再投入パイプライン決定部５０を有する。再投入パイプライン決定部５０は決定した再投入先のパイプライン部を示す情報を、パイプライン段２１−２（２段目）及びパイプライン段２２−２（２段目）に、上記再投入パイプラインＩＤとして設定する。パイプライン段２１−２に設定された再投入パイプラインＩＤは、パイプライン部２１の実行サイクルに同期して、パイプライン段２１−２で実行中の命令とともに次のパイプライン段２１−３に伝達される。同様にパイプライン段２２−２に設定された再投入パイプラインＩＤは、パイプライン部２２の実行サイクルに同期して、パイプライン段２２−２で実行中の命令とともに次のパイプライン段２２−３に伝達される。
【００２５】
実施例１のプロセッサは更に、アボートした命令を保持しておく、登録部としての待ちポート部３１，３２を有し、上記の如く再投入パイプライン決定部５０により決定されたアボートした命令の再投入先のパイプライン部の別に応じて待ちポート部３１或いは３２に当該命令を登録する。再投入パイプライン決定部５０が再投入先のパイプライン部としてパイプライン部２１を決定した場合、パイプライン部２１又は２２から出力される当該命令は待ちポート部３１に登録される。他方、再投入パイプライン決定部５０が再投入先のパイプライン部としてパイプライン部２２を決定した場合、パイプライン部２１又は２２から出力される当該命令は待ちポート部３２に登録される。より具体的には、上記の如く再投入パイプライン決定部５０によってパイプライン段２１−２に設定され、次のサイクルに命令とともにパイプライン段２１−３に伝達された再投入パイプラインＩＤがパイプライン部２１を示す場合、パイプライン段２１−３で当該命令がアボートしたら待ちポート部３１に登録される。他方、上記の如く再投入パイプライン決定部５０によってパイプライン段２１−２に設定され、次のサイクルに命令とともにパイプライン段２１−３に伝達された再投入パイプラインＩＤがパイプライン部２２を示す場合、パイプライン段２１−３で当該命令がアボートしたら待ちポート部３２に登録される。同様に再投入パイプライン決定部５０によってパイプライン段２２−２に設定され、次のサイクルに命令とともにパイプライン段２２−３に伝達された再投入パイプラインＩＤがパイプライン部２１を示す場合、パイプライン段２２−３で当該命令がアボートしたら待ちポート部３１に登録される。他方、上記の如く再投入パイプライン決定部５０によってパイプライン段２２−２に設定され、次のサイクルに命令とともにパイプライン段２２−３に伝達された再投入パイプラインＩＤがパイプライン部２２を示す場合、パイプライン段２２−３で当該命令がアボートしたら待ちポート部３２に登録される。
【００２６】
更に実施例１のプロセッサは、待ちポート部３１に登録された命令に係るアボート要因が解消した旨の信号を受信すると、当該命令を、パイプライン投入命令選択部１１を介してパイプライン部２１に再投入する、入力部としての再投入命令選択部４１を有する。更に実施例１のプロセッサは、待ちポート部３２に登録された命令に係るアボート要因が解消した旨の信号を受信すると、当該命令を、パイプライン投入命令選択部１２を介してパイプライン部２２に再投入する、入力部としての再投入命令選択部４２を有する。
【００２７】
上述した図１の構成例では、パイプライン部の外部からの新規の命令が投入されるパイプライン部ごとに待ちポート部、再投入命令選択部が設けられており、パイプライン部の間の負荷分散は行うことはできない。これに対し、図３に示す実施例１のプロセッサ構成によれば、再投入パイプライン決定部５０が、各パイプライン部２１，２２のパイプライン段の有効ビットvalid bitの情報を得、各パイプライン部２１，２２の使用状況を得る。このようにして再投入パイプライン決定部５０は各パイプライン部２１，２２の間の負荷の偏りを検出し、特定のパイプライン部への負荷の偏りが続いている場合には、再投入先のパイプライン部として、他のパイプライン部を決定する。例えばパイプライン部２１に負荷が偏った状態が続いていることを検出した場合、再投入パイプライン決定部５０は再投入先のパイプライン部として、パイプライン部２２を決定する。同様にパイプライン部２２に負荷が偏った状態が続いていることを検出した場合、再投入パイプライン決定部５０は再投入先のパイプライン部として、パイプライン部２１を決定する。他方、特に特定のパイプライン部に負荷が偏った状態が続いていることを検出しなかった場合、再投入パイプライン決定部５０は、再投入先のパイプライン部として、当初当該命令が投入されたパイプライン部を決定する。例えば再投入パイプライン決定部５０が、当該命令が当初投入されたパイプライン部に負荷が偏っていることを検出した場合、当該命令の再投入先として他のパイプライン部を決定する。すなわちこの場合、当該命令につき、使用するパイプライン部を変更する。
【００２８】
上記実施例１のプロセッサによれば、パイプライン部２１，２２の間の負荷分散の際に行われるパイプライン部の選択を、ある命令がパイプライン部において実行され当該命令のアボートが検出されるまでの間に行う。その結果、新規命令発行部１０による新規の命令の発行（投入）動作及び再投入命令選択部４１，４２による再投入動作は、当該パイプライン部２１，２２の間の負荷分散を行わない場合と同様であるため、特に性能オーバーヘッドは発生しない。
【００２９】
図４は実施例２によるプロセッサの構成を示す。図４のプロセッサ中、新規命令発行部１０，パイプライン部２１，２２、及び再投入パイプライン決定部５０は、夫々上述した実施例１のプロセッサにおける新規命令発行部１０，パイプライン部２１，２２、及び再投入パイプライン決定部５０と同様の構成を有する。
【００３０】
実施例２のプロセッサは、パイプライン部２１，２２でアボートした命令を登録する、全てのパイプラインで共有された登録部としての待ちポート部３０を有する。実施例２のプロセッサの場合、当該アボートした命令とともに、当該命令の再投入先のパイプライン部の情報（再投入パイプラインＩＤ）が、当該命令に対応付けられて待ちポート部３０に登録される。すなわち実施例２のプロセッサの場合、再投入パイプライン決定部５０が決定する再投入先のパイプライン部に関わらず、パイプライン部２１又は２２から出力される当該命令は待ちポート部３０に登録される。より具体的には、上記の如く再投入パイプライン決定部５０によりパイプライン段２１−２に設定され、次のサイクルに命令とともにパイプライン段２１−３に伝達された再投入パイプラインＩＤは、パイプライン段２１−３で当該命令がアボートしたら、当該命令に対応付けられて、待ちポート部３０に登録される。同様に再投入パイプライン決定部５０によりパイプライン段２２−２に設定され、次のサイクルにパイプライン段２２−３に伝達された再投入パイプラインＩＤも、パイプライン段２２−３で当該命令がアボートしたら、当該命令に対応付けられて、待ちポート部３０に登録される。
【００３１】
更に実施例２のプロセッサは、待ちポート部３０に登録された命令に係るアボートの要因が解消した旨の信号を外部から受信すると、当該命令を、パイプライン投入命令選択部１１、１２を介して夫々パイプライン部２１、２２に再投入する、入力部としての再投入命令選択部４３、４４を有する。より具体的には、再投入命令選択部４３は以下の動作を行う。待ちポート部３０に登録された、アボートの要因が解消した命令のうち、再投入パイプラインＩＤがパイプライン部２１を示す命令を選択し、パイプライン投入命令選択部１１を介してパイプライン部２１に再投入する。同様に再投入命令選択部４４は以下の動作を行う。待ちポート部３０に登録された、アボートの要因が解消した命令のうち、再投入パイプラインＩＤがパイプライン部２２を示す命令を選択し、パイプライン投入命令選択部１２を介してパイプライン部２２に再投入する。
【００３２】
実施例２のプロセッサは、前述した図２のプロセッサ同様、待ちポート部３０が複数パイプライン２１，２２で共通とされている点が、図３とともに上述した実施例１のプロセッサと異なる。実施例２のプロセッサも実施例１のプロセッサ同様、再投入パイプライン決定部５０がパイプライン部２１，２２の間の負荷の偏りを検出する。そして特定のパイプライン部への負荷の偏りが続いている場合には、再投入パイプライン決定部５０は以下の動作を行う。再投入パイプライン決定部５０は命令につき待ちポート３０に登録する際、待ちポート部３０に登録する再投入パイプラインＩＤが示す再投入先のパイプライン部として、他のパイプライン部を決定する。例えば再投入パイプライン決定部５０が、当該命令が当初投入されたパイプライン部に負荷が偏っていることを検出した場合、当該命令の再投入先として他のパイプライン部を決定する。すなわちこの場合、当該命令につき、使用するパイプライン部を変更する。
【００３３】
実施例１のプロセッサでは待ちポート部３１，３２がパイプライン部２１，２２のそれぞれに対し独立に設けられており、アボートした命令の登録を行なう待ちポート部３１，３２を切り替えることでパイプライン部２１，２２の間の負荷分散を実現する。これに対し実施例２のプロセッサでは待ちポート部３０がパイプライン部２１，２２で共通である。このため実施例２のプロセッサでは、パイプライン部２１，２２は、アボートした命令を登録する際、当該命令に対応付けて、待ちポート部３０に再投入パイプライン情報ＩＤを登録する。そして再投入命令選択部４３は、待ちポート部３０が有する、アボート要因が解消した命令のエントリ中、再投入パイプラインＩＤがパイプライン部２１を示すエントリから一つの命令を選択し、パイプライン投入命令選択部１１を介してパイプライン部２１に再投入する。同様に再投入命令選択部４４は、待ちポート部３０が有する、アボート要因が解消した命令のエントリ中、再投入パイプラインＩＤがパイプライン部２２を示すエントリから一つの命令を選択し、パイプライン投入命令選択部１２を介してパイプライン部２２に再投入する。
【００３４】
このようにして実施例２のプロセッサにおいてパイプライン部２１、２２の間の負荷分散が図られる。又、実施例２のプロセッサは実施例１のプロセッサ同様、パイプライン部２１，２２の間の負荷分散の際に行われるパイプライン部の選択を、ある命令がパイプライン部において実行されてアボートが検出されるまでの間に実行する。したがって新規命令発行部１０による新規の命令の発行（投入）動作及び再投入命令選択部４３，４４による再投入動作は、当該パイプライン部２１，２２の間の負荷分散を行わない場合と同様の内容で済み、性能オーバーヘッドが小さく済む。すなわち再投入命令選択部４３は、待ちポート部３０に登録された、アボート要因が解消された命令中、再投入パイプラインＩＤがパイプライン部２１を示す命令から一つの命令を選択すれば良い。当該選択は、例えば命令の登録順に行うことができる。同様に再投入命令選択部４４は、待ちポート部３０に登録された、アボート要因が解消された命令中、再投入パイプラインＩＤがパイプライン部２２を示す命令の中から一つの命令を選択すれば良い。当該選択は上記同様、例えば命令の登録順に行うことができる。このため、図２のプロセッサの場合に再投入命令選択部１４０が待ちポート部１３０に登録された命令から、アボート要因が解消された命令をパイプライン部の数より少ない範囲で選択し、且つ再投入先のパイプライン部を選択する構成に比して、性能オーバーヘッドが小さく済むし、さらに負荷分散を行なうこともできる。
【００３５】
次に図５とともに、図３，図４とともに上述した実施例１，実施例２のプロセッサにおける再投入パイプライン決定部５０の構成例を説明する。図５に示す如く、再投入パイプライン決定部５０は、ＡＮＤ（論理積）ゲート５３、５７，ＮＯＴ（否定）ゲート５１，５２，５５，５６及びＸＯＲ（排他的論理和）ゲート５４，５８を有する。パイプライン部２１の１−２段目のパイプライン段２１−１，２１−２の有効ビットvalid bitは、ＡＮＤゲート５３に入力されるとともに、ＮＯＴゲート５５，５６に入力される。パイプライン部２２の１−２段目のパイプライン段２２−１，２２−２の有効ビットvalid bitは、ＡＮＤゲート５７に入力されるとともに、ＮＯＴゲート５１，５２に入力される。又、ＮＯＴゲート５１、５２の出力はＡＮＤゲート５３に入力され、ＮＯＴゲート５５、５６の出力はＡＮＤゲート５７に入力される。更に、ＡＮＤゲート５３の出力はＸＯＲゲート５４に入力され、ＡＮＤゲート５７の出力はＸＯＲゲート５８に入力される。又、ＸＯＲゲート５４の他の入力として、“０”が入力され、ＸＯＲゲート５８の他の入力として、“１”が入力される。
【００３６】
上記構成の再投入パイプライン決定部５０は、各々がパイプライン段２１−１，２１−２，２１−３、パイプライン段２２−１，２２−２，２２−３という三段構成の２つのパイプライン部２１，２２の間の負荷の偏りを検出する。図５の例では、再投入パイプライン決定部５０は、パイプライン部２１，２２の各々の１段目のパイプライン段２１−１，２２−１及び２段目のパイプライン段２１−２，２２−２の有効ビットvalid bitの情報を使用する。
【００３７】
ここでパイプライン部２１のパイプライン段２１−１，２１−２の有効ビットvalid bitがともに“１”、すなわち使用中である場合、パイプライン部２１は連続する２実行サイクルに亘って使用中であることを意味する。この場合には、当該パイプライン部２１の負荷が高いと判断できる。同様にパイプライン部２２のパイプライン段２２−１，２２−２の有効ビットvalid bitがともに“１”、すなわち使用中である場合、パイプライン部２２では連続する２実行サイクルに亘って使用中であることを意味する。この場合には、当該パイプライン部２２の負荷が高いと判断できる。
【００３８】
逆にパイプライン部２１のパイプライン段２１−１，２１−２の有効ビットvalid bitがともに“０”、すなわち不使用の場合、パイプライン部２１では連続する２実行サイクルに亘って不使用であることを意味し、当該パイプライン部２１の負荷が低いと判断できる。同様にパイプライン部２２のパイプライン段２２−１，２２−２の有効ビットvalid bitがともに“０”、すなわち不使用の場合、パイプライン部２２では連続する２実行サイクルに亘って不使用であることを意味し、当該パイプライン部２２の負荷が低いと判断できる。再投入パイプライン決定部５０はこのような判断方法に基づき、各パイプライン部の２段のパイプライン段の使用状態を基に、パイプライン部２１，２２の間の負荷の偏りを検出し、検出結果に応じ、再投入パイプラインＩＤを設定する構成を有する。
【００３９】
より詳細には、図５の再投入パイプライン決定部５０は以下の動作を行う。まず、例として、パイプライン部２１の１−２段目のパイプライン段２１−１，２１−２が使用中でパイプライン部２２の１−２段目のパイプライン段２２−１，２２−２が不使用であり、パイプライン部２１に負荷が偏っている場合を想定する。この場合、パイプライン段２１−１，２１−２の有効ビットvalid bitがともに“１”であり且つパイプライン段２２−１，２２−２の有効ビットvalid bitがともに“０”となる。パイプライン段２２−１，２２−２の有効ビットvalid bit“０”はＮＯＴゲート５１，５２で反転されて“１”となるため、ＡＮＤゲート５３の４つの入力は全て“１”となる。その結果ＡＮＤゲート５３は“１”を出力し、ＸＯＲゲート５４の２つの入力は“０”、“１”となり“１”を出力する。当該出力“１”により、パイプライン段２１−２の再投入パイプラインＩＤとして、“１”が設定される。又、この場合、パイプライン段２１−１，２１−２の有効ビットvalid bit“１”はＮＯＴゲート５５，５６で反転されて“０”となるため、ＡＮＤゲート５７の４つの入力は、全て“０”となる。その結果ＡＮＤゲート５７は“０”を出力し、ＸＯＲゲート５８の２つの入力は“０”、“１”となりＸＯＲゲート５８も“１”を出力する。当該出力“１”により、パイプライン段２２−２の再投入パイプラインＩＤとしても、“１”が設定される。すなわちこの場合パイプライン部２１に負荷が偏っているため、再投入パイプライン決定部５０は再投入先として、パイプライン部２２（再投入パイプラインＩＤ＝１）を決定し、再投入パイプラインＩＤ＝１をパイプライン段２１−２，２２−２の各々に設定する。
【００４０】
次に、パイプライン部２１の１−２段目のパイプライン段２１−１，２１−２が不使用でパイプライン部２２の１−２段目のパイプライン段２２−１，２２−２が使用中であり、パイプライン部２２に負荷が偏っている場合を想定する。この場合にはパイプライン段２１−１，２１−２の有効ビットvalid bitがともに“０”であり且つパイプライン段２２−１，２２−２の有効ビットvalid bitがともに“１”となる。パイプライン段２２−１，２２−２の有効ビットvalid bit“１”はＮＯＴゲート５１，５２で反転されて“０”となるため、ＡＮＤゲート５３の４つの入力は、全て“０”となる。その結果ＡＮＤゲート５３は“０”を出力し、ＸＯＲゲート５４の２つの入力は“０”、“０”となり、ＸＯＲゲート５４は“０”を出力する。当該出力“０”により、パイプライン段２１−２の再投入パイプラインＩＤとして、“０”が設定される。又、この場合、パイプライン段２１−１，２１−２の有効ビットvalid bit“０”はＮＯＴゲート５５，５６で反転されて“１”となるため、ＡＮＤゲート５７の４つの入力は、全て“１”となる。その結果ＡＮＤゲート５７は“１”を出力し、ＸＯＲゲート５８の２つの入力は“１”、“１”となり、ＸＯＲゲート５８も“０”を出力する。当該出力“０”により、パイプライン段２２−２の再投入パイプラインＩＤとしても、“０”が設定される。すなわちこの場合パイプライン部２２に負荷が偏っているため、再投入パイプライン決定部５０は再投入先として、パイプライン部２１（再投入パイプラインＩＤ＝０）を決定し、再投入パイプラインＩＤ＝０をパイプライン段２１−２，２２−２の各々に設定する。
【００４１】
すなわち図５の再投入パイプライン決定部５０は。パイプライン部２１の１−２段目のパイプライン段２１−１，２１−２がいずれも使用中であり、パイプライン部２２の１−２段目のパイプライン段２２−１，２２−２がいずれも不使用の場合、以下の動作を行う。パイプライン部２１，パイプライン部２２の各々に対し、再投入先としてパイプライン部２２を設定する。逆にパイプライン部２１の１−２段目のパイプライン段２１−１，２１−２がいずれも不使用であり、パイプライン部２２の１−２段目のパイプライン段２２−１，２２−２がいずれも使用中の場合、以下の動作を行う。パイプライン部２１，パイプライン部２２の各々に対し、再投入先としてパイプライン部２１を設定する。
【００４２】
以上、パイプライン段２１−１，２１−２のいずれもが使用中且つパイプライン段２２−１，２２−２のいずれもが不使用の場合、及びパイプライン段２１−１，２１−２のいずれもが不使用且つパイプライン段２２−１，２２−２のいずれもが使用中の場合について説明した。次に、当該２つの場合以外の場合について説明する。当該２つの場合以外の場合、ＡＮＤゲート５３の４つの入力が全て“１”とはならず、又、ＡＮＤゲート５７の４つの入力が全て“１”とはならない。したがってＡＮＤゲート５３、５７のいずれもが“０”を出力する。その結果、ＸＯＲゲート５４の２つの入力は“０”、“０”となり、“０”を出力する。他方、ＸＯＲゲート５８の２つの入力は“０”、“１”となり、“１”を出力する。したがってパイプライン部２１のパイプライン段２１−２には“０”（パイプライン部２１を示す再投入パイプラインＩＤ）が設定され、パイプライン部２２のパイプライン段２２−２には“１”（パイプライン部２２を示す再投入パイプラインＩＤ）が設定される。その結果、当初パイプライン部２１に投入された命令は同じパイプライン部２１に再投入され、当初パイプライン部２２に投入された命令は同じパイプライン部２２に再投入される。すなわちこの場合、再投入される命令は、当初投入されたパイプライン部に再投入される。すなわちこの場合には特にパイプライン部２１，２２の間の負荷の偏りは無いと判断され、命令を再投入する際の再投入先のパイプライン部を、当初当該命令が投入されたパイプライン部から変更しない。
【００４３】
尚、図３、４、５とともに説明した実施例１，２は、２つのパイプライン部２１，２２を有し、各パイプライン部は３段のパイプライン段２１−１，２１−２，２１−３，２２−１，２２−２，２２−３を有する。しかしながらこの例に限らず、パイプライン部の個数は３以上でも良いし、各パイプライン部が有するパイプライン段の段数も４段以上でもよいし、２段でも良い。又再投入パイプライン決定部５０においてパイプライン部２１，２２の間の負荷の偏りを検出する方法も図５の構成を使用する例に限られない。例えば図５に示す再投入パイプライン決定部５０の回路構成は、同様の機能を有する他の回路構成に置き換えることが可能である。
【００４４】
図６は、図３、図４とともに上述した実施例１，実施例２のプロセッサにおける動作の流れの一例を示すフローチャートである。図６中、図３、図４に示されるパイプライン投入命令選択部１１，１２は新規の命令又は再投入する命令から一命令を選択してパイプライン部２１、２２に投入する（ステップＳ１のＹＥＳ）。新規の命令と再投入する命令とが同時に発生した場合、選択されなかった命令につき、次のサイクルに再度パイプライン投入を試みる（ステップＳ１のＮＯ）。パイプライン部２１，２２に投入された命令（ステップＳ１のＹＥＳ）は、パイプライン部２１、２２において実行されると同時に、再投入パイプライン決定部５０がパイプライン部２１，２２の負荷の状態に応じて当該命令の再投入先のパイプライン部を決定する（ステップＳ２）。パイプライン部２１，２２による命令の実行の結果、該当命令にアボート要因が存在しない場合（ステップＳ３のＹＥＳ），完了報告の信号を出力する（ステップＳ４）。パイプライン部２１，２２による実行の結果、当該命令にアボート要因が存在してアボートした場合（ステップＳ３のＮＯ），上記ステップＳ２で決定しておいた再投入先のパイプライン部に対応した待ちポート３１，３２、あるいは待ちポート部３０に当該命令を登録する（ステップＳ５）。
【００４５】
尚ここで上記アボートした命令に関し、図３の実施例１では、ステップＳ２において上記再投入先としてパイプライン部２１を選択していた場合には、ステップＳ５においては待ちポート３１に当該命令を登録する。同様に、ステップＳ２において上記再投入先としてパイプライン部２２を選択していた場合には、ステップＳ５においては待ちポート３２に当該命令を登録する。他方図４の実施例２では、ステップＳ２において上記再投入先としてパイプライン部２１を選択していた場合には、アボートした命令と対応づけて再投入先のパイプライン部の情報としてパイプライン部２１を示す情報を待ちポート３０に登録する。同様に、ステップＳ２において上記再投入先としてパイプライン部２２を選択していた場合には、アボートした命令と対応づけて再投入先のパイプライン部の情報としてパイプライン部２２を示す情報を待ちポート３０に登録する。
【００４６】
次に、ステップＳ５で登録した命令に対するアボート要因が解消し、その旨の信号を受信すると（ステップＳ６のＹＥＳ）、再投入命令選択部４１，４２あるいは４３，４４が当該命令を、パイプライン投入命令選択部１１、１２を介してパイプライン部２１，２２に再投入する（ステップＳ７）。ここで図３の実施例１の場合、ステップＳ７では以下の動作がなされる。上記命令が待ちポート部３１に登録された場合、再投入命令選択部４１が当該命令を、パイプライン投入命令選択部１１を介してパイプライン部２１に投入する。他方、上記命令が待ちポート部３２に登録された場合、再投入命令選択部４２が当該命令を、パイプライン投入命令選択部１２を介してパイプライン部２２に再投入する。
【００４７】
又、図４の実施例２の場合、ステップＳ７では以下の動作がなされる。上記命令とともに当該命令に対応付けて待ちポート３０に登録された再投入先のパイプライン部の情報がパイプライン部２１を示す場合、再投入命令選択部４３が当該命令を、パイプライン投入命令選択部１１を介してパイプライン部２１に再投入する。上記命令とともに当該命令に対応付けて待ちポート３０に登録された再投入先のパイプライン部の情報がパイプライン部２２を示す場合、再投入命令選択部４４が当該命令を、パイプライン投入命令選択部１２を介してパイプライン部２２に再投入する。
【００４８】
図７は図６中、再投入パイプライン決定部５０が実行する、ステップ２の再投入先のパイプライン部を決定する動作の流れの一例を示すフローチャートである。ステップＳ４１で、一のパイプライン部の１段目のパイプライン段が使用中の際、他のパイプライン部の１段目のパイプライン段も使用中か否かを判断する（ステップＳ４２）。ここでパイプライン部が３個以上の場合を想定すると、ステップＳ４２では、他の全てのパイプライン部の１段目のパイプライン段も使用中か否かを判断する。ステップＳ４２の判断結果がＹＥＳの場合、すなわち他のパイプライン部も使用中の場合、ステップＳ４３に移行する。ステップＳ４３では、当該一のパイプライン部につき、再投入先のパイプライン部として、当該一のパイプライン部を決定する。上記の如く他のパイプライン部も使用中の場合、複数のパイプライン部の間で負荷の偏りが無く負荷分散の余地がないと判断できるからである。
【００４９】
他方、ステップＳ４２の判断結果がＮＯの場合、ステップＳ４４に移行する。より具体的には、他のパイプライン部が不使用の場合、ステップＳ４４に移行する。この場合は空いている（不使用の）パイプライン部が存在し、複数のパイプライン部の間で負荷の偏りがあると判断できる。ステップＳ４４では、１実行サイクル前のパイプライン部にも同様の負荷の偏りがあるか否かを判断する。１実行サイクル前のパイプライン部の状態は、例えば現在の実行サイクルにおける２段目のパイプライン段の使用状態によって得ることができる。又、上記「１実行サイクル前にも同様の負荷の偏りがある」とは、例えば、１実行サイクル前のパイプライン部においても以下の状態であったことを意味する。１実行サイクル前も上記同様に、当該一のパイプライン部が使用中であり、且つ、他のパイプライン部は不使用の状態である。すなわちこの場合、当該一のパイプライン部は連続する２実行サイクルに亘って使用中であり、他のパイプライン部は上記連続する２実行サイクルに亘って不使用である。
【００５０】
ステップＳ４４の判断結果がＮＯの場合、すなわち１実行サイクル前のパイプライン部には同様の負荷の偏りがない場合、上記ステップＳ４３に移行する。他方、ステップＳ４４の判断結果がＹＥＳの場合、すなわち１実行サイクル前のパイプライン部にも同様の負荷の偏りがある場合、ステップＳ４５に移行する。ステップＳ４５では、当該一のパイプライン部につき、再投入先のパイプライン部として、現在の実行サイクル及び１実行サイクル前に不使用であったパイプライン部を再投入先のパイプライン部として決定する。ここでは、例えば現在の実行サイクルにおいて１乃至２段目のパイプライン段が不使用であった他のパイプライン部を、上記現在の実行サイクル及び１実行サイクル前に不使用であったパイプライン部として得ることができる。当該他のパイプライン部は連続する２実行サイクルに亘って不使用であり、上記一のパイプライン部との間で負荷の偏りがあると判断できるからである。
【００５１】
次に図８，９とともに、実施例によるプロセッサの動作例について説明する。図８は特に複数のパイプライン部の間の負荷の調整を行わない場合の動作例を示し、図９は、同様の条件における、図５に示す再投入パイプライン決定部５０を使用した場合の動作例を示す。但し図９の例では説明の便宜上図５の例と異なり、パイプライン部が有するパイプライン段の段数を３段ではなく、４段としている。
【００５２】
図８，９では、右方向が時間軸（実行サイクル）を示し、下方向が新規の命令１〜１０を示す。尚、この動作例の場合、パイプライン投入命令選択部１１、１２は新規の命令よりも、アボート要因の解消によって再投入される命令の方を優先し、再投入される命令がない場合にのみ新規の命令をパイプライン部２１，２２に投入する。又、図８，９中、パイプライン部２１の１段目のパイプライン段を０−１，２段目のパイプライン段を０−２，３段目のパイプライン段を０−３（以下同様）として示す。同様にパイプライン部２２の１段目のパイプライン段を１−１，２段目のパイプライン段を１−２，３段目のパイプライン段を１−３（以下同様）として示す。更に、同じ命令が再投入される場合、下線を付す。又、パイプライン部による命令の実行の結果アボート要因が存在して当該命令が待ちポート部に登録される場合の当該命令の再投入先を⇒0（再投入先がパイプライン部２１）、⇒１（再投入先がパイプライン部２２）として示す。
【００５３】
図８，９の動作例では、新規の命令１，２は、２つのパイプライン部２１，２２に分散して投入されるが、新規の命令３以降は、パイプライン部２１に偏って投入される。又、第８実行サイクル以降、アボート要因が解消され、待ちポート部に登録された命令が再投入される。
【００５４】
図８の動作例ではパイプライン部２１，２２の間の負荷の調整はなされず、新規に命令が投入されたパイプライン部と同じパイプライン部に、待ちポート部に登録された当該命令が再投入される。そのため、命令３以降は、パイプライン部２１に新規に投入されるとともに、待ちポート部に登録された当該命令が同じパイプライン部２１に再投入される。その結果第９〜１４実行サイクルの６実行サイクルの間は、パイプライン部２１は再投入される命令３〜８に使用され、その間新規に命令の投入ができない。そして上記命令３〜８の再投入が済んだ後の第１５〜１６実行サイクルにて、新規の命令９，１０の投入がなされる。
【００５５】
一方、図９の動作例では、図５の再投入パイプライン決定部５０により、パイプライン部２１，２２の間の負荷の調整がなされる。その結果、パイプライン部２１への負荷の偏りが検出され、待ちポート部に登録された命令４〜８はパイプライン部２２に再投入される。その結果、第１０実行サイクル以降パイプライン部２１は再投入される命令の実行には使用されない状態となり、新規の命令９，１０は、第１０〜１１実行サイクルでパイプライン部２１に投入される。ここで上記の如く、図８の動作例の場合には、上記の如く新規の命令９，１０は、第１５〜１６実行サイクルでパイプライン部２１に投入される。他方図９の動作例の場合、実施例の再投入パイプライン決定部５０によるパイプライン部２１，２２の間の負荷の調整の結果、新規の命令９，１０を、５実行サイクル分早く投入することができる。よって実施例の再投入パイプライン決定部５０によるパイプライン部２１，２２の間の負荷の調整の結果、効果的な負荷分散が図れ、パイプライン部２１，２２の使用効率を向上し得る。
【００５６】
次に図１０とともに、実施例３によるプロセッサの説明を行う。実施例３のプロセッサは、 メモリ（図示を省略）から命令を取り出す命令フェッチ部１、取り出した命令を解読する命令解読部２，解読した命令をパイプライン部へ投入する命令発行部３を有する。命令発行部３は図３，図４の上記新規命令発行部１０に対応する。
【００５７】
実施例３のプロセッサは更に、固定小数点演算を実行する固定小数点演算パイプライン部４、浮動小数点演算を実行する浮動小数点演算パイプライン部５、及び一次キャッシュアクセスパイプライン部６を有する。一次キャッシュアクセスパイプライン部６は、図３，図４のパイプライン部２１，２２に対応する。ここで命令発行部３は命令解読部２が解読した命令の種別に応じて、固定小数点演算パイプライン部４、浮動小数点演算パイプライン部５、又は一次キャッシュアクセスパイプライン部６を選択し、当該選択したパイプライン部に新規の命令を投入する。より具体的には、命令発行部３は固定小数点演算パイプライン部４に対し新規の固定小数点演算命令を投入し、浮動小数点演算パイプライン部５に対し新規の浮動小数点演算命令を投入し、一次キャッシュアクセスパイプライン部６に対し新規のメモリアクセス命令を投入する。又、図１０では、パイプライン部２１又は２２としての１つの一次キャッシュアクセスパイプライン部６のみを示し、他のパイプライン部２２又は２１としてのパイプライン部の図示を省略する。
【００５８】
実施例３のプロセッサは更に、一次キャッシュアクセス再投入命令待ちポート部８及び命令完了部７を有する。一次キャッシュアクセスパイプライン部６は与えられた命令（新規メモリアクセス命令）の実行を完了すると、メモリアクセス命令完了報告を示す信号を命令完了部７に入力する。又一次キャッシュアクセスパイプライン部６は、アボート要因によってメモリアクセス命令の完了報告を返せない場合、一次キャッシュアクセス再投入命令待ちポート部８にメモリアクセス命令を登録する。一次キャッシュアクセス再投入命令待ちポート部８は、図３の待ちポート部３１，３２、あるいは図４の待ちポート部３０に対応する。尚、図示は省略するが、実施例３のプロセッサは、実施例１あるいは実施例２の再投入パイプライン決定部５０、及び再投入命令選択部４１，４２あるいは再投入命令選択部４３，４４と同様の機能部を有する。
【００５９】
一次キャッシュメモリアクセスパイプライン部６は、パイプライン投入命令選択部６−１，一次キャッシュアクセスパイプラインラッチ（１段目）６−２、及びタグマッチ検索・一次キャッシュ読出部６−３を有する。一次キャッシュメモリアクセスパイプライン部６は更に、一次キャッシュアクセスパイプラインラッチ（2段目）６−４、キャッシュヒットデータ選択部６−５，一次キャッシュアクセスパイプラインラッチ（3段目）６−６，及び命令完了応答／アボート命令処理部６−７を有する。パイプライン投入命令選択部６−１及び一次キャッシュアクセスパイプラインラッチ（１段目）６−２は、図３，４，５の１段目のパイプライン段２１−１又は２２−１に対応する。タグマッチ検索・一次キャッシュ読出部６−３及び一次キャッシュアクセスパイプラインラッチ（2段目）６−４は、２段目のパイプライン段２１−２又は２２−２に対応する。キャッシュヒットデータ選択部６−５及び一次キャッシュアクセスパイプラインラッチ（3段目）６−６は、３段目のパイプライン段２１−３又は２２−３に対応する。
【００６０】
一次キャッシュアクセスパイプライン部６は、一次キャッシュアクセスパイプライン処理（後述）を行なった結果、一次キャッシュ（図示は省略）において必要なデータが存在（キャッシュヒット）して当該データを返せる場合、メモリアクセス命令完了応答を示す信号を命令完了部７に送信し、メモリアクセス命令の実行が完了する。他方、一次キャッシにおいて必要なデータが存在しない（キャッシュミス）等により当該データを返せない場合には、メモリアクセス命令はアボートし、当該アボートしたメモリアクセス命令を一次キャッシュアクセス再投入命令待ちポート部８に登録する。
【００６１】
尚、実施例３のプロセッサの一次キャッシュアクセスパイプライン部６は、実施例１あるいは実施例２のパイプライン部２１，２２同様、「有効ビットvalid bit」及び「再投入パイプラインＩＤ」を有する（図示を省略）。
【００６２】
次に図１１とともに、実施例４によるコンピュータにつき説明する。図１１に示される実施例４によるコンピュータ５００は、命令を格納する記憶装置としてのメモリ５０２と、メモリ５０２にバス５０３によって接続された演算処理装置としてのプロセッサ５０１とを有する、情報処理装置（例えばサーバ）としてのコンピュータである。メモリ５０２は、プロセッサ５０１が実行する命令が書き込まれたプログラム等を格納する。プロセッサ５０１として、例えば図３とともに上述した実施例１のプロセッサを適用し得る。その場合、プロセッサ５０１がメモリ５０２に格納されたプログラムを実行する際、当該プログラムに書き込まれた命令が、図３の新規命令発行部１０を介し、更にパイプライン投入命令選択部１１、１２を介してパイプライン部２１，２２に投入される。命令がパイプライン部２１，２２に投入された後のプロセッサ５０１の動作は実施例１の説明で述べたとおりである。
【００６３】
同様にプロセッサ５０１として、図４とともに上述した実施例２のプロセッサを適用し得る。その場合、プロセッサ５０１がメモリ５０２に格納されたプログラムを実行する際、当該プログラムに書き込まれた命令が、図３の新規命令発行部１０を介し、更にパイプライン投入命令選択部１１、１２を介してパイプライン部２１，２２に投入される。命令がパイプライン部２１，２２に投入された後のプロセッサ５０１の動作は実施例２の説明で述べたとおりである。
【００６４】
同様にプロセッサ５０１として、図１０とともに上述した実施例３のプロセッサを適用し得る。その場合、プロセッサ５０１がメモリ５０２に格納されたプログラムを実行する際、当該プログラムに書き込まれた命令が、図１０の命令フェッチ部１によって取り出され、取り出された命令が命令解読部２に解読され，解読された命令が命令発行部３により、例えば一次キャッシュアクセスパイプライン部６に投入される。命令が一次キャッシュアクセスパイプライン部６に投入された後のプロセッサ５０１の動作は実施例３の説明で述べたとおりである。
【００６５】
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
入力される第１の命令を実行する第１のパイプライン部と、
入力される第２の命令を実行する第２のパイプライン部と、
前記第１のパイプライン部が前記第１の命令を完了できない場合又は前記第２のパイプライン部が前記第２の命令を完了できない場合に、完了できない前記第１の命令又は前記第２の命令を登録する登録部と、
前記第１のパイプライン部と第２のパイプライン部とのうち、負荷が低いパイプライン部を決定する決定部と、
前記登録部に登録された命令を、前記決定部が決定したパイプライン部に入力する入力部とを有することを特徴とする演算処理装置。
（付記２）
前記演算処理装置において、
前記決定部は、
前記登録部に登録された命令が、前記第１のパイプライン部又は前記第２のパイプライン部に入力されてから前記登録部に登録されるまでの間に、前記負荷が低いパイプライン部を決定することを特徴とする付記１記載の演算処理装置。
（付記３）
前記演算処理装置において、
前記第１のパイプライン部は、第１の実行ステージで第１の処理を実行する第１の処理手段と、前記第１の実行ステージの後段の第２の実行ステージで第２の処理を実行する第２の処理手段とを有し、
前記第２のパイプライン部は、第３の実行ステージで第３の処理を実行する第３の処理手段と、前記第３の実行ステージの後段の第４の実行ステージで第４の処理を実行する第４の処理手段とを有し、
前記決定部は、前記第１の処理手段及び第２の処理手段がともに使用中であり且つ前記第３の処理手段及び第４の処理手段がともに不使用の場合に、前記第２のパイプライン部を決定し、
前記第３の処理手段及び第４の処理手段がともに使用中であり且つ前記第１の処理手段及び第２の処理手段がともに不使用の場合に、前記第１のパイプライン部を決定することを特徴とする付記１又は２記載の演算処理装置。
（付記４）
前記第１の処理手段は使用中の場合に“１”、不使用の場合に“０”となる第１の情報を有し、
前記第２の処理手段は使用中の場合に“１”、不使用の場合に“０”となる第２の情報を有し、
前記第３の処理手段は使用中の場合に“１”、不使用の場合に“０”となる第３の情報を有し、
前記第４の処理手段は使用中の場合に“１”、不使用の場合に“０”となる第４の情報を有し、
前記決定部は、前記第１の情報、前記第２の情報、前記第３の情報が反転された情報及び前記第４の情報が反転された情報が入力される第１のＡＮＤゲートと、
前記第１のＡＮＤゲートの出力と、“０”とが入力され、出力を前記第２の処理手段に設定する第１のＸＯＲゲートと、
前記第１の情報が反転された情報、前記第２の情報が反転された情報、前記第３の情報及び前記第４の情報が入力される第２のＡＮＤゲートと、
前記第２のＡＮＤゲートの出力と、“１”とが入力され、出力を前記第４の処理手段に設定する第２のＸＯＲゲートとを有し、
前記第１のＸＯＲゲート及び第２のＸＯＲゲートの出力の“０”は第１のパイプライン部を示し、“１”は第２のパイプライン部を示すことを特徴とする付記３に記載の演算処理装置。
（付記５）
前記登録部は、前記第１のパイプライン部及び前記第２のパイプライン部のうちの何れか一方が前記決定部による決定にしたがって前記第１のパイプライン部に再度入力する命令を登録する第１の登録部と、前記第１のパイプライン部及び前記第２のパイプライン部のうちの何れか一方が前記決定部による決定にしたがって前記第２のパイプライン部に再度入力する命令を登録する第２の登録部とを有し、
前記入力部は、前記第１の登録部に登録される命令を前記第１のパイプライン部に入力する第１の入力部と、前記第２の登録部に登録される命令を前記第２のパイプライン部に入力する第２の入力部とを有することを特徴とする付記１乃至４のうちのいずれかに記載の演算処理装置。
（付記６）
前記入力部は、前記登録部に登録される命令を前記決定部による決定にしたがって前記第１のパイプライン部に入力する第１の入力部と、前記登録部に登録される命令を前記決定部による決定にしたがって前記第２のパイプライン部に入力する第２の入力部とを有することを特徴とする付記１乃至４のうちのいずれかに記載の演算処理装置。
（付記７）
命令を格納する記憶装置と、前記記憶装置に接続された演算処理装置とを有する情報処理装置において、
前記演算処理装置は、
入力される第１の命令を実行する第１のパイプライン部と、
入力される第２の命令を実行する第２のパイプライン部と、
前記第１のパイプライン部が前記第１の命令を完了できない場合又は前記第２のパイプライン部が前記第２の命令を完了できない場合に、完了できない前記第１の命令又は前記第２の命令を登録する登録部と、
前記第１のパイプライン部と第２のパイプライン部とのうち、負荷が低いパイプライン部を決定する決定部と、
前記登録部に登録された命令を、前記決定部が決定したパイプライン部に入力する入力部とを有することを特徴とする情報処理装置。
（付記８）
前記情報処理装置において、
前記決定部は、
前記登録部に登録された命令が、前記第１のパイプライン部又は前記第２のパイプライン部に入力されてから前記登録部に登録されるまでの間に、前記負荷が低いパイプライン部を決定することを特徴とする付記７記載の情報処理装置。
（付記９）
前記情報処理装置において、
前記第１のパイプライン部は、第１の実行ステージで第１の処理を実行する第１の処理手段と、前記第１の実行ステージの後段の第２の実行ステージで第２の処理を実行する第２の処理手段とを有し、
前記第２のパイプライン部は、第３の実行ステージで第３の処理を実行する第３の処理手段と、前記第３の実行ステージの後段の第４の実行ステージで第４の処理を実行する第４の処理手段とを有し、
前記決定部は、前記第１の処理手段及び第２の処理手段がともに使用中であり且つ前記第３の処理手段及び第４の処理手段がともに不使用の場合に、前記第２のパイプライン部を決定し、
前記第３の処理手段及び第４の処理手段がともに使用中であり且つ前記第１の処理手段及び第２の処理手段がともに不使用の場合に、前記第１のパイプライン部を決定することを特徴とする付記７又は８記載の情報処理装置。
（付記１０）
第１のパイプライン部が第１の命令を実行するステップと、
第２のパイプライン部が第２の命令を実行するステップと、
登録部が、前記第１のパイプライン部が前記第１の命令を完了できない場合又は前記第２のパイプライン部が前記第２の命令を完了できない場合に完了できない前記第１の命令又は前記第２の命令を登録するステップと、
決定部が、前記第１のパイプライン部と第２のパイプライン部とのうち、負荷が低いパイプライン部を決定するステップと、
入力部が、前記登録部に登録された命令を、前記決定部が決定したパイプライン部に入力するステップとを有することを特徴とする演算処理装置のパイプライン制御方法。
（付記１１）
前記演算処理装置のパイプライン制御方法において、
前記決定するステップは、
前記登録部に登録された命令が、前記第１のパイプライン部又は前記第２のパイプライン部に入力されてから前記登録部に登録されるまでの間に、前記負荷が低いパイプライン部を決定するステップを有することを特徴とする付記１０記載の演算処理装置のパイプライン制御方法。
（付記１２）
前記演算処理装置のパイプライン制御方法において、
前記第１のパイプライン部は、第１の実行ステージで第１の処理を実行する第１の処理手段と、前記第１の実行ステージの後段の第２の実行ステージで第２の処理を実行する第２の処理手段とを有し、
前記第２のパイプライン部は、第３の実行ステージで第３の処理を実行する第３の処理手段と、前記第３の実行ステージの後段の第４の実行ステージで第４の処理を実行する第４の処理手段とを有し、
前記決定するステップは、前記第１の処理手段及び第２の処理手段がともに使用中であり且つ前記第３の処理手段及び第４の処理手段がともに不使用の場合に、前記第２のパイプライン部を決定し、
前記第３の処理手段及び第４の処理手段がともに使用中であり且つ前記第１の処理手段及び第２の処理手段がともに不使用の場合に、前記第１のパイプライン部を決定することを特徴とする付記１０又は１１記載の演算処理装置のパイプライン制御方法。
【符号の説明】
【００６６】
１０、１１０  新規命令発行部
１１，１２，１１１，１１２  パイプライン投入命令選択部
２１，２２、１２１，１２２  パイプライン部
３０，３１，３２、１３０，１３１，１３２  待ちポート部
４１，４２、４３，４４、１４０、１４１，１４２  再投入命令選択部
５０  再投入パイプライン決定部
【図１】
0005493837.tif 000002
【図２】
0005493837.tif 000003
【図３】
0005493837.tif 000004
【図４】
0005493837.tif 000005
【図５】
0005493837.tif 000006
【図６】
0005493837.tif 000007
【図７】
0005493837.tif 000008
【図８】
0005493837.tif 000009
【図９】
0005493837.tif 000010
【図１０】
0005493837.tif 000011
【図１１】
0005493837.tif 000012