(57)【特許請求の範囲】
【請求項１】
命令メモリから１からｍ個（ｍは任意の自然数）の命令を並列にフェッチする命令バスと、
フェッチした命令を保持する命令レジスタと、
前記命令レジスタから読み出した１からｍ個の命令を並列にデコードする命令デコーダと、
デコードされた１からｍ個の命令を並列に発行する命令ディスパッチャと、
前記命令デコーダによってデコードされた１からｍ個の命令が並列に直接入力され、それらの命令を保持し、ｎ個（ｎはｍよりも大きい任意の自然数）の前記命令を並列に発行する命令バッファと、
ループ処理を行わない通常命令モード、１回目のループ処理を行うＶＬＯＯＰ初回モード、及び２回目以降のループ処理を行うＶＬＯＯＰモードのいずれかに切り替わるようにループ処理のシーケンスを制御すると共に前記命令バッファにおける命令の蓄積及び発行を制御するループ制御ユニットと、
前記ループ制御ユニットの制御に基づいて前記命令ディスパッチャが発行した命令あるいは前記命令バッファが発行した命令の何れかを選択するマルチプレクサと、
前記マルチプレクサによって選択された前記１からｍ個またはｎ個の命令を同時に実行する前記ｎ個の演算器と、
を具備することを特徴とする並列演算プロセッサ。
【請求項２】
前記ループ制御手段は、
ループ処理の開始を宣言する命令をデコードすることにより前記命令バッファへの命令の蓄積を開始し、前記ｎ個の命令が蓄積される度に該ｎ個の命令を並列に発行し、前記ｎ個の演算器によって同時に実行され、前記ループ処理を形成するすべての命令の蓄積が終了すると、それ以降のループ処理の繰り返しでは前記命令バッファに蓄積された命令をｎ個ずつ並列に発行するように制御することを特徴とする請求項１記載の並列演算プロセッサ。
【請求項３】
命令メモリより並列に読み出され、デコードされたｍ個（ｍは任意の自然数）の命令を命令ディスパッチャで並列に発行してｎ個（ｎはｍより大きい任意の自然数）の演算器の何れかで演算を行なう並列演算プロセッサの演算制御方法であって、
ループ処理の開始を宣言するＶＬＯＯＰ命令をデコードすることで命令バッファへ前記デコードされた命令の蓄積を開始し、前記ｎ個の前記命令が蓄積される度にこれらの命令を発行して前記ｎ個の演算器で同時に演算を実行し、前記１回目のループ処理のためのすべての命令の蓄積が終了するとそれ以降のループ処理では前記命令バッファに蓄積された命令をｎ個ずつ並列に発行して、前記ｎ個の演算器で同時に演算を実行することを特徴とする並列演算プロセッサの演算制御方法。
【請求項４】
命令メモリより並列に読み出され、デコードされたｍ個（ｍは任意の自然数）の命令を命令ディスパッチャで並列に発行してｎ個（ｎはｍより大きい任意の自然数）の演算器の何れかで演算を行なう並列演算プロセッサに適用される演算制御プログラムであって、
ループ処理の開始を宣言するＶＬＯＯＰ命令をデコードすることで命令バッファへ前記デコードされた命令の蓄積を開始させ、前記ｎ個の前記命令が蓄積される度にこれらの命令を発行させて前記ｎ個の演算器で同時に演算を実行させ、前記１回目のループ処理のためのすべての命令の蓄積が終了すると、それ以降のループ処理では前記命令バッファに蓄積した命令をｎ個ずつ並列に発行させて、前記ｎ個の演算器で同時に演算を実行させることを特徴とする並列演算プロセッサの演算制御プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は並列演算プロセッサ、その演算制御方法及びプログラムに関し、特に消費電力の少ない高速なループ処理を可能とする並列演算プロセッサ、その演算制御方法及びプログラムに関する。
【０００２】
【従来の技術】
代表的な並列演算プロセッサの一つにＤＳＰ（ディジタル・シグナル・プロセッサ）がある。ＤＳＰは、ディジタル信号処理の特徴である「処理の並列性」を利用して、複数の演算器を並列に動作させることでディジタル信号処理プログラムを高速に実行する。
【０００３】
例えば、典型的なディジタル信号処理であるＦＩＲフィルタでは以下のような計算を行なう。
y(n)=a(0)x(n)+a(1)x(n-1)+a(2)x(n-2)+a(3)x(n-3)                （１）
但し、ｙ（ｎ）は時刻ｎのフィルタ出力、ｘ（ｎ−１）は時刻ｎ−ｉのフィルタ入力、ａ（ｉ）はｉ番目のフィルタ係数を表す。この計算は、次の３処理▲１▼▲２▼▲３▼のｉ＝０，１，２，３に関する繰り返しである。
▲１▼：ａ（ｉ）をメモリからロードする。
▲２▼：ｘ（ｎ−ｉ）をメモリからロードする。
▲３▼：ａ（ｉ）とｘ（ｎ−ｉ）を乗算し、その結果を累加算する。
【０００４】
一般的なＤＳＰでは、この点に着目してメモリからデータをロードするユニット２個と、乗算と累加算を行なうユニット１個を有し、これらユニットを並列動作させる。これにより、▲１▼▲２▼▲３▼を並列に処理することができるため、式（１）の計算を高速に実行することができる。
【０００５】
演算器の搭載数は今後ますます増加することが予想される。一方、プロセッサ内の演算資源が増えるにつれて消費電力も増加する。そのため、メモリアクセスに用いるバス等の演算器以外の演算資源をできるだけ減らして、消費電力の増加を抑える必要がある。
【０００６】
このような消費電力の低減を目的とした並列演算プロセッサとして、従来、図６に示すように、搭載する演算器の数に対して並列に発行可能な命令数を少なくすることで、命令発行に関係する演算資源を減らすプロセッサが提案されている。
【０００７】
図６には、この並列演算プロセッサの構成が示されている。本プロセッサは、演算器の個数ｎより少ない最大ｍ個の命令を並列に発行できる機構を有している。具体的には、メモリからｍ個の命令を同時にフェッチする命令バス２０１と、フェッチした命令を保持するｍ個の命令レジスタＩＲ１〜ＩＲｍ２０２と、レジスタ２０２から読み出したｍ個の命令を同時にデコードする命令デコーダＤ１〜Ｄｍ２０３と、命令デコーダ２０３による命令のデコード結果を並列に発行する命令ディスパッチャ２０４と、発行された命令を並列に実行するｎ個の演算器Ｅ１〜Ｅｎ２０５と、演算器２０５に入力データを供給したり、同ユニットの出力結果を格納する汎用レジスタファイル２０６とを含んで構成される。なお、命令ディスパッチャ２０４は、並列に発行する命令数を命令間のデータ依存関係により決定し、本命令数として１〜ｍの任意の値を取ることができる。
【０００８】
次に、本プロセッサの動作について説明する。まず、命令バス２０１を介して命令メモリからｍ個の命令を同時にフェッチし、フェッチした同命令を命令レジスタ２０２に書き込む。そして、命令レジスタ２０２から読み出したｍ個の命令を命令デコーダ２０３により並列にデコードし、ｍ個のデコード結果を命令ディスパッチャ２０４に供給する。命令ディスパッチャ２０４は、命令どうしの依存関係に基づいて並列発行命令数１〜ｍを決定し、１〜ｍ個の命令を同時に発行する。こうして発行された１〜ｍ個の命令を、ｎ個ある演算器２０５のいずれかで実行する。
【０００９】
【発明が解決しようとする課題】
上述した従来の並列演算プロセッサは、処理の並列性を利用しにくい分岐やＩＦ−ＥＬＳＥ文などの制御処理が多いプログラムの実行には有効である。しかし、命令発行数と演算器の個数が一致していないことから明らかなように、演算器の個数に見合った性能を十分に発揮していない。
【００１０】
このような課題を解決するため、低消費電力を維持しつつ、命令発行数と演算器の個数を一致させることでより大きな演算能力を引き出すことができる並列演算プロセッサとして、例えば特開平７−１１０７６９号公報に開示されたものが知られている。本プロセッサは、命令をフェッチするバスのバンド幅を小さくしたままで、フェッチした命令をバッファに蓄積してから演算器の個数と同じ命令発行数で並列に実行する。
【００１１】
ところで、並列演算プロセッサとしてＤＳＰを想定する場合、ディジタル信号処理プログラムに多い、一連の命令列を繰り返し実行するループ処理を高速に実行することが要求される。こうした観点から、従来より、ループ処理を高速に実行する方法として、ゼロオーバヘッドループ等の工夫がなされている。ゼロオーバヘッドループとは、繰り返し実行すべき一連の命令モジュールの最初に、予め繰り返すべき命令のステップ数と、繰り返す回数、即ちリピート回数を指定する命令を設け、この命令モジュールの最後尾までくると自動的にモジュールの先頭番地に戻り、分岐命令の実行によるオーバヘッドをなくす制御方法である。
【００１２】
しかし、特開平７−１１０７６９号公報に記載の並列演算プロセッサは、ループ処理を効率的に実行することが目的ではないため、ループ処理においてループの終端にある命令から先頭にある命令へ実行シーケンスを移すのにオーバヘッドが発生する構造になっている。
【００１３】
本発明は上記事情に鑑みてなされたものであり、電力消費を抑制しつつ、演算器と同数の命令を並列に発行してループ処理を高速に実行する並列演算プロセッサ、その演算制御方法及びプログラムを提供することを目的とする。
【００１４】
【課題を解決するための手段】
係る目的を達成するために請求項１記載の発明は、命令メモリから１からｍ個（ｍは任意の自然数）の命令を並列にフェッチする命令バスと、フェッチした命令を保持する命令レジスタと、命令レジスタから読み出した１からｍ個の命令を並列にデコードする命令デコーダと、デコードされた１からｍ個の命令を並列に発行する命令ディスパッチャと、命令デコーダによってデコードされた１からｍ個の命令が並列に直接入力され、それらの命令を保持し、ｎ個（ｎはｍよりも大きい任意の自然数）の前記命令を並列に発行する命令バッファと、ループ処理を行わない通常命令モード、１回目のループ処理を行うＶＬＯＯＰ初回モード、及び２回目以降のループ処理を行うＶＬＯＯＰモードのいずれかに切り替わるようにループ処理のシーケンスを制御すると共に命令バッファにおける命令の蓄積及び発行を制御するループ制御ユニットと、ループ制御ユニットの制御に基づいて命令ディスパッチャが発行した命令あるいは命令バッファが発行した命令の何れかを選択するマルチプレクサと、マルチプレクサによって選択された１からｍ個またはｎ個の命令を同時に実行するｎ個の演算器と、を具備することを特徴とする。
【００１５】
請求項２記載の発明は、請求項１記載の発明において、ループ制御手段は、ループ処理の開始を宣言する命令をデコードすることにより命令バッファへの命令の蓄積を開始し、ｎ個の命令が蓄積される度にｎ個の命令を並列に発行し、ｎ個の演算器によって同時に実行され、ループ処理を形成するすべての命令の蓄積が終了すると、それ以降のループ処理の繰り返しでは命令バッファに蓄積された命令をｎ個ずつ並列に発行するように制御することを特徴とする。
【００１６】
請求項３記載の発明は、命令メモリより並列に読み出され、デコードされたｍ個（ｍは任意の自然数）の命令を命令ディスパッチャで並列に発行してｎ個（ｎはｍより大きい任意の自然数）の演算器の何れかで演算を行なう並列演算プロセッサの演算制御方法であって、ループ処理の開始を宣言するＶＬＯＯＰ命令をデコードすることで命令バッファへデコードされた命令の蓄積を開始し、ｎ個の命令が蓄積される度にこれらの命令を発行してｎ個の演算器で同時に演算を実行し、１回目のループ処理のためのすべての命令の蓄積が終了するとそれ以降のループ処理では命令バッファに蓄積された命令をｎ個ずつ並列に発行して、ｎ個の演算器で同時に演算を実行することを特徴とする。
【００１７】
請求項４記載の発明は、命令メモリより並列に読み出され、デコードされたｍ個（ｍは任意の自然数）の命令を命令ディスパッチャで並列に発行してｎ個（ｎはｍより大きい任意の自然数）の演算器の何れかで演算を行なう並列演算プロセッサに適用される演算制御プログラムであって、ループ処理の開始を宣言するＶＬＯＯＰ命令をデコードすることで命令バッファへデコードされた命令の蓄積を開始させ、ｎ個の命令が蓄積される度にこれらの命令を発行させてｎ個の演算器で同時に演算を実行させ、１回目のループ処理のためのすべての命令の蓄積が終了すると、それ以降のループ処理では命令バッファに蓄積した命令をｎ個ずつ並列に発行させて、ｎ個の演算器で同時に演算を実行させることを特徴とする。
【００１８】
本発明は、ループ処理の開始を宣言する命令をデコードすることにより命令バッファ（図１の１０５）へ命令の蓄積を開始し、搭載する演算器と同数の命令が蓄積される度にこれら命令を並列に発行し、すべての命令の蓄積が終了した後は命令バッファに蓄積済みの命令を繰り返して並列発行するように制御するループ制御ユニット（図１の１０６) を有する。
【００１９】
このように、ループ処理において搭載する演算器をすべて動作させる並列命令発行を可能とし、かつループ処理のシーケンスを小さいオーバヘッドで制御できる手段を有することにより、ループ処理を高速に実行することができる。
【００２０】
【発明の実施の形態】
（構成の説明）
本発明の実施の一形態について図面を参照して説明する。図1 は本発明による並列演算プロセッサの実施の一形態を示すブロック図である。同図において、本プロセッサは、通常の命令( 以下、通常命令) 、あるいは搭載する演算器の個数ｎと同じ数の通常命令を連結した命令( 以下、ＶＬＩＷ型命令) のいずれかをモードに応じて選択的に実行できる機構を有しており、命令メモリからｍ個（ただし、ｎはｍの整数倍）の通常命令を並列にフェッチする命令バス１０１と、フェッチした通常命令を保持するｍ個の命令レジスタＩＲ１〜ＩＲｍ１０２と、命令レジスタ１０２から読み出したｍ個の通常命令を同時にデコードする命令デコーダＤ１〜Ｄｍ１０３と、命令デコーダ１０３によるデコード結果を１〜ｍの並列命令数で発行する命令ディスパッチャ１０４と、命令デコーダ１０３によるｍ個のデコード結果１１２を逐次蓄積してｎ個の通常命令からなるＶＬＩＷ型命令を構築し、複数のＶＬＩＷ型命令からなるＶＬＩＷルーチンを保持する命令バッファ１０５と、ループ処理時の命令蓄積と発行およびシーケンスを制御するループ制御ユニット１０６と、命令ディスパッチャ１０４から発行された１〜ｍ個の通常命令、あるいは命令バッファ１０５から発行されたＶＬＩＷ型命令のいずれかを選択するｎ個のマルチプレクサＭ１〜Ｍｎ１０７と、これら通常命令、あるいはＶＬＩＷ型命令を実行するｎ個の演算器Ｅ１〜Ｅｎ１０８と、演算器１０８に入力データを供給したり、同ユニットの出力結果を格納する汎用レジスタファイル１０９と、命令アドレスを保持し、発行された命令数をカウントするプログラムカウンタ（ＰＣ）１１０とを含んで構成される。なお、本プロセッサにおけるループ処理では、１つのＶＬＩＷルーチンを繰り返し実行する。また、本処理は、ユーザがプログラム中に記述するループ処理の開始を宣言する命令「ＶＬＯＯＰ」をデコードすることで開始される。
【００２１】
ＶＬＯＯＰ命令は、ＶＬＩＷルーチンにおけるＶＬＩＷ型命令の数（ＶＮＵＭ）と、繰り返し回数（ＶＬＣ）を指定する。
【００２２】
命令バス１０１は、命令メモリに接続されており、本メモリからｍ個の通常命令を並列に転送する。
【００２３】
命令レジスタＩＲ１〜ＩＲｍ１０２は、命令バス１０１を介してフェッチされたｍ個の通常命令を各レジスタに入力し、入力した各通常命令を次サイクルで命令デコーダ１０３に向けて出力する。
【００２４】
命令デコーダＤ１〜Ｄｍ１０３は、命令レジスタ１０２から出力されたｍ個の通常命令を各デコーダに入力し、入力した各命令のデコード結果１１２を命令ディスパッチャ１０４と命令バッファ１０５に向けて出力する。また、ＶＬＯＯＰ命令をデコードしたことを示すＶＬＯＯＰデコード信号１１１も出力する。
【００２５】
命令ディスパッチャ１０４は、命令デコーダ１０３によるｍ個のデコード結果１１２を入力し、命令間のデータ依存関係により決定した並列命令発行数１〜ｍの命令をマルチプレクサ１０７に向けて出力する。
【００２６】
命令バッファ１０５は、命令デコーダ１０３からのデコード結果１１２と、デコード結果１１２の書き込み可否を制御する書き込みイネーブル信号１１３と、発行すべきＶＬＩＷ型命令を選択するための読み出し選択信号１１４とを入力する。そして、本バッファ１０５に保持されているＶＬＩＷルーチンから、選択信号１１４により選択されたＶＬＩＷ型命令をマルチプレクサ１０７に向けて出力する。
【００２７】
ループ制御ユニット１０６は、ＰＣ１１０の値とＶＬＯＯＰデコード信号１１１とを入力し、書き込みイネーブル信号１１３と読み出し選択信号１１４、並びに命令ディスパッチャ１０４による命令発行と命令バッファ１０５による命令発行とを切り替えるための発行選択信号１１５を出力する。このループ制御ユニット１０６は、さらに、ループ処理のシーケンスや命令の蓄積・発行を制御するループ制御部１０６０と、ＶＬＩＷルーチンの先頭にあるＶＬＩＷ型命令のアドレス（ＬＳＡ）を保持するレジスタ１０６１と、同ルーチンの終端にあるＶＬＩＷ型命令のアドレス（ＬＥＡ）を保持するレジスタ１０６２と、ループ処理の繰り返し回数（ＬＣ）をカウントダウンするレジスタ１０６３と、ＰＣ１１０に保持されている命令アドレスとＬＥＡ１０６２とが一致するかどうかを検知する比較器１０６４とを含んで構成される。なお、ＬＳＡ１０６１には、ＶＬＯＯＰ命令があるアドレスの次のアドレス、ＬＥＡ１０６２には、ＬＳＡ＋ＶＮＵＭ×ｎ（ＶＬＩＷルーチンの先頭にあるＶＬＩＷ型命令のアドレス＋ＶＬＩＷ型命令の数×ｎ）、ＬＣ１０６３には、ＶＬＣ（繰り返し回数）がそれぞれ代入される。
【００２８】
ｎ個のマルチプレクサＭ１〜Ｍｎ１０７は、命令ディスパッチャ１０４から発行された１〜ｍ個の通常命令( のデコード結果) と命令バッファ１０５から発行されたＶＬＩＷ型命令（におけるｎ個の通常命令のデコード結果）を入力し、同じくループ制御ユニット１０６より入力した発行選択信号１１５によりどちらか一方を選択して出力する。
【００２９】
ｎ個の演算器Ｅ１〜Ｅｎ１０８は、マルチプレクサ１０７の出力を各演算器に対する制御信号として入力すると共に、１〜ｍ個の通常命令あるいはＶＬＩＷ型命令により指定される実行入力データを汎用レジスタファイル１０９より入力する。そして、各演算器による命令実行結果を汎用レジスタファイル１０９に向けて出力する。
【００３０】
汎用レジスタファイル１０９は、演算器１０８で用いられる実行入力データを出力され、演算器１０８による実行結果を入力する。
【００３１】
プログラムカウンタＰＣ１１０には命令アドレスが保持されており、命令ディスパッチャ１０４もしくは命令バッファ１０５によりｉ個の通常命令が発行されるとｉだけ加算する。例えば、ＶＬＩＷ型命令が発行された場合、本ＰＣ１１０の値としてｎを加算する。
【００３２】
ＶＬＯＯＰデコード信号１１１は、命令デコーダ１０３により、ＶＬＯＯＰ命令がデコードされるとアサートされ、それ以外のときはネゲートされる。
【００３３】
書き込みイネーブル信号１１３は、ループ制御ユニット１０６により書き込み可のときはアサートされ、書き込み不可のときはネゲートされる。
【００３４】
発行選択信号１１５は、ループ制御ユニット１０６により、命令バッファ１０５から出力されたＶＬＩＷ型命令を発行するときにはアサートされ、命令ディスパッチャ１０４から出力された１〜ｍ個の通常命令を発行するときにはネゲートされる。
【００３５】
（動作の説明）
本実施の形態の動作について図１を参照して説明する。本実施の形態の動作には、通常モード／ＶＬＯＯＰ初回モード／ＶＬＯＯＰモードという３種類の動作モードがある。通常モードでは、命令ディスパッチャ１０４から発行される１〜ｍ個の通常命令を並列に実行する。通常モード中、ＶＬＯＯＰ命令がデコードされると、プロセッサの動作モードをＶＬＯＯＰ初回モードへ移行し、ループ処理の実行を開始する。ＶＬＯＯＰ初回モードでは、ループ処理の初回としてＶＬＩＷルーチンを１回だけ実行する。そして、ＶＬＯＯＰ初回モードにおける実行が終わると、プロセッサの動作モードをＶＬＯＯＰモードへ移行する。ＶＬＯＯＰモードでは、ループ処理が終了するまでＶＬＩＷルーチンを繰り返し実行する。以下、各動作モードについて図３〜図５に示されたフローチャートを参照しながら詳細に説明する。
【００３６】
まず、命令デコーダ１０３によってＶＬＯＯＰ命令がデコードされるまでの通常モードにおける動作について図３を参照しながら説明する。通常モード中、書き込みイネーブル信号１１３と発行選択信号１１５をネゲートしておく。命令バス１０１を介して命令メモリからフェッチしたｍ個の通常命令を命令レジスタ１０２に書き込む（ステップＳ１）。そして、命令レジスタ１０２に保持したｍ個の通常命令を読み出し、命令デコーダ１０３において並列にデコードする（ステップＳ２）。なお、ここでＶＬＯＯＰ命令がデコードされ、ＶＬＯＯＰ初期モードに移行した際の処理（ステップＳ３／ＹＥＳ）については後述する。命令デコーダ１０３はデコード結果１１２を命令ディスパッチャ１０４に向けて出力する（ステップＳ４）。命令ディスパッチャ１０４は、１〜ｍ個の通常命令をマルチプレクサ１０７に向けて発行する（ステップＳ５）。マルチプレクサ１０７では、発行選択信号１１５に基づいて、命令ディスパッチャ１０４から出力された通常命令を選択する（ステップＳ６）。この後、選択された通常命令をｎ個の演算器１０８のうち対応するユニットにおいて実行する（ステップＳ７）。
【００３７】
次に、図４に示されたフローチャートを参照しながらＶＬＯＯＰ初回モードの動作手順について説明する。通常モードによるプログラム実行中、命令デコーダ１０３は、ＶＬＯＯＰ命令をデコードすると（ステップＳ３／ＹＥＳ）、ＶＬＯＯＰデコード信号１１１をアサートする。本信号１１１がアサートされたのを受けて、ループ制御部１０６０は、動作モードをＶＬＯＯＰ初回モードへ移行し、ループ処理を開始する。また、ＬＳＡ１０６１、ＬＥＡ１０６２、ＬＣ１０６３に、ＶＬＯＯＰ命令があるアドレスの次のアドレス、ＬＳＡ＋ＶＮＵＭ＊ｎ、ＶＬＣをそれぞれ代入する（ステップＳ８）。
【００３８】
ＶＬＯＯＰ初回モード中、書き込みイネーブル信号１１３と発行選択信号１１５をアサートしておく（ステップＳ９）。命令バス１０１を介して命令メモリからフェッチしたｍ個の通常命令を命令レジスタ１０２に書き込む（ステップＳ１０）。命令レジスタ１０２に保持したｍ個の通常命令を読み出し、命令デコーダ１０３において並列にデコードする（ステップＳ１１）。そして、ｍ個のデコード結果１１２を命令バッファ１０５に書き込む（ステップＳ１２）。一連の通常命令に対してこれらの動作を繰り返し、命令バッファ１０５におけるｎ個の命令格納スロットＩＮＳＴｉ−１・・・ＩＮＳＴｉ−ｎ（ｉは命令バッファ１０５における行番号）に通常命令が格納されて１ＶＬＩＷ型命令が蓄積されると（ステップＳ１３／ＹＥＳ）、読み出し選択信号１１４によりＶＬＩＷ型命令を選択し、マルチプレクサ１０７に向けて発行する（ステップＳ１４）。マルチプレクサ１０７は、発行選択信号１１５に基づいて、命令バッファ１０５から出力されたＶＬＩＷ型命令を選択する（ステップＳ１５）。その後、選択されたＶＬＩＷ型命令におけるｎ個の通常命令を、ｎ個の演算器１０８においてそれぞれ実行する（ステップＳ１６）。ＶＬＯＯＰ初回モード中、比較器１０６４においてＰＣ１１０の値とＬＥＡ１０６２が一致したとき［すなわち、プログラムの実行がアドレスＬＥＡにあるＶＬＩＷ型命令まで到達したとき］（ステップＳ１７／ＹＥＳ）、ループ制御部１０６０は、ＬＣ１０６３をデクリメントし、ＰＣ１１０にＬＳＡ１０６１の値を代入することでアドレスＬＳＡにあるＶＬＩＷ型命令へプログラムの実行を分岐した後、動作モードをＶＬＯＯＰモードへ移行する（ステップＳ１８）。
【００３９】
最後に、ＶＬＯＯＰモードにおける動作手順について図５に示されたフローチャートを参照しながら説明する。ＶＬＯＯＰモード中、書き込みイネーブル信号１１３をネゲートし、発行選択信号１１５をアサートしておく（ステップＳ１９）。これにより、命令バッファ１０５への書き込みは行われない。命令バッファ１０５に格納されているＶＬＩＷルーチンから１ＶＬＩＷ型命令を読み出し選択信号１１４により選択し、マルチプレクサ１０７に向けて発行する（ステップＳ２０）。マルチプレクサ１０７は、発行選択信号１１５に基づいて、ＶＬＩＷ型命令を選択する（ステップＳ２１）。そして、選択されたＶＬＩＷ型命令を、演算器１０８において実行する（ステップＳ２２）。これら一連の動作を繰り返していき、比較器１０６４においてＰＣ１１０の値がＬＥＡ１０６２に一致すると（ステップＳ２３）、ループ制御部１０６０はＬＣ１０６３をデクリメントし、ＰＣ１１０にＬＳＡ１０６１の値を代入することでアドレスＬＳＡにあるＶＬＩＷ型命令へプログラムの実行を分岐する（ステップＳ２４）。そして、ＬＣ１０６３の値が０になるまでこのループ処理を繰り返す。ループ処理の繰り返し回数をカウントダウンするＬＣ１０６３の値が０になると（ステップＳ２５／ＹＥＳ）、ＶＬＩＷルーチンの実行が所定回数に達したので、同ループ制御部１０６０は、ループ処理を終了して、動作モードを通常モードへ移行する（ステップＳ２６）。
【００４０】
このように、ＶＬＯＯＰ初回モードではｎ／ｍ回に1 回しかＶＬＩＷ型命令を実行できないといったオーバーヘッドがあるものの、それ以外の繰り返しではＶＬＩＷ型命令を毎サイクル実行することができる。
【００４１】
なお、本発明の並列演算プロセッサの演算制御プログラムに係る実施形態は、図１に示されたループ制御ユニット１０６に図３〜図５のフローチャートに示された手順に従って命令バッファ１０５への命令の蓄積、命令バッファ１０５からの命令の発行、命令ディスパッチャ１０４から発行された命令、命令バッファ１０５から発行された命令の何れかを選択させる制御を行なう演算制御プログラムを格納することで実現できる。
【００４２】
なお、上述した実施形態は本発明の好適な実施の形態である。但し、これに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変形実施が可能である。
【００４３】
【発明の効果】
以上説明したように、本発明により、ループ処理において搭載する演算器の処理能力を最大限に発揮することができ、かつループ処理のシーケンスにおけるオーバーヘッドが小さいため、ループ処理を高速に実行できる。
【図面の簡単な説明】
【図１】本発明の実施の形態による並列演算プロセッサの構成を示すブロック図である。
【図２】本発明の実施の形態によるループ制御ユニットの構成を示すブロック図である。
【図３】通常モードにおける動作手順を示すフローチャートである。
【図４】ＶＬＯＯＰ初回モードにおける動作手順を示すフローチャートである。
【図５】ＶＬＯＯＰモードにおける動作手順を示すフローチャートである。
【図６】従来の並列演算プロセッサの構成を示すブロック図である。
【符号の説明】
１０１  命令バス
１０２  命令レジスタ
１０３  命令デコーダ
１０４  命令ディスパッチャ
１０５  命令バッファ
１０６  ループ制御ユニット
１０７  マルチプレクサ
１０８  演算器
１０９  汎用レジスタ
【図１】
0003656587.tif 000002
【図２】
0003656587.tif 000003
【図３】
0003656587.tif 000004
【図４】
0003656587.tif 000005
【図５】
0003656587.tif 000006
【図６】
0003656587.tif 000007