(57)【特許請求の範囲】
【請求項１】
第１種処理の実行機能と第２種処理の実行機能とを有する１つ以上の第１パイプライン、及び、第１種処理の実行機能と第３種処理の実行機能とを有する１つ以上の第２パイプラインを含む、マルチサイクル動作をする複数のパイプラインと、
新たな処理を開始できる状態にある第２パイプラインに、或る第１パイプラインが既に開始している，第１種処理を複数回実行することにより完了する第１種ループ処理を引き継がせる機能を有する制御回路と、
を備えることを特徴とする演算ユニット。
【請求項２】
前記制御回路が、さらに、
新たな処理を開始できる状態にある第１パイプラインに、或る第２パイプラインが既に開始している前記第１種ループ処理を引き継がせる機能を有する
ことを特徴とする請求項１に記載の演算ユニット。
【請求項３】
前記制御回路は、
いずれかのパイプラインに開始させるべき処理が、第２種処理を複数回実行することにより完了する第２種ループ処理であり、新たな処理を開始できる状態にある第１パイプラインが存在せず、新たな処理を開始できる状態にある第２パイプライン及び第１種ループ処理を実行している第１パイプラインが存在していた場合に、新たな処理を開始できる状態にある当該第２パイプラインに、或る第１パイプラインが実行中の第１種ループ処理を引き継がせてから、当該第１パイプラインに、いずれかのパイプラインに実行させるべき前記第２種ループ処理を開始させ、
いずれかのパイプラインに開始させるべき処理が、第３種処理を複数回実行することにより完了する第３種ループ処理であり、新たな処理を開始できる状態にある第２パイプラインが存在せず、新たな処理を開始できる状態にある第１パイプライン及び第１種ループ処理を実行している第２パイプラインが存在していた場合に、新たな処理を開始できる状態にある当該第１パイプラインに、或る第２パイプラインが実行中の第１種ループ処理を引き継がせてから、当該第２パイプラインに、いずれかのパイプラインに実行させるべき前記第３種ループ処理を開始させる
ことを特徴とする請求項２に記載の演算ユニット。
【請求項４】
前記制御回路が、
それぞれ、特定のパイプラインに対応づけられた，対応するパイプラインの次サイクルにおける動作内容を規定する制御情報がサイクル毎に設定される複数の制御情報レジスタと、
任意の第１パイプライン用の制御情報レジスタ内の制御情報を任意の第２パイプライン用の制御情報レジスタに移動する機能、及び、任意の第２パイプライン用の制御情報レジスタ内の制御情報を任意の第１パイプライン用の制御情報レジスタに移動する機能を有する制御情報移動回路と、
を含む
ことを特徴とする請求項２に記載の演算ユニット。
【請求項５】
前記制御回路は、
いずれかのパイプラインに開始させるべき処理が、第２種処理を複数回実行することにより完了する第２種ループ処理であり、新たな処理を開始できる状態にある第１パイプラインが存在せず、新たな処理を開始できる状態にある第２パイプライン及び第１種ループ処理を実行している第１パイプラインが存在していた場合に、前記制御情報移動回路を制御することにより、第１種ループ処理を実行中の或る第１パイプライン用の制御情報レジスタに設定される制御情報を、新たな処理を開始できる状態にある第２パイプライン用の
制御情報レジスタに移動させてから、当該第１パイプライン用の制御情報レジスタに、いずれかのパイプラインに開始させるべき前記第２種ループ処理に関する制御情報を設定するスケジューラであって、
いずれかのパイプラインに開始させるべき処理が、第３種処理を複数回実行することにより完了する第３種ループ処理であり、新たな処理を開始できる状態にある第２パイプラインが存在せず、新たな処理を開始できる状態にある第１パイプライン及び第１種ループ処理を実行している第２パイプラインが存在していた場合に、前記制御情報移動回路を制御することにより、第１種処理を実行中の或る第２パイプライン用の制御情報レジスタに設定される制御情報を、新たな処理を開始できる状態にある第１パイプライン用の制御情報レジスタに移動させてから、当該第２パイプライン用の制御情報レジスタに、いずれかのパイプラインに開始させるべき前記第３種ループ処理に関する制御情報を設定するスケジューラを含む
ことを特徴とする請求項４に記載の演算ユニット。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算ユニットに関する。
【背景技術】
【０００２】
スーパーコンピュータに使用されているプロセッサの中には、図８や図９に示したような演算ユニットを備えたものが存在している。
【０００３】
図８に示してある演算ユニットは、ＡＬＵ系処理、ＭＵＬ系処理及びＬＤＳＴ系処理を実行可能な４個の演算器ｐ０〜ｐ３を備え、命令バッファに入力された命令毎に、演算器ｐＸ（Ｘ＝０〜３のいずれか）が複数回動作するユニットである。なお、ＡＬＵ系処理とは、加算処理、論理演算処理等のことである。また、ＭＵＬ系処理とは、乗算処理等のことであり、ＬＤＳＴ系処理とは、ロード処理、ストア処理等のことである。
【０００４】
より具体的には、この演算ユニットの制御パスは、各種処理を実行実行可能な各演算器ｐＸに、或る特定の処理を、オペランド（読み出し／書き込み対象とするレジスタファイル内のレジスタ）を変更しながら複数回（複数サイクル分）行わせることが出来るユニット（回路）となっている。そして、この演算ユニットのスケジューラは、サイクル毎に、命令バッファ内の命令をフェッチし、処理を実行していない（又は、処理が現サイクルで完了する）演算器ｐＸが複数サイクル分の動作を開始することになるように、制御パスを制御するユニットとなっている。
【０００５】
図９に示してある演算ユニットも、図８の演算ユニットと同様に、命令バッファに入力された命令毎に、演算器ｐＸ（Ｘ＝０〜７のいずれか）が複数回動作するユニットである。ただし、この演算ユニットは、全処理機能を有する演算器（図８）ではなく、単一の処理機能しか有さない演算器ｐ０〜ｐ７（ＡＬＵ系処理のみが可能な演算器ｐ０〜ｐ３、ＭＵＬ系処理のみが可能な演算器ｐ４、ｐ５、及び、ＬＤＳＴ系処理のみが可能な演算器ｐ６、ｐ７）を備えたユニットとなっている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００４−３８７５１号公報
【非特許文献】
【０００７】
【非特許文献１】Ｊ．Ｌ．ヘネシー、Ｄ．Ａ．パターソン（J. L. Hennessy and D. A. Patterson）著， 「コンピュータアーキテクチャ:定量的アプローチ（Computer Architecture: A Quantitative Approach）」，（米国），第２版, モルガンカウフマン出版（Morgan Kaufmann Publishers）, １９９６年， アペンディックスＢ  ベクタープロセッサ（Appendix B Vector Processors）
【発明の概要】
【発明が解決しようとする課題】
【０００８】
各演算器が単一の処理機能しか有していない演算ユニット（図９）のスケジューラに要求される機能は、基本的には、命令の発行先とすることが可能な，空いている（処理を実行中でない／処理が現サイクルで完了する）演算器を特定する機能だけである。そのため、この演算ユニットは、スケジューラの設計・製造が容易なものとなっている。ただし、この演算ユニットは、ポート数が多いレジスタファイルを必要とするという欠点、つまり、回路規模が大きくならざるを得ないという欠点を有するものとなっている。
【０００９】
また、各演算器が全処理機能を有している演算ユニット（図８）のスケジューラに要求される機能は、空いている演算器を特定する機能だけである。従って、この演算ユニットも、スケジューラの設計・製造が容易なものとなっている。しかも、この演算ユニットは、そのレジスタファイルに必要とされるポート数が比較的に少ないものであるため、演算ユニットの製造コストや消費電力を下げるという観点からは、図９の構成よりも、この図８の構成を採用した方が良い。
【００１０】
しかしながら、ＡＬＵ系処理機能の利用頻度の方が他の処理機能の利用頻度よりも通常高いため、図８の構成を採用した場合、或る演算器のＬＤＳＴ系処理機能やＭＵＬ系処理機能の利用頻度が低い演算ユニット、つまり、効率的に利用されない回路を有する演算ユニットが得られてしまうことになる。
【００１１】
そして、効率的に利用されない回路を少なくすることが出来れば、演算ユニットの製造コストや消費電力を低減できる。従って、演算ユニットを、図１０に示したように、ＡＬＵ系処理とＭＵＬ系処理とを実行可能な演算器ｐ０、ｐ１と、ＡＬＵ系処理とＬＤＳＴ系処理とを実行可能なｐ２、ｐ３とを備えたものとすることが考えられる。
【００１２】
ただし、この構成を採用した演算ユニットでは、各演算器が全処理機能を有している演算ユニット（図８）では生じない問題が生じることになる。
【００１３】
具体的には、図８に示してある構成は、各命令を空いているパイプライン〔演算器とそれを複数回動作させるための，制御パス内の回路とからなる部分〕に対して発行するスケジューラを搭載しておけば、各パイプラインが効率的に機能する（各パイプラインの未利用時間が短い）演算ユニットを実現することが出来るものである。
【００１４】
これに対して、図１０に示してある構成は、そのようなレベルの命令発行機能しか有さないスケジューラを用いたのでは、各パイプラインが効率的に機能する演算ユニットを実現できないものとなっている。
【００１５】
具体的には、図１０の演算ユニットのスケジューラが、命令毎に、その命令を処理（実行）する機能を有する空きパイプラインを予め定められている順に探索し、探索したパイプラインに対して命令を発行するものである共に、ＡＬＵ系命令については、パイプラインｐ０、ｐ１、ｐ２、ｐ３の順に空きパイプラインを探索し、ＭＵＬ系命令については、パイプラインｐ０、ｐ１の順に空きパイプラインを探索し、ＬＤＳＴ系命令については、パイプラインｐ２、ｐ３の順に空きパイプラインを探索するものであると仮定する。
【００１６】
そして、そのような構成を有する演算ユニットの命令バッファに、加算処理を８回行うことが必要なＡＬＵ系命令ｖａｄｄ、乗算処理を８回行うことが必要なＭＵＬ系命令ｖｍｕｌ、ロード処理を８回行うことが必要なＬＤＳＴ系命令ｖｌｏａｄ、乗算処理を８回行うことが必要なＭＵＬ系命令ｖｍｕｌが、この順に、入力された場合を考える。
【００１７】
この場合、図１１に示したように、パイプラインｐ０に対して、最初の命令ｖａｄｄが発行されてから、パイプラインｐ１、ｐ２に対して、順次、命令ｖｍｕｌ、ｖｌｏａｄが発行される。従って、４番目の命令ｖｍｕｌのスケジューラによるフェッチ時には、ＭＵＬ系命令を処理できないパイプラインｐ３しか空いていないことになる。そして、ＭＵＬ系命令を処理できるパイプラインが空くのは９サイクル目であるため、４番目の命令ｖｍｕｌは、９サイクル目にパイプラインｐ０に対して発行されることになる。
【００１８】
上記した一連の命令がこのような形で処理されるということは、この演算ユニットでは
、各パイプラインが効率的に利用されていないということである。何故ならば、これらの命令は、図１２に示したように、まず、パイプラインｐ３に対して、最初の命令ｖａｄｄを発行してから、パイプラインｐ１、ｐ２、ｐ０に対して、順次、命令ｖｍｕｌ、ｖｌｏａｄ、ｖｍｕｌを発行するようにすれば、サイクル毎に発行できるものとなっているからである。
【００１９】
このように、図１０に示してある構成は、比較的に単純な構成のスケジューラを用いたのでは、各パイプラインが効率的に機能する演算ユニットを実現できないものとなっているのであるが、命令バッファ内の命令が、図１１に示したような順番で各パイプラインに発行すべきものであることを判断できるスケジューラを設計することは極めて困難なことである。しかも、そのようなスケジューラは、回路規模が大きなものとならざるを得ない。
【００２０】
そこで、開示の技術の課題は、マルチサイクル動作をする複数のパイプラインを備えた、安価に製造可能な演算ユニットであって、複雑な構成のスケジューラを搭載しなくても、各パイプラインを効率的に動作させることが出来る演算ユニットを提供することにある。
【課題を解決するための手段】
【００２１】
上記課題を解決するために、開示の技術の一態様の演算ユニットは、第１種処理の実行機能と第２種処理の実行機能とを有する１つ以上の第１パイプライン、及び、第１種処理の実行機能と第３種処理の実行機能とを有する１つ以上の第２パイプラインを含む、マルチサイクル動作をする複数のパイプラインと、新たな処理を開始できる状態にある第２パイプラインに、或る第１パイプラインが既に開始している，第１種処理を複数回実行することにより完了する第１種ループ処理を引き継がせる機能を有する制御回路とを備える。
【発明の効果】
【００２２】
上記構成を採用しておけば、マルチサイクル動作をする複数のパイプラインを備えた、安価に製造可能な演算ユニットであって、複雑な構成のスケジューラを搭載しなくても、各パイプラインを効率的に動作させることが出来る演算ユニットを実現することが出来る。
【図面の簡単な説明】
【００２３】
【図１】実施形態に係る演算ユニットの概略構成図。
【図２】演算ユニットの制御情報レジスタに記憶される制御情報の説明図。
【図３】スケジューラが実行する命令発行処理の流れ図。
【図４】スケジューラによる制御内容の説明図。
【図５Ａ】スケジューラによる制御内容の説明図。
【図５Ｂ】スケジューラによる制御内容の説明図。
【図６】既存の，全処理機能を有する複数のパイプラインを備えた演算ユニットの概略構成図。
【図７】既存の，単一の処理機能を有する複数のパイプラインを備えた演算ユニットの変形例の説明図
【図８】既存の，全処理機能を有する複数のパイプラインを備えた演算ユニットの変形／改良例の説明図。
【図９】既存の，単一の処理機能を有する複数のパイプラインを備えた演算ユニットの概略構成図。
【図１０】演算ユニットの，採用できることが望ましい構成の説明図。
【図１１】図１０の構成を採用した場合に生じ得る問題を説明するための図。
【図１２】図１０の構成を採用した場合に生じ得る問題を説明するための説明図。
【発明を実施するための形態】
【００２４】
まず、図１及び図２を用いて、実施形態に係る演算ユニット１０の概要を説明する。なお、これらの図のうち、図１は、演算ユニット１０の概略構成図であり、図２は、演算ユニット１０の制御情報レジスタ２１X（Ｘ＝０〜３）に記憶される制御情報の説明図であ
る。
【００２５】
図１に示してあるように、実施形態に係る演算ユニット１０は、命令バッファ１１、スケジューラ１２、制御パス１３及びデータパス１４を備えている。
【００２６】
データパス１４は、データに対する各種処理を実際に行うユニット（機能ブロック、回路）である。このデータパス１４は、レジスタファイル２５と、４個の演算器ｐ０〜ｐ４とを、備えている。
【００２７】
レジスタファイル２５は、複数（本実施形態では、８個）のリードポート、及び、複数のライトポート（図示略）を備えた，複数のレジスタ（本実施形態では、３２個の６４ビットレジスタ）の集合体である。
【００２８】
演算器ｐ０、ｐ１は、いずれも、ＡＬＵ系処理（加算処理、論理演算処理等）とＭＵＬ系処理（乗算処理等）とを実行可能なユニット（以下、ＭＵＬ系演算器とも表記する）である。演算器ｐ２、ｐ３は、いずれも、ＡＬＵ系処理とＬＤＳＴ系処理（ロード処理、ストア処理等）とを実行可能なユニット（以下、ＬＤＳＴ系演算器とも表記する）である。
【００２９】
データパス１４内の各演算器ｐＸ（Ｘ＝０〜３）は、１サイクル（後述するスケジューラ１２の命令発行周期）の間に１回分の処理が完了するユニットである。なお、各演算器ｐＸは、１サイクルの間に１処理しか行えないユニット（複数の処理を同時に実行することは出来ないユニット）である。また、図示の都合上、図１には、各演算器ｐＸの演算結果をレジスタファイル２５外に示してあるが、データパス１４は、各演算器ｐＸの演算結果がレジスタファイル２５内の特定のレジスタに格納されるものである。
【００３０】
命令バッファ１１は、演算ユニット１０が受け付けた命令を時系列的に記憶しておくためのバッファ（一種のＦＩＦＯメモリ）である。
【００３１】
スケジューラ１２は、バッファ１１内の先頭の命令（最も過去に受け付けた命令）をサイクル毎に読み出し（フェッチし）、読み出した命令に応じた内容の処理を、データパス１４（及び制御パス１３）に開始させるユニットである。このスケジューラ１２の詳細については後述するが、演算ユニット１０が受け付ける命令（スケジューラ１２が処理する命令）は、原則として、或る演算器ｐＸを複数回動作させることにより遂行できる命令である。より具体的には、演算ユニット１０が受け付ける命令は、原則として、加算処理等（いずれかの演算器ｐＸが実行可能な処理）をそのオペランドを変更しつつ複数回繰り返すことによって遂行できる命令となっている。
【００３２】
制御パス１３は、スケジューラ１２から与えられる制御情報（詳細は後述）に基づきデータパス１４を制御するユニットである。この制御パス１３は、４つの制御情報レジスタ２１0〜２１3、４つの命令更新回路２２0〜２２3、４つの２入力マルチプレクサ２３0〜
２３3、及び、４つの３入力マルチプレクサ２４0〜２４3を、備えている。
【００３３】
制御パス１３が備える各制御情報レジスタ２１X（Ｘ＝０〜３）は、図２に示してある
ような構成の制御情報、すなわち、演算器制御情報、オペランド情報、現在のループ回数等からなる制御情報（本実施形態では、３２ビットの情報）を記憶しておくためのレジス
タである。
【００３４】
この制御情報は、スケジューラ１２が初期値を設定し、命令更新回路２２Xが定期的に
（次サイクルへの移行時に）その内容を更新する情報である。
【００３５】
具体的には、制御情報レジスタ２１X上の制御情報中の演算器制御情報は、次サイクル
にて行うべき処理（処理の種類）を指定するために、演算器ｐＸに供給される情報（図１参照）である。オペランド情報は、演算器制御情報が指定する種類の処理時に読み出し／書き込み対象とすべき，レジスタファイル２５内の幾つかのレジスタの指定情報（図２では、src0, src1, dst）を含む情報である。各制御情報レジスタ２１X上のオペランド情報は、図１に模式的に示してあるように、演算器ｐＸにデータを出力するレジスタの指定情報等として（図１には、src0, src1相当のものだけを２本の矢印で示してある）、レジスタファイル２５に供給されている。
【００３６】
現在のループ回数（図２）は、制御情報レジスタ２１X上の制御情報を更新する必要が
ある（次サイクルも演算器ｐＸを機能させる必要がある）か否かを判断するために命令更新回路２２Xが参照する情報である。なお、次サイクルも演算器ｐＸを機能させる必要が
ある場合に命令更新回路２２Xが行う処理は、制御情報レジスタ２１Xから読み込んだ制御情報を、オペランド情報及び現在のループ回数を変更した上で出力する（制御情報レジスタ２１Xに設定し直す）処理である。
【００３７】
制御パス１３（図１）内の各２入力マルチプレクサ２３Xは、スケジューラ１２による
制御情報レジスタ２１Xへの制御情報の設定、及び、命令更新回路２２Xによる制御情報の更新を可能とするために設けられているマルチプレクサである。
【００３８】
各３入力マルチプレクサ２４Xは、命令更新回路２２Xによって制御情報レジスタ２１X
に設定される制御情報を、他の制御情報レジスタ２１Y（Ｙ≠Ｘ；詳細は後述）に設定で
きるようにするために設けられているマルチプレクサである。
【００３９】
図１に示してある回路構成（他構成要素との接続形態）から明らかなように、３入力マルチプレクサ２４0は、ＬＤＳＴ系演算器ｐ２又はｐ３に関する更新後の制御情報（つま
り、命令更新回路２２2、２２3の出力）を、制御情報レジスタ２１0に設定できるものと
なっている。３入力マルチプレクサ２４1も、ＬＤＳＴ系演算器ｐ２又はｐ３に関する更
新後の制御情報を、制御情報レジスタ２１1に設定できるものとなっている。
【００４０】
そして、３入力マルチプレクサ２４2、２４3は、それぞれ、ＭＵＬ系演算器ｐ０又はｐ１に関する更新後の制御情報（命令更新回路２２0、２２1の出力）を、制御情報レジスタ２１2、２１3に設定できるものとなっている。
【００４１】
以上のことを前提に、以下、演算ユニット１０の構成及び動作をさらに詳細に説明する。なお、以下の説明では、制御情報レジスタ２１X、命令更新回路２２X、演算器ｐＸ等からなる部分〔演算器ｐＸと演算器ｐＸを複数回動作させるための構成とからなる部分〕のことを、パイプラインｐＸと表記する。また、パイプラインｐ０、ｐ１（つまり、ＭＵＬ系演算器ｐ０、ｐ１を含むパイプライン）のことを、ＭＵＬ系パイプラインｐ０、ｐ１と表記し、パイプラインｐ２、ｐ３のことを、ＬＤＳＴ系パイプラインｐ２、ｐ３と表記する。
【００４２】
図３に、スケジューラ１２が、命令バッファ１１上の１命令をいずれかのパイプラインｐＸに対して発行するために実行する命令発行処理の流れ図を示す。なお、この命令発行処理は、スケジューラ１２が、原則として（ステップＳ１０５が実行された場合が例外）
、サイクル毎に開始する処理である。また、実際の発行制約はレジスタ干渉など他にもいろいろあるが、本処理の流れでは簡単のため資源競合のみ存在するものと仮定する。
【００４３】
すなわち、所定タイミングとなったため、この命令発行処理を開始したスケジューラ１２は、まず、命令バッファ１１上の先頭の命令（最も過去に受け付けた命令）を読み出す（ステップＳ１０１）。
【００４４】
次いで、スケジューラ１２は、読み出した命令を発行可能なパイプラインｐＸが空いているか否かを、命令の種類別に各パイプラインｐＸに予め割り当てられている優先順位順に確認する（ステップＳ１０２）。なお、『パイプラインｐＸが空いている』とは、新たな処理を次サイクルに開始できる状態にある（パイプラインｐＸが処理を行っていない、又は、パイプラインｐＸが実行中の処理が現サイクルで終わる）ということである。また、或る命令を発行可能なパイプラインｐＸとは（図１参照）、ＡＬＵ系命令（加算命令、論理演算命令等）については、パイプラインｐ０〜ｐ３のことであり、ＭＵＬ系命令（乗算命令等）については、パイプラインｐ０、ｐ１のことであり、ＬＤＳＴ系命令（ロード命令、ストア命令等）については、パイプラインｐ２、ｐ３のことである。
【００４５】
読み出した命令を発行可能なパイプラインｐＸが存在していた場合（ステップＳ１０３；ＹＥＳ）、スケジューラ１２は、そのパイプラインｐＸに対して命令を発行する（ステップＳ１０８）。より具体的には、スケジューラ１２は、ステップＳ１０２の処理により空いていることを見出したパイプラインｐＸの制御情報レジスタ２１Xに、読み出した命
令に応じた内容の制御情報（図２参照）を設定する処理を、このステップＳ１０８にて行う。
【００４６】
そして、ステップＳ１０８の処理を終えたスケジューラ１２は、この図３の処理を一旦終了し、図３の処理を開始すべきタイミングとなる（１サイクルが経過して命令バッファ１１上の次の命令を処理すべきタイミングとなる）のを待機する状態となる。
【００４７】
一方、読み出した命令を発行可能なパイプラインｐＸが存在していなかった場合（ステップＳ１０３；ＮＯ）、スケジューラ１２は、処理引継可能条件が満たされているか否かを判断する（ステップＳ１０４）。
【００４８】
ここで、処理引継可能条件とは、読み出した命令がＭＵＬ系命令である場合には、『空きＬＤＳＴ系パイプライン及びＡＬＵ系処理を実行中のＭＵＬ系パイプラインが存在する』（ＬＤＳＴ系パイプラインｐ２、ｐ３の少なくとも一方が空いており、且つ、ＭＵＬ系パイプラインｐ０、ｐ１の少なくとも一方がＡＬＵ系処理を実行している）という条件のことである。また、読み出した命令がＬＤＳＴ系命令である場合には、『空きＭＵＬ系パイプライン及びＡＬＵ系処理を実行中のＬＤＳＴ系パイプラインが存在する』（ＭＵＬ系パイプラインｐ０、ｐ１の少なくとも一方が空いており、且つ、ＬＤＳＴ系パイプラインｐ２、ｐ３の少なくとも一方がＡＬＵ系処理を実行している』という条件のことである。
【００４９】
スケジューラ１２は、処理引継可能条件が満たされていた場合には、ＡＬＵ系処理を実行している１個のパイプライン（ＭＵＬ系命令の処理時にはＭＵＬ系パイプライン、ＬＤＳＴ系命令の処理時にはＬＤＳＴ系パイプライン）を、処理引継元パイプラインとして特定し、空いている１個のパイプライン（ＭＵＬ系命令の処理時にはＬＤＳＴ系パイプライン、ＬＤＳＴ系命令の処理時にはＭＵＬ系パイプライン）を、処理引継先パイプラインとして特定する処理も行う。なお、この処理は、処理引継元／処理引継先パイプラインとすることが可能なパイプラインが２個存在した場合、予め設定されているアルゴリズムによりそれらのパイプラインの中から、処理引継元／処理引継先パイプラインとする１個のパイプラインを選択するものとなっている。
【００５０】
要するに、ステップＳ１０４にて、スケジューラ１２は、読み出した命令がＭＵＬ系命令であり、ＬＤＳＴ系パイプラインｐ２、ｐ３の少なくとも一方が空いており、ＭＵＬ系パイプラインｐ０、ｐ１の少なくとも一方がＡＬＵ系処理を実行していた場合には、処理引継可能条件が満たされていると判断する。また、スケジューラ１２は、当該判断時に、ＡＬＵ系処理を実行していることを見出した１個のＭＵＬ系パイプライン、空いていることを見出した１個のＬＤＳＴ系パイプラインを、それぞれ、処理引継元パイプライン、処理引継先パイプラインとして特定する。
【００５１】
スケジューラ１２は、読み出した命令がＬＤＳＴ系命令であり、ＭＵＬ系パイプラインｐ０、ｐ１の少なくとも一方が空いており、且つ、ＬＤＳＴ系パイプラインｐ２、ｐ３の少なくとも一方がＡＬＵ系処理を実行していた場合にも、処理引継可能条件が満たされていると判断する。また、スケジューラ１２は、当該判断時に、ＡＬＵ系処理を実行していることを見出した１個のＬＤＳＴ系パイプライン、空いていることを見出した１個のＭＵＬ系パイプラインを、それぞれ、処理引継元パイプライン、処理引継先パイプラインとして特定する。
【００５２】
そして、スケジューラ１２は、処理引継可能条件が満たされていると判断した場合（ステップＳ１０４；ＹＥＳ）には、処理引継元パイプラインに関する更新後の制御情報を、処理引継先パイプラインに関する制御情報レジスタ２１Xに設定する（ステップＳ１０６
）。
【００５３】
より具体的には、スケジューラ１２は、読み出した命令がＭＵＬ系命令であった場合には、処理引継元パイプラインｐＫ（Ｋ＝０or１）の命令更新回路２２Kによって更新され
た制御情報が、処理引継先パイプラインｐＬ（Ｌ＝２or３）に関する制御情報レジスタ２１Lに設定されるように、３入力マルチプレクサ２４Lを制御する。また、スケジューラ１２は、読み出した命令がＬＤＳＴ系命令であった場合には、処理引継元パイプラインｐＫ（Ｋ＝２or３）の命令更新回路２２Kによって更新された制御情報が、処理引継先パイプ
ラインｐＬ（Ｌ＝０or１）に関する制御情報レジスタ２１Lに設定されるように、３入力
マルチプレクサ２４Lを制御する。
【００５４】
次いで、スケジューラ１２は、処理引継元パイプラインｐＫに対して、命令バッファ１１から読み出した命令を発行する処理（ステップＳ１０７）、すなわち、制御情報レジスタ２１Kに制御情報を書き込む処理を行う。
【００５５】
そして、スケジューラ１２は、この図３の処理を一旦終了して、図３の処理を再び実行すべきタイミングとなるのを待機する状態となる。
【００５６】
一方、ステップＳ１０４にて、処理引継可能条件が満たされていないと判断した場合（ＮＯ）、スケジューラ１２は、いずれかのパイプラインの処理が完了する（いずれかのパイプラインが、新たな処理を開始できる状態となる）のを待機する（ステップＳ１０５）。
【００５７】
そして、スケジューラ１２は、いずれかのパイプラインの処理が完了した場合には、ステップＳ１０２以降の処理を再び開始する。なお、流れ図には明示していないが、この場合に、スケジューラ１２がステップＳ１０２及びＳ１０３にて実行する処理は、処理が完了したパイプラインが、命令バッファ１１から読み出してある命令（前サイクルで発行できなかった命令）を発行可能なものであるか否かを判断する処理である。
【００５８】
以上の説明により既に明らかであるとは考えるが、ここで、具体例に基づき、本演算ユ
ニット１０の動作（機能）を説明しておくことにする。
【００５９】
既に説明したものと同じ命令ｖａｄｄ、ｖｍｕｌ、ｖｌｏａｄ、ｖｍｕｌが、この順に、演算ユニット１０の命令バッファ１１に入力された場合を考える。
【００６０】
この場合、ｖｌｏａｄまでの各命令の処理時には、図３のステップＳ１０３にてＹＥＳ側への分岐が行われる。そのため、各パイプラインに対する優先順位の設定内容に応じて、例えば、ｖａｄｄ、ｖｍｕｌ、ｖｌｏａｄが、それぞれ、パイプラインｐ０、ｐ１、ｐ２に対して発行されることになる。
【００６１】
そして、ｖａｄｄ、ｖｍｕｌ、ｖｌｏａｄが、それぞれ、パイプラインｐ０、ｐ１、ｐ２に対して発行されている場合には、４個目の命令ｖｍｕｌの処理時に、ＭＵＬ系処理を行えないＬＤＳＴ系パイプラインｐ３だけしか空いていないことになる。従って、この場合、スケジューラ１２は、命令を発行可能なパイプラインが存在しないと判断（ステップＳ１０３；ＮＯ）して、処理引継可能条件が満たされているか否かを判断する（ステップＳ１０４）。
【００６２】
そして、ｖｍｕｌがＭＵＬ系命令であり、ＬＤＳＴ系パイプラインｐ３が空いており、ＭＵＬ系パイプラインｐ０がＡＬＵ系処理（ｖａｄｄ）を実行中であるため、スケジューラ１２は、ステップＳ１０４にて、処理引継可能条件が満たされていると判断する。また、スケジューラ１２は、ステップＳ１０４にて、ＡＬＵ系処理を実行中のＭＵＬ系パイプラインｐ０を処理引継元パイプラインとして特定し、空いているＬＤＳＴ系パイプラインｐ３を処理引継先パイプラインとして特定する。
【００６３】
その後、スケジューラ１２は、ステップＳ１０６の処理を行う。すなわち、スケジューラ１２は、処理引継元パイプラインｐ０の命令更新回路２２0によって更新された制御情
報が、処理引継先パイプラインｐ３に関する制御情報レジスタ２１3に設定されるように
、３入力マルチプレクサ２４3を制御する。
【００６４】
既に説明したように、本演算ユニット１０が備える各パイプラインｐＸは、サイクル毎に、オペランドのみが異なる処理を繰り返すものである。また、いずれのパイプラインｐＸもＡＬＵ系処理を実行可能なものであり、スケジューラ１２が処理引継元パイプラインとして特定するパイプラインは、ＡＬＵ系処理を実行しているパイプラインである。従って、パイプラインｐ０の次サイクル用の制御情報を、パイプラインｐ３の次サイクル用の制御情報とすれば、図４に模式的に示したように、処理引継元パイプラインｐ０がそれまで行っていた処理（図４では、“ｖａｄｄ”）の残りの部分が、その後、処理引継先パイプラインｐ３によって行われる（〔１〕）ことになる。
【００６５】
より具体的には、図５Ａ、図５Ｂに模式的に示してあるように、パイプラインｐ３によって、パイプラインｐ０がそれまで行っていた処理の残りの部分（この場合、加算処理（ＡＬＵ系処理）を５回繰り返すことが必要な処理）が行われることになる。
【００６６】
また、ステップＳ１０６の処理を終えたスケジューラ１２は、図４に模式的に示してあるように、制御情報を移動した処理引継元パイプラインｐ０に対してｖｍｕｌを発行する（〔２〕）。従って、図５Ａ、図５Ｂに示してあるように、４個目の命令ｖｍｕｌに関する処理が、パイプラインｐ０によって、その命令の読み出し直後の４サイクル目から開始されることになる。
【００６７】
以上の説明から明らかなように、実施形態に係る演算ユニット１０は、図６の演算ユニットに比べて、同時に実行できるＭＵＬ系処理、ＬＤＳＴ系処理の個数が少ないため多少
性能は劣る。ただ、一般にＭＵＬ系処理やＬＤＳＴ系処理はプログラム中の頻度が多くないため、多くのプログラムで同等程度の性能を期待できる。なお、この図６は、既に説明した、全処理機能を有する４つのパイプラインｐ０〜ｐ３を備えた演算ユニット（図８）の構成を、より詳細に（図１に示した演算ユニット１０の構成と同レベルで）示した図である。
【００６８】
また、演算ユニット１０のスケジューラ１２、制御パス１３は、それぞれ、図６の演算ユニットのスケジューラ、制御パスに対して簡単な改良を施せば実現できるものとなっている。そして、演算ユニット１０のデータパス１４は、図６の演算ユニットのデータパスよりも、製造に要する素子数及び配線数が少なく、ＭＵＬ系処理やＬＤＳＴ系処理のような利用頻度が低く素子数が大きい回路も少ないユニットとなっている。
【００６９】
従って、演算ユニット１０に採用されている構成は、従来と同等程度の性能を有し、従来よりも消費電力が少ない演算ユニットを、従来よりも安価に実現できるものとなっていると言うことが出来る。
【００７０】
また、演算ユニット１０は、図９に示した構成に比べて性能的には多少劣るが、ポート数が比較的に少ないレジスタファイルしか必要としないものである。一方、図９の演算ユニットは、より多くのポート（１６個のリードポートと８個のライトポート）を備えたレジスタファイルが必要とされるが故に、面積が非常に大きくなるものである。
【００７１】
従って、演算ユニット１０に採用されている構成は、この図９の構成よりもコストパフォーマンスの面で優れたものとなっていることにもなる。
【００７２】
また、図７に示した構成は、図９に示した構成を、その機能が『データパスに同時期に発行可能な命令数が４個に制限されているスケジューラ（４個以下のパイプラインしか動作させることが出来ないスケジューラ）を備えた演算ユニット』と同機能となるように変形／改良したものである。このように、レジスタファイルと各パイプラインとの間に４入力マルチプレクサを設けておけば、単一の処理機能を有する複数のパイプラインを備えたタイプの演算ユニットに、リードポート数がレジスタファイル２５と等しいレジスタファイルを使用できることになる。ただし、データパスにおける情報のビット数（幅）の方が、制御パスにおける情報のビット数よりも大きいし、必要とされるマルチプレクサの数も、図７に示した構成の方が多い。しかも、図７に示した構成の演算ユニットに、レジスタファイル２５と全く同一構成のレジスタファイルを使用するためには、各パイプラインの出力側にもマルチプレクサを設けることが必要となる。
【００７３】
従って、演算ユニット１０に採用されている構成は、図７の構成と比しても、優れたものとなっていると言うことが出来る。
【００７４】
以上のように、実施形態に係る演算ユニット１０に採用されている構成は、他のいずれの構成を採用した場合よりも、製造コストが低く消費電力が少ない演算ユニットを実現できるものとなっている。従って、スーパーコンピュータ用のプロセッサや、一般電子機器用のプロセッサ（ＤＳＰ等）の演算ユニットを、上記構成のものとしておけば、既存のものよりも製造コストが低く消費電力が少ないプロセッサを実現できることになる。
【００７５】
《変形形態》
上記した演算ユニット１０は、各種の変形を行うことが出来るものである。例えば、若干、性能が低下することにはなるが、演算ユニット１０を、ＬＤＳＴ系パイプラインからＭＵＬ系パイプラインへの制御情報の移動、又は、ＭＵＬ系パイプラインからＬＤＳＴ系パイプラインへの制御情報の移動のみが可能なものに変形することが出来る。
【００７６】
スケジューラ１２を、制御情報の移動と、処理引継元パイプラインへの命令発行とを別サイクルで行うものに変形することも出来る。また、演算ユニット１０を、ベクトルユニットや、ＳＩＭＤ(Single Instruction Multiple Data)のようなユニット（複数個の制御情報レジスタ２１Xに、同時に、制御情報が設定されることがあるユニット）に変形する
ことも出来る。さらに、演算ユニット１０を、パイプラインの数が上記したものとは異なるユニットや、各パイプライン（実行ステージ）がベクトルユニット／ＳＩＭＤ等であるユニット、各パイプラインの機能（各パイプラインが有する処理機能の組み合わせ）が上記したものとは異なるユニット等に変形することも出来る。
【００７７】
また、演算ユニット１０は、或るパイプラインが既に開始している処理（ＡＬＵ系処理を繰り返す処理）を他のパイプラインに引き継がせるための制御が、スケジューラ１２と３入力マルチプレクサ２４0〜２４3とを主要構成要素とした回路により行われるユニットであったが、当該回路として、他の構成を有する回路を採用することも出来る。
【符号の説明】
【００７８】
１０    演算ユニット
１１    命令バッファ
１２    スケジューラ
１３    制御パス
１４    データパス
２１0〜２１3    制御情報レジスタ
２２0〜２２3    命令更新回路
２３0〜２３3    ２入力マルチプレクサ
２４0〜２４3    ３入力マルチプレクサ
２５  レジスタファイル
【図１】
0005598114.tif 000002
【図２】
0005598114.tif 000003
【図３】
0005598114.tif 000004
【図４】
0005598114.tif 000005
【図５Ａ】
0005598114.tif 000006
【図５Ｂ】
0005598114.tif 000007
【図６】
0005598114.tif 000008
【図７】
0005598114.tif 000009
【図８】
0005598114.tif 000010
【図９】
0005598114.tif 000011
【図１０】
0005598114.tif 000012
【図１１】
0005598114.tif 000013
【図１２】
0005598114.tif 000014