(57)【特許請求の範囲】
【請求項１】
１つ以上の第１の種類の演算スロットと、１つ以上の第２の種類の演算スロットと、プリデコード部と、重み設定レジスタと、重みづけ計算部と、スロット選択部とを備えた演算処理装置であって、
前記第１の種類の演算スロットは、第１の種類の命令と第３の種類の命令とを実行可能なものであって、命令を実行する際にはマルチサイクル動作を行うものであり、
前記第２の種類の演算スロットは、前記第２の種類の命令と第３の種類の命令とを実行可能なものであって、命令を実行する際にはマルチサイクル動作を行うものであり、
前記スロット選択部により前記第３の種類の命令を実行させる演算スロットを選択するに際して、前記プリデコード部は、当該第３の種類の命令に後続する所定数の命令をプリデコードして、当該所定数の命令の種類を識別するものであり、
前記重み設定レジスタは、前記第１の種類の命令と前記第２の種類の命令のそれぞれに対応した重み設定値を格納するものであり、
前記重みづけ計算部は、前記プリデコード部により識別された前記所定数の命令の種類と、前記重み設定レジスタからの重み設定値とに少なくとも基づいて、前記第１の種類の演算スロットに対応した重みづけ値と、前記第２の種類の演算スロットに対応した重みづけ値を計算するものであり、
前記スロット選択部は、前記重みづけ計算部が計算した、前記第１の種類の演算スロットに対応した重みづけ値と、前記第２の種類の演算スロットに対応した重みづけ値を比較することに少なくとも基づいて、前記第３の種類の命令を実行させる演算スロットを選択するものである、
ことを特徴とする演算処理装置。
【請求項２】
前記第１の種類の演算スロットはＭＵＬスロットであり、前記第２の種類の演算スロットはＬＤＳＴスロットであり、前記第１の種類の命令はＭＵＬ系命令であり、前記第２の種類の命令はＬＤＳＴ系命令であり、前記第３の種類の命令はＡＬＵ系命令である、
ことを特徴とする請求項１に記載の演算処理装置。
【請求項３】
第１の種類の命令と第３の種類の命令とを実行可能であり、命令を実行する際にはマルチサイクル動作を行う、１つ以上の第１の種類の演算スロットと、第２の種類の命令と第３の種類の命令とを実行可能であり、命令を実行する際にはマルチサイクル動作を行う、１つ以上の第２の種類の演算スロットとを備えた演算処理装置におけるスロット制御方法であって、
前記第３の種類の命令を実行させる演算スロットを選択するに際して、当該第３の種類の命令に後続する所定数の命令をプリデコードして、当該所定数の命令の種類を識別し、
識別された前記所定数の命令の種類と、前記第１の種類の命令と前記第２の種類の命令のそれぞれに対応した重み設定値とに少なくとも基づいて、第１の種類の演算スロットに対応した重みづけ値と、前記第２の種類の演算スロットに対応した重みづけ値を計算し、
計算された、前記第１の種類の演算スロットに対応した重みづけ値と、前記第２の種類の演算スロットに対応した重みづけ値を比較することに少なくとも基づいて、前記第３の種類の命令を実行させる演算スロットを選択する、
ことを特徴とする演算処理装置におけるスロット制御方法。
【請求項４】
前記第１の種類の演算スロットはＭＵＬスロットであり、前記第２の種類の演算スロットはＬＤＳＴスロットであり、前記第１の種類の命令はＭＵＬ系命令であり、前記第２の種類の命令はＬＤＳＴ系命令であり、前記第３の種類の命令はＡＬＵ系命令である、
ことを特徴とする請求項３に記載の演算処理装置におけるスロット制御方法。
【請求項５】
前記第３の種類の命令を実行させる演算スロットを選択するに際して、当該第３の種類の命令に後続する前記所定数の命令に前記第１の種類の命令が含まれると、前記第１の種類の演算スロットに対応した重みづけ値は、より高くなるものであり、
前記第３の種類の命令を実行させる演算スロットを選択するに際して、当該第３の種類の命令に後続する前記所定数の命令に前記第２の種類の命令が含まれると、前記第２の種類の演算スロットに対応した重みづけ値は、より高くなるものであり、
計算された、前記第１の種類の演算スロットに対応した重みづけ値と、前記第２の種類の演算スロットに対応した重みづけ値を比較することに少なくとも基づいて、前記第３の種類の命令を実行させる演算スロットを選択するに際して、一方の重みづけ値が他方の重みづけ値よりも低ければ、その低いほうの重みづけ値に対応する種類の演算スロットを、前記第３の種類の命令を実行させる演算スロットとして優先して選択するものである、
ことを特徴とする請求項３または請求項４に記載の演算処理装置におけるスロット制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置のスロット制御方法に関する。
【背景技術】
【０００２】
従来、演算処理装置として、ベクトルのような連続するデータに対して、同じ操作をまとめて一度に行うことで、比較的簡単な制御系で高いスループットを達成するベクトル型プロセッサ（ベクトルプロセッサ）が利用されている。
【０００３】
このようなベクトルプロセッサは、気象予測や流体解析といった科学技術計算に適用されているが、近年、携帯端末のソフトウェア無線（ＳＤＲ：Software Defined Radio）への適用も考えられている。
【０００４】
ところで、マルチサイクル命令を基本とした（マルチサイクル動作を行う）ベクトルプロセッサは、複数の演算スロットを有している。これらの演算スロッは、例えば、ＡＬＵ系処理およびＭＵＬ系処理を実行可能なＭＵＬ系と、ＡＬＵ系処理およびＬＤＳＴ系処理を実行可能なＬＤＳＴ系とに大別される。
【０００５】
ここで、ＡＬＵ系処理とは、加算処理および論理演算処理等のことであり、また、ＭＵＬ系処理とは、乗算処理等のことであり、そして、ＬＤＳＴ系処理とは、ロード処理およびストア処理等のことである。
【０００６】
すなわち、ＭＵＬ系命令とは、乗算器を使う命令（マルチプレックス処理を行う命令）であり、また、ＬＤＳ系命令とは、データメモリに対してアクセスを行う命令（ロード／ストアを行う命令）である。そして、ＡＬＵ系命令とは、ＭＵＬ系命令およびＬＤＳ系命令以外の命令である。
【０００７】
ところで、従来、複数の演算スロットを有する演算処理装置において、適切な演算スロットに対して命令を発行し、同時発行可能な命令数を多くするようにした命令発行装置が提案されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００２−０５５８１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上述したように、ベクトルプロセッサは、科学技術計算だけでなく、携帯端末のソフトウェア無線といった適用も考えられ、その適用範囲は、様々な分野に拡大する傾向にある。また、ベクトルプロセッサに設けられた複数の演算スロットは、全て同じ種類のものではなく、例えば、ＡＬＵ系処理およびＭＵＬ系処理を実行可能なＭＵＬ系と、ＡＬＵ系処理およびＬＤＳＴ系処理を実行可能なＬＤＳＴ系とに大別される。
【００１０】
ところで、ベクトルプロセッサは、例えば、命令メモリから読みだした命令を順次キューに格納し、デコードステージで先に演算中の命令とのレジスタ干渉を確認し、条件が整えば空いている演算スロットに命令を振り分けるといった処理を行っている。なお、命令は、複数サイクルかけて実行される。
【００１１】
しかしながら、命令を複数サイクルかけて実行する場合、命令の供給に演算が追い付かずデコードステージで待ちの状態が発生することがある。また、各演算スロットに命令を振り分ける場合、その命令に適した演算スロットに割り当てることができるとは限らない。
【００１２】
例えば、ＭＵＬ系命令およびＬＤＳＴ系命令は、実行可能な演算スロットが限定されているのに対しＡＬＵ系はその制限がないため、ＡＬＵ系の配置が適切ではないと、スロットが空いているにも関わらず次の命令を実行できないという状態が発生する。その結果、実装した演算スロットを十分に使いきれず、演算スロットの使用効率が低下することになる。
【課題を解決するための手段】
【００１３】
一実施形態によれば、１つ以上の第１の種類の演算スロットと、１つ以上の第２の種類の演算スロットと、プリデコード部と、重み設定レジスタと、重みづけ計算部と、スロット選択部とを備えた演算処理装置が提供される。前記第１の種類の演算スロットは、第１の種類の命令と第３の種類の命令とを実行可能なものであって、命令を実行する際にはマルチサイクル動作を行うものであり、前記第２の種類の演算スロットは、前記第２の種類の命令と第３の種類の命令とを実行可能なものであって、命令を実行する際にはマルチサイクル動作を行うものであり、前記スロット選択部により前記第３の種類の命令を実行させる演算スロットを選択するに際して、前記プリデコード部は、当該第３の種類の命令に後続する所定数の命令をプリデコードして、当該所定数の命令の種類を識別するものである。
【００１４】
前記重み設定レジスタは、前記第１の種類の命令と前記第２の種類の命令のそれぞれに対応した重み設定値を格納するものであり、前記重みづけ計算部は、前記プリデコード部により識別された前記所定数の命令の種類と、前記重み設定レジスタからの重み設定値とに少なくとも基づいて、前記第１の種類の演算スロットに対応した重みづけ値と、前記第２の種類の演算スロットに対応した重みづけ値を計算するものであり、前記スロット選択部は、前記重みづけ計算部が計算した、前記第１の種類の演算スロットに対応した重みづけ値と、前記第２の種類の演算スロットに対応した重みづけ値を比較することに少なくとも基づいて、前記第３の種類の命令を実行させる演算スロットを選択するものである。
【発明の効果】
【００１５】
開示の演算処理装置および演算処理装置のスロット制御方法は、演算スロットの使用効率を向上させることができるという効果を奏する。
【図面の簡単な説明】
【００１６】
【図１】演算処理装置の一例を示すブロック図である。
【図２】図１の演算処理装置における課題を説明するための図である。
【図３】第１実施例の演算処理装置を示すブロック図である。
【図４】第１実施例の演算処理装置のスロット制御方法を説明するためのフローチャートである。
【図５】第２実施例の演算処理装置を示すブロック図である。
【図６】第２実施例の演算処理装置のスロット制御方法を説明するためのフローチャートである。
【図７】第３実施例の演算処理装置を示すブロック図である。
【図８】第３実施例の演算処理装置のスロット制御方法を説明するためのフローチャートである。
【図９】第４実施例の演算処理装置を示すブロック図である。
【図１０】第４実施例の演算処理装置のスロット制御方法を説明するためのフローチャートである。
【発明を実施するための形態】
【００１７】
まず、演算処理装置および演算処理装置のスロット制御方法の実施例を詳述する前に、図１および図２を参照して演算処理装置の一例およびその演算処理装置における課題を説明する。図１は、演算処理装置の一例を示すブロック図であり、マルチサイクル動作を行うベクトルプロセッサ（ベクトル型プロセッサ）を示す。
【００１８】
図１において、参照符号１１０〜１１３は演算スロット、１０２は命令キュー、１０３はデコード部［スロット選択部］、１０４は命令メモリ、１０５はレジスタ、１０６はメモリアクセス制御部、そして、１０７はデータメモリを示す。
【００１９】
図１に示すプロセッサにおいて、演算スロット１１０〜１１３は、ＡＬＵ系処理およびＭＵＬ系処理を実行可能なＭＵＬ系演算スロット１１０，１１１と、ＡＬＵ系処理およびＬＤＳＴ系処理を実行可能なＬＤＳＴ系演算スロット１１２，１１３とに大別される。
【００２０】
なお、ＡＬＵ系処理とは、加算処理および論理演算処理等のことであり、また、ＭＵＬ系処理とは、乗算処理等のことであり、そして、ＬＤＳＴ系処理とは、ロード処理およびストア処理等のデータメモリ１０７をアクセスする処理のことである。
【００２１】
図１に示すプロセッサにおいて、命令メモリ１０４から読みだした命令は、命令キュー１０２に順次格納され、さらに、デコード部（スロット選択部）１０３に供給される。デコード部１０３では、命令キュー１０２から供給された命令と、先に演算中の命令とのレジスタ干渉を確認し、条件が整えば空いている演算スロット（スロット）１１０〜１１３に命令を振り分ける。なお、命令は、複数サイクルかけて実行される。
【００２２】
図２は、図１の演算処理装置における課題を説明するための図である。図２に示されるように、図１のプロセッサ（演算処理装置）では、例えば、空きスロットが複数あった場合、静的な設定で最下位番号を優先的に選択といった実装がなされる。
【００２３】
具体的に、例えば、スロット１１０にＡＬＵ系命令が挿入されると、最下位番号のスロット１１０が選択されてスロット１１０にＡＬＵ系命令が挿入される。しかしながら、次の命令がＭＵＬ系命令の場合、スロット１１２および１１３が空いているにも関わらず、ＭＵＬスロット１１０，１１１が空いていないため、ＭＵＬ系命令を待たせてしまうことになる。
【００２４】
すなわち、スロット１１２および１１３は空いているが、ＬＤＳＴスロットのため、次の命令であるＭＵＬ系命を実行することができず、そのＭＵＬ系命令を待たせることになり、演算スロットの有効活用を行うことができない。
【００２５】
このように、ＭＵＬ系とＬＤＳＴ系は実行可能な演算スロットが限定されているため、そのような制限のないＡＬＵ系の配置が不適切な場合、スロットが空いているにもかかわらず次の命令を実行できないという状態が発生する。また、命令を複数サイクルかけて実行する場合、命令の供給に演算が追い付かずデコードステージで待ちの状態が発生することもある。このように、図１の演算処理装置は、実装した演算スロットを十分に使いきれないという課題がある。
【００２６】
以下、演算処理装置および演算処理装置のスロット制御方法の実施例を、添付図面を参照して詳述する。図３は、第１実施例の演算処理装置を示すブロック図であり、マルチサイクル動作を行うベクトルプロセッサを示す。
【００２７】
図３において、参照符号１０〜１３は演算スロット（スロット）、２は命令キュー、３はデコード部、４はスロット選択部、５は使用スロットのプリデコード部（プリデコード部）、６は重みづけ計算部、そして、７は重み設定レジスタを示す。
【００２８】
図３に示すプロセッサにおいて、スロット１０および１１は、ＡＬＵ系処理およびＭＵＬ系処理を実行可能なＭＵＬスロットであり、また、スロット１２および１３は、ＡＬＵ系処理およびＬＤＳＴ系処理を実行可能なＬＤＳＴスロットである。
【００２９】
なお、図３において、上述した図１および図２で示した命令メモリ１０４、レジスタ１０５、メモリアクセス制御部１０６およびデータメモリ１０７は、省略されている。また、図３において、図１および図２で示したデコード部（スロット選択部）１０３は、デコード部３およびスロット選択部４と分割して描かれている。これは、第１実施例を示す図３だけでなく、第２，第３および第４実施例を示す図５，図７および図９においても同様である。
【００３０】
図３と前述した図１との比較から明らかなように、本第１実施例の演算処理装置（プロセッサ）では、プリデコード部５，重みづけ計算部６および重み設定レジスタ７が設けられている。
【００３１】
プリデコード部５は、命令が命令キュー２に存在する間に、その命令がＭＵＬ系命令か、ＬＤＳＴ系命令か、或いは、そうではない命令（ＡＬＵ系命令）かをプリデコードし、その結果を重みづけ計算部６に出力する。
【００３２】
重みづけ計算部６は、上述したプリデコード部５からのプリデコード結果、および、重み設定レジスタ７からの重み設定値を受け取り、後述する所定のアルゴリズムに従った計算を行って、その計算された重みづけ値をスロット選択部４に出力する。
【００３３】
スロット選択部４は、重みづけ計算部６で計算された重みづけ結果を受け取り、それに基づいて、現在の命令（次に実行する命令：到着した命令）がＡＬＵ系命令であれば、ＭＵＬスロットおよびＬＤＳＴスロットの優先順位を変更して空きスロットを探索する。
【００３４】
ここで、重み設定レジスタ７に格納される重みは、例えば、プロセッサの転送命令や外部からの書き込みにより設定できるようになっている。
【００３５】
次に、一例として、重みづけ計算部６において、現在の命令の後ろ２つの命令（１つ後ろの命令、および、２つ後ろの命令）を探索して重みづけを行い、それに基づいて、スロットの選択部４がスロットの選択を判断する場合を説明する。
【００３６】
まず、ＭＵＬ系命令の重みをＭとし、ＬＤＳＴ系命令の重みをＬとすると、ＭおよびＬは、以下のようにして計算される。
【００３７】
Ｍ＝（１つ後ろの命令がＭＵＬなら重みＭ１、そうでないなら０）
＋（２つ後ろの命令がＭＵＬなら重みＭ２、そうでないなら０）
【００３８】
Ｌ＝（１つ後ろの命令がＬＤＳＴなら重みＬ１、そうでないなら０）
＋（２つ後ろの命令がＬＤＳＴなら重みＬ２、そうでないなら０）
【００３９】
ここで、重みＭ１，Ｍ２，Ｌ１，Ｌ２は、あらかじめ設定しておく。具体的に、例えば、Ｍ１＝Ｌ１＝３，Ｍ２＝Ｌ２＝２といったように設定する。
【００４０】
なお、ＭＵＬスロットまたはＬＤＳＴスロットを優先して選択するとは、例えば、ＭＵＬ系命令の場合、まず、スロット１０および１１の空きを探索し、空いていればそのスロットを使用し、また、空いていなければ、スロット１２および１３を探索する。そして、スロット１２および１３が空いていればそのスロットを使用し、空いていなければストールするという動作を表している。
【００４１】
なお、上記の説明では、一例として、重みづけ計算部６において、現在の命令の後ろ２つの命令を探索して重みづけを行う場合を示したが、探索する後ろの命令の数や重みづけの仕方は、様々に変形することができる。
【００４２】
図４は、第１実施例の演算処理装置のスロット制御方法を説明するためのフローチャートである。なお、図４に示すフローチャートは、演算処理装置のスロット制御処理の開始時点でリソース競合などの命令発行制約に関する条件判定は終了しており、スロットの割り当て（割り振り）のみが残っているものとして記載されている。
【００４３】
図４に示されるように、スロット制御処理が開始すると、まず、ステップＳＴ１１において、現在の命令（次に実行する命令：スロットに割り振る命令）がＡＬＵ系命令かどうかを判別する。ステップＳＴ１１において、ＡＬＵ系命令であると判別すると、ステップＳＴ１２に進んで、重みづけ計算を行って、ステップＳＴ１６に進む。
【００４４】
ここで、ステップＳＴ１２における重みづけ計算は、前述した図３における重みづけ計算部６で行われ、例えば、現在の命令の後ろ２つの命令を探索して、ＭＵＬ系命令の重みＭおよびＬＤＳＴ系命令の重みＬを計算する処理に対応する。
【００４５】
ステップＳＴ１６では、ＭがＬよりも大きいかどうか（Ｍ＞Ｌ？）を判別し、ＭがＬよりも大きいと判別すると、ステップＳＴ１７に進んで、ＬＤＳＴスロット（ＬＤＳＴ系演算スロット）１２，１３から優先して割り当てを行って、ステップＳＴ１９に進む。
【００４６】
また、ステップＳＴ１６において、ＭがＬよりも大きくないと判別すると、ステップＳＴ１８に進んで、ＭＵＬスロット（ＭＵＬ系演算スロット）１０，１１から優先して割り当てを行って、ステップＳＴ１９に進む。
【００４７】
ステップＳＴ１９では、ＬＤＳＴスロット１２，１３に空きが有るかどうかを判別し、空きが有ると判別すると、ステップＳＴ２０に進んで、命令（現在の命令）を挿入して処理を終了する。一方、ステップＳＴ１９において、ＬＤＳＴスロット１２，１３に空きが無いと判別すると、ステップＳＴ２１に進んで、ストール処理（パイプランの停止処理）を行って処理を終了する。
【００４８】
次に、ステップＳＴ１１において、現在の命令がＡＬＵ系命令ではないと判別すると、ステップＳＴ１３に進んで、ＭＵＬ系命令かどうかを判別する。ステップＳＴ１３において、現在の命令がＭＵＬ系命令であると判別すると、ステップＳＴ１４に進んで、ＭＵＬスロットの空きを探索して、ステップＳＴ２２に進む。
【００４９】
一方、ステップＳＴ１３において、現在の命令がＭＵＬ系命令ではない、すなわち、ＬＤＳＴ系命令であると判別すると、ステップＳＴ１５に進んで、ＬＤＳＴスロットの空きを探索して、ステップＳＴ２２に進む。
【００５０】
ステップＳＴ２２では、ＭＵＬスロット１０，１１に空きが有るかどうかを判別し、空きが有ると判別すると、ステップＳＴ２３に進んで、命令（現在の命令）を挿入して処理を終了する。一方、ステップＳＴ２２において、ＭＵＬスロット１０，１１に空きが無いと判別すると、ステップＳＴ２４に進んで、ストール処理を行って処理を終了する。
【００５１】
このように、本第１実施例によれば、現在の命令がＡＬＵ系命令だった場合、後ろの命令に基づいた重みづけ計算を行って、ＭＵＬ系命令の重みＭおよびＬＤＳＴ系命令の重みＬを求め、より重みの少ない方（命令の少ない方）のスロットを優先して選択する。これにより、演算スロットの使用効率（活用効率）を向上させることが可能となる。
【００５２】
図５は、第２実施例の演算処理装置を示すブロック図であり、また、図６は、第２実施例の演算処理装置のスロット制御方法を説明するためのフローチャートである。ここで、本第２実施例の図５および図６と上述した第１実施例の図３および図４とは、図面上は、実質的に同様なものとして描かれているが重みづけ計算の処理が異なっている。
【００５３】
すなわち、図５と上述した図３との比較から明らかなように、本第２実施例のプロセッサは、重みづけ計算を行うための重みづけ計算部６’および重み設定レジスタ７’が第１実施例とは異なっている。
【００５４】
また、図６と上述した図４との比較から明らかなように、本第２実施例のスロット制御処理は、ステップＳＴ１２’における重みづけ計算を行う処理が異なっている。
【００５５】
前述した第１実施例のプロセッサでは、現在の命令の後ろ２つの命令（１個以上後ろの命令）を見て、それらの中の制限された命令について重みづけをしながら数え上げ、より少ない演算スロットを優先的に選択するようになっている。
【００５６】
これに対して、本第２実施例のプロセッサでは、現在の命令の後ろ２つの命令を見るのに加えて、各スロット１０〜１３が命令を実行中であるかどうかも踏まえて、ＭＵＬ系命令の重みＭおよびＬＤＳＴ系命令の重みＬを計算するようになっている。
【００５７】
すなわち、図５に示されるように、本第２実施例のプロセッサにおいて、重みづけ計算部６’には、各スロット１０〜１３から当該スロットが命令を実行中であるかどうかの情報（スロットの埋まり具合の信号）が供給されている。なお、重み設定レジスタ７’は、各スロット１０〜１３に対して、当該スロットが命令を実行中であるかどうかによる重みも設定されることになる。
【００５８】
次に、一例として、重みづけ計算部６’において、現在の命令の後ろ２つの命令および各スロットが命令を実行中であるかどうかの現在の使用状況を探索して重みづけを行い、それに基づいて、スロットの選択部４がスロットの選択を判断する場合を説明する。
【００５９】
すなわち、ＭＵＬ系命令の重みＭおよびＬＤＳＴ系命令の重みＬは、以下のようにして計算される。
【００６０】
Ｍ＝（１つ後ろの命令がＭＵＬなら重みＭ１、そうでないなら０）
＋（２つ後ろの命令がＭＵＬなら重みＭ２、そうでないなら０）
＋（スロット０が命令を実行中であればＭ３、そうでないなら０）
＋（スロット１が命令を実行中であればＭ４、そうでないなら０）
【００６１】
Ｌ＝（１つ後ろの命令がＬＤＳＴなら重みＬ１、そうでないなら０）
＋（２つ後ろの命令がＬＤＳＴなら重みＬ２、そうでないなら０）
＋（スロット２が命令を実行中であればＬ３、そうでないなら０）
＋（スロット３が命令を実行中であればＬ４、そうでないなら０）
【００６２】
ここで、重みＭ１，Ｍ２，Ｍ３，Ｍ４，Ｌ１，Ｌ２，Ｌ３，Ｌ４は、あらかじめ設定しておく。具体的に、例えば、Ｍ１＝Ｌ１＝３、Ｍ２＝Ｌ２＝２、Ｍ３＝Ｍ４＝Ｌ３＝Ｌ４＝１といったように設定する。なお、重みづけ計算の結果により、ＬＤＳＴ優先かＭＵＬ優先かを判断し、スロットを選択するのは、前述した第１実施例と同様である。
【００６３】
すなわち、本第２実施例のスロット制御方法は、ステップＳＴ１２’における重みづけ計算の処理を、上記のような各スロットが命令を実行中であるかどうかを踏まえて行う以外、図４を参照して説明した第１実施例と同様である。
【００６４】
このように、本第２実施例によれば、現在の命令がＡＬＵ系命令だった場合、後ろの命令と共に、各スロットが命令を実行中であるかどうかに基づいた重みづけ計算を行うことにより、演算スロットの使用効率をより一層向上させることが可能となる。
【００６５】
図７は、第３実施例の演算処理装置を示すブロック図であり、マルチサイクル動作を行うベクトルプロセッサを示す。ここで、本第３実施例では、前述した重み設定レジスタ７，７’が設けられておらず、現在の命令の後ろの命令の実行にかかる時間、並びに、各スロットで実行している命令の終了予想時間（サイクル数）が重みづけ計算部６”に情報として供給されている。
【００６６】
すなわち、本第３実施例のプロセッサにおいて、使用スロットのプリデコード部５’は、命令が命令キュー２に存在する間に、その命令がＭＵＬ系命令か、ＬＤＳＴ系命令か、或いは、ＡＬＵ系命令かをプリデコードし、その結果を重みづけ計算部６”に出力する。さらに、プリデコード部５’は、命令が命令キュー２に存在する間に、その命令の実行にかかる時間をデコードして重みづけ計算部６”に出力する。
【００６７】
重みづけ計算部６”には、各スロット１０〜１３から、当該スロットが命令を実行中であるかどうかの情報と共に、現在実行している命令の終了時間（終了予想サイクル数、無い場合は０）が供給される。
【００６８】
そして、重みづけ計算部６”は、命令キュー２に存在する後ろの命令の種類およびその命令の実行にかかる時間、並びに、各スロットが命令を実行中であるかどうかおよびその実行している命令の終了予想時間を受け取って、重みづけ計算を行う。
【００６９】
ここで、本第３実施例において、例えば、現在の命令がＡＬＵ系命令以外の場合、並びに、現在の命令がＡＬＵ系命令であって、且つ、その１つ後ろの命令もＡＬＵ系命令の場合には、前述した第１実施例または第２実施例と同様の処理を行う。すなわち、本第３実施例は、現在の命令がＡＬＵ系命令であって、その１つ後ろの命令がＡＬＵ系命令ではない場合に、演算スロットの使用効率をより一層向上させることが可能となる。
【００７０】
次に、一例として、重みづけ計算部６”において、現在の命令がＡＬＵ系命令であって、その１つ後ろの命令がＭＵＬ系命令の場合、スロット１０および１１にＭＵＬ系命令を割り当てたときの終了予想時刻を見積もると、以下のように予想される。
【００７１】
スロット１０の終了時刻＝スロット１０の現在実行中の命令の残りサイクル数（無い場合は０）＋ＭＵＬ系命令の実行サイクル数＋１
スロット１１の終了時刻＝スロット１１の現在実行中の命令の残りサイクル数（無い場合は０）＋ＭＵＬ系命令の実行サイクル数＋１
【００７２】
ここで、スロット１０および１１の終了時刻の予想において、最後の『＋１』は、ＭＵＬ系命令が次の命令であるため、実行開始が１サイクル後になるから加算するものである。
【００７３】
そして、上記スロット１０および１１の終了時刻の予想値のうち、小さい方（早く終わる方）を現在のＡＬＵ系命令の１つ後ろのＭＵＬ系命令に対して予約する。そして、現在のＡＬＵ系命令は、上記スロット１０，１１を除いて空いているスロット１２，１３に割り当て、空きが無い場合には、ストールする。
【００７４】
また、一例として、重みづけ計算部６”において、現在の命令がＡＬＵ系命令であって、その１つ後ろの命令がＬＤＳＴ系命令の場合、スロット１２および１３にＬＤＳＴ系命令を割り当てたときの終了予想時刻を見積もると、以下のように予想される。
【００７５】
スロット１２の終了時刻＝スロット１２の現在実行中の命令の残りサイクル数（無い場合は０）＋ＬＤＳＴ系命令の実行サイクル数＋１
スロット１３の終了時刻＝スロット１３の現在実行中の命令の残りサイクル数（無い場合は０）＋ＬＤＳＴ系命令の実行サイクル数＋１
【００７６】
そして、上記スロット１２および１３の終了時刻の予想値のうち、小さい方（早く終わる方）を現在のＡＬＵ系命令の１つ後ろのＬＤＳＴ系命令に対して予約する。そして、現在のＡＬＵ系命令は、上記スロット１２，１３を除いて空いているスロット１０，１１に割り当て、空きが無い場合には、ストールする。
【００７７】
図８は、第３実施例の演算処理装置のスロット制御方法を説明するためのフローチャートである。なお、図８に示すフローチャートは、演算処理装置のスロット制御処理の開始時点でリソース競合などの命令発行制約に関する条件判定は終了しており、スロットの割り当てのみが残っているものとして記載されている。
【００７８】
図８に示されるように、スロット制御処理が開始すると、まず、ステップＳＴ３１において、現在の命令（次に実行する命令：スロットに割り振る命令）がＡＬＵ系命令かどうかを判別する。ステップＳＴ３１において、ＡＬＵ系命令であると判別すると、ステップＳＴ３２に進んで、現在の命令の１つ後ろの命令もＡＬＵ系命令かどうかを判別し、また、ＡＬＵ系命令ではないと判別すると、ステップＳＴ３３に進む。
【００７９】
ステップＳＴ３２において、現在の命令の１つ後ろの命令もＡＬＵ系命令であると判別すると、ステップＳＴ３６に進み、また、現在の命令の１つ後ろの命令はＡＬＵ系命令ではないと判別すると、ステップＳＴ３３に進む。
【００８０】
ステップＳＴ３６において、現在の命令の１つ後ろの命令がＭＵＬ系命令であると判別すると、ステップＳＴ３７に進む。
【００８１】
ステップＳＴ３７では、ＭＵＬスロット１０，１１で終了時刻を予想し、早い方を選択して現在の命令（ＡＬＵ系命令）の１つ後ろのＭＵＬ系命令に対して予約して、ステップＳＴ３８に進む。
【００８２】
ステップＳＴ３８では、選択されたＭＵＬスロット１０，１１以外のスロット（ＬＤＳＴスロット１２，１３）で、空いているスロットを探索して、ステップＳＴ４１に進む。
【００８３】
ステップＳＴ４１では、ＬＤＳＴスロット１２，１３に空きが有るかどうかを判別し、空きが有ると判別すると、ステップＳＴ４２に進んで、命令（現在の命令）を挿入して処理を終了する。
【００８４】
一方、ステップＳＴ４１において、ＬＤＳＴスロット１２，１３に空きが無いと判別すると、ステップＳＴ４３に進んで、ストール処理を行って処理を終了する。
【００８５】
また、ステップＳＴ３６において、現在の命令の１つ後ろの命令がＭＵＬ系命令ではない、すなわち、ＬＤＳＴ系命令であると判別すると、ステップＳＴ３９に進む。ステップＳＴ３９では、ＬＤＳＴスロット１２，１３で終了時刻を予想し、早い方を選択して現在の命令の１つ後ろのＬＤＳＴ系命令に対して予約して、ステップＳＴ４０に進む。
【００８６】
ステップＳＴ４０では、選択されたＬＤＳＴスロット１２，１３以外のスロット（ＭＵＬスロット１０，１１）で、空いているスロットを探索して、ステップＳＴ４１に進む。
【００８７】
ステップＳＴ４１では、ＭＵＬスロット１０，１１に空きが有るかどうかを判別し、空きが有ると判別すると、ステップＳＴ４２に進んで、命令（現在の命令）を挿入して処理を終了する。
【００８８】
一方、ステップＳＴ４１において、ＭＵＬスロット１０，１１に空きが無いと判別すると、ステップＳＴ４３に進んで、ストール処理を行って処理を終了する。
【００８９】
すなわち、ステップＳＴ３７およびＳＴ３９において、前述したＭＵＬ系およびＬＤＳＴ系命令の終了時刻の予想を行い、予約するスロット番号をスロット選択部４に供給する。そして、ステップＳＴ３８およびＳＴ３９（並びに、ＳＴ４１〜ＳＴ４３）において、スロット選択部４は、予約スロット以外のスロットからそのＭＵＬ系およびＬＤＳＴ系命令を割り当てるスロットを選択する。
【００９０】
なお、図８におけるステップＳＴ３３，ＳＴ３４，ＳＴ３５，ＳＴ４４，ＳＴ４５およびＳＴ４６は、例えば、前述した図４におけるステップＳＴ１３，ＳＴ１４，ＳＴ１５，ＳＴ２２，ＳＴ２３およびＳＴ２４と同様のものであり、その説明は省略する。
【００９１】
このように、本第３実施例は、現在の命令がＡＬＵ系命令であって、その１つ後ろの命令がＡＬＵ系命令ではない場合に、命令キューに在る命令の実行にかかる時間、および、各スロットで実行している命令の終了時刻を予想してスロットの割り振りを行う。これにより、現在の命令がＡＬＵ系命令であって、その１つ後ろの命令がＡＬＵ系命令ではない場合に、使用効率をより一層向上させることが可能となる。
【００９２】
図９は、第４実施例の演算処理装置を示すブロック図であり、マルチサイクル動作を行うベクトルプロセッサを示す。ここで、図９に示す第４実施例は、例えば、前述した図３に示す第１実施例において、演算スロットとして、ＡＬＵ系命令専用のＡＬＵスロット１４およびスカラー演算用のスカラースロット１５を設けたものに相当する。
【００９３】
図９に示されるように、本第４実施例の演算処理装置（プロセッサ）は、ＭＵＬスロット１０，１１、ＬＤＳＴスロット１２，１３、ＡＬＵスロット１４およびスカラースロット１５を有する。
【００９４】
さらに、プロセッサは、命令キュー２、デコード部３、スロット選択部４０、使用スロットのプリデコード部５，重みづけ計算部６０および重み設定レジスタ７０が設けられている。
【００９５】
プリデコード部５は、命令が命令キュー２に存在する間に、その命令がＭＵＬ系命令か、ＬＤＳＴ系命令か、或いは、そうではない命令（ＡＬＵ系命令）かをプリデコードし、その結果を重みづけ計算部６０に出力する。
【００９６】
重みづけ計算部６０は、プリデコード部５からのプリデコード結果、および、重み設定レジスタ７０からの重み設定値を受け取り、後述する所定のアルゴリズムに従った計算を行って、その計算された重みづけ値をスロット選択部４０に出力する。
【００９７】
スロット選択部４０は、重みづけ計算部６０で計算された重みづけ結果を受け取り、それに基づいて、現在の命令がＡＬＵ系命令であれば、ＡＬＵスロット，ＭＵＬスロットおよびＬＤＳＴスロットの優先順位を変更して空きスロットを探索する。
【００９８】
ここで、重み設定レジスタ７０に格納される重みは、例えば、プロセッサの転送命令や外部からの書き込みにより設定できるようになっている。
【００９９】
次に、一例として、重みづけ計算部６０において、現在の命令の後ろ２つの命令を探索して重みづけを行い、それに基づいて、スロットの選択部４０がスロットの選択を判断する場合を説明する。
【０１００】
まず、ＭＵＬ系命令の重みをＭとし、ＬＤＳＴ系命令の重みをＬとすると、ＭおよびＬは、以下のようにして計算される。
【０１０１】
Ｍ＝（１つ後ろの命令がＭＵＬなら重みＭ１、そうでないなら０）
＋（２つ後ろの命令がＭＵＬなら重みＭ２、そうでないなら０）
【０１０２】
Ｌ＝（１つ後ろの命令がＬＤＳＴなら重みＬ１、そうでないなら０）
＋（２つ後ろの命令がＬＤＳＴなら重みＬ２、そうでないなら０）
【０１０３】
ここで、重みＭ１，Ｍ２，Ｌ１，Ｌ２は、あらかじめ設定しておく。具体的に、例えば、Ｍ１＝Ｌ１＝３，Ｍ２＝Ｌ２＝２といったように設定する。
【０１０４】
なお、ＭＵＬスロットまたはＬＤＳＴスロットを優先して選択するとは、例えば、ＭＵＬ系命令の場合、まず、スロット１０および１１の空きを探索し、空いていればそのスロットを使用し、また、空いていなければ、スロット１２および１３を探索する。そして、スロット１２および１３が空いていればそのスロットを使用し、空いていなければストールするという動作を表している。
【０１０５】
ここで、重みづけ計算部６０は、現在の命令の後ろ２つの命令を探索して重みづけを行う場合を示したが、探索する後ろの命令の数や重みづけの仕方は、様々に変形することができるのは前述した通りである。
【０１０６】
また、図９において、ＡＬＵスロット１４およびスカラースロット１５は、それぞれ１つずつ配置されているが、これらのスロットも複数配置してもよく、また、ＡＬＵスロットまたはスカラースロットの一方がなくてもかまわないのはいうまでもない。
【０１０７】
図１０は、第４実施例の演算処理装置のスロット制御方法を説明するためのフローチャートである。なお、図１０に示すフローチャートは、演算処理装置のスロット制御処理の開始時点でリソース競合などの命令発行制約に関する条件判定は終了しており、スロットの割り当てのみが残っている場合であるのは、前述した各実施例と同様である。
【０１０８】
図１０に示されるように、スロット制御処理が開始すると、まず、ステップＳＴ５１において、現在の命令がＡＬＵ系命令かどうかを判別する。ステップＳＴ５１において、ＡＬＵ系命令であると判別すると、ステップＳＴ５２に進んで、ＡＬＵスロット１４が空いているかどうかを判別する。
【０１０９】
ステップＳＴ５２において、ＡＬＵスロット１４が空いていると判別すると、ステップＳＴ６８に進んで、そのＡＬＵスロット１４を使用して現在の命令（ＡＬＵ系命令）を割り当てて処理を終了する。
【０１１０】
また、ステップＳＴ５２において、ＡＬＵスロット１４が空いていないと判別すると、ステップＳＴ５４に進んで、例えば、前述した図４のステップＳＴ１２と同様の処理を行う。
【０１１１】
一方、ステップＳＴ５１において、現在の命令がＡＬＵ系命令ではないと判別すると、ステップＳＴ５３に進んで、スカラー命令かどうかを判別する。ステップＳＴ５３において、現在の命令がスカラー命令であると判別すると、ステップＳＴ６７に進んで、そのスカラースロット１５を使用して現在の命令（スカラー命令）を割り当てて処理を終了する。
【０１１２】
ここで、スカラー命令の場合、そのスカラー命令は１サイクルで終了するため、スカラースロット１５は必ず空いており、ステップＳＴ５３でスカラー命令であると判別すれば、その空いているスカラースロット１５に命令を挿入する。
【０１１３】
なお、現在の命令がスカラー命令でもＡＬＵ系命令でもない場合は、例えば、前述した図４と同様である。すなわち、図１０におけるステップＳＴ５４〜ＳＴ６６は、例えば、前述した図４におけるステップＳＴ１２〜ＳＴ２４に相当するものであり、同様の処理を行うことになる。
【０１１４】
この第４実施例のように、本実施例の適用は、ＭＵＬスロットおよびＬＤＳＴスロットだけを有するものに限定されず、さらに、ＡＬＵスロットおよびスカラースロットを有するものであってもよい。また、これらＡＬＵスロットおよびスカラースロットは、複数設けてもよく、また、ＡＬＵスロットまたはスカラースロットの一方を設けなくともよいのは前述した通りである。
【０１１５】
さらに、例えば、第４実施例のように、ＡＬＵスロットおよびスカラースロットを有するプロセッサに対して、前述した第２または第３実施例を適用することができるのは、いうまでもない。
【０１１６】
以上、詳述したように、本実施例の演算処理装置および演算処理装置のスロット制御方法によれば、演算スロットの使用効率を向上させることがえきる。その結果、演算処理装置の演算性能を高めることが可能となる。
【０１１７】
以上の実施例を含む実施形態に関し、さらに、以下の付記を開示する。
（付記１）
複数の異なる演算スロットを有し、マルチサイクル動作を行う演算処理装置であって、
演算する命令をプリデコードしてその種類を識別するプリデコード部と、
前記命令の種類に対応した重み設定値を格納する重み設定レジスタと、
前記識別された命令の種類および前記重み設定値を受け取り、前記演算する命令に対して重みづけ値を計算する重みづけ計算部と、
前記重みづけ計算部の計算結果に基づいて、前記複数の異なる演算スロットのいずれかを選択するスロット選択部と、
を有することを特徴とする演算処理装置。
【０１１８】
（付記２）
前記複数の異なる演算スロットは、ＡＬＵ系処理およびＭＵＬ系処理を実行可能な少なくとも１つのＭＵＬスロット、および、前記ＡＬＵ系処理およびＬＤＳＴ系処理を実行可能な少なくとも１つのＬＤＳＴスロットを含み、
前記プリデコード部は、前記演算する命令が命令キューに存在する間に、該演算する命令がＭＵＬ系命令か、ＬＤＳＴ系命令か、或いは、ＡＬＵ系命令かを識別するプリデコード結果を出力し、
前記重み設定レジスタは、前記ＭＵＬ系命令、前記ＬＤＳＴ系命令および前記ＡＬＵ系命令の重み設定値を格納し、
前記重みづけ計算部は、前記プリデコード部からの前記プリデコード結果、および、前記重み設定レジスタからの前記重み設定値を受け取り、前記ＭＵＬ系命令および前記ＬＤＳＴ系命令の重みづけ値を計算し、
前記スロット選択部は、前記重みづけ計算部の計算結果に基づいて、前記ＭＵＬスロットまたは前記ＬＤＳＴスロットのいずれかを選択する、
ことを特徴とする付記１に記載の演算処理装置。
【０１１９】
（付記３）
前記重みづけ計算部は、現在の命令の後ろの命令を探索して、前記重みづけ値を計算する、
ことを特徴とする付記２に記載の演算処理装置。
【０１２０】
（付記４）
前記重みづけ計算部は、現在の命令の後ろの命令、および、前記各スロットが命令を実行中であるかどうかの現在の使用状況を探索して、前記重みづけ値を計算する、
ことを特徴とする付記２に記載の演算処理装置。
【０１２１】
（付記５）
前記重みづけ計算部は、現在の命令の後ろの命令の種類およびその命令の実行にかかる時間、並びに、前記各スロットが命令を実行中であるかどうかおよびその実行している命令の終了予想時間を受け取って、前記重みづけ値を計算する、
ことを特徴とする付記２に記載の演算処理装置。
【０１２２】
（付記６）
複数の異なる演算スロットを有し、マルチサイクル動作を行う演算処理装置のスロット制御方法であって、
演算する命令をプリデコードして該演算する命令の種類を識別し、
前記演算する命令の種類および前記命令の種類に対応した重み設定値を受け取り、前記演算する命令に対して重みづけ値を計算し、
前記計算された重みづけ値に基づいて、前記複数の異なる演算スロットのいずれかを選択する、
ことを特徴とする演算処理装置のスロット制御方法。
【０１２３】
（付記７）
前記複数の異なる演算スロットは、ＡＬＵ系処理およびＭＵＬ系処理を実行可能な少なくとも１つのＭＵＬスロットと、前記ＡＬＵ系処理およびＬＤＳＴ系処理を実行可能な少なくとも１つのＬＤＳＴスロットを含み、
前記演算する命令のプリデコードは、該演算する命令が命令キューに存在する間に、該演算する命令がＭＵＬ系命令か、ＬＤＳＴ系命令か、或いは、ＡＬＵ系命令かを識別するプリデコード結果を出力し、
前記演算する命令に対する重みづけ値の計算は、前記プリデコード結果、および、前記ＭＵＬ系命令，前記ＬＤＳＴ系命令および前記ＡＬＵ系命令に対する重み設定値を受け取り、前記ＭＵＬ系命令および前記ＬＤＳＴ系命令の重みづけ値を計算し、
前記演算スロットの選択は、前記計算された重みづけ値に基づいて、前記ＭＵＬスロットまたは前記ＬＤＳＴスロットのいずれかを選択する、
ことを特徴とする付記６に記載の演算処理装置のスロット制御方法。
【０１２４】
（付記８）
新たに実行可能なＡＬＵ系命令が到着したとき、当該ＡＬＵ系命令の後ろの後続命令を識別し、それがＡＬＵ系命令ではなかった場合に、前記後続命令とは異なる制限を有する演算スロットを優先的に選択する、
ことを特徴とする付記７に記載の演算処理装置のスロット制御方法。
【０１２５】
（付記９）
新たに実行可能なＡＬＵ系命令が到着したとき、当該ＡＬＵ系命令の後ろの後続命令を識別し、それがＡＬＵ系命令ではなかった場合に、現在の演算スロットの状況から前記後続命令を配置した場合の演算スロットの状況を予測し、前記ＭＵＬスロットまたは前記ＬＤＳＴスロットのうち空きが多い方を優先的に選択する、
ことを特徴とする付記７に記載の演算処理装置のスロット制御方法。
【０１２６】
（付記１０）
新たに実行可能なＡＬＵ系命令が到着したとき、当該ＡＬＵ系命令の後ろの後続命令を識別し、それがＡＬＵ系命令ではなかった場合に、前記後続命令が最も早く終了する演算スロットの割り当てを計算し、予測結果に基づいて当該ＡＬＵ系命令の演算スロットを選択する、
ことを特徴とする付記７に記載の演算処理装置のスロット制御方法。
【符号の説明】
【０１２７】
２，１０２    命令キュー
３    デコード部
４，４０    スロット選択部
５，５’    使用スロットのプリデコード部（プリデコード部）
６，６’，６”，６０    重みづけ計算部
７，７’，７０    重み設定レジスタ
１０，１１，１１０，１１１    ＭＵＬスロット（演算スロット）
１２，１３，１１２，１１３    ＬＤＳＴスロット（演算スロット）
１４    ＡＬＵスロット（演算スロット）
１５    スカラースロット（演算スロット）
１０３    デコード部（スロット選択部）
１０４    命令メモリ
１０５    レジスタ
１０６    メモリアクセス制御部
１０７    データメモリ
【図１】
0005640805.tif 000002
【図２】
0005640805.tif 000003
【図３】
0005640805.tif 000004
【図４】
0005640805.tif 000005
【図５】
0005640805.tif 000006
【図６】
0005640805.tif 000007
【図７】
0005640805.tif 000008
【図８】
0005640805.tif 000009
【図９】
0005640805.tif 000010
【図１０】
0005640805.tif 000011