(57)【特許請求の範囲】
【請求項１】
ループ命令並びにメモリ内のデータを繰り返しアクセスする命令を含むループプログラムを、ループ処理毎に複数のプロセッサにて並列に実行可能なマルチプロセッサシステムにおいて、
ループプログラム内のデータアクセスの対象となるアドレスに、何回目のループ処理を実行するのかを示す該ループ命令のループ処理回数を付加することにより、データアドレスを生成する複数のプロセッサと、
バスマスタとなるプロセッサ内で実行されるループプログラム内のループ命令を、ループ処理回数分のスレーブプロセッサ、及びマスタプロセッサにて、ループ処理毎に並列に実行させるための制御を行うループプログラム制御装置とを有し、
前記ループプログラム制御装置は、
マスタプロセッサ内でループプログラムを実行することにより、該ループプログラムの先頭アドレスを検出する先頭アドレス検出手段と、
該ループプログラムに含まれるループ命令の全ループ処理回数を検出するループ処理回数検出手段と、
該先頭アドレス検出手段にて検出された先頭アドレスを複数のプロセッサに通知する先頭アドレス通知手段と、
先頭アドレスを通知された各プロセッサがそれぞれ何回目のループ処理を実行するのかを示す該ループ命令のループ処理回数を通知する処理回数通知手段とを有し、
各プロセッサは、該ループプログラム制御装置から通知される情報に基づいて、マスタプロセッサ内で実行されるループプログラム内のループ命令を、ループ処理毎に並列に実行することを特徴とし、
各プロセッサは、
前記処理回数通知手段からのループ命令のループ処理回数を、前記ループプログラム内のデータアクセスの対象となるアドレスの上位又は下位に付加することにより、データアドレスを生成するアドレッシング手段と、
該ループ処理回数に対応するループ処理を実行後、前記処理回数通知手段からのループ命令のループ処理回数を所定の基準に従って自動的にインクリメントするインクリメント手段とを有し、
該アドレッシング手段は、該インクリメント手段にてインクリメントされたループ命令のループ処理回数を、前記アドレスに付加することにより、自動的に次のデータアドレスを生成することを特徴とするマルチプロセッサシステム。
【請求項２】
ループ命令並びにメモリ内のデータを繰り返しアクセスする命令を含むループプログラムを、ループ処理毎に複数のプロセッサにて並列に実行可能なマルチプロセッサシステムにおいて、
ループプログラム内のデータアクセスの対象となるアドレスに、何回目のループ処理を実行するのかを示す該ループ命令のループ処理回数を付加することにより、データアドレスを生成する複数のプロセッサと、
バスマスタとなるプロセッサ内で実行されるループプログラム内のループ命令を、ループ処理回数分のスレーブプロセッサ、及びマスタプロセッサにて、ループ処理毎に並列に実行させるための制御を行うループプログラム制御装置とを有し、
前記ループプログラム制御装置は、
マスタプロセッサ内でループプログラムを実行することにより、該ループプログラムの先頭アドレスを検出する先頭アドレス検出手段と、
該ループプログラムに含まれるループ命令の全ループ処理回数を検出するループ処理回数検出手段と、
該先頭アドレス検出手段にて検出された先頭アドレスを複数のプロセッサに通知する先頭アドレス通知手段と、
先頭アドレスを通知された各プロセッサがそれぞれ何回目のループ処理を実行するのかを示す該ループ命令のループ処理回数を通知する処理回数通知手段と、
ループプログラム内のループ命令を、マスタプロセッサ、及び各スレーブプロセッサにて並列に実行可能かどうかを監視する監視手段と、
該監視手段にて実行可能と判断されたプロセッサに対して、前記処理回数通知手段が該ループ命令のループ処理回数を通知する毎に、該ループ処理回数をアップカウント、またはダウンカウントするループカウント手段とを有し、
各プロセッサは、該ループプログラム制御装置から通知される情報に基づいて、マスタプロセッサ内で実行されるループプログラム内のループ命令を、ループ処理毎に並列に実行することを特徴とし、
各プロセッサは、
前記処理回数通知手段からのループ命令のループ処理回数を、前記ループプログラム内のデータアクセスの対象となるアドレスの上位又は下位に付加することにより、データアドレスを生成するアドレッシング手段と、
該ループ処理回数に対応するループ処理を実行後、前記処理回数通知手段からのループ命令のループ処理回数を所定の基準に従って自動的にインクリメントするインクリメント手段とを有し、
該アドレッシング手段は、該インクリメント手段にてインクリメントされたループ命令のループ処理回数を、前記アドレスに付加することにより、自動的に次のデータアドレスを生成することを特徴とするマルチプロセッサシステム。
【請求項３】
請求項１又は２記載のマルチプロセッサシステムにおいて、
更に各プロセッサは、前記インクリメント手段にてインクリメントされたループ命令のループ処理回数が、前記ループ処理回数検出手段にて検出された全ループ処理回数を超えているかどうかを比較する比較手段を有し、
全ループ処理回数を超えるまで該ループ処理を継続実行することを特徴とするマルチプロセッサシステム。
【請求項４】
請求項１乃至３何れか一項記載のマルチプロセッサシステムにおいて、
マルチプロセッサシステムにてループプログラムを展開し、複数のプロセッサにて並列にループ処理を実行するときに、各プロセッサにてアクセスするメモリ空間を共有化するバッファと、
メモリから該バッファに入力されるデータが、何回目のループ処理に使用されるデータかを監視し、更に各プロセッサがそれぞれ何回目のループ処理を実行中かを監視する処理回数監視手段とを有し、
該処理回数監視手段にて監視されるループ処理の回数が一致したプロセッサに対して、該バッファに対するアクセス権を与えることを特徴とするマルチプロセッサシステム。
【請求項５】
請求項１乃至３何れか一項記載のマルチプロセッサシステムにおいて、
マルチプロセッサシステムにてループプログラムを展開し、複数のプロセッサにて並列にループ処理を実行するときに、各プロセッサにてアクセスするメモリ空間を共有化するバッファと、
各プロセッサがそれぞれ何回目のループ処理を実行中かを監視する処理回数監視手段とを有し、
各プロセッサにて共通のデータが使用され、且つ各プロセッサにてアクセスするデータアドレスが一致した場合、該処理回数監視手段にて監視されるループ処理の回数が少ないプロセッサの順に、該バッファに対するアクセス権を与えることを特徴とするマルチプロセッサシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はループ命令並びにメモリ内のデータを繰り返しアクセスする命令を含むループプログラムを実行可能なプロセッサとループ処理毎に展開されたループ命令を複数のプロセッサに並列に実行させるための制御を実行可能なループプログラム制御回路とを有するマルチプロセッサシステムに関する。
【０００２】
近年、計算機において、高速化、及び高性能化された処理が求められており、前記処理を実現するための方法として、命令の並列処理等の手法が採用されている。
上記、プロセッサにて実行される命令の並列処理に関する代表的な手法には、複数のプロセッサにて並列にプログラムを実行可能なマルチプロセッサシステムがあげられる。
【０００３】
【従来の技術】
以下、ループ命令並びにメモリ内のデータを繰り返しアクセスする命令を含むループプログラムを実行する従来のプロセッサ、及び従来のマルチプロセッサシステムの処理について説明する。
ここで、ループ命令並びにメモリ内のデータを繰り返しアクセスする命令を含むループプログラムの例として、下記のプログラムを、従来のプロセッサ、及び従来のマルチプロセッサシステムにて実行した場合について説明する。
【０００４】
0004115576.tif 000002
上記、ループプログラムは、ループ命令並びにメモリ内のデータを繰り返しアクセスする命令：ＬＯＯＰを含むプログラムを示す。
【０００５】
上記のループプログラムは、初期設定として、ＡＲ０レジスタにｉｍｍ値＝００ｈ（１６進数を表す）を格納し（命令▲１▼）、ＡＲ１レジスタにｉｍｍ値＝８０ｈを格納する（命令▲２▼）。
命令▲３▼では、ＡＲ０で示されるアドレス：００ｈからデータをＲ０へロードし、ロード後にＡＲ０をインクリメントして更新する。即ち、ＡＲ０：０４ｈとなる（データ：３２ビット）。
【０００６】
命令▲４▼では、ＡＲ０で示されるアドレス：０４ｈからデータをＲ１へロードし、ロード後にＡＲ０をインクリメントして更新する。即ち、ＡＲ０：０８ｈとなる（データ：３２ビット）。
命令▲５▼では、Ｒ０＋Ｒ１の加算結果をＲ１レジスタへ格納する。
命令▲６▼では、Ｒ１レジスタのデータをＡＲ１で示されるアドレス：８０ｈへストアし、ストア後ＡＲ１レジスタをインクリメントして更新する。即ち、ＡＲ１：８４ｈとなる（データ：３２ビット）。
【０００７】
命令▲７▼では、ｌａｂｅｌ１へジャンプし、ｌａｂｅｌ１、即ち、ｎｕｍ＝４となるまで命令▲３▼から命令▲７▼を繰り返し実行する。尚、変数：ｎｕｍは、初期値をｎｕｍ＝０とし、ループ（ＬＯＯＰ）命令にてジャンプする毎にインクリメントされるものとする。
この様なループ命令を含むループプログラムを、例えば、従来のプロセッサ（シングルプロセッサ）、または従来のマルチプロセッサシステムにて実行する場合、該ループプログラムに対応するデータメモリ空間は、図１６のように、０回目のループ処理から４回目のループ処理に対応する読み出し（ロード）データ領域としてデータアドレス：００００ｈ〜００２７ｈ、同様に書き込み（ストア）データ領域としてデータアドレス：００８０ｈ〜００９３ｈとなる。
【０００８】
例えば、従来のプロセッサ（シングルプロセッサ）にて、上記、ループ命令（ＬＯＯＰ）が実行されると、具体的には、図１７に示すように、時系列的に０回目から４回目までのループ処理が実行され、該プロセッサが、それぞれのループ処理にて図１６に示すメモリ空間に対するアクセス処理を実行する。
一方、従来のマルチプロセッサシステムにて、上記、ループ命令（ＬＯＯＰ）を実行する場合、該ループ命令は、図１８に示すようにコンパイラによりループ処理毎に展開され、複数のプロセッサが展開されたループ処理を並列に実行する。この場合、各プロセッサにて実行されるループ処理は、コンパイル時に各プロセッサにてアクセス可能な命令メモリの領域に割り当てられる。例えば、図１８では、０回目のループ処理がプロセッサ（０）にて実行され、１回目のループ処理がプロセッサ（１）にて実行され、２回目のループ処理がプロセッサ（２）にて実行され、３回目のループ処理がプロセッサ（３）にて実行され、４回目のループ処理がプロセッサ（４）にて実行されている。尚、ループ命令がコンパイラによりループ処理毎に展開されることにより、各ループ処理は複数のプロセッサに割り当てられ、ループ処理を繰り返し実行する必要がなくなり、分岐命令：ＬＯＯＰが不要となる。
【０００９】
【発明が解決しようとする課題】
しかしながら、従来のマルチプロセッサシステムは、複数のプロセッサがそれぞれ異なるプログラムを実行する場合には高性能を発揮するが、その反面、単一のプログラムを分割して処理する場合には期待する性能が発揮できない。
具体的には、ループ命令を含むプログラムの高速化（複数のプロセッサによる並列処理）を実現する場合、従来のマルチプロセッサシステムでは、コンパイル時に、該プログラムのループ命令をループ処理毎に展開し、その展開された各ループ処理を複数のプロセッサにスケジューリングする手法、即ち、各ループ処理をそれぞれのプロセッサがアクセス可能な命令メモリ領域にスケジューリングする手法が採用されていた。
【００１０】
従って、従来のマルチプロセッサシステムは、展開されたループ処理毎にプログラムを格納するため、命令メモリが膨大となり、コスト高を招いていた。
本発明は、搭載するメモリを増加させることなく、プログラム中のループ処理を、複数のプロセッサにて並列実行可能なマルチプロセッサシステムを提供する。
【００２５】
【課題を解決するための手段】
本発明のマルチプロセッサシステムは、ループ命令並びにメモリ内のデータを繰り返しアクセスする命令を含むループプログラムを、ループ処理毎に複数のプロセッサにて並列に実行可能なマルチプロセッサシステムにおいて、ループプログラム内のデータアクセスの対象となるアドレスに、何回目のループ処理を実行するのかを示す該ループ命令のループ処理回数を付加することにより、データアドレスを生成する複数のプロセッサと、マスタとなるプロセッサ内で実行されるループプログラム内のループ命令を、ループ処理回数分のスレーブプロセッサ、及びマスタプロセッサにて、ループ処理毎に並列に実行させるための制御を行うループプログラム制御装置とを有する構成とする。
【００２６】
マルチプロセッサシステムにおいて、ループ命令並びにメモリ内のデータを繰り返しアクセスする命令を含むループプログラムを、ループ処理毎に複数のプロセッサにて並列に実行する場合、従来のマルチプロセッサシステムは、コンパイル時に、該プログラムのループ命令をループ処理毎に展開し、その展開された各ループ処理を複数のプロセッサにスケジューリングしていた。即ち、各ループ処理をそれぞれのプロセッサがアクセス可能な命令メモリ領域にスケジューリングされ、各プロセッサにてアクセスするデータアドレスも予め計算され、固定されている（図１８参照）。
【００２７】
従って、従来のマルチプロセッサシステムは、ループ処理回数分の膨大な命令メモリ領域が必要となる。
一方、上記と同様の場合、本発明のマルチプロセッサシステムは、各プロセッサが何回目のループ処理を実行するのかを示す該ループ命令のループ処理回数を認識することにより、各プロセッサが同一の命令メモリ領域に格納されているループプログラムをロードした場合でも、各プロセッサが実行するループ処理のデータアドレスを独自に生成可能となる。
【００２８】
従って、本発明のマルチプロセッサシステムは、各プロセッサが同一の命令メモリ領域に格納されているループプログラムをロード可能なため、搭載するメモリを増加させることなく、プログラム中のループ処理を実行可能となる。
また、本発明のマルチプロセッサシステムを構成する前記ループプログラム制御装置は、マスタプロセッサ内でループプログラムを実行することにより、該ループプログラムの先頭アドレスを検出する先頭アドレス検出手段と、該ループプログラムに含まれるループ命令の全ループ処理回数を検出するループ処理回数検出手段と、該先頭アドレス検出手段にて検出された先頭アドレスを複数のプロセッサに通知する先頭アドレス通知手段と、先頭アドレスを通知された各プロセッサがそれぞれ何回目のループ処理を実行するのかを示す該ループ命令のループ処理回数を通知する処理回数通知手段とを有し、各プロセッサは、該ループプログラム制御装置から通知される情報に基づいて、マスタプロセッサ内で実行されるループプログラム内のループ命令を、ループ処理毎に並列に実行することを特徴とする。
【００２９】
本発明のマルチプロセッサシステムにおいて、システム上のマスタとなるプロセッサ内でループプログラムを実行する場合、ループプログラム制御装置は、該ループプログラムの先頭アドレスを検出し、更に該ループプログラムに含まれるループ命令の全ループ処理回数を検出する。ここで、ループ命令の全ループ処理回数を認識することにより、ループプログラム制御装置は、ループプログラムの並列処理に必要なプロセッサの数を知ることができる。
【００３０】
そこで、ループプログラム制御装置は、該ループプログラムを実行可能なループ処理回数分の複数のプロセッサに対して、先頭アドレスを通知し、続いて該先頭アドレスを通知された各プロセッサがそれぞれ何回目のループ処理を実行するのかを示す該ループ命令のループ処理回数を通知し、該ループプログラムを複数のプロセッサにて並列に実行させる制御を実行する。
【００３１】
従って、本発明のマルチプロセッサシステムにおいて、ループプログラム制御装置は、マスタとなるプロセッサ内で実行されるループプログラム内のループ命令を、ループ処理回数分のスレーブプロセッサ、及びマスタプロセッサにて、ループ処理毎に並列に実行させるための制御が可能となる。
また、本発明のマルチプロセッサシステムを構成する前記ループプログラム制御装置は、更に、ループプログラム内のループ命令を、マスタプロセッサ、及び各スレーブプロセッサにて並列に実行可能かどうかを監視する監視手段と、該監視手段にて実行可能と判断されたプロセッサに対して、前記処理回数通知手段が該ループ命令のループ処理回数を通知する毎に、該ループ処理回数をアップカウント、またはダウンカウントするループカウント手段とを有する構成とする。
【００３２】
本発明のマルチプロセッサシステムにおいて、ループプログラム制御装置は、該ループプログラムを実行可能なループ処理回数分の複数のプロセッサに対して、先頭アドレスを通知する際に、監視手段にて該ループプログラムを実行可能なプロセッサを監視する。例えば、ｂｕｓｙ信号等を確認することにより、動作中のプロセッサを認識することができる。
【００３３】
更にループプログラム制御装置は、ループカウント手段にて自動的に該ループ処理回数をアップカウント、またはダウンカウントしている。
従って、本発明のマルチプロセッサシステムにおいて、ループプログラム制御装置は、ループプログラム内のループ命令を、ループ処理毎に並列に実行させるための制御がより効率的に実行可能となる。
【００３４】
また、上記のマルチプロセッサシステムにおいて、各プロセッサは、前記処理回数通知手段からのループ命令のループ処理回数を、ループプログラム内のデータアクセスの対象となるアドレスの上位、または下位のいずれかに付加することにより、データアドレスを生成するアドレッシング手段を有する構成とする。
【００３５】
本発明のマルチプロセッサシステムは、各プロセッサが何回目のループ処理を実行するのかを示す該ループ命令のループ処理回数を認識することにより、各プロセッサが同一の命令メモリ領域に格納されているループプログラムをロードした場合でも、各プロセッサが実行するループ処理のデータアドレスを独自に生成可能となる。
【００３６】
また、上記のマルチプロセッサシステムにおいて、各プロセッサは、前記処理回数通知手段からのループ命令のループ処理回数を、前記ループプログラム内のデータアクセスの対象となるアドレスの上位又は下位に付加することにより、データアドレスを生成するアドレッシング手段と、該ループ処理回数に対応するループ処理を実行後、前記処理回数通知手段からのループ命令のループ処理回数を所定の基準に従って自動的にインクリメントするインクリメント手段とを有し、該アドレッシング手段は、該インクリメント手段にてインクリメントされたループ命令のループ処理回数を、前記アドレスに付加することにより、自動的に次のデータアドレスを生成することを特徴とする。
【００３７】
本発明のマルチプロセッサシステムにおいて、各プロセッサは、各プロセッサが何回目のループ処理を実行するのかを示す該ループ命令のループ処理回数を認識することにより、各プロセッサが同一の命令メモリ領域に格納されているループプログラムをロードした場合でも、各プロセッサが実行するループ処理のデータアドレスを独自に生成可能となる。
【００３８】
更に各プロセッサは、該ループ処理回数を所定の基準に従って自動的にインクリメント可能なため、自動的に次のデータアドレスを生成でき、複数のループ処理を実行可能となる。
また、上記のマルチプロセッサシステムにおいて、各プロセッサは、更に、前記インクリメント手段にてインクリメントされたループ命令のループ処理回数が、前記ループ処理回数検出手段にて検出された全ループ処理回数を超えているかどうかを比較する比較手段を有する構成とする。
【００３９】
従って、本発明のマルチプロセッサシステムは、全ループ処理回数を超えるまで該ループ処理を継続実行することが可能となる。
また、上記のマルチプロセッサシステムは、マルチプロセッサシステムにてループプログラムを展開し、複数のプロセッサにて並列にループ処理を実行するときに、各プロセッサにてアクセスするメモリ空間を共有化するバッファと、メモリから該バッファに入力されるデータが、何回目のループ処理に使用されるデータかを監視し、更に各プロセッサがそれぞれ何回目のループ処理を実行中かを監視する処理回数監視手段とを有する構成とする。
【００４０】
従って、本発明のマルチプロセッサシステムは、該処理回数監視手段にて監視されるループ処理の回数が一致したプロセッサに対して、該バッファに対するアクセス権を与えることにより、各プロセッサ間のバスの競合を効率よく回避できる。
また、上記のマルチプロセッサシステムは、マルチプロセッサシステムにてループプログラムを展開し、複数のプロセッサにて並列にループ処理を実行するときに、各プロセッサにてアクセスするメモリ空間を共有化するバッファと、各プロセッサがそれぞれ何回目のループ処理を実行中かを監視する処理回数監視手段とを有する構成とする。
【００４１】
従って、本発明のマルチプロセッサシステムは、各プロセッサにて共通のデータが使用され、且つ各プロセッサにてアクセスするデータアドレスが一致した場合、該処理回数監視手段にて監視されるループ処理の回数が少ないプロセッサの順に、該バッファに対するアクセス権を与えることにより、各プロセッサ間のバスの競合を効率よく回避できる。
【００４３】
【発明の実施の形態】
以下、本発明のマルチプロセッサシステムの実施例を図面に基づいて説明する。
図１は、本発明のマルチプロセッサシステムの構成を示す。
図１において、本発明のマルチプロセッサシステムは、ループ命令並びにメモリ内のデータを繰り返しアクセスする命令を含むループプログラムを実行可能な、例えば、マスタプロセッサ１、スレーブプロセッサ２、スレーブプロセッサ３、及びスレーブプロセッサ４の各プロセッサと、マスタプロセッサ１内で実行されるループプログラム内のループ命令を各プロセッサにてループ処理毎に並列実行させるための制御を行うループ制御ブロック５から構成される。尚、本発明のマルチプロセッサシステムは、説明の便宜上、４つのプロセッサにて構成されているが、プロセッサの数はこれに限らない。
【００４４】
ここで、上記データメモリ７内のデータを繰り返しアクセスするループ命令を含むループプログラムの例として、例えば、ループプログラム（１）、またはループプログラム（２）を示す。尚、ループプログラム（１）、及びループプログラム（２）は、マルチプロセッサシステム内の命令メモリ６に格納され、各プロセッサにより適宜読み出される。
【００４５】
例えば、ループプログラム（１）は、下記のようなプログラムとなる。
0004115576.tif 000003
上記、ループプログラム（１）は、ループ命令並びにメモリ内のデータを繰り返しアクセスする命令：ＬＯＯＰ（命令（８））を含むプログラムを示す。
【００４６】
上記のループプログラムは、初期設定として、ＡＲ０レジスタにｉｍｍ値＝００ｈ（１６進数を表す）を格納し（命令（１））、ＡＲ１レジスタにｉｍｍ値＝０４ｈを格納し（命令（２））、ＢＲ０レジスタにｉｍｍ値＝８０ｈを格納する（命令（３））。
命令（４）では、ｌｏｏｐで示されるベースアドレス（何回目のループ処理かを示す値）に、ＡＲ０で示されるオフセットアドレス：００ｈを組み合わせたデータアドレスからのデータを、Ｒ０レジスタへロードする（データ：３２ビット）。
【００４７】
命令（５）では、ｌｏｏｐで示されるベースアドレス（何回目のループ処理かを示す値）に、ＡＲ１で示されるオフセットアドレス：０４ｈを組み合わせたデータアドレスからのデータを、Ｒ１レジスタへロードする（データ：３２ビット）。
命令（６）では、Ｒ０＋Ｒ１の加算結果をＲ１レジスタへ格納する。
【００４８】
命令（７）では、ＢＲ０で示されるベースアドレス：８０ｈに、ｌｏｏｐで示されるオフセットアドレス（何回目のループ処理かを示す値）を組み合わせたデータアドレスへ、Ｒ１レジスタのデータをストアする。尚、ｌｏｏｐ＜＜２は、ワードアドレス化のための２ビット左シフトを示す。
命令（８）では、ｌａｂｅｌ１へジャンプし、ｌａｂｅｌ１、即ち、ｎｕｍ＝４となるまで命令（４）から命令（８）を繰り返し実行する。尚、変数：ｎｕｍは、初期値をｎｕｍ＝０とし、ループ（ＬＯＯＰ）命令にてジャンプする毎にインクリメントされるものとする。
【００４９】
一方、ループプログラム（２）は、下記のようなプログラムとなる。
0004115576.tif 000004
上記、ループプログラム（２）は、ループ命令並びにメモリ内のデータを繰り返しアクセスする命令：ＬＯＯＰ（命令（１７））を含むプログラムを示す。
【００５０】
上記のループプログラムは、初期設定として、ＢＲ０レジスタにｉｍｍ値＝８０ｈ（１６進数を表す）を格納し（命令（１１））、ＡＲ０レジスタにｉｍｍ値＝００ｈを格納する（命令（１２））。
命令（１３）では、ｌｏｏｐで示されるベースアドレス（何回目のループ処理かを示す値）に、ＡＲ０で示されるオフセットアドレス：００ｈを組み合わせたデータアドレスからのデータを、Ｒ０レジスタへロードし、ロード後にＡＲ０をインクリメントして更新する。即ち、ＡＲ０：０４ｈとなる（データ：３２ビット）。
【００５１】
命令（１４）では、ｌｏｏｐで示されるベースアドレス（何回目のループ処理かを示す値）に、ＡＲ０で示されるオフセットアドレス：０４ｈを組み合わせたデータアドレスからのデータを、Ｒ１レジスタへロードし、ロード後にＡＲ０をインクリメントして更新する。即ち、ＡＲ０：０８ｈとなる（データ：３２ビット）。
【００５２】
命令（１５）では、Ｒ０＋Ｒ１の加算結果をＲ１レジスタへ格納する。
命令（１６）では、ＢＲ０で示されるベースアドレス：８０ｈにｌｏｏｐで示されるオフセットアドレス（何回目のループ処理かを示す値）を組み合わせたデータアドレスへ、Ｒ１レジスタのデータをストアする。尚、ｌｏｏｐ＜＜２は、ワードアドレス化のための２ビット左シフトを示す。
【００５３】
命令（１７）では、ｌａｂｅｌ１へジャンプし、ｌａｂｅｌ１、即ち、ｎｕｍ＝４となるまで命令（１２）から命令（１７）を繰り返し実行する。尚、変数：ｎｕｍは、初期値をｎｕｍ＝０とし、ループ（ＬＯＯＰ）命令にてジャンプする毎にインクリメントされるものとする。
この様なループ命令を含むループプログラム（１）または（２）を、例えば、本発明のマルチプロセッサシステムにて実行する場合、該ループプログラムに対応するデータメモリ空間は、図１３のように、０回目のループ処理から４回目のループ処理に対応する読み出し（ロード）データ領域としてデータアドレス：００００ｈ〜０４ＦＦｈ、同様に書き込み（ストア）データ領域としてデータアドレス：８０００ｈ〜８０ＦＦｈとなる。
【００５４】
例えば、本発明のマルチプロセッサシステムにて、上記、ループプログラム（１）のループ命令（ＬＯＯＰ）を実行する場合、該ループ命令は、図１４に示すように、該システムによりループ処理毎に展開され、複数のプロセッサが展開されたループ処理を並列に実行する。この場合、各プロセッサにて実行されるループ処理は、命令メモリの領域に格納されている同一のループプログラム（１）をロードすることにより実行される。例えば、図１４では、０回目のループ処理がマスタプロセッサ１にて実行され、１回目のループ処理もマスタプロセッサ１にて実行され、２回目のループ処理がスレーブプロセッサ２にて実行され、３回目のループ処理がスレーブプロセッサ３にて実行され、４回目のループ処理がスレーブプロセッサ４にて実行されている。
【００５５】
尚、ループ命令が本発明のマルチプロセッサシステムによりループ処理毎に展開されることにより、各ループ処理は複数のプロセッサに割り当てられ、ループ処理を繰り返し実行する必要がなくなり、分岐命令：ＬＯＯＰが不要となる。但し、従来の分岐命令：ＬＯＯＰの代わりに、０回目のループ処理のときだけループ制御ブロック５内の後述する所定の回路を駆動する本発明の分岐命令：ｎｅｗＬＯＯＰを使用する。例えば、所定の回路とは、ｌａｂｅｌ１のアドレス（ループプログラム（１）の先頭アドレス）の検出、ループ命令の全ループ処理回数の検出、各プロセッサに対するｌａｂｅｌ１のアドレスの通知、各プロセッサが何回目のループ処理を実行するのかを示す情報の通知等を行う回路を示す。
【００５６】
一方、本発明のマルチプロセッサシステムにて、上記、ループプログラム（２）のループ命令（ＬＯＯＰ）を実行する場合も、該ループ命令は、図１５に示すように、該システムによりループ処理毎に展開され、複数のプロセッサが展開されたループ処理を並列に実行する。この場合、各プロセッサにて実行されるループ処理は、命令メモリの領域に格納されている同一のループプログラム（１）をロードすることにより実行される。例えば、図１５では、０回目のループ処理がマスタプロセッサ１にて実行され、１回目のループ処理もマスタプロセッサ１にて実行され、２回目のループ処理がスレーブプロセッサ２にて実行され、３回目のループ処理がスレーブプロセッサ３にて実行され、４回目のループ処理がスレーブプロセッサ４にて実行されている。
【００５７】
尚、ループ命令が本発明のマルチプロセッサシステムによりループ処理毎に展開されることにより、各ループ処理は、ループプログラム（１）と同様に、複数のプロセッサに割り当てられ、ループ処理を繰り返し実行する必要がないため分岐命令：ＬＯＯＰが不要となり、代わりに本発明の分岐命令：ｎｅｗＬＯＯＰを使用する。
【００５８】
ここで、上記、図１に示す本発明のマルチプロセッサシステムにてループプログラム（１）、及びループプログラム（２）を実行する場合の動作を、図２に従って説明する。
本発明のマイクロプロセッサシステムを構成するマスタプロセッサ１は、プログラムシーケンス制御機構として、前記ループプログラム（１）または（２）の先頭アドレスをセットするプログラムカウンタ１１、マスタとして前記ループプログラム（１）または（２）の実行を制御するマスタ用ループシーケンサ１２、及び通常のプロセッサのシーケンス制御を行なうシーケンサ１３と、データアドレッシング機構としてデータメモリ７に対するデータアドレスを生成するデータアドレッシングユニット１４とを有する。
【００５９】
また、スレーブプロセッサ２、３、４は、プログラムシーケンス制御機構として、前記ループプログラム（１）または（２）の先頭アドレスをセットするプログラムカウンタ１５、スレーブとして前記ループプログラム（１）または（２）の実行を制御するスレーブ用ループシーケンサ１６、及び通常のプロセッサのシーケンス制御を行なうシーケンサ１７と、データアドレッシング機構としてデータメモリ７に対するデータアドレスを生成するデータアドレッシングユニット１８とを有する。
【００６０】
また、本発明のマイクロプロセッサシステムを構成するループ制御ブロック５は、前記所定の回路として、ループプログラムの先頭アドレス（ｌａｂｅｌ１）を検出する先頭アドレス検出回路２１と、ループ命令の全ループ処理回数を検出するループ処理回数検出回路２２と、該ループプログラムを実行可能な複数のプロセッサに対してループプログラムの先頭アドレス（ｌａｂｅｌ１）を通知する先頭アドレス通知回路２３と、該ループプログラムの先頭アドレスを通知された各プロセッサが何回目のループ処理を実行するのかを示す情報（以後、ループ命令のループ処理回数という）を通知する処理回数通知回路２４と、該ループプログラムを実行可能なプロセッサを監視する監視回路２５と、該ループプログラムを実行可能なプロセッサに対してループ命令のループ処理回数を通知する度に、自動的にループ処理回数をアップカウントするループカウント回路２６とを有する。尚、ループカウント回路２６は、該ループプログラムを実行可能なプロセッサに対してループ命令のループ処理回数を通知する度に、自動的にループ処理回数をダウンカウントするように制御してもよい。
【００６１】
例えば、上記のように構成されるマイクロプロセッサシステムにてループプログラム（１）を実行する場合、シーケンサ１３は、通常のプロセッサのシーケンス制御を実行し、即ち、ループプログラム（１）をフェッチ、及びデコードし、該命令デコード結果をマスタ用ループシーケンサ１２、及びデータアドレッシングユニット１４に通知する（図２、（３））。尚、シーケンサ１３によるデコードの結果、該プログラムがループ命令を含まないプログラムであれば、シーケンサは、通常通り該プログラムの先頭アドレスをプログラムにセットし（図２、（１））、ループ制御ブロック５を起動することなく順に命令を実行する。
【００６２】
シーケンサ１３からのループプログラム（１）の命令デコード結果を受信したマスタ用ループシーケンサ１２は、プログラムカウンタ１１にループプログラム（１）の先頭アドレスをセットし（図２、（１））、ループ制御ブロック５に対してループプログラム（１）内のループ命令の全ループ処理回数を通知する。
プログラムカウンタ１１にループプログラム（１）の先頭アドレスがセットされると、マスタプロセッサ１は、図１４に示すように、ループ０回目の処理を該先頭アドレスから順に命令を実行する。
【００６３】
このとき（ループ０回目の処理中）、ループ制御ブロック５は、先頭アドレス検出回路２１にてプログラムカウンタ内のプログラムカウンタ値を検出し（図２、（２））（ここではｌａｂｅ１のアドレスを検出する）、更にループ処理回数検出回路２２にてループ命令の全ループ処理回数を検出する（図２、（４））。尚、ループプログラム（１）実行中のプログラムカウンタ値がループ命令の飛び先のアドレス（ｌａｂｅｌ１）の場合、マスタ用ループシーケンサ１２は、該飛び先のアドレスであることを示す信号を通知する（図２、（５））。
【００６４】
ループ０回目の処理において、ループ命令の全ループ処理回数を検出したループ制御ブロック５は、この情報に基づいて、ループプログラム（１）内のループ命令の並列処理に必要なプロセッサの数を認識し、更に先頭アドレス通知回路２３がループ処理回数分の複数のプロセッサに対してｌａｂｅｌ１のアドレスを通知する（図２、（６））。
【００６５】
また、ループ制御ブロック５は、処理回数通知回路２４にて、該ｌａｂｅｌ１のアドレスがどのプロセッサに対してのものかを示す信号と、該ｌａｂｅｌ１のアドレスを通知された各プロセッサがそれぞれ何回目のループ処理を実行するのかを示すループ命令のループ処理回数とを通知する（図２、（７）（８））。
尚、先頭アドレス通知回路２３によるｌａｂｅｌ１のアドレスの通知は、ループプログラム（１）内のループ命令を実行する各プロセッサによりロードされるプログラムが同一のため、各プロセッサに対して同時に行なわれるが、ループ命令のループ処理回数の通知は、各プロセッサにより実行されるループ処理回数が異なるため、各プロセッサに対して時系列的に行なわれる。そのため、ループ制御ブロック５は、該ループプログラムを実行可能なプロセッサに対してループ命令のループ処理回数を通知する度に、ループカウント回路２６にて自動的にループ処理回数をアップカウントすることにより、効率的に各プロセッサに対してループ命令のループ処理回数を通知する。
【００６６】
このように、ループ制御ブロック５は、マスタプロセッサ１内で実行されるループプログラム（１）内のループ命令を各プロセッサにてループ処理毎に並列実行させるための制御を行う。
ここでは、図２の（６）、（７）、（８）を受信した各プロセッサにて実行されるループ処理は、各プロセッサが命令メモリ６に格納されている同一のループプログラム（１）をロードすることにより並列実行され、例えば、図１４に示すように、１回目のループ処理がマスタプロセッサ１にて実行され、２回目のループ処理がスレーブプロセッサ２にて実行され、３回目のループ処理がスレーブプロセッサ３にて実行され、４回目のループ処理がスレーブプロセッサ４にて実行される。
【００６７】
また、ループ処理毎にループプログラム（１）を並列実行中の各プロセッサは、該プログラム実行中であることを示すｂｕｓｙ信号を出力する。尚、ループ制御ブロック５は、先頭アドレス通知回路２３がループ処理回数分の複数のプロセッサに対してｌａｂｅｌ１のアドレスを通知する際（図２、（６））、監視回路２５にてｂｕｓｙ信号を監視することにより、ループプログラム（１）を実行可能なプロセッサを監視している。
【００６８】
一方、上記のように構成される図１のマイクロプロセッサシステムにてループプログラム（２）を実行する場合も、ループプログラム（１）を実行する場合と同様のため説明を省略する。
次に、上記、図１に示す本発明のマルチプロセッサシステムにおいて、ループプログラム（１）、またはループプログラム（２）内のループ命令を、複数のプロセッサ（マスタプロセッサ１、スレーブプロセッサ２、スレーブプロセッサ３、スレーブプロセッサ４）がループ処理毎に並列実行する場合の、各プロセッサの内部動作を図４、図５、図６に基づいて説明する。
【００６９】
図４は、前記各プロセッサの動作原理を示す。尚、各プロセッサの動作原理として、便宜上、マスタプロセッサ１について説明するが、スレーブプロセッサ２、スレーブプロセッサ３、スレーブプロセッサ４についても同様に動作する。
例えば、図１４に示すように、マスタプロセッサ１にてループプログラム（１）のループ１回目の処理が実行される場合、即ち、ループ制御ブロック５の処理回数通知回路２４からの信号（図２、（７））が有効な場合、マスタプロセッサ１内では、ループプログラム（１）の先頭アドレス、即ち、ｌａｂｅｌ１のアドレスがプログラムカウンタ１５にセットされる。
【００７０】
この状態で、マスタプロセッサ１は、ｌａｂｅｌ１のアドレスから順にループ１回目の処理を実行する。尚、プログラムカウンタ１５内のアドレスは、シーケンサ１３内のアドレスアダー３１にて自動的にインクリメントされる。
同様に、スレーブプロセッサ２、スレーブプロセッサ３、スレーブプロセッサ４にてループプログラム（１）のループ２回目の処理、ループ３回目の処理、ループ３回目の処理がそれぞれ行なわれる。
【００７１】
更に、上記のように動作するマスタプロセッサ１は、処理回数通知回路２４からのループ命令のループ処理回数をベースアドレスとして、データアクセスの対象となるオフセットアドレスの上位（図５、例１、例２参照）に付加することにより、データアドレスを生成するデータアドレッシングユニット１４か、または、処理回数通知回路２４からのループ命令のループ処理回数をオフセットアドレスとして、データアクセスの対象となるベースアドレスの下位（図６、例１、例２参照）に付加することにより、データアドレスを生成するデータアドレッシングユニット１４を有する。
【００７２】
尚、マスタプロセッサ１は、図５の例１（ベースアドレスを自動的にインクリメントするアドレッシング方法）、例２（ベースアドレスを自動的にデクリメントするアドレッシング方法）、及び図６の例１（オフセットアドレスを自動的にインクリメントするアドレッシング方法）、例２（オフセットアドレスを自動的にデクリメントするアドレッシング方法）の内、少なくとも１つのデータアドレッシング方法を採用する。
【００７３】
そのため、本発明のマルチプロセッサシステムは、ループプログラム（１）、またはループプログラム（２）内のループ命令を複数のプロセッサがループ処理毎に並列実行し、更に各プロセッサが同一の命令メモリ６に格納されているループプログラムをロードした場合でも、各プロセッサ毎に実行するループ処理のデータアドレスを独自に生成可能となる。
【００７４】
一方、各プロセッサ（マスタプロセッサ１、スレーブプロセッサ２、スレーブプロセッサ３、スレーブプロセッサ４）は、上記図５、及び図６のアドレッシング方法とは異なる図７に示すアドレッシング方法を提供可能である。
この場合、各プロセッサは、図８に示すように、前記処理回数通知回路２４からのループ命令のループ処理回数をベースアドレスとして、前記ループプログラム（１）内のデータアクセスの対象となるオフセットアドレスの上位に付加することによりデータアドレスを生成するデータアドレッシングユニット１４と、該ループ処理回数に対応するループ処理を実行後、前記処理回数通知回路２４からのループ命令のループ処理回数を所定の基準に従って自動的にインクリメントするインクリメンタ４２とを有する。
【００７５】
上記、図８のように構成される各プロセッサにおいて、該データアドレッシングユニット１４は、該インクリメンタ４２にてインクリメントされたループ命令のループ処理回数を、オフセットアドレスに付加することにより自動的に次のデータアドレスを生成する。
具体的には、図８のようにプロセッサ数が４つの場合、各プロセッサは、図７に示すように、ループ命令のループ処理回数の下位２ｂｉｔをオフセットアドレス（以後、オフセット１という）とし、残りの上位ｂｉｔをベースアドレスとする。更にループプログラム（１）内のデータアクセスの対象となるオフセットアドレス（以後、オフセット２という）をオフセット１の下位側に拡張する。
【００７６】
このようなアドレッシング方法により生成されたデータアドレスは、例えば、図７に示すように、オフセット１が’００’の場合にマスタプロセッサ１に割り付けられ、オフセット１が’０１’の場合にスレーブプロセッサ２に割り付けられ、オフセット１が’１０’の場合にスレーブプロセッサ３に割り付けられ、オフセット１が’１１’の場合にスレーブプロセッサ４に割り付けられる。
【００７７】
そのため、本発明のマルチプロセッサシステムの各プロセッサは、自プロセッサが何回目のループ処理を実行するのかを示す該ループ命令のループ処理回数を認識することにより、各プロセッサが同一の命令メモリ領域に格納されているループプログラム（１）をロードした場合でも、各プロセッサにてデータアドレスを独自に生成可能となる。また、各プロセッサは、該ループ処理回数を所定の基準に従って自動的にインクリメント可能なため、自動的に次のデータアドレスを生成でき、単一のプロセッサにて複数のループ処理を実行可能となる。
【００７８】
更に、本発明のマルチプロセッサシステムの各プロセッサは、図８に示すように、前記インクリメンタ４２にてインクリメントされたループ命令のループ処理回数が、ループ処理回数検出回路２２にて検出されたループ処理回数を超えているかどうかを比較する比較器６１を有する構成とし、インクリメントされたループ命令のループ処理回数が全ループ処理回数を超えるまで該ループ処理を継続的に実行する。
【００７９】
図９は、図１とは異なる本発明のマルチプロセッサシステムを示す。
図９において、本発明のマルチプロセッサシステムは、図１と同様のマスタプロセッサ１、スレーブプロセッサ２、スレーブプロセッサ３、スレーブプロセッサ４、命令メモリ６、及びデータメモリ７と、更に複数のプロセッサにて並列にループプログラムのループ処理を実行するときに、各プロセッサにてアクセスするデータメモリ空間を共有化するバッファ８と、図１のループ制御ブロック５内の各回路に、データメモリ７から該バッファに入力されるデータが何回目のループ処理に使用されるデータか（以後、バッファ８に対応するループ番号という）を監視し、更に各プロセッサがそれぞれ何回目のループ処理を実行中か（以後、実行中のループ番号という）を監視する処理回数監視回路７１を加えたループ制御ブロック５ａとを有する構成とする。
【００８０】
図９に示す本発明のマルチプロセッサシステムは、例えば、図１０に示すように、処理回数監視回路７１にてバッファ８に対応するループ番号と各プロセッサ実行中のループ番号を比較し、ループ番号が一致したプロセッサに対して、該バッファ８に対するアクセス権を与える。
従って、本発明のマルチプロセッサシステムは、各プロセッサ間のバスの競合を効率よく回避できる。
【００８１】
図１１は、図１、及び図９とは異なる本発明のマルチプロセッサシステムを示す。
図１１において、本発明のマルチプロセッサシステムは、図１、及び図９と同様のマスタプロセッサ１、スレーブプロセッサ２、スレーブプロセッサ３、スレーブプロセッサ４、命令メモリ６、及びデータメモリ７と、更に複数のプロセッサにて並列にループプログラムのループ処理を実行するときに、各プロセッサにてアクセスするデータメモリ空間を共有化するバッファ９と、図１のループ制御ブロック５内の各回路に、各プロセッサがそれぞれ何回目のループ処理を実行中か（以後、実行中のループ番号という）を監視する処理回数監視回路８１を加えたループ制御ブロック５ｂとを有する構成とする。
【００８２】
図１１に示す本発明のマルチプロセッサシステムは、各プロセッサにて共通のデータが使用され、且つ各プロセッサにてアクセスするデータアドレスが一致した場合、例えば、図１２に示すように、該処理回数監視回路８１にて監視される実行中のループ番号が若いプロセッサの順に、該バッファ９に対するアクセス権を与える。
【００８３】
従って、本発明のマルチプロセッサシステムは、各プロセッサ間のバスの競合を効率よく回避できる。
【００８４】
【発明の効果】
上述の如く、本発明のマルチプロセッサシステムによれば、ループ命令並びにメモリ内のデータを繰り返しアクセスする命令を含むループプログラムを実行する際、本発明の各プロセッサにて何回目のループ処理を実行するのかを示す該ループ命令のループ処理回数を認識することにより、各プロセッサが同一の命令メモリ領域に格納されているループプログラムをロードした場合でも実行するループ処理のデータアドレスを独自に生成可能となる。
【００８５】
そのため、本発明のマルチプロセッサシステムは、各プロセッサが同一の命令メモリ領域に格納されているループプログラムをロードでき、搭載するメモリを増加させることなく、プログラム中のループ処理を実行可能となる。
従って、本発明によれば、搭載するメモリを増加させることなく、プログラム中のループ処理を、複数のプロセッサにて並列実行可能なマルチプロセッサシステムを提供することができる。
【図面の簡単な説明】
【図１】本発明のマルチプロセッサシステムの構成である。
【図２】本発明のマルチプロセッサシステムの動作である。
【図３】ループ制御ブロックの構成である。
【図４】本発明のプロセッサの動作である。
【図５】本発明のプロセッサのアドレッシング方法である。
【図６】本発明のプロセッサのアドレッシング方法である。
【図７】図５、図６とは異なる本発明のプロセッサのアドレッシング方法である。
【図８】図７のアドレッシング方法の利用例である。
【図９】本発明のマルチプロセッサシステムの構成である。
【図１０】ループ制御ブロックの動作である。
【図１１】本発明のマルチプロセッサシステムの構成である。
【図１２】ループ制御ブロックの動作である。
【図１３】ループプログラム（１）（２）に対応するデータメモリ空間である。
【図１４】本発明のマルチプロセッサシステムによるループプログラム（１）の実行例である。
【図１５】本発明のマルチプロセッサシステムによるループプログラム（２）の実行例である。
【図１６】ループプログラム（従来）に対応するデータメモリ空間である。
【図１７】従来のシングルプロセッサによるループプログラム（従来）の実行例である。
【図１８】従来のマルチプロセッサシステムによるループプログラム（従来）の実行例である。
【符号の説明】
１      マスタプロセッサ
２      スレーブプロセッサ
３      スレーブプロセッサ
４      スレーブプロセッサ
５      ループ制御ブロック
６      命令メモリ
７      データメモリ
８      バッファ
９      バッファ
１１    プログラムカウンタ
１２    マスタ用ループシーケンサ
１３    シーケンサ
１４    データアドレッシングユニット
１５    プログラムカウンタ
１６    スレーブ用ループシーケンサ
１７    シーケンサ
１８    データアドレッシングユニット
２１    先頭アドレス検出回路
２２    ループ処理回数検出回路
２３    先頭アドレス通知回路
２４    処理回数通知回路
２５    監視回路
２６    ループカウント回路
３１    アドレスアダー
４２    インクリメンタ
６１    比較器
７１    処理回数監視回路
８１    処理回数監視回路
【図１】
0004115576.tif 000005
【図２】
0004115576.tif 000006
【図３】
0004115576.tif 000007
【図４】
0004115576.tif 000008
【図５】
0004115576.tif 000009
【図６】
0004115576.tif 000010
【図７】
0004115576.tif 000011
【図８】
0004115576.tif 000012
【図９】
0004115576.tif 000013
【図１０】
0004115576.tif 000014
【図１１】
0004115576.tif 000015
【図１２】
0004115576.tif 000016
【図１３】
0004115576.tif 000017
【図１４】
0004115576.tif 000018
【図１５】
0004115576.tif 000019
【図１６】
0004115576.tif 000020
【図１７】
0004115576.tif 000021
【図１８】
0004115576.tif 000022