(57)【要約】【課題】タイムロスが生じることを抑制し、処理速度を向上させることができるプロセッサ及びパイプライン処理方法を提供する。【解決手段】複数のスレッドを処理し、分岐命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理を行うプロセッサであって、実行権を得たスレッドの命令をフェッチするフェッチ部１、フェッチ部でフェッチされた命令を実行する演算実行部２を備えたパイプライン処理部と、分岐命令を実行したスレッドのスレッド番号とパイプライン処理部内にある分岐命令の後続命令のスレッド番号とに応じて後続命令を破棄するかどうかを判定する分岐制御部１４とを備える。【選択図】図１
2019101543.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドを処理し、分岐命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理を行うプロセッサであって、
実行権を得た前記スレッドの前記命令をフェッチするフェッチ部と前記フェッチ部でフェッチされた命令を実行する演算実行部とを備えたパイプライン処理部と、
前記分岐命令を実行したスレッドのスレッド番号と前記パイプライン処理部内にある前記分岐命令の後続命令のスレッド番号とに応じて前記後続命令を破棄するかどうかを判定する分岐制御部と、
を備えることを特徴とするプロセッサ。
【請求項２】
前記分岐制御部は、前記分岐命令を実行したスレッドのスレッド番号と前記パイプライン処理部内にある前記分岐命令の後続命令のスレッド番号とが異なる場合には、前記後続命令を破棄せずに前記後続命令の実行を継続することを特徴とする請求項１記載のプロセッサ。
【請求項３】
前記分岐制御部は、前記分岐命令を実行したスレッドのスレッド番号と前記パイプライン処理部内にある前記分岐命令の後続命令のスレッド番号とが同じである場合には、前記後続命令を破棄することを特徴とする請求項１又は請求項２記載のプロセッサ。
【請求項４】
複数のスレッドを処理し、分岐命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理方法であって、
実行権を得た前記スレッドの前記命令をフェッチし、フェッチされた命令を実行するパイプライン処理を行うステップと、
前記分岐命令を実行したスレッドのスレッド番号と前記パイプライン処理内にある前記分岐命令の後続命令のスレッド番号とに応じて前記後続命令を破棄するかどうかを判定する分岐制御ステップと、
を備えることを特徴とするパイプライン処理方法。
【請求項５】
前記分岐制御ステップは、前記分岐命令を実行したスレッドのスレッド番号と前記パイプライン処理内にある前記分岐命令の後続命令のスレッド番号とが異なる場合には、前記後続命令を破棄せずに前記後続命令の実行を継続することを特徴とする請求項４記載のパイプライン処理方法。
【請求項６】
前記分岐制御ステップは、前記分岐命令を実行したスレッドのスレッド番号と前記パイプライン処理内にある前記分岐命令の後続命令のスレッド番号とが同じである場合には、前記後続命令を破棄することを特徴とする請求項４又は請求項５記載のパイプライン処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パイプライン処理するとともに、分岐命令を実行するプロセッサ及びパイプライン処理方法に関する。
【背景技術】
【０００２】
プロセッサでは、処理速度を向上するためにパイプライン処理が行われている。パイプライン処理は、命令をフェッチし、命令をデコードして演算を実行する処理であり、命令Ａのフェッチが終わってデコードを開始すると、同時に命令Ｂのフェッチを開始する処理である。
【０００３】
即ち、パイプライン処理においては、複数の命令を並行して処理することが行われている。複数の命令は、プロセッサとは別に構成される命令メモリに格納され、任意のアドレスと結び付けられる。
【０００４】
図５にマルチスレッドのブロック図を示す。図５に示すマルチスレッドは、複数の命令のアドレスと結び付けられる複数のスレッドＴＨ０〜ＴＨ２を有し、各スレッドＴＨ０〜ＴＨ２には、独自のプログラムカウンタやレジスタがある。実行権が得られたスレッドの命令がフェッチＦＥされ、命令がデコードＤＥされて演算が実行される。
【０００５】
図６に、従来のプロセッサのパイプライン処理においてスレッド切替がある場合のスレッドの命令破棄の処理を示す。図６において、ＦＥは、フェッチであり、ＤＥはデコードであり、ＥＸは、演算実行であり、ＷＢ１，ＷＢ２は、データのレジスタへの書き込みであり、例えば、命令１のフェッチが終わってデコードを開始すると、同時に分岐命令ＪＭＰのフェッチを開始するパイプライン処理を示している。
【０００６】
図６では、スレッドＴＨ１，ＴＨ２があり、スレッドの切替がある例を示している。スレッドＴＨ２の分岐命令ＪＭＰが実行されたら、分岐命令の後続のパイプライン内のスレッドＴＨ１の命令Ｃ２、スレッドＴＨ２の命令Ｃｉも破棄していた（図では×、dropで示す）。
【０００７】
また、従来の技術として、特許文献１に記載された分岐誤予測バッファを用いるためのプロセッサが知られている。このプロセッサは、命令メモリに格納された命令に対してパイプライン処理を実行し、分岐命令を検出すると、分岐命令の結果を予測し、予測の結果に基づいて命令メモリに後続の命令を要求する。
【０００８】
このプロセッサは、分岐予測によって予測されなかった命令を記憶することで、分岐予測が誤った場合に発生するペナルティを抑制し、プロセッサの処理速度を向上することができる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１１−１００４５４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、分岐命令が検出されたとき、既にパイプライン内にある命令は、図６及び特許文献１で説明したように、破棄されている。その後、破棄された命令を実行する場合、分岐命令の実行と同時に破棄された命令を再度、読み出す必要がある（図６のスレッドＴＨ１の命令Ｃ２の再フェッチ）。
【００１１】
この場合、命令が破棄されることで、タイムロスが生じるため、プロセッサの処理速度を向上させることができなかった。
【００１２】
本発明の課題は、タイムロスが生じることを抑制し、処理速度を向上させることができるプロセッサ及びパイプライン処理方法を提供することにある。
【課題を解決するための手段】
【００１３】
本発明に係るプロセッサは、複数のスレッドを処理し、分岐命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理を行うプロセッサであって、実行権を得た前記スレッドの前記命令をフェッチするフェッチ部と前記フェッチ部でフェッチされた命令を実行する演算実行部とを備えたパイプライン処理部と、前記分岐命令を実行したスレッドのスレッド番号と前記パイプライン処理部内にある前記分岐命令の後続命令のスレッド番号とに応じて前記後続命令を破棄するかどうかを判定する分岐制御部とを備えることを特徴とする。
【００１４】
本発明に係るパイプライン処理方法は、複数のスレッドを処理し、分岐命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理方法であって、実行権を得た前記スレッドの前記命令をフェッチし、フェッチされた命令を実行するパイプライン処理を行うステップと、前記分岐命令を実行したスレッドのスレッド番号と前記パイプライン処理内にある前記分岐命令の後続命令のスレッド番号とに応じて前記後続命令を破棄するかどうかを判定する分岐制御ステップとを備えることを特徴とする。
【発明の効果】
【００１５】
本発明のプロセッサ及びパイプライン処理方法によれば、分岐制御部は、分岐命令を実行したスレッドのスレッド番号とパイプライン処理内にある分岐命令の後続命令のスレッド番号とに応じて後続命令を破棄するかどうかを判定するので、分岐命令の後続命令のスレッド番号に応じて後続命令を破棄せずに後続命令の実行を継続することができる。従って、タイムロスが生じることを抑制し、処理速度を向上させることができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施例１に係るプロセッサの構成図である。
【図２】実施例１に係るプロセッサのパイプライン処理においてスレッド切替がある場合のスレッドの命令破棄の処理を示す図である。
【図３】実施例１に係るプロセッサのパイプライン処理においてスレッド切替がない場合のスレッドの命令破棄の処理を示す図である。
【図４】実施例１に係るプロセッサのパイプライン処理のブロック図である。
【図５】マルチスレッドのブロック図である。
【図６】従来のプロセッサのパイプライン処理においてスレッド切替がある場合のスレッドの命令破棄の処理を示す図である。
【発明を実施するための形態】
【００１７】
以下、本発明の実施の形態のプロセッサ及びパイプライン処理方法について、図面を参照しながら詳細に説明する。
【００１８】
パイプライン処理は、複数の命令を並行して処理する。以下の実施例では、複数のスレッドに属する命令を処理するマルチスレッドについて説明するが、本発明は、マルタスレッド以外にも適用可能である。
【００１９】
（実施例１）
図１は、本発明の実施例１に係るプロセッサの構成図である。実施例１に係るプロセッサは、複数のスレッドを処理し、分岐命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理を行いプロセッサであって、パイプライン処理は、命令フェッチ（Ｆ）１、デコード（Ｄ）／演算実行（Ｅ）２、結果格納（Ｗ）３からなり、例えば、命令Ａのフェッチが終わってデコードを開始すると、同時に命令Ｂのフェッチを開始する処理である。
【００２０】
命令フェッチ（Ｆ）１は、スレッド（ＴＨ）１１、プログラムカウンタ（ＰＣ）１２、命令メモリ１３、分岐制御部１４を有する。スレッド（ＴＨ）１１は、フェッチされた命令のスレッド番号である。プログラムカウンタ（ＰＣ）１２は、現在処理中の命令が格納されている命令メモリ１３上のアドレスである。
【００２１】
命令メモリ１３は、プログラムカウンタ（ＰＣ）１２のアドレスに対応して各スレッド（例えば、ＴＨ１）に属する一連の複数の命令（Ｃ１〜Ｃ３）を格納している。
【００２２】
分岐制御部１４は、スレッド（ＴＨ）１１から受けるスレッド番号と分岐制御部１４から受けるスレッド番号とを比較し、比較信号を命令デコーダ２１に出力する。なお、分岐制御部１４の特徴的な処理については、後述する。
【００２３】
デコード（Ｄ）／演算実行（Ｅ）２は、本発明における演算実行部に相当し、命令デコーダ２１、レジスタ読み出し部２２、演算制御部２３、分岐処理部２４、加算部２５、データ読み出し部２６を備えている。
【００２４】
命令デコーダ２１は、レジスタ１５に格納された命令をデコードして、デコード結果を演算制御部２３に出力する。レジスタ読み出し部２２は、図示されないフラグレジスタに格納された０又は１のフラグを読み出して演算制御部２３を介して分岐処理部２４に出力する。
【００２５】
演算制御部２３は、命令デコーダ２１でデコードされた命令を実行し、実行結果をレジスタ書き込み部３１と分岐処理部２４に出力する。
【００２６】
分岐処理部２４は、命令デコーダ２１でデコードされた命令が分岐命令であり、且つフラグが１の場合には、takenとして分岐処理を行い、フラグが０の場合には、not takenとして分岐処理を行わない。
【００２７】
分岐制御部１４は、分岐処理部２４で分岐処理を行う場合に、命令フェッチ（Ｆ）１でフェッチされた命令のスレッド番号ＴＨ＿Ｆと、デコード（Ｄ）／演算実行（Ｅ）２で実行された命令のスレッド番号ＴＨ＿Ｅとが同じかどうかを判定することにより後続命令を破棄するかを決定する。前者のスレッド番号は、スレッド（ＴＨ）１１に格納されるスレッド番号である。後者のスレッド番号は、分岐処理部２４で実行された分岐命令のスレッド番号である。
【００２８】
具体的には、分岐制御部１４は、分岐命令を実行したスレッドのスレッド番号とパイプライン処理部内にある分岐命令の後続命令のスレッド番号とに応じて後続命令を破棄するかどうかを判定する。
【００２９】
分岐制御部１４は、分岐命令を実行したスレッドのスレッド番号とパイプライン処理部内にある分岐命令の後続命令のスレッド番号とが異なる場合には、後続命令を破棄せずに後続命令の実行を継続する。
【００３０】
分岐制御部１４は、分岐命令を実行したスレッドのスレッド番号とパイプライン処理部内にある分岐命令の後続命令のスレッド番号とが同じである場合には、後続命令を破棄する。
【００３１】
加算部２５は、レジスタ１５からのアドレスに、分岐処理部２４からのアドレスを変更して、変更結果をプログラムカウンタ（ＰＣ）１２に出力する。
【００３２】
データ読み出し部２６は、命令デコーダ２１でデコードされた命令のデータを読み出してレジスタ書き込み部３１に出力する。
【００３３】
結果格納（Ｗ）３は、データをレジスタに書き込むレジスタ書き込み部３１を有する。
【００３４】
次に、このように構成された実施例１のプロセッサ及びパイプライン処理方法の動作を、図面を参照しながら詳細に説明する。なお、図２及び図４におけるＥＸは、本発明における演算実行部に相当する。
【００３５】
まず、図２及び図４を参照しながら、プロセッサのパイプライン処理においてスレッド切替がある場合のスレッドの命令破棄の処理を説明する。
【００３６】
まず、スレッドＴＨ２の分岐命令（ＪＭＰ）がフェッチＦＥされ、デコードＤＥされ、実行ＥＸされる。次に、スレッドＴＨ２の分岐命令がデコードＤＥされるタイミングで、スレッドＴＨ１の命令Ｃ２がフェッチされ、デコードＤＥされ、実行ＥＸされる。
【００３７】
スレッドＴＨ２の分岐命令（ＪＭＰ）が実行ＥＸされているとき、分岐処理部２４によりフラグが１のときにはtakenとなり、分岐命令を実行する。このとき、分岐制御部１４は、分岐命令を実行したスレッドのスレッド番号ＴＨ２とパイプライン処理部内にある分岐命令の後続命令Ｃ２のスレッド番号ＴＨ１とが異なる場合には、各ステージのValid信号を有効にする。これにより、後続命令Ｃ２を破棄せずに後続命令Ｃ２の実行を継続することができる。
【００３８】
従って、異なるスレッドの命令をパイプラインフラッシュしてしまい、もう一度フェッチからやり直すというタイムロスをなくすことができる。これにより、タイムロスの発生を抑制し、処理速度を向上させることができる。図２及び図４に示される５段パイプラインの構成は、図１で説明された３段パイプラインと異なるが、本発明はパイプラインの段数に限らず適用できる。
【００３９】
次に、スレッドＴＨ２の分岐命令が実行ＥＸされるタイミングで、分岐制御部１４は、分岐命令を実行したスレッドのスレッド番号ＴＨ２とパイプライン処理部内にある分岐命令の後続命令Ｃｉのスレッド番号ＴＨ２とが同じである場合には、各ステージのValid信号を無効にする。これにより、後続命令Ｃｉを破棄することができる。
【００４０】
次に、図３を参照しながら、プロセッサのスレッド切替がない場合のスレッドの命令破棄の処理を説明する。
【００４１】
まず、スレッドＴＨ１の分岐命令（ＪＭＰ）がフェッチＦＥされ、デコードＤＥされ、実行ＥＸされる。次に、スレッドＴＨ１の分岐命令がデコードＤＥされるタイミングで、スレッドＴＨ１の命令Ｃ２がフェッチＦＥされ、デコードＤＥされ、実行ＥＸされる。
【００４２】
スレッドＴＨ１の分岐命令（ＪＭＰ）が実行ＥＸされているとき、分岐処理部２４によりフラグが１のときにはtakenとなり、分岐命令を実行する。このとき、分岐制御部１４は、分岐命令を実行したスレッドのスレッド番号ＴＨ１とパイプライン処理部内にある分岐命令の後続命令Ｃ２のスレッド番号ＴＨ１とが同じであるので、後続命令Ｃ２を破棄する。
【００４３】
次に、分岐制御部１４は、分岐命令を実行したスレッドのスレッド番号ＴＨ１とパイプライン処理部内にある分岐命令の後続命令Ｃ３のスレッド番号ＴＨ１とが同じであるので、後続命令Ｃ３を破棄する。
【００４４】
なお、プログラムカウンタＰＣのアドレスを用いて、後続命令の破棄を行うかどうかを判断してもよい。
【符号の説明】
【００４５】
１  命令フェッチ（Ｆ）
２  デコード（Ｄ）／演算実行（Ｅ）
３  結果格納（Ｗ）
１１  スレッド（ＴＨ）
１２  プログラムカウンタ（ＰＣ）
１３  命令メモリ
１４  分岐制御部
１５  レジスタ
２１  命令デコーダ
２２  レジスタ読み出し部
２３  演算制御部
２４  分岐処理部
２５  加算部
２６  データ読み出し部
３１  レジスタ書き込み部
【図１】
2019101543.tif 000003
【図２】
2019101543.tif 000004
【図３】
2019101543.tif 000005
【図４】
2019101543.tif 000006
【図５】
2019101543.tif 000007
【図６】
2019101543.tif 000008