(57)【要約】【課題】プロセッサが有する演算リソースを有効に活用し、高い性能を得られるようにする。【解決手段】１つのベクトル命令に係る処理を複数の部分命令処理に分割して部分命令処理に係る実行指示をベクトル命令シーケンサより発行し、演算スロット選択部が所定の優先順位に従ってベクトル命令シーケンサからの実行指示が供給される演算スロットを選択して実行指示に応じた処理を実行させるとともに、演算スロット選択部がベクトル命令に基づく複数の実行指示を、その処理の内容や演算スロットへの実行指示の供給状況に応じて演算スロットに供給するようにして、１つのベクトル命令から分割された複数の実行指示を異なる演算スロットに発行可能にし、演算スロットを有効に活用して使用率を高められるようにする。【選択図】図１
2014002555.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算命令を有するベクトル命令処理を複数の部分命令処理に分割して当該部分命令処理に係る実行指示を発行する発行部と、
前記実行指示を受けて当該実行指示に応じた処理を行う複数の処理部と、
前記複数の処理部の内から１つの前記処理部を選択して、前記発行部から発行される前記実行指示を供給する選択部とを備え、
前記選択部は、前記ベクトル命令処理に基づく複数の前記実行指示を、前記実行指示に応じた処理の内容及び前記処理部への実行指示の供給状況に応じて前記処理部に供給することを特徴とするプロセッサ。
【請求項２】
前記選択部は、一の前記ベクトル命令処理に基づく前記実行指示であって、前記発行部から同時に発行された複数の前記実行指示を、異なる前記処理部に同時に供給し並列実行させることを特徴とする請求項１記載のプロセッサ。
【請求項３】
前記複数の処理部は、第１の処理を実行可能な第１の処理部と、前記第１の処理を実行可能であるとともに前記第１の処理とは異なる第２の処理を実行可能な第２の処理部とを含み、
前記選択部は、前記第２の処理を実行させる命令の前記実行指示を、前記第１の処理を実行させる命令の前記実行指示よりも優先して前記第２の処理部に供給することを特徴とする請求項１又は２記載のプロセッサ。
【請求項４】
前記処理部は、前記第１の処理を実行可能であるとともに前記第１の処理及び前記第２の処理とは異なる第３の処理を実行可能な第３の処理部を含み、
前記第２の処理部には、前記第１の処理を実行させる命令の前記実行指示及び前記第２の処理を実行させる命令の前記実行指示が供給され、
前記第３の処理部には、前記第１の処理を実行させる命令の前記実行指示及び前記第３の処理を実行させる命令の前記実行指示が供給され、
前記選択部は、前記第３の処理を実行させる命令の前記実行指示を、前記第１の処理を実行させる命令の前記実行指示よりも優先して前記第３の処理部に供給することを特徴とする請求項３記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関する。
【背景技術】
【０００２】
ベクトル命令は、１つの命令で多数のデータについて演算を行うような命令である。そのベクトル命令を実行可能なプロセッサが、ベクトル・プロセッサである。例えばベクトル命令では、プロセッサ内の連続したレジスタ領域に対して操作を行う。１つのベクトル命令で実行する演算処理の数は、ベクトル・プロセッサが実際に有する演算器の数に制限されず、むしろベクトル・プロセッサが実際に有する演算器の数より多く設定されることが普通である。ベクトル・プロセッサが有する演算器の数よりもベクトル命令で実行する演算処理の数が多い場合、ベクトル・プロセッサは、そのベクトル命令に係るすべての演算処理を１サイクルで処理することができない。
【０００３】
例えば、図６（Ａ）に示した命令“Add  r0-5 + r6-11 ⇒ r12-17”は、レジスタｒｉとレジスタｒ（ｉ＋６）とのデータを加算した結果をレジスタｒ（ｉ＋１２）に格納するベクトル命令である（ｉは添え字であり、ｉ＝０、１、２、３、４、５）。すなわち、命令“Add  r0-5 + r6-11 ⇒ r12-17”は、この１つのベクトル命令で６つの加算演算を指示する。ベクトル・プロセッサが、６つの加算器を備えていれば命令“Add  r0-5 + r6-11 ⇒ r12-17”による処理を１サイクルで実行することが可能であるが、それだけの加算器を備えているとは限らない。命令“Add  r0-5 + r6-11 ⇒ r12-17”を実行するために、ベクトル・プロセッサ内部では、この１つのベクトル命令を、図６（Ｂ）に示すように複数の部分命令Add  0-0〜Add  0-5の集まりのようにみなしてベクトル命令を分割して実行する。すなわち、ベクトル・プロセッサは、その内部で、ベクトル命令による処理を、処理自体の種別が同じであるが、演算に使用するデータ（レジスタ）が異なる複数の処理に分割して実行する。
【０００４】
図７は、ベクトル命令を実行可能なベクトル・プロセッサの構成例を示す図である。図７において、ＩＦは命令フェッチステージ、ＩＤは命令デコードステージ、ＲＲはレジスタ読み出しステージ、ＥＸは演算実行ステージ、ＷＢはレジスタ書き込みステージである。図７に示したベクトル・プロセッサは、５ステージのパイプライン構成のプロセッサであり、４つの演算スロットを有している。
【０００５】
命令フェッチステージＩＦでは、ベクトル命令が命令メモリ１０１から読み出される。ベクトル命令には、レジスタファイル１０５の複数のエントリ（データ）に対して一括して演算を指示するベクトル命令を含む。命令デコードステージＩＤでは、演算スロット選択部１０２が、４つの演算スロット１０４−１〜１０４−４の内から、命令フェッチステージＩＦにおいて読み出された命令に係る処理を実行する演算スロットを選択する。命令フェッチステージＩＦにおいて命令メモリ１０１から読み出された命令は、演算スロット選択部１０２によって選択されたスロットに対応するベクトル命令シーケンサ１０３−１〜１０３−４に格納される。また、命令デコードステージＩＤでは、ベクトル命令シーケンサ１０３−１〜１０３−４が、格納されているベクトル命令を複数の部分命令に分割して、対応する演算スロット１０４−１〜１０４−４に順次発行する。
【０００６】
レジスタ読み出しステージＲＲでは、レジスタファイル１０５から読み出したデータ及びレジスタファイル１０５へ書き込む前の演算結果であるバイパスデータの内から、演算処理に使用するデータがマルチプレクサ１０７、１０８により選択される。マルチプレクサ１０７、１０８によって選択されたデータは、ソースデータとしてパイプラインラッチ１０９に格納される。演算実行ステージＥＸでは、命令が演算命令であれば、命令によって指示された演算処理が演算器１１０Ａ、１１０Ｂにより実行され、演算結果がパイプラインラッチ１１２に格納される。また、演算実行ステージＥＸでは、命令がロード・ストア命令であれば、命令によって指示されたデータメモリ１０６へのアクセスがロード・ストアユニット１１１により実行され、データメモリ１０６に対してデータの読み出しや書き込みが行われる。レジスタ書き込みステージＷＢでは、演算実行ステージＥＸでの演算結果がレジスタファイル１０５の指定されたレジスタに書き込まれる。
【０００７】
ここで、図７に示した例では、第１の演算スロット１０４−１及び第２の演算スロット１０４−２が有する演算器１１０Ａは、乗算器を有し乗算命令が実行可能である。一方、
第３の演算スロット１０４−３及び第４の演算スロット１０４−４が有する演算器１１０Ｂは、乗算器を有していない。また、第３の演算スロット１０４−３及び第４の演算スロット１０４−４が、ロード・ストアユニット１１１を有する。したがって、演算スロット選択部１０２は、命令メモリ１０１から読み出されたベクトル命令が乗算命令である場合には命令に係る処理を実行する演算スロットとして、第１の演算スロット１０４−１又は第２の演算スロット１０４−２を選択する。また、演算スロット選択部１０２は、命令メモリ１０１から読み出されたベクトル命令がロード・ストア命令である場合には命令に係る処理を実行する演算スロットとして、第３の演算スロット１０４−３又は第４の演算スロット１０４−４を選択する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００２−５５７８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
図７に構成例を示したベクトル・プロセッサにおいて、１サイクルに１ベクトル命令を命令メモリ１０１から読み出して発行可能であるとする。また、演算スロット選択部１０２は、空いている演算スロットが複数存在する場合には、第１の演算スロット１０４−１、第２の演算スロット１０４−２、第３の演算スロット１０４−３、第４の演算スロット１０４−４の順で、第１の演算スロット１０４−１から優先的に命令を発行するものとする。
【００１０】
このような場合、命令メモリ１０１から読み出されたベクトル命令は、演算スロット選択部１０２により選択された、ある１つのベクトル命令シーケンサ１０３−１〜１０３−４に格納される。そして、ベクトル命令シーケンサ１０３−１〜１０３−４によって、格納された１つのベクトル命令から分割された複数の部分命令は、すべて同じ演算スロット１０４−１〜１０４−４に対して発行される。例えば、ベクトル命令Add  0がベクトル命令シーケンサ１０３−１に格納された場合には、図７に示すようにベクトル命令Add  0から分割されたすべての部分命令Add  0-1、Add  0-2、Add  0-3、…が第１の演算スロット１０４−１に対して発行される。そのため、例えば関数呼び出しの先頭などでは、すべての演算スロット１０４−１〜１０４−４にて命令に係る処理を実行する状態となるまでに、少なくとも４サイクルを要することになり、その間、幾つかの演算スロット１０４−１〜１０４−４では処理を行っていない。また、例えば第１の演算スロット１０４−１及び第２の演算スロット１０４−２が、先行のベクトル命令に係る処理を実行しているときに、命令メモリ１０１から読み出された後続のベクトル命令が乗算命令である場合、演算スロット１０４−１又は１０４−２での処理が完了して空くまで待機しなければならない。
【００１１】
本発明は、プロセッサが有する演算リソースを有効に活用し、高い性能を得ることができるようにすることを目的とする。
【課題を解決するための手段】
【００１２】
プロセッサの一態様は、複数の演算命令を有するベクトル命令処理を複数の部分命令処理に分割して当該部分命令処理に係る実行指示を発行する発行部と、受けた実行指示に応じた処理を行う複数の処理部と、複数の処理部の内から１つの処理部を選択し、発行部から発行される実行指示を供給する選択部とを備える。選択部は、ベクトル命令処理に基づく複数の実行指示を、実行指示に応じた処理の内容及び処理部への実行指示の供給状況に応じて処理部に供給する。
【発明の効果】
【００１３】
開示のプロセッサは、ベクトル命令処理に基づく複数の実行指示を処理部に適切に供給して処理を実行することができ、演算リソースを有効に活用して使用率を高め性能向上を図ることができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施形態におけるプロセッサの構成例を示す図である。
【図２】本実施形態におけるベクトル命令シーケンサの構成例を示す図である。
【図３】本実施形態における演算スロット選択部及びクロスバーの構成例を示す図である。
【図４】本実施形態及び一般的な技術での処理動作の例を示す図である。
【図５】本実施形態及び一般的な技術での処理動作の他の例を示す図である。
【図６】ベクトル命令を説明するための図である。
【図７】ベクトル命令を実行可能なプロセッサの構成例を示す図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施形態を図面に基づいて説明する。
【００１６】
図１は、本発明の一実施形態によるプロセッサの構成例を示す図である。本実施形態におけるプロセッサは、ベクトル命令を実行可能なベクトル・プロセッサであり、その内部で、ベクトル命令による処理を、処理自体の種別が同じであるが、演算に使用するデータ（レジスタ）が異なる複数の処理に分割して実行する。なお、以下の説明では、ベクトル命令による処理を分割した複数の処理の各処理に係る実行指示を、ベクトル命令の部分命令とも称する。言い換えれば、本実施形態におけるプロセッサは、その内部で、１つのベクトル命令を複数の部分命令の集まりのようにみなして、ベクトル命令を部分命令に分割して処理を実行する。
【００１７】
図１において、ＩＦは命令フェッチステージ、ＩＤは命令デコードステージ、ＲＲはレジスタ読み出しステージ、ＥＸは演算実行ステージ、ＷＢはレジスタ書き込みステージである。図１に示すプロセッサは、５ステージのパイプライン構成のベクトル・プロセッサであり、４つの演算スロットを有している。
【００１８】
命令メモリ１１には、プロセッサにてプログラムに応じた処理を実行するための命令列が格納されている。命令メモリ１１に格納されるベクトル命令には、レジスタファイル１６の複数のエントリ（データ）に対して一括して演算を指示するベクトル命令を含む。
【００１９】
ベクトル命令シーケンサ１２Ａ〜１２Ｄは、命令メモリ１１から読み出されたベクトル命令が格納される。ベクトル命令シーケンサ１２Ａ〜１２Ｄは、格納されたベクトル命令を、ベクトル命令におけるベクトル長（Vector Length）個の部分命令に分割して発行する。ベクトル命令シーケンサ１２Ａ〜１２Ｄのそれぞれは、１つのベクトル命令が格納されると、そのベクトル命令が分割された部分命令のすべてを発行し終えるまで、次のベクトル命令が格納されない。
【００２０】
演算スロット選択部１３は、４つの演算スロット１５−１〜１５−４の内から、ベクトル命令シーケンサ１２Ａ〜１２Ｄから発行される部分命令に係る処理を実行する演算スロットを選択する。演算スロット選択部１３は、各ベクトル命令シーケンサ１２Ａ〜１２Ｄより演算スロット１５−１〜１５−４に対する部分命令の発行に係るリクエストを受け取る。演算スロット選択部１３は、受け取ったリクエストに対して、所定の優先順位に従ってベクトル命令シーケンサ１２Ａ〜１２Ｄに演算スロット１５−１〜１５−４を割り当てる。クロスバー１４は、演算スロット選択部１３による割り当てに応じて、ベクトル命令シーケンサ１２Ａ〜１２Ｄから発行される部分命令を演算スロット１５−１〜１５−４に供給する。
【００２１】
演算スロット１５−１〜１５−４は、ベクトル命令シーケンサ１２Ａ〜１２Ｄから発行される部分命令に係る処理を行う。演算スロット１５−１〜１５−４は、マルチプレクサ１８、１９、パイプラインラッチ２０、２３、及び演算器２１Ａ（又は２１Ｂ）を有する。また、第３の演算スロット１５−３及び第４の演算スロット１５−４は、さらにロード・ストアユニット２２を有する。
【００２２】
マルチプレクサ１８は、レジスタファイル１６へ書き込む前の演算結果であるバイパスデータの内から命令実行ステージにおいて使用されるデータを選択する。また、マルチプレクサ１９は、レジスタファイル１６から読み出したデータ及びマルチプレクサ１８により選択されたデータの内から命令実行ステージにおいて使用されるデータを選択する。マルチプレクサ１９により選択されたデータは、パイプラインラッチ２０に格納される。
【００２３】
演算器２１Ａ、２１Ｂは、供給される命令が演算命令である場合に、命令によって指示された演算処理を実行する。演算器２１Ａ、２１Ｂは、例えば加算命令に応じた加算演算などを実行可能である。演算器２１Ａ、２１Ｂによる演算結果は、パイプラインラッチ２３に格納される。ここで、本実施形態においては、第１の演算スロット１５−１及び第２の演算スロット１５−２が有する演算器２１Ａは、乗算器を有し乗算命令が実行可能である。一方、第３の演算スロット１５−３及び第４の演算スロット１５−４が有する演算器２１Ｂは、乗算器を有していない。ロード・ストアユニット２２は、供給される命令がロード・ストア命令である場合に、命令によって指示されたデータメモリ１７へのアクセスを実行し、データメモリ１７に対するデータの読み出しや書き込みを行う。
【００２４】
図２は、本実施形態におけるベクトル命令シーケンサ１２の構成例を示す図である。バッファ群３１は、命令メモリ１１から読み出されベクトル命令シーケンサ１２に格納されるベクトル命令の命令情報を保持する複数のバッファを有する。バッファ３２は、ベクトル命令のオペコードを保持する。バッファ３３、３４は、ベクトル命令に係る処理で使用されるデータ（ソースデータ）が格納されているソースレジスタのレジスタ番号をそれぞれ保持する。バッファ３５は、ベクトル命令に係る処理により得られるデータ（演算結果）を格納するディスティネーションレジスタのレジスタ番号を保持する。
【００２５】
バッファ３２〜３５に保持される情報は、命令メモリ１１からのベクトル命令の発行時（ベクトル命令シーケンサ１２へのベクトル命令の格納時）にバッファ３２〜３５へ書き込まれる。また、バッファ３３、３４、３５に書き込まれるレジスタ番号は、ベクトル命令で処理の対象とするレジスタ番号の初期値である。例えば前述した命令“Add  r0-5 + r6-11 ⇒ r12-17”であれば、バッファ３３、３４、３５には“０”、“６”、“１２”がレジスタ番号として書き込まれて保持される。
【００２６】
レジスタ３６は、ベクトル命令におけるベクトル長が格納される。バリッド制御部３７は、バッファ群３１（バッファ３２〜３５）に保持されているエントリが有効であるか否かを示すバリッド情報を制御する。カウンタ３８は、ベクトル命令シーケンサ１２からの部分命令の発行回数をカウントする。
【００２７】
命令メモリ１１からのベクトル命令をベクトル命令シーケンサ１２に格納するとき、バッファ群３１（バッファ３２〜３５）にベクトル命令の命令情報が書き込まれるとともに、そのベクトル命令におけるベクトル長がレジスタ３６に設定される。また、バリッド制御部３７に信号ｓｅｔが入力されてエントリが有効であることを示すバリッド情報がセットされるとともに、カウンタ３８のカウント値が信号ｒｅｓｅｔにより初期値“０”にリセットされる。
【００２８】
部分命令（ベクトル命令による処理を分割した処理の実行指示）の発行が許可されると、ベクトル命令シーケンサ１２は、すでに発行した部分命令の発行回数に応じた部分命令を発行する。すなわち、ベクトル命令シーケンサ１２は、バッファ３２に保持されているオペコードを有し、バッファ３３、３４、３５に格納されているレジスタ番号にカウンタ３８のカウント値を加算した値を演算対象のレジスタ番号とする部分命令を発行する。また、ベクトル命令シーケンサ１２は、部分命令を発行する度に、カウンタ３８のカウント値を１インクリメントする。ベクトル命令シーケンサ１２は、この動作を繰り返して、レジスタ３６に設定されたベクトル長回分の部分命令を発行する。
【００２９】
そして、ベクトル長回分の部分命令を発行することで、カウンタ３８のカウント値がレジスタ３６に設定されたベクトル長の値に達すると、ベクトル命令シーケンサ１２では、バリッド制御部３７に信号ｒｅｓｅｔが入力されてバリッド情報がリセットされる。これにより、バッファ３２〜３５に保持されているエントリが無効にされ（インバリデイトされ）、このベクトル命令シーケンサ１２への次のベクトル命令の供給が可能になる。
【００３０】
図３に、本実施形態における演算スロット選択部１３及びクロスバー１４の構成例を示す。実行スロット選択部１３は、部分命令の処理の内容や演算スロットへの部分命令の投入状況に応じて、部分命令について演算スロット１５−１〜１５−４の割り当てを行う。本実施形態において、実行スロット選択部１３は、次の（１）〜（３）に基づく優先順位に従って、発行が要求される部分命令について演算スロット１５−１〜１５−４を割り当てる。なお、この割り当ては１サイクル毎に行う。
（１）  乗算器を含む演算器２１Ａを有する第１の演算スロット１５−１及び第２の演算スロット１５−２には、乗算命令を優先的に投入する。
（２）  ロード・ストアユニット２２を有する第３の演算スロット１５−３及び第４の演算スロット１５−４には、ロード・ストア命令を優先的に投入する。
（３）  （１）及び（２）による割り当ての結果、空いている演算スロットがあれば、先行するベクトル命令の部分命令から優先的に投入する。
【００３１】
図３は、本実施形態における演算スロット選択部１３及びクロスバー１４の構成例を示す図である。図１において、ＣＳＰ回路４１、４２、４３は、入力される複数のリクエスト信号の中から最も優先順位が高い信号を選択するロジックをリングバッファ上に実現した回路である。ＣＳＰ回路４１、４２、４３は、リングバッファに保持された複数のリクエスト信号から、ヘッド（先頭）に一番近い有効なリクエストに対してアクノリッジを返すように動作する回路である。ＣＳＰ回路の各々は、例えばDana S. Henry, Bradley C. Kuszmaul, Gabriel H. Loh, and Rahul Sami, “Circuits for Wide-Window Superscalar Processors,” ISCA'00 Proceedings of the 27th annual international symposium on Computer architectureに記載されたcyclic segmented prefix回路と同等の回路である。
【００３２】
ＣＳＰ回路４１−１、４１−２は、乗算命令の発行に係るリクエスト信号ＲｅｑＭについて処理を行う。ＣＳＰ回路４１−１、４１−２には、ベクトル命令シーケンサ１２Ａ〜１２Ｄの各々から２スロット分に対応するリクエスト信号ＲｅｑＭが入力可能である。乗算器を有する第１の演算スロットに対応するＣＳＰ回路４１−１は、あるサイクルにて１つ以上のリクエスト信号ＲｅｑＭがアサートされている場合に、その中で最も優先順位が高いリクエスト信号を選択する。また、乗算器を有する第２の演算スロットに対応するＣＳＰ回路４１−２は、ＣＳＰ回路４１−１での選択結果を反映させてリクエスト信号ＲｅｑＭについて処理を行う。すなわち、第２の演算スロットに対応するＣＳＰ回路４１−２は、あるサイクルにて２つ以上のリクエスト信号ＲｅｑＭがアサートされている場合に、その中で２番目に優先順位が高いリクエスト信号を選択する。
【００３３】
ＣＳＰ回路４２−３、４２−４は、ロード・ストア命令の発行に係るリクエスト信号ＲｅｑＬＳについて処理を行う。ＣＳＰ回路４２−３、４２−４には、ベクトル命令シーケンサ１２Ａ〜１２Ｄの各々から２スロット分に対応するリクエスト信号ＲｅｑＬＳが入力可能である。ロード・ストアユニットを有する第３の演算スロットに対応するＣＳＰ回路４２−３は、あるサイクルにて１つ以上のリクエスト信号ＲｅｑＬＳがアサートされている場合に、その中で最も優先順位が高いリクエスト信号を選択する。また、ロード・ストアユニットを有する第４の演算スロットに対応するＣＳＰ回路４２−４は、ＣＳＰ回路４２−３での選択結果を反映させてリクエスト信号ＲｅｑＬＳについて処理を行う。すなわち、第４の演算スロットに対応するＣＳＰ回路４２−４は、あるサイクルにて２つ以上のリクエスト信号ＲｅｑＬＳがアサートされている場合に、その中で２番目に優先順位が高いリクエスト信号を選択する。
【００３４】
ＣＳＰ回路４３−１、４３−２、４３−３、４３−４は、乗算命令とロード・ストア命令とを除いたその他の部分命令の発行に係るリクエスト信号ＲｅｑＯについて処理を行う。ＣＳＰ回路４３−１、４３−２、４３−３、４３−４には、ベクトル命令シーケンサ１２Ａ〜１２Ｄの各々から４スロット分に対応するリクエスト信号ＲｅｑＯが入力可能である。各演算スロットにそれぞれ対応するＣＳＰ回路４３−１〜４３−４は、リクエスト信号ＲｅｑＯがアサートされている場合に、すでに選択されているものを除いたアサートされているリクエスト信号ＲｅｑＯの中で最も優先順位が高いリクエスト信号を選択する。
【００３５】
セレクタ４４−１、４４−２、４４−３、４４−４は、優先順位つきのセレクタである。第１の演算スロットに対応するセレクタ４４−１は、ＣＳＰ回路４１−１の出力がアサートされていればそれを選択し、そうでない場合にはＣＳＰ回路４３−１の出力を選択する。同様に、第２の演算スロットに対応するセレクタ４４−２は、ＣＳＰ回路４１−２の出力がアサートされていればそれを選択し、そうでない場合にはＣＳＰ回路４３−２の出力を選択する。また、第３の演算スロットに対応するセレクタ４４−３は、ＣＳＰ回路４２−３の出力がアサートされていればそれを選択し、そうでない場合にはＣＳＰ回路４３−３の出力を選択する。第４の演算スロットに対応するセレクタ４４−４は、ＣＳＰ回路４２−４の出力がアサートされていればそれを選択し、そうでない場合にはＣＳＰ回路４３−４の出力を選択する。
【００３６】
セレクタ４４−１、４４−２、４４−３、４４−４は、選択結果に従って、どの部分命令を選択するかのインデックスをセレクタ４５−１、４５−２、４５−３、４５−４に供給する。また、セレクタ４４−１、４４−２、４４−３、４４−４での選択結果は、各ベクトル命令シーケンサ１２Ａ〜１２Ｄにも供給され、カウンタのカウント値が更新される。このようにして、発行が要求される部分命令についての演算スロットの割り当てが行われる。図３に示した例では、ＣＳＰ回路４１、４２、４３及びセレクタ４４を含む回路が、演算スロット選択部１３に対応する。
【００３７】
セレクタ４５−１、４５−２、４５−３、４５−４は、ベクトル命令シーケンサ１２Ａ〜１２Ｄの各々から４スロット分に対応する部分命令が入力可能となっている。セレクタ４５−１〜４５−４の各々は、対応するセレクタ４４−１〜４４−４より供給されるインデックスに従って、部分命令を選択して対応する演算スロットに供給する。図３に示した例では、セレクタ４５−１〜４５−４を含む回路が、クロスバー１４に対応する。
【００３８】
次に、本実施形態によるプロセッサの動作について説明する。
命令フェッチステージＩＦでは、ベクトル命令が命令メモリ１１から読み出されてベクトル命令シーケンサ１２Ａ〜１２Ｄに格納される。命令デコードステージＩＤでは、ベクトル命令シーケンサ１２Ａ〜１２Ｄが、格納されているベクトル命令を複数の部分命令に分割して、これら部分命令の発行を要求するリクエスト信号を演算スロット選択部１３に出力する。そして、演算スロット選択部１３が、ベクトル命令シーケンサ１２Ａ〜１２Ｄからのリクエスト信号に基づいて、所定の優先順位に従い部分命令について演算スロット１５−１〜１５−４の割り当てを行う。発行する部分命令は、演算スロット選択部１３による割り当てに応じて、クロスバー１４を介し各演算スロット１５−１〜１５−４に供給される。
【００３９】
レジスタ読み出しステージＲＲでは、レジスタファイル１６から読み出したデータ及びバイパスデータの内から、命令に係る処理に使用するデータがマルチプレクサ１８、１９により選択され、ソースデータ（ソースオペランド）としてパイプラインラッチ２０に格納される。演算実行ステージＥＸでは、命令が演算命令であれば、命令によって指示された演算処理が演算器２１Ａ、２１Ｂにより実行され、演算結果がパイプラインラッチ２３に格納される。また、演算実行ステージＥＸでは、命令がロード・ストア命令であれば、命令によって指示されたデータメモリ１７へのアクセスがロード・ストアユニット２２により実行され、データメモリ１７に対してデータの読み出しや書き込みが行われる。レジスタ書き込みステージＷＢでは、演算実行ステージＥＸでの演算結果がレジスタファイル１６の指定されたレジスタに書き込まれる。
【００４０】
次に、本実施形態におけるプロセッサ及び一般的な技術での処理動作の例について説明する。なお、以下では、１サイクルに１ベクトル命令を命令メモリ１１から読み出して発行可能であるとする。また、４本の演算スロットを有し、第１の演算スロットと第２の演算スロットとだけが乗算命令を実行可能であり、第３の演算スロットと第４の演算スロットとだけがロード・ストア命令を実行可能であるとする。
【００４１】
また、本実施形態における演算スロット選択部は、前述のように以下の（１）〜（３）の規定に従って、部分命令について演算スロットの割り当てを行うものとする。
（１）  第１の演算スロット及び第２の演算スロットには、乗算命令を優先的に投入する。このとき、第１の演算スロットから優先的に乗算命令を投入する。
（２）  第３の演算スロット及び第４の演算スロットには、ロード・ストア命令を優先的に投入する。このとき、第３の演算スロットから優先的にロード・ストア命令を投入する。
（３）  （１）及び（２）による割り当ての結果、空いている演算スロットがあれば、先行するベクトル命令（乗算命令及びロード・ストア命令を除く）の部分命令から優先的に投入する。このとき、第１の演算スロット、第２の演算スロット、第３の演算スロット、第４の演算スロットの順で、第１の演算スロットから優先的に部分命令を投入する。
【００４２】
図４は、関数呼び出しの先頭などにおいて、ベクトル命令（加算命令）Add  0→ベクトル命令（加算命令）Add  1→ベクトル命令（加算命令）Add  2→ベクトル命令（加算命令）Add  3の順にベクトル命令が発行されるときの処理動作の例を説明するための図である。図４（Ａ）に一般的な技術での処理動作を示し、図４（Ｂ）に本実施形態におけるプロセッサでの処理動作を示す。なお、ベクトル命令間に依存関係はなく、各ベクトル命令のベクトル長は６、すなわち各ベクトル命令は６分割されて実行されるものとする。
【００４３】
図４（Ａ）に示す一般的な技術での処理動作では、まずサイクル１にて、命令メモリ１１から読み出されたベクトル命令Add  0が、第１の演算スロットに割り当てられる。そして、サイクル１〜サイクル６の期間において、ベクトル命令Add  0の部分命令Add  0-0〜Add  0-5に係る処理が、１サイクル毎に順次実行される。次のサイクル２にて、命令メモリ１１から読み出されたベクトル命令Add  1が、第２の演算スロットに割り当てられる。そして、サイクル２〜サイクル７の期間において、ベクトル命令Add  1の部分命令Add  1-0〜Add  1-5に係る処理が、１サイクル毎に順次実行される。同様にして、サイクル３にて命令メモリ１１から読み出されたベクトル命令Add  2、及びサイクル４にて命令メモリ１１から読み出されたベクトル命令Add  3が、第３の演算スロット及び第３の演算スロットにそれぞれ割り当てられる。そして、サイクル３〜サイクル８の期間において、ベクトル命令Add  2の部分命令Add  2-0〜Add  2-5に係る処理が順次実行され、サイクル４〜サイクル９の期間において、ベクトル命令Add  3の部分命令Add  3-0〜Add  3-5に係る処理が順次実行される。
【００４４】
一方、本実施形態におけるプロセッサでは、図４（Ｂ）に示すように、サイクル１にて、命令メモリ１１からベクトル命令Add  0が読み出されてベクトル命令シーケンサに格納され部分命令Add  0-0〜Add  0-5に分割される。そして、サイクル１において、この部分命令Add  0-0〜Add  0-5に係る演算スロットの割り当てを行い、サイクル１ではベクトル命令Add  0の部分命令Add  0-0〜Add  0-3に係る処理が並列して実行される。
【００４５】
次のサイクル２にて、命令メモリ１１からベクトル命令Add  1が読み出されてベクトル命令シーケンサに格納され部分命令Add  1-0〜Add  1-5に分割される。そして、サイクル２において、ベクトル命令Add  0の部分命令Add  0-4〜Add  0-5及びベクトル命令Add  1の部分命令Add  1-0〜Add  1-5に係る演算スロットの割り当てを行う。その結果、サイクル２では先行するベクトル命令Add  0の部分命令Add  0-4〜Add  0-5に係る処理が第１の演算スロット及び第２の演算スロットで、後続のベクトル命令Add  1の部分命令Add  1-0〜Add  1-1に係る処理が第３の演算スロット及び第４の演算スロットで、並列して実行される。なお、サイクル２において、ベクトル命令Add  0についての処理が終了するので、ベクトル命令Add  0が格納されていたベクトル命令シーケンサへの新たなベクトル命令の格納が可能になる。
【００４６】
続く、サイクル３にて、命令メモリ１１からベクトル命令Add  2が読み出されてベクトル命令シーケンサに格納され部分命令Add  2-0〜Add  2-5に分割される。そして、サイクル３において、ベクトル命令Add  1の部分命令Add  1-2〜Add  1-5及びベクトル命令Add  2の部分命令Add  2-0〜Add  2-5に係る演算スロットの割り当てを行う。その結果、サイクル３では先行するベクトル命令Add  1の部分命令Add  1-2〜Add  1-5に係る処理が第１〜第４の演算スロットで並列して実行される。このサイクル３において、ベクトル命令Add  1についての処理が終了するので、ベクトル命令Add  1が格納されていたベクトル命令シーケンサへの新たなベクトル命令の格納が可能になる。
【００４７】
次のサイクル４にて、命令メモリ１１からベクトル命令Add  3が読み出されてベクトル命令シーケンサに格納され部分命令Add  3-0〜Add  3-5に分割される。そして、サイクル４において、ベクトル命令Add  2の部分命令Add  2-0〜Add  2-5及びベクトル命令Add  3の部分命令Add  3-0〜Add  3-5に係る演算スロットの割り当てを行う。その結果、サイクル４では先行するベクトル命令Add  2の部分命令Add  2-0〜Add  2-3に係る処理が第１〜第４の演算スロットで並列して実行される。
【００４８】
以下、同様にして、サイクル５においてベクトル命令Add  2の部分命令Add  2-4〜Add  2-5及びベクトル命令Add  3の部分命令Add  3-0〜Add  3-1に係る処理が第１〜第４の演算スロットで並列して実行される。また、サイクル６においてベクトル命令Add  3の部分命令Add  3-2〜Add  3-5に係る処理が第１〜第４の演算スロットで並列して実行される。
【００４９】
図４（Ａ）に示した一般的な技術での処理動作では、１つのベクトル命令に係る処理が固定された１つの演算スロットで実行されるので、関数呼び出しの先頭や末尾などにおいて、何ら処理をしていない演算スロットが存在することになる。一方、本実施形態におけるプロセッサでの処理動作では、１つのベクトル命令の部分命令を異なる演算スロットに発行可能にし、１つのベクトル命令に係る処理を異なる演算スロットで実行可能にする。これにより、図４（Ｂ）に示したように、例えば１つのベクトル命令の部分命令に係る処理を複数の演算スロットで並列に実行することが可能になる。また、例えば関数呼び出しの先頭や末尾などにおいても、何ら処理をしていない演算スロットが発生することを抑制することができる。したがって、プロセッサが有する演算スロット（演算リソース）を有効に活用して性能向上を図り、演算リソースの使用率を高め、高い性能を得ることができる。
【００５０】
図５は、ベクトル命令（加算命令）Add  0→ベクトル命令（加算命令）Add  1→ベクトル命令（乗算命令）Mul  0→ベクトル命令（乗算命令）Mul  1の順にベクトル命令が発行されるときの処理動作の例を説明するための図である。図５（Ａ）に一般的な技術での処理動作を示し、図５（Ｂ）に本実施形態におけるプロセッサでの処理動作を示す。なお、ベクトル命令間に依存関係はなく、各ベクトル命令のベクトル長は６、すなわち各ベクトル命令は６分割されて実行されるものとする。
【００５１】
図５（Ａ）に示す一般的な技術での処理動作では、まずサイクル１にて、命令メモリ１１から読み出されたベクトル命令Add  0が、第１の演算スロットに割り当てられる。そして、サイクル１〜サイクル６の期間において、ベクトル命令Add  0の部分命令Add  0-0〜Add  0-5に係る処理が、１サイクル毎に順次実行される。次のサイクル２にて、命令メモリ１１から読み出されたベクトル命令Add  1が、第２の演算スロットに割り当てられる。そして、サイクル２〜サイクル７の期間において、ベクトル命令Add  1の部分命令Add  1-0〜Add  1-5に係る処理が、１サイクル毎に順次実行される。
【００５２】
次に命令メモリ１１からベクトル命令Mul  0が読み出されることとなるが、乗算命令は第１の演算スロット及び第２の演算スロットだけで実行可能であり、それらの内の少なくとも１つの演算スロットが使用可能となるのはサイクル７以降である。したがって、図５（Ａ）に示す一般的な技術での処理動作では、サイクル７において、命令メモリ１１から読み出されたベクトル命令Mul  0が、第１の演算スロットに割り当てられる。そして、サイクル７〜サイクル１２の期間において、ベクトル命令Mul  0の部分命令Mul  0-0〜Mul  0-5に係る処理が、１サイクル毎に順次実行される。同様にして、サイクル８にて命令メモリ１１から読み出されたベクトル命令Mul  1が、第２の演算スロットに割り当てられ、サイクル８〜サイクル１３の期間において、ベクトル命令Mul  1の部分命令Mul  1-0〜Mul  1-5に係る処理が順次実行される。
【００５３】
一方、本実施形態におけるプロセッサでは、図５（Ｂ）に示すように、サイクル１にて、命令メモリ１１からベクトル命令Add  0が読み出されてベクトル命令シーケンサに格納され部分命令Add  0-0〜Add  0-5に分割される。そして、サイクル１において、この部分命令Add  0-0〜Add  0-5に係る演算スロットの割り当てを行い、サイクル１ではベクトル命令Add  0の部分命令Add  0-0〜Add  0-3に係る処理が並列して実行される。
【００５４】
次のサイクル２にて、命令メモリ１１からベクトル命令Add  1が読み出されてベクトル命令シーケンサに格納され部分命令Add  1-0〜Add  1-5に分割される。そして、サイクル２において、ベクトル命令Add  0の部分命令Add  0-4〜Add  0-5及びベクトル命令Add  1の部分命令Add  1-0〜Add  1-5に係る演算スロットの割り当てを行う。その結果、サイクル２では先行するベクトル命令Add  0の部分命令Add  0-4〜Add  0-5に係る処理が第１の演算スロット及び第２の演算スロットで、後続のベクトル命令Add  1の部分命令Add  1-0〜Add  1-1に係る処理が第３の演算スロット及び第４の演算スロットで、並列して実行される。なお、サイクル２において、ベクトル命令Add  0についての処理が終了するので、ベクトル命令Add  0が格納されていたベクトル命令シーケンサへの新たなベクトル命令の格納が可能になる。
【００５５】
続く、サイクル３にて、命令メモリ１１からベクトル命令Mul  0が読み出されてベクトル命令シーケンサに格納され部分命令Mul  0-0〜Mul  0-5に分割される。そして、サイクル３において、ベクトル命令Add  1の部分命令Add  1-2〜Add  1-5及びベクトル命令Mul  0の部分命令Mul  0-0〜Mul  0-5に係る演算スロットの割り当てを行う。ここで、本実施形態おいて、乗算命令は第１の演算スロット及び第２の演算スロットだけが実行可能であり、第１の演算スロット及び第２の演算スロットには、乗算命令を優先的に投入することとなっている。したがって、サイクル３ではベクトル命令Mul  0の部分命令Mul  0-0〜Mul  0-1に係る処理が第１の演算スロット及び第２の演算スロットで実行され、ベクトル命令Add  1の部分命令Add  1-2〜Add  1-3に係る処理が第３の演算スロット及び第４の演算スロットで実行される。
【００５６】
次のサイクル４にて、命令メモリ１１からベクトル命令Mul  1が読み出されてベクトル命令シーケンサに格納され部分命令Mul  1-0〜Mul  1-5に分割される。そして、サイクル４において、ベクトル命令Add  1の部分命令Add  1-4〜Add  1-5、ベクトル命令Mul  0の部分命令Mul  1-2〜Mul  1-5及びベクトル命令Mul  1の部分命令Mul  1-0〜Mul  1-5に係る演算スロットの割り当てを行う。その結果、サイクル３ではベクトル命令Mul  0の部分命令Mul  0-2〜Mul  0-3に係る処理が第１の演算スロット及び第２の演算スロットで実行され、ベクトル命令Add  1の部分命令Add  1-4〜Add  1-5に係る処理が第３の演算スロット及び第４の演算スロットで実行される。このサイクル４において、ベクトル命令Add  1についての処理が終了するので、ベクトル命令Add  1が格納されていたベクトル命令シーケンサへの新たなベクトル命令の格納が可能になる。
【００５７】
次のサイクル５では、ベクトル命令Mul  0の部分命令Mul  0-4〜Mul  0-5及びベクトル命令Mul  1の部分命令Mul  1-0〜Mul  1-5に係る演算スロットの割り当てが行われ、サイクル５においてベクトル命令Mul  0の部分命令Mul  0-4〜Mul  0-5に係る処理が第１の演算スロット及び第２の演算スロットで実行される。以下、同様にして、サイクル６においてベクトル命令Mul  1の部分命令Mul  1-0〜Mul  1-1に係る処理が第１の演算スロット及び第２の演算スロットで実行される。また、サイクル７、８において、ベクトル命令Mul  1の部分命令Mul  1-2〜Mul  1-3に係る処理及び部分命令Mul  1-4〜Mul  1-5に係る処理のそれぞれが第１の演算スロット及び第２の演算スロットで実行される。
【００５８】
本実施形態におけるプロセッサでの処理動作では、１つのベクトル命令の部分命令を異なる演算スロットに発行可能にし、１つのベクトル命令に係る処理を異なる演算スロットで実行可能にする。これにより、図５（Ｂ）に示したように、例えば１つのベクトル命令の部分命令に係る処理を複数の演算スロットで並列に実行することが可能になり、プロセッサが有する演算スロット（演算リソース）を有効に活用して性能向上を図り、演算リソースの使用率を高め、高い性能を得ることができる。
【００５９】
また、乗算命令やロード・ストア命令など特定の演算リソースを有する演算スロットだけで実行可能なベクトル命令である場合、そのベクトル命令の部分命令が特定の演算リソースを有する演算スロットに優先的に投入される。これにより、特定の演算リソースを必要とするベクトル命令を優先して実行することが可能になり、プロセッサが有する演算リソースを有効に活用して性能向上を図り、演算リソースの使用率を高め、高い性能を得ることができる。
【００６０】
なお、本実施形態では、４つのベクトル命令シーケンサ及び４つの演算スロットを有する例を一例として示したが、これに限定されるものではない。本実施形態におけるプロセッサが有する、ベクトル命令シーケンサの数及び演算スロットの数は、任意である。また、ベクトル命令シーケンサと演算スロットとの対応関係もないので、ベクトル命令シーケンサの数と演算スロットの数は、同数でなくとも良い。
【００６１】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００６２】
１１  命令メモリ
１２  ベクトル命令シーケンサ
１３  演算スロット選択部
１４  クロスバー
１５  演算スロット
１６  レジスタファイル
１７  データメモリ
１８、１９  マルチプレクサ
２０、２３  パイプラインラッチ
２１Ａ、２１Ｂ  演算器
２２  ロード・ストアユニット
【図１】
2014002555.tif 000003
【図２】
2014002555.tif 000004
【図３】
2014002555.tif 000005
【図４】
2014002555.tif 000006
【図５】
2014002555.tif 000007
【図６】
2014002555.tif 000008
【図７】
2014002555.tif 000009