(57)【要約】【課題】処理性能を向上させる。【解決手段】処理装置は、第１の演算器と、第２の演算器と、データを格納する複数のレジスタを含むレジスタ群と、先行の命令の前記第１の演算器、または、前記第２の演算器を使用した演算結果を格納する前記レジスタと後行の命令の前記第１の演算器を使用した演算結果を格納する前記レジスタとが同一の場合に、前記後行の命令のパイプラン段数を事前に設定したパイプライン段数調整値分増加させて実行する制御部と、を含む。【選択図】      図１
2014238777.tif 000002
【特許請求の範囲】
【請求項１】
第１の演算器と、第２の演算器と、データを格納する複数のレジスタを含むレジスタ群と、
先行の命令の前記第１の演算器、または、前記第２の演算器を使用した演算結果を格納する前記レジスタと後行の命令の前記第１の演算器を使用した演算結果を格納する前記レジスタとが同一の場合に、前記後行の命令のパイプラン段数を事前に設定したパイプライン段数調整値分増加させて実行する制御部と、
を含むことを特徴とする処理装置。
【請求項２】
前記制御部は、パイプラインの空きサイクルを実測し、前記空きサイクルの累積値である空きサイクル測定値に基づいて前記パイプライン段数調整値を設定することを特徴とする請求項１の処理装置。
【請求項３】
前記制御部は、プログラムを実行することにより、前記パイプライン段数調整値を設定することを特徴とする請求項２の処理装置。
【請求項４】
前記プログラムがアプリケーションプログラムであることを特徴とする請求項３の処理装置。
【請求項５】
前記制御部は、前記第１の演算器のパイプライン段数を初期値から順次、暫定パイプライン段数調整値として増加させて命令を実行し、それぞれの前記暫定パイプライン段数調整値での前記空きサイクル測定値を実測し、最小の前記空きサイクル測定値に対応する前記暫定パイプライン段数調整値を前記パイプライン段数調整値とすることを特徴とする請求項２、３、または、４の処理装置。
【請求項６】
前記制御部は、パイプラインのあるステージの空きサイクルを一定時間実測し、前記空きサイクル測定値とすることを特徴とする請求項２、３、４、または、５の処理装置。
【請求項７】
前記制御部は、前記第１の演算器のパイプライン段数を、常に、前記パイプライン段数調整値分増加させて命令を実行することを特徴とする請求項１、２、３、４、５、または、６の処理装置。
【請求項８】
先行の命令の第１の演算器、または、第２の演算器を使用した演算結果を格納するレジスタ群のレジスタと後行の命令の前記第１の演算器を使用した演算結果を格納する前記レジスタとが同一の場合に、前記後行の命令のパイプラン段数を事前に設定したパイプライン段数調整値分増加させて実行する処理方法。
【請求項９】
パイプラインの空きサイクルを実測し、前記空きサイクルの累積値である空きサイクル測定値に基づいて前記パイプライン段数調整値を設定することを特徴とする請求項７の処理方法。
【請求項１０】
先行の命令の第１の演算器、または、第２の演算器を使用した演算結果を格納するレジスタ群のレジスタと後行の命令の前記第１の演算器を使用した演算結果を格納する前記レジスタとが同一の場合に、前記後行の命令のパイプラン段数を事前に設定したパイプライン段数調整値分増加させて動作させるための前記パイプライン段数調整値を設定する手順を処理装置に実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理装置、処理方法、および、プログラムに関する。
【背景技術】
【０００２】
パイプラインの段数を切り替える技術の一例が、特許文献１に記載されている。この技術は、低速クロックの場合、ｎ段のパイプラインとし、高速クロックの場合、ｎより大きいｍ段のパイプラインとするものである。
【０００３】
また、パイプラインのストール数に関する技術の一例が、特許文献２に記載されている。この技術は、プログラムカウンタが事前に設定した値になると、パイプライン処理を事前に設定したストール数だけストールさせるものである。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平９−３１９５７８号公報
【特許文献２】特開２００３−３１６５９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１、２は、実際のパイプライン空きの実測値に基づいて、パイプラインの段数を調整する構成をとっていないので、処理性能が向上しないという問題を持つ。
【０００６】
本発明の目的は、上記問題点を解決した処理装置、処理方法、および、プログラムを提供することである。
【課題を解決するための手段】
【０００７】
本発明の処理装置は、第１の演算器と、第２の演算器と、データを格納する複数のレジスタを含むレジスタ群と、
先行の命令の前記第１の演算器、または、前記第２の演算器を使用した演算結果を格納する前記レジスタと後行の命令の前記第１の演算器を使用した演算結果を格納する前記レジスタとが同一の場合に、前記後行の命令のパイプラン段数を事前に設定したパイプライン段数調整値分増加させて実行する制御部と、を含む。
【０００８】
本発明の処理方法は、先行の命令の第１の演算器、または、第２の演算器を使用した演算結果を格納するレジスタ群のレジスタと後行の命令の前記第１の演算器を使用した演算結果を格納する前記レジスタとが同一の場合に、前記後行の命令のパイプラン段数を事前に設定したパイプライン段数調整値分増加させて実行する。
【０００９】
本発明のプログラムは、先行の命令の第１の演算器、または、第２の演算器を使用した演算結果を格納するレジスタ群のレジスタと後行の命令の前記第１の演算器を使用した演算結果を格納する前記レジスタとが同一の場合に、前記後行の命令のパイプラン段数を事前に設定したパイプライン段数調整値分増加させて動作させるための前記パイプライン段数調整値を設定する手順を処理装置に実行させる。
【発明の効果】
【００１０】
本発明は、処理性能が向上するという効果を持つ。
【図面の簡単な説明】
【００１１】
【図１】本発明の第１の実施の形態の構成を示すブロック図である。
【図２】本発明の第１の実施の形態の動作を示すフローチャートである。
【図３】本発明の第１の実施の形態の動作を示すフローチャートである。
【図４】本発明の第１の実施の形態の動作を示すフローチャートである。
【図５】本発明の第１の実施の形態の効果を示すタイムチャートである。
【図６】本発明の第２の実施の形態の構成を示すブロック図である。
【図７】命令のフォーマットを示す説明図である。
【図８】本発明の第２の実施の形態の動作を示すタイムチャートである。
【図９】本発明の第２の実施の形態の動作を示すタイムチャートである。
【図１０】本発明の第２の実施の形態の動作を示すタイムチャートである。
【発明を実施するための形態】
【００１２】
次に、本発明の第１の実施の形態について図面を参照して詳細に説明する。
【００１３】
図１は、第１の実施の形態の構成を示すブロック図である。図１を参照すると、第１の実施の形態の処理装置１００は、制御部２００、レジスタ群３００、演算器４０１、および、演算器４０２を含む。図１には、説明を簡単にするため、演算器４０１、４０２の２つしか記載されていないが、３以上の任意の個数が可能である。
【００１４】
処理装置１００は、パイプライン方式の構成である。制御部２００は、命令を解読し、レジスタ群３００、および、演算器４０１、４０２を制御し、命令の実行を行う。また、制御部２００は、命令を解読・制御するステージである１段のパイプラインからなる。
【００１５】
レジスタ群３００は、命令で指定される複数のレジスタを含む。各レジスタは、データ等を格納する。また、レジスタ群３００は、制御部２００により指定されたレジスタ内のデータを演算器４０１、４０２に出力する。また、レジスタ群３００は、制御部２００により指定されたレジスタに演算器４０２、または、制御部２００からのデータを格納する。演算器４０１からのデータは、制御部２００経由で、レジスタに格納される。
【００１６】
演算器４０１、４０２は、レジスタ群３００から受け取ったデータに演算を行い演算結果のデータを出力する。演算器４０１は、たとえば、演算の途中結果を保持するレジスタ等を含み、ｐ段のパイプラインステージからなる。演算器４０２は、たとえば、演算の途中結果を保持するレジスタ等を含み、ｑ段（ｑ＞ｐ）のパイプラインステージからなる。
【００１７】
また、制御部２００は、事前に設定されるパイプライン段数調整値Ｚを内部に保持する。制御部２００は、演算器４０１の出力を受け取り、パイプランの段数をパイプライン段数調整値Ｚで調整して、レジスタ群３００のレジスタに出力する。
【００１８】
レジスタ群３００からデータを読み出すパイプラインステージ、および、演算器４０１、４０２の演算結果のデータをレジスタ群３００に格納するパイプラインステージの段数の合計をｒ段とする。演算器４０１を使用する命令の演算パイプライン段数を、Ｃ（＝ｐ＋ｒ）と定義し、演算器４０２を使用する命令の演算パイプライン段数を、Ｄ（＝ｑ＋ｒ）と定義する。
【００１９】
演算器４０１を使用する命令の演算は、Ｃ＋Ｚ段で実行され、演算器４０２を使用する命令の演算は、Ｄ段で実行される。また、レジスタ群３００のレジスタからのデータの読み出しのステージの開始を、演算の開始と呼ぶ。
【００２０】
次に、第１の実施の形態の動作について図面を参照して詳細に説明する。
【００２１】
まず、先行の命令の演算結果を格納するレジスタと、後続の命令で使用されるデータを格納するレジスタとが同一である場合の動作について説明する。図２は、第１の実施の形態の動作を示すフローチャートである。
【００２２】
図２を参照すると、制御部２００は、演算器４０１を使用し演算結果のデータをレジスタ群３００のあるレジスタ（Ｋレジスタとする）に格納する命令Ｉ０をパイプラン段数Ｃ＋Ｚ段で実行する（ステップＳ１１）。
【００２３】
次に、Ｋレジスタ内のデータを演算対象とする命令Ｉ１を取り出す（たとえば、図示しない命令バッファから）と（ステップＳ１２／Ｙ）、制御部２００は、命令Ｉ０の演算が開始されてからの経過サイクル数Ｎを調べる（ステップＳ１３）。
【００２４】
Ｎ≧Ｃ＋Ｚでないと（ステップＳ１３／Ｎ）、制御部２００は、命令Ｉ１の演算の開始を１サイクル遅らせ（ステップＳ１４）、ステップＳ１３の処理に戻る。
【００２５】
そして、Ｎ≧Ｃ＋Ｚであると（ステップＳ１３／Ｙ）、制御部２００は、命令Ｉ１の演算を開始する（ステップＳ１５）。命令Ｉ０の演算が開始されてからＣ＋Ｚサイクル経過すると、Ｋレジスタに演算結果のデータが格納される。
【００２６】
以上の動作において、演算器４０１を使用する命令Ｉ０の演算をパイプライン段数Ｃで実行する構成も可能である。この場合、ステップＳ１３は、命令Ｉ０の演算が開始されてからＣサイクル以上経過したかどうかを調べることになる。また、命令Ｉ１は、演算を実施する命令でなく、Ｋレジスタから、データを読み出す命令であってもよい。すなわち、後続の命令は、Ｋレジスタ内のデータを使用する命令であればよい。
【００２７】
次に、先行の命令の結果を格納するレジスタと、後続の命令の結果を格納するレジスタとが同一の場合の動作について説明する。図３は、第１の実施の形態の動作を示すフローチャートである。
【００２８】
図３を参照すると、制御部２００は、演算器４０２を使用し、演算結果のデータをＫレジスタに格納する命令Ｉ２をパイプライン段数Ｄで実行する（ステップＳ２１）。次に、演算器４０１を使用し演算結果のデータをＫレジスタに格納する命令Ｉ３を取り出すと（ステップＳ２２／Ｙ）、制御部２００は、命令Ｉ２の演算が開始されてからの経過サイクル数Ｎを調べる（ステップＳ２３）。
【００２９】
Ｎ＞Ｄ−（Ｃ＋Ｚ）でないと（ステップＳ２３／Ｎ）、制御部２００は、命令Ｉ３の演算の開始を１サイクル遅らせ（ステップＳ２４）、ステップＳ２３の処理に戻る。Ｎ＞Ｄ−（Ｃ＋Ｚ）であると（ステップＳ２３／Ｙ）、制御部２００は、命令Ｉ３の演算をパイプライン段数Ｃ＋Ｚで開始する（ステップＳ２５）。
【００３０】
また、命令Ｉ２が、命令Ｉ３と同様に演算器４０１を使用し、演算結果のデータをＫレジスタに格納する命令である場合について説明する。命令Ｉ２の演算をＣ＋Ｚ段で実行すると、Ｄ−（Ｃ＋Ｚ）＝（Ｃ＋Ｚ）−（Ｃ＋Ｚ）＝０である。ゆえに、この場合、命令Ｉ２の１サイクル後に命令Ｉ３が実行可能となる。
【００３１】
先行の命令の結果を格納するレジスタと、演算器４０１を使用する後続の命令の結果を格納するレジスタとが同一の場合のみ、演算器４０１の演算のパイプライン段数をＺ段増加させて実行する制御が可能である。また、演算器４０１の演算のパイプライン段数を常にＺ段増加させて実行する制御も可能である。
【００３２】
次に、パイプライン段数調整値Ｚの設定の動作の一例について説明する。
【００３３】
制御部２００は、パイプラインの空きサイクル（すなわち、命令が実行されていないサイクル）を計測し、その累積値に基づいてパイプライン段数調整値Ｚを設定する。
【００３４】
図４は、第１の実施の形態の動作を示すフローチャートである。図４を参照すると、制御部２００は、暫定パイプライン段数調整値Ｙを、初期値（“０”）に設定し、演算器４０１のパイプラン段数をｐ＋Ｙとする（ステップＳ３１）。
【００３５】
そして、制御部２００は、通常のプログラムの命令実行中に、一定時間Ｔ、パイプラインの空きサイクルの数を計測し、一定時間Ｔの空きサイクル測定値（累積値）として、内部に保持する（ステップＳ３２）。
【００３６】
次に、制御部２００は、空きサイクル測定値を保持した回数が、事前に設定した回数Ｍに達したかどうかを調べる（ステップＳ３３）。Ｍは、たとえば、演算器４０１に追加可能なパイプラン段数の最大値＋１である。この追加可能なパイプラン段数は、処理装置１００の設計により決定される。すなわち、Ｍは、パイプライン段数調整値Ｚのとりうる最大値＋１である。
【００３７】
初期値を“０”に設定し、空きサイクル測定値を測定するごとに、暫定パイプライン段数調整値Ｙを＋１する。追加可能なパイプライン段数の最大値は、Ｍ−１であり、Ｍ回の測定を行うことで、可能なすべての暫定パイプライン段数調整値Ｙにおける空きサイクル測定値が求められる。
【００３８】
空きサイクル測定値を保持した回数が、事前に設定した回数Ｍに達していないと（ステップＳ３３／Ｎ）、制御部２００は、暫定パイプライン段数調整値Ｙを“１”増加（Ｙ＝Ｙ＋１）させ、演算器４０１のパイプライン段数をｐ＋Ｙとする（ステップＳ３４）。
【００３９】
そして、制御部２００は、一定時間Ｔのパイプラインの空きサイクルの数の測定に戻る（ステップＳ３２）。
【００４０】
空きサイクル測定値を保持した回数が、回数Ｍに達すると（ステップＳ３３／Ｙ）、制御部２００は、測定を終了し、保持したＭ個の空きサイクル測定値をすべて比較し、最小値を検出する（ステップＳ３５）。
【００４１】
次に、制御部２００は、その最小値に対応する暫定パイプライン段数調整値Ｙをパイプライン段数調整値Ｚとする（ステップＳ３６）。
【００４２】
初期値を“０”以外の値に設定する制御も可能である。また、以上のパイプライン段数調整値Ｚの設定方法は、一例であって、これに限定されるわけではない。
【００４３】
次に、第１の実施の形態の効果について図面を参照して説明する。
【００４４】
図５は、第１の実施の形態の効果を示すタイムチャートである。縦軸は、パイプラインのステージＰ１〜Ｐ９を示す。また、最後のステージＰ９は、レジスタ群３００へ、演算結果のデータを格納するステージである。
【００４５】
図５を参照すると、命令ＩＡ（上述の命令Ｉ２に相当）、命令ＩＢ（上述の命令Ｉ３に相当）、命令ＩＥが実行される。命令ＩＡ、命令ＩＢは、同一のＫレジスタに演算結果を格納する命令である。命令ＩＥは、他種の命令である。ここで、命令ＩＡ、ＩＥのパイプラン段数Ｄは、“９”とし、命令ＩＢのパイプラン段数Ｃは“７”、パイプライン段数調整値Ｚは“２”である。
【００４６】
図５の上部は、命令ＩＢをパイプラン段数Ｃ（“７”）で実行した場合の動作を示す。図５の下部は、命令ＩＢをパイプラン段数Ｃ＋パイプライン段数調整値Ｚ（“７”＋“２”＝ “９”）で実行した場合の動作を示す。
【００４７】
先行の命令ＩＡによるＫレジスタへの演算結果のデータを、後行の命令ＩＢによる演算結果のデータで置き換えるようにするため、図５の上部では、命令ＩＢの実行は２サイクル遅らされる。そして、命令ＩＢに続いて命令ＩＥが実行される。
【００４８】
一方、図５の下部では、先行の命令ＩＡと後行の命令ＩＢのパイプラン段数が同一なので、命令ＩＢが遅らせずに実行される。そして、命令ＩＢに続いて命令ＩＥが実行される。下部においては、上部に比べ、命令ＩＥの実行完了が２サイクル分速い。
【００４９】
第１の実施の形態は、図５の下部に示されるように先行の命令の演算結果を格納するレジスタと後行の命令の演算結果を格納するレジスタとが同一の場合に、後行の命令のパイプラン段数をパイプライン段数調整値Ｚ分増加させる構成である。したがって、第１の実施の形態は、性能が向上するという効果を持つ。
【００５０】
また、第１の実施の形態は、パイプラインの空きサイクルを実測し、その累積値に基づいてパイプライン段数調整値Ｚを設定する構成である。したがって、適したパイプライン段数調整値Ｚを設定可能であり、性能が向上するという効果を持つ。
【００５１】
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。
【００５２】
図６は、第２の実施の形態の構成を示すブロック図である。図６を参照すると、第２の実施の形態の処理装置１００は、第１の実施の形態の一例であって、制御部２００、レジスタ群３００、演算器４０１、および、演算器４０２を含む。
【００５３】
制御部２００は、命令実行部２１０、空き設定値レジスタ２２０、調整値レジスタ２３０、調整レジスタ２４１、調整レジスタ２４２、および、選択部２５０を含む。
【００５４】
命令実行部２１０は、命令の取り出し（たとえば、図示しない命令バッファから）、命令の解読、および、命令の実行制御を行う。空き測定値レジスタ２２０は、空きサイクル測定値を格納する。空き測定値レジスタ２２０内の空きサイクル測定値のデータは、命令によりレジスタ群３００のレジスタに格納可能である。また、命令により空き測定値レジスタ２２０に初期値（説明を簡単にするため“０”とする）が格納可能である。
【００５５】
調整値レジスタ２３０は、パイプライン段数調整値Ｚを格納する。命令により、レジスタ群３００のレジスタから、パイプライン段数調整値Ｚのデータを調整値レジスタ２３０に格納可能である。また、調整値レジスタ２３０は、格納しているパイプライン段数調整値Ｚを命令実行部２１０に出力する。
【００５６】
また、調整レジスタ２４１は、演算器４０１の出力のデータをパイプラインステージ１段保持する。調整レジスタ２４２は、調整レジスタ２４１の出力のデータをパイプラインステージ１段保持する。すなわち、調整レジスタ２４１、２４２は、パイプラインの段数を増加させる機能を持つ。図６には、調整レジスタ２４１、２４２の２個が記載されているが、１以上の任意の個数が可能である。
【００５７】
選択部２５０は、調整値レジスタ２３０内のパイプライン段数調整値Ｚにしたがって、演算器４０１、調整レジスタ２４１、２４２の出力のいずれかを選択し、レジスタ群３００に出力する。たとえば、パイプライン段数調整値Ｚが、“０”、“１”、“２”であれば、選択部２５０は、それぞれ、演算器４０１、調整レジスタ２４１、調整レジスタ２４２を選択する。
【００５８】
次に、第２の実施の形態の動作について図面を参照して詳細に説明する。
【００５９】
説明を簡単にするため、２命令の連続実行について説明する。図７は、命令のフォーマットを示す説明図である。図７を参照すると、命令は、演算の種類（たとえば、演算器４０１、４０２のどちらを使用するのか）を示すオペレーションコードと、どのレジスタ内のデータを演算対象とするのかを示す２つのソースレジスタ指定と、演算結果を格納するレジスタを示す目的レジスタ指定を含む。
【００６０】
次に、図２に示される動作に対応する動作について詳細に説明する。図８は、第２の実施の形態の動作を示すタイムチャートである。図８を参照すると、命令Ｉ０は、演算器４０１を使用して演算結果をレジスタ群３００のＫレジスタに格納する命令であり、命令Ｉ１は、Ｋレジスタのデータを演算対象（または読み出す）とする命令である。
【００６１】
パイプランステージは、ＩＤ（命令の解読）、ＲＤ（レジスタ群３００のレジスタからのデータ読み出し）、Ｅ０〜Ｅ５（演算）、および、ＷＴ（レジスタ群３００のレジスタへの演算結果の書き込み）の９段である。ＩＤは、命令実行部２１０が命令を解読するステージである。命令実行部２１０は、命令を解読し、レジスタ群３００に、２つのソースレジスタ指定を出力する。
【００６２】
ＲＤは、レジスタ群３００がデータを出力するステージである。レジスタ群３００は、２つのソースレジスタ指定で指定されたレジスタからデータを読み出し、出力する。Ｅ０〜Ｅ５は、演算器４０１、４０２が演算を実行するするステージである。
【００６３】
ここでは、演算器４０１のパイプラインは、Ｅ０〜Ｅ３の４段であり、演算器４０２のパイプラインは、Ｅ０〜Ｅ５の６段である。調整レジスタ２４１、２４２は、演算器４０１に、パイプラインステージＥ４、Ｅ５を付加するためのレジスタである。また、パイプライン段数調整値Ｚは、“２”とする。
【００６４】
したがって、命令Ｉ０に関して、Ｃ＝６段（ＲＤ＋Ｅ０〜Ｅ３、ＷＴ）であるが、実行は、Ｃ＋Ｚ（８＝６＋２）段となる。また、Ｉ１命令に関して、Ｄ＝８段（ＲＤ＋Ｅ０〜Ｅ５、ＷＴ）である。サイクル９において、調整レジスタ２４２の命令Ｉ０による演算結果のデータが、選択部２５０で選択され、目的レジスタ指定で指定されたレジスタに格納される。
【００６５】
図８では、命令Ｉ０の演算が開始（すなわち、ＲＤステージが開始）されて、８（＝Ｃ＋Ｚ）サイクル経過してから、命令Ｉ１の演算が開始（すなわち、ＲＤステージが開始）されている。ＩＤステージにおいて、命令Ｉ１は、まだ、Ｋレジスタ内のデータを読み出していない。
【００６６】
次に、図３に示される動作に対応する動作について詳細に説明する。図９は、第２の実施の形態の動作を示すタイムチャートである。図９を参照すると、命令Ｉ２は、演算器４０２を使用して演算結果をレジスタ群３００のＫレジスタに格納する命令であり、命令Ｉ３は、演算器４０１を使用して演算結果をレジスタ群３００のＫレジスタに格納する命令である。
【００６７】
図８の場合と同様に、演算器４０１のパイプラインは、Ｅ０〜Ｅ３の４段であり、演算器４０２のパイプラインは、Ｅ０〜Ｅ５の６段である。また、パイプライン段数調整値Ｚは、“１”とする。よって、調整レジスタ２４１の出力が選択部２５０で選択される。
【００６８】
したがって、Ｉ２命令に関して、Ｄ＝８段（ＲＤ＋Ｅ０〜Ｅ５、ＷＴ）である。また、命令Ｉ３に関して、Ｃ＝６段（ＲＤ＋Ｅ０〜Ｅ３、ＷＴ）であるが、演算の実行は、Ｃ＋Ｚ（７＝６＋１）段となる。
【００６９】
図９では、命令Ｉ２の演算が開始（すなわち、ＲＤステージが開始）されて、２（＞１＝Ｄ−（Ｃ＋Ｚ））サイクル経過後に、命令Ｉ３の演算が開始（すなわち、ＲＤステージが開始）されている。
【００７０】
次に、パイプライン段数調整値Ｚの設定の動作について詳細に説明する。
【００７１】
パイプライン段数調整値Ｚを設定する調整プログラムを、処理装置１００が実行することにより、図４に示される動作が行われる。調整プログラムは、オペレーティングシステム、または、通常のアプリケーションプログラムが実行されている時に、並行して実行される。調整プログラムの実行には、オペレーティングシステムが関与すること（たとえば、実行の開始、割り込み処理等）が可能である。
【００７２】
パイプラインの空きサイクルの測定について図面を参照して説明する。図１０は、第２の実施の形態の動作を示すタイムチャートである。空白の部分が、パイプラインの空きサイクルである。上部は、演算器４０１を使用する命令、下部は、演算器４０２を使用する命令に関するものである。
【００７３】
また、図１０は、パイプライン段数調整値Ｚ＝０の場合を示す。また、図１０においては、ＷＴステージにおいて、演算器４０１、４０２の演算結果のデータを同時に、レジスタ群３００の異なるレジスタに格納可能としてある。
【００７４】
図１０を参照すると、命令実行部２１０は、Ｅ０ステージを観測ステージとし、Ｅ０ステージが、空きサイクルになっているかどうかを観測する。サイクル３において、演算器４０２のＥ０ステージは、空きサイクルであり、命令実行部２１０は、空き測定値レジスタ２２０の空きサイクル測定値を１増加させ、“０”から“１”にする。
【００７５】
サイクル４において、演算器４０１のＥ０ステージは、空きサイクルであり、命令実行部２１０は、空きサイクル測定値を１増加させ、“２”にする。サイクル７において、演算器４０１、および、演算器４０２のＥ０ステージは、両方とも空きサイクルであり、命令実行部２１０は、空きサイクル測定値を２（＝１＋１）増加させ、“４”にする。
【００７６】
次に、図４に対応する動作について詳細に説明する。調整プログラムの命令の実行により、命令実行部２１０は、レジスタ群３００のレジスタに暫定パイプライン段数調整値Ｙ（“０”）を格納する。さらに、そのパイプライン段数調整値Ｙを調整値レジスタ２３０に格納する。
【００７７】
次に、命令実行部２１０は、調整プログラムの命令の実行により、レジスタ群３００のレジスタに初期値（“０”）を設定し、その初期値をさらに空き測定値レジスタ２２０に設定する。空き測定値レジスタ２２０、調整値レジスタ２３０は、命令の目的レジスタ指定により指定される。
【００７８】
次に、通常のアプリケーションプログラム実行中、調整プログラムに含まれる命令により、命令実行部２１０は、図１０に示される動作を開始し、空き測定値レジスタ２２０に空きサイクル測定値を格納する。このとき、演算器４０１は、パイプライン段数４（＝４＋０）段で動作する。
【００７９】
調整プログラムは、時間をカウントしており、一定時間Ｔが経過すると、たとえば、調整プログラムの割り込みルーチンで、空きサイクルの測定を中止させる。命令実行部２１０は、割り込みルーチンの実行により、空きサイクルの測定を中止する。
【００８０】
次に、割り込みルーチンの実行により、命令実行部２１０は、空き測定値レジスタ２２０内の空きサイクル測定値（Ｓ０）をレジスタ群３００のレジスタに格納する。
【００８１】
次に、調整プログラムの実行により、命令実行部２１０は、レジスタ群３００のレジスタに暫定パイプライン段数調整値Ｙ（“１”）を格納する。さらに、そのパイプライン段数調整値Ｚを調整値レジスタ２３０に格納する。このとき、演算器４０１は、パイプライン段数５（＝４＋１）で動作する。
【００８２】
そして、命令実行部２１０は、空き測定値レジスタ２２０に初期値（“０”）を設定し、空きサイクルの測定を行い、空きサイクル測定値（Ｓ１）をレジスタ群３００のレジスタに格納する。
【００８３】
次に、同様に、命令実行部２１０は、暫定パイプライン段数調整値Ｙ（“２”）とし、演算器４０１のパイプライン段数６（＝４＋２）で動作させ、空きサイクルの測定を行い、空きサイクル測定値（Ｓ２）をレジスタ群３００のレジスタに格納する。ここで、Ｍ＝３であるとする。空きサイクル測定値が、３回（Ｓ０、Ｓ１、Ｓ２に対応）、レジスタ群３００のレジスタに格納（保持）されたので、空きサイクルの測定を終了する。
【００８４】
次に、調整プログラムは、空きサイクル測定値Ｓ０、Ｓ１、Ｓ２を比較する。そして、調整プログラムは、空きサイクル測定値が最小である暫定パイプライン段数調整値Ｙをパイプラン段数調整値Ｚとする。次に、調整プログラムの実行により、命令実行部２１０は、パイプラン段数調整値Ｚを調整値レジスタ２３０に設定する。以降は、演算器４０１は、パイプラン段数調整値Ｚで指定されたパイプライン段数で動作する。
【００８５】
以上では、Ｅ０ステージを観測ステージとしたが、Ｅ０ステージに限定されるわけではない。他のステージも観測ステージとなりうる。
【００８６】
以上では、演算器４０１をパイプラン段数の調整対象としたが、図示しない回路（演算、転送等を行う回路）も含め、複数個の回路を、パイプライン段数の調整対象とすることが可能である。
【００８７】
また、空き測定値レジスタ２２０、または、調整値レジスタ２３０をメモリアドレス空間上に配置し、ロード命令、ストア命令でアクセスする構成が可能である。
【００８８】
次に、第２の実施の形態の効果について説明する。
【００８９】
第２の実施の形態は、第１の実施の形態の一例なので、第１の実施の形態と同一の効果を持つ。また、第２の実施の形態は、調整プログラムの実行により、パイプラン段数調整値Ｚの設定等を実施する構成なので、ハードウェアの構成が簡単になるという効果を持つ。
【００９０】
次に、第３の実施の形態について図面を参照して詳細に説明する。第３の実施の形態は、第１の実施の形態の一例であり、構成は、図６に示される。
【００９１】
第２の実施の形態は、処理装置１００が、調整プログラムを実行することにより、パイプラン段数調整値Ｚの設定等を実施する構成であるが、第３の実施の形態は、調整プログラムの役割を個々のアプリケーションプログラムが実施する。すなわち、アプリケーションプログラムが、通常の処理の途中にパイプラン段数調整値Ｚの設定等のルーチンを含む構成である。
【００９２】
次に、第３の実施の形態の効果について説明する。
【００９３】
第３の実施の形態は、第１の実施の形態の一例なので、第１の実施の形態と同一の効果を持つ。また、第３の実施の形態は、アプリケーションプログラムの実行により、パイプラン段数調整値Ｚの設定等を実施する構成なので、プログラムが複数同時に動作しない。
【００９４】
したがって、第２の実施の形態に比べて、より的確なパイプラン段数調整値Ｚが設定可能であり、第２の実施の形態に比べて性能が向上する可能性が高いという効果を持つ。
【００９５】
上記の実施の形態の一部、または、全部は、以下の付記のようにも記載されうるが、以下には限られない。
【００９６】
［付記１］
第１の演算器と、第２の演算器と、データを格納する複数のレジスタを含むレジスタ群と、
先行の命令の前記第１の演算器、または、前記第２の演算器を使用した演算結果を格納する前記レジスタと後行の命令の前記第１の演算器を使用した演算結果を格納する前記レジスタとが同一の場合に、前記後行の命令のパイプラン段数を事前に設定したパイプライン段数調整値分増加させて実行する制御部と、
を含むことを特徴とする処理装置。
【００９７】
［付記２］
前記制御部は、パイプラインの空きサイクルを実測し、前記空きサイクルの累積値である空きサイクル測定値に基づいて前記パイプライン段数調整値を設定することを特徴とする付記１の処理装置。
【００９８】
［付記３］
前記制御部は、プログラムを実行することにより、前記パイプライン段数調整値を設定することを特徴とする付記２の処理装置。
【００９９】
［付記４］
前記プログラムがアプリケーションプログラムであることを特徴とする付記３の処理装置。
【０１００】
［付記５］
前記制御部は、前記第１の演算器のパイプライン段数を初期値から順次、暫定パイプライン段数調整値として増加させて命令を実行し、それぞれの前記暫定パイプライン段数調整値での前記空きサイクル測定値を実測し、最小の前記空きサイクル測定値に対応する前記暫定パイプライン段数調整値を前記パイプライン段数調整値とすることを特徴とする付記２、３、または、４の処理装置。
【０１０１】
［付記６］
前記制御部は、パイプラインのあるステージの空きサイクルを一定時間実測し、前記空きサイクル測定値とすることを特徴とする付記２、３、４、または、５の処理装置。
【０１０２】
［付記７］
前記制御部は、前記第１の演算器のパイプライン段数を、常に、前記パイプライン段数調整値分増加させて命令を実行することを特徴とする付記１、２、３、４、５、または、６の処理装置。
【０１０３】
［付記８］
先行の命令の第１の演算器、または、第２の演算器を使用した演算結果を格納するレジスタ群のレジスタと後行の命令の前記第１の演算器を使用した演算結果を格納する前記レジスタとが同一の場合に、前記後行の命令のパイプラン段数を事前に設定したパイプライン段数調整値分増加させて実行する処理方法。
【０１０４】
［付記９］
パイプラインの空きサイクルを実測し、前記空きサイクルの累積値である空きサイクル測定値に基づいて前記パイプライン段数調整値を設定することを特徴とする付記８の処理方法。
【０１０５】
［付記１０］
プログラムを実行することにより、前記パイプライン段数調整値を設定することを特徴とする付記９の処理方法。
【０１０６】
［付記１１］
前記プログラムがアプリケーションプログラムであることを特徴とする付記１０の処理方法。
【０１０７】
［付記１２］
前記第１の演算器のパイプライン段数を初期値から順次、暫定パイプライン段数調整値として増加させて命令を実行し、それぞれの前記暫定パイプライン段数調整値での前記空きサイクル測定値を実測し、最小の前記空きサイクル測定値に対応する前記暫定パイプライン段数調整値を前記パイプライン段数調整値とすることを特徴とする付記９、１０、または、１１の処理方法。
【０１０８】
［付記１３］
前記制御部は、パイプラインのあるステージの空きサイクルを一定時間実測し、前記空きサイクル測定値とすることを特徴とする付記９、１０、１１、または、１２の処理方法。
【０１０９】
［付記１４］
前記制御部は、前記第１の演算器のパイプライン段数を、常に、前記パイプライン段数調整値分増加させて命令を実行することを特徴とする付記９、１０、１１、１２、または、１３の処理装置。
【０１１０】
［付記１５］
先行の命令の第１の演算器、または、第２の演算器を使用した演算結果を格納するレジスタ群のレジスタと後行の命令の前記第１の演算器を使用した演算結果を格納する前記レジスタとが同一の場合に、前記後行の命令のパイプラン段数を事前に設定したパイプライン段数調整値分増加させて動作させるための前記パイプライン段数調整値を設定する手順を処理装置に実行させることを特徴とするプログラム。
【０１１１】
［付記１６］
前記第１の演算器のパイプライン段数を、常に、前記パイプライン段数調整値分増加させて動作させるための前記パイプライン段数調整値を設定する手順を前記処理装置に実行させることを特徴とする付記１６のプログラム。
【符号の説明】
【０１１２】
１００    処理装置
２００    制御部
２１０    命令実行部
２２０    空き測定値レジスタ
２３０    調整値レジスタ
２４１    調整レジスタ
２４２    調整レジスタ
２５０    選択部
３００    レジスタ群
４０１    演算器
４０２    演算器
【図１】
2014238777.tif 000003
【図２】
2014238777.tif 000004
【図３】
2014238777.tif 000005
【図４】
2014238777.tif 000006
【図５】
2014238777.tif 000007
【図６】
2014238777.tif 000008
【図７】
2014238777.tif 000009
【図８】
2014238777.tif 000010
【図９】
2014238777.tif 000011
【図１０】
2014238777.tif 000012