(57)【特許請求の範囲】
【請求項１】
キャッシュを有する複数のプロセッサと、それぞれのプロセッサに接続された複数の主記憶制御装置（ＳＣ）と、複数のプロセッサにより共有される主記憶と、すべてのプロセッサのキャッシュに保持するデータの主記憶アドレス情報を一元管理するアドレス管理テーブル制御装置（ＦＡＡ）を具備する並列プロセッサシステムにおいて、
メインプロセッサがサブプロセッサに対して起動をかける命令（起動命令）を実行すると、メインプロセッサに接続されたＳＣに対して起動信号を送出する手段を有し、
前記起動信号を受け取ったメインプロセッサに接続されたＳＣが、起動命令以前にメインプロセッサにて発行されたストア命令によるＦＡＡのチェック及び必要なキャッシュキャンセルのメインプロセッサ以外のプロセッサに接続されたＳＣへの発行が完了したことを検出し、各サブプロセッサに接続されたＳＣに対して通知する手段を有し、
前記通知を受け取った各サブプロセッサに接続されたＳＣが、メインプロセッサから起動命令以前に発行されたサブプロセッサへのキャッシュキャンセルをすべて当該ＳＣに接続されたサブプロセッサに発行したことを検出した時点で該接続されたサブプロセッサに対して起動をかける手段を有し、
メインプロセッサと各サブプロセッサ間でキャッシュと主記憶の一致保証を含む起動同期制御を行うことを特徴とする並列プロセッサシステム。
【請求項２】
キャッシュを有する複数のプロセッサと、それぞれのプロセッサに接続された複数の主記憶制御装置（ＳＣ）と、複数のプロセッサにより共有される主記憶と、すべてのプロセッサのキャッシュに保持するデータの主記憶アドレス情報を一元管理するアドレス管理テーブル制御装置（ＦＡＡ）を具備する並列プロセッサシステムにおいて、
各サブプロセッサが内部の処理を終結したことを示す命令（終結命令）を実行すると、各サブプロセッサに接続されたＳＣに対して終結信号を送出する手段を有し、
前記終結信号を受け取った各サブプロセッサに接続されたＳＣが、終結命令以前に当該ＳＣに接続されたサブプロセッサにて発行されたストア命令によるＦＡＡのチェック及び必要なキャッシュキャンセルの当該ＳＣに接続されたサブプロセッサ以外のプロセッサに接続されたＳＣへの発行が完了したことを検出する手段を有し、
すべてのサブプロセッサに接続されたＳＣで前記ストア命令によるＦＡＡのチェック及び必要なキャッシュキャンセルの当該ＳＣに接続されたサブプロセッサ以外のプロセッサに接続されたＳＣへの発行が完了したことを検出した場合に、それをメインプロセッサに接続されたＳＣに対して通知する手段を有し、
前記通知を受け取ったメインプロセッサに接続されたＳＣが、各サブプロセッサから終結命令以前に発行されたメインプロセッサへのキャッシュキャンセルをすべてメインプロセッサに発行したことを検出した時点でメインプロセッサに対して終結を通知する手段を有し、
メインプロセッサと各サブプロセッサ間でキャッシュと主記憶の一致保証を含む終結同期制御を行うことを特徴とする並列プロセッサシステム。
【請求項３】
キャッシュを有する複数のプロセッサと、それぞれのプロセッサに接続された複数の主記憶制御装置（ＳＣ）と、複数のプロセッサにより共有される主記憶と、すべてのプロセッサのキャッシュに保持するデータの主記憶アドレス情報を一元管理するアドレス管理テーブル制御装置（ＦＡＡ）を具備する並列プロセッサシステムにおいて、
各プロセッサがすべてのプロセッサ間で同一アドレスの主記憶アクセスの順序性を保証するために同期をとる命令（バリア同期命令）を実行すると、各プロセッサに接続されたＳＣに対してバリア同期信号を送る手段を有し、
前記バリア同期信号を受け取った各ＳＣが、バリア同期命令以前に当該ＳＣに接続されたプロセッサにて発行されたストア命令によるＦＡＡのチェック及び必要なキャッシュキャンセルの当該ＳＣに接続されたプロセッサ以外のプロセッサに接続されたＳＣへの発行が完了したことを検出する手段を有し、
すべてのＳＣで前記ストア命令によるＦＡＡのチェック及び必要なキャッシュキャンセルの当該ＳＣに接続されたプロセッサ以外のプロセッサに接続されたＳＣへの発行が完了したことを検出した場合に、それを各ＳＣに対して通知する手段を有し、
前記通知を受け取った各ＳＣが、受け付けたキャッシュキャンセルをすべて当該ＳＣに接続されたプロセッサに発行した時点で接続されたプロセッサにバリア同期成立を通知する手段を有し、
キャッシュと主記憶の一致保証を含むバリア同期制御を行うことを特徴とする並列プロセッサシステム。
【請求項４】
キャッシュを有する複数のプロセッサと、それぞれのプロセッサに接続された複数の主記憶制御装置（ＳＣ）と、複数のプロセッサにより共有される主記憶と、すべてのプロセッサのキャッシュに保持するデータの主記憶アドレス情報を一元管理するアドレス管理テーブル制御装置（ＦＡＡ）を具備する並列プロセッサシステムにおいて、
各プロセッサ間で起動、終結、バリア同期の各ケースの同期制御を行うために、すべてのプロセッサが起動命令、終結命令、バリア同期命令（以下、同期命令で総称する）を発行し、
各プロセッサが同期命令を実行すると、各プロセッサに接続されたＳＣに対して同期信号を送出する手段を有し、
前記同期信号を受け取った各ＳＣが、同期命令以前に当該ＳＣに接続されたプロセッサにて発行されたストア命令によるＦＡＡのチェック及び必要なキャッシュキャンセルの当該ＳＣに接続されたプロセッサ以外のプロセッサに接続されたＳＣへの発行が完了したことを検出する手段を有し、
すべてのＳＣで前記ストア命令によるＦＡＡのチェック及び必要なキャッシュキャンセルの当該ＳＣに接続されたプロセッサ以外のプロセッサに接続されたＳＣへの発行が完了したことを検出した場合に、それを各ＳＣに対して通知する手段を有し、
前記通知を受け取った各ＳＣが、受け付けたキャッシュキャンセルをすべて当該ＳＣに接続されたプロセッサに発行した時点で接続されたプロセッサに同期成立を通知する手段を有し、
起動、終結、バリア同期の各ケースのキャッシュと主記憶の一致保証を含む同期制御を行うことを特徴とする並列プロセッサシステム。
【請求項５】
請求項１乃至４のいずれかに記載の並列プロセッサシステムにおいて、すべてのプロセッサが接続されたＳＣへ同期信号（起動、終結、バリア同期信号）を送出したことを検出して、すべてのプロセッサに対して同期成立を通知する手段を有し、キャッシュと主記憶との一致保証有の同期制御とともに一致保証無しの同期制御を行うことを特徴とする並列プロセッサシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、各プロセッサが主記憶を共有する並列プロセッサシステムに関し、特に各プロセッサ内のキャッシュと主記憶の一致保証を含むプロセッサ間同期制御を行うのに好適な並列プロセッサシステムに関する。
【０００２】
【従来の技術】
主記憶共有型並列プロセッサシステムのプロセッサ間同期制御には、各プロセッサに対して同時に起動をかけることを保証する起動同期制御、各プロセッサでの処理が終結したことを保証する終結同期制御、及び、各プロセッサ間の主記憶アクセス順序を保証するバリア同期制御がある。各プロセッサが主記憶の写しを格納するキャッシュを有し、各プロセッサ間で依存関係のあるデータを処理する場合には、キャッシュと主記憶との一致（キャッシュコヒーレンス）を考慮して、起動、終結、バリア同期制御を行う必要がある。
【０００３】
従来、主記憶共有型並列プロセッサシステムとしては、図９に示すように、キャッシュを有するプロセッサと主記憶間をバス結合で結ぶシステムが知られている。このようなシステムにおいて、キャッシュと主記憶の一致保証を行うためには、あるプロセッサの主記憶に対するストアリクエストをバスを介してその他のプロセッサがスヌープし、自キャッシュ内に同一アドレスに対するデータを保持している場合、そのエントリのキャンセルを行う方式がとられている。また、終結やバリア同期制御の高速化のために、複数のプロセッサ間で、これら同期処理通信専用のオープンドレイン型のインターフェースを利用する方式も知られている。オープンドレイン型のインターフェースを用いることにより、複数チップで構成される複数のプロセッサ全てが終結やバリア同期に到達していることを検出し、その同期成立を全てのプロセッサに通知することが可能である。
【０００４】
以下、図９のシステムを用いて、従来の主記憶共有型並列プロセッサシステムでの起動、終結、バリア同期の処理を説明する。
【０００５】
まず、起動処理について説明する。メインプロセッサ１がサブプロセッサ２〜４に対して起動をかける命令をデコードした場合には、メインプロセッサ１が起動発レジスタ１２をセットし、起動専用インターフェース１４１を介して各サブプロセッサ２〜４に対して起動信号を送り、各サブプロセッサ内の起動受レジスタ２２、３２、４２をセットすることにより、各サブプロセッサ２〜４の起動を行う。
【０００６】
この場合、メインプロセッサ１が起動命令以前に発行したストアリクエストに対して、各サブプロセッサ２〜４のキャッシュ２０〜４０と主記憶１３０の一致保証をするために、メインプロセッサ１の起動命令の前にＳＹＮＣ命令を挿入していた。ＳＹＮＣ命令は、メインプロセッサ１内でその命令がデコードされると、ＳＹＮＣ命令以前にデコードされた命令がすべて完了するまでＳＹＮＣ命令以降の命令のデコードを抑止する。ＳＹＮＣ命令以前の命令がすべて完了するとバス１４０を介して、すべてのサブプロセッサ２〜４に対してＳＹＮＣリクエストを送出する。ＳＹＮＣリクエストを受け取った各サブプロセッサ２〜４は、メインプロセッサ１内でＳＹＮＣ命令以前に発行された主記憶１３０へのストア命令に対して、各サブプロセッサ２〜４のキャッシュと主記憶１３０の一致制御をするためのキャッシュキャンセルがすべて完了すると、そのことを主記憶制御装置（ＳＣ）１２０に対して通知する。ＳＣ１２０はすべてのサブプロセッサ２〜４からの完了通知を受け取るとメインプロセッサ１に対して一致保証がとれたことを通知し、その通知によりメインプロセッサでのＳＹＮＣ命令が完了し、次命令にある起動命令がデコードされる。よって起動命令を実行する時にはキャッシュと主記憶の一致保証がなされており、キャッシュと主記憶の一致保証を含む起動制御が達成される。
【０００７】
次に、終結処理について説明する。サブプロセッサ２〜４がメインプロセッサ１に対して終結を行う命令をデコードした場合には、各サブプロセッサ２〜４が終結発レジスタ２３、３３、４３をセットし、すべてのサブプロセッサ２〜４が終結発レジスタ２３、３３、４３をセットしたときに、オープンドレイン型の終結インターフェース１４２を介して、メインプロセッサ１に終結信号が送られ、メインプロセッサ１内の終結受レジスタ１３がセットされると終結動作が完了する。
【０００８】
この場合も、サブプロセッサ２〜４が終結命令以前に発行したストア命令に対して、メインプロセッサ１のキャッシュ１０と主記憶１３０の一致保証をするために、終結命令の前にＳＹＮＣ命令が挿入される。サブプロセッサ（２とする）にてＳＹＮＣ命令がデコードされ、バス１４０にＳＹＮＣリクエストが送出されると、受け取ったメインプロセッサ１と他サブプロセッサ３、４は、ＳＹＮＣリクエストを送出したサブプロセッサ２がＳＹＮＣ命令以前に発行したストア命令に対して、メインプロセッサ１と他サブプロセッサ３、４のキャッシュと主記憶１３０の一致保証をするためのキャッシュキャンセルがすべて完了すると、そのことをＳＣ１２０に対して通知する。ＳＣ１２０がメインプロセッサ１と他サブプロセッサ３、４からの完了通知を受け取ると、ＳＹＮＣリクエストを送出したサブプロセッサ２に対して一致保証が取れたことを通知し、その通知によりサブプロセッサ２でのＳＹＮＣ命令が完了し、次命令にある終結命令を実行し、自サブプロセッサ２の終結発レジスタ２３をセットする。他のサブプロセッサ３、４についても同様である。こうして、すべてのサブプロセッサ２〜４でＳＹＮＣ命令が完了した時点で、メインプロセッサ１のキャッシュと主記憶１３０の一致は保証され、すべてのサブプロセッサ２〜４が終結発レジスタ２３、３３、４３をセットし、終結専用インターフェース１４２を介してメインプロセッサ１に対して終結信号を送り、メインプロセッサ１内の終結受レジスタ１３をセットすることにより、キャッシュと主記憶の一致保証を含む終結制御が達成される。
【０００９】
最後に、バリア同期処理について説明する。一般に、コンパイル時に複数のプロセッサに割り当てる複数のプログラムのある時点以前の命令による主記憶アクセスアドレスと、それ以降の命令による主記憶アクセスアドレスに重なりがないと判定できない場合、一律にキャッシュと主記憶の一致制御（キャッシュコヒーレンス制御）の完了を保証したバリア同期命令が挿入される。すべてのプロセッサ１〜４間でバリア同期命令をデコードした場合には、各プロセッサ１〜４がバリア同期発レジスタ１４、２４、３４、４４をセットし、すべてのプロセッサ１〜４がバリア同期発レジスタ１４、２４、３４、４４をセットをしたときに、オープンドレイン型のバリア同期専用インターフェース１４３を介して各プロセッサ１〜４に対してバリア同期成立信号が送られ、各プロセッサ内のバリア同期受レジスタ１５、２５、３５、４５がセットされ、バリア同期が完了する。
【００１０】
この場合も、各プロセッサ１〜４がバリア同期命令以前に発行したストアリクエストに対して、他プロセッサ１〜４のキャッシュと主記憶１３０の一致保証をするために、バリア同期命令の前にＳＹＮＣ命令が挿入される。プロセッサ（メインプロセッサ１とする）にてＳＹＮＣ命令がデコードされ、バス１４０にＳＹＮＣリクエストが送出されると、受け取った各サブプロセッサ２〜４は、ＳＹＮＣリクエストを送出したメインプロセッサ１がＳＹＮＣ命令以前に発行したストアリクエストに対して、サブプロセッサ２〜４のキャッシュと主記憶１３０の一致保証をするためのキャッシュキャンセルが完了すると、そのことをＳＣ１２０に対して通知する。ＳＣ１２０がサブプロセッサ２〜４からの完了通知を受け取ると、ＳＹＮＣリクエストを送出したメインプロセッサ１に対して一致保証が取れたことを通知し、その通知によりメインプロセッサ１でのＳＹＮＣ命令が完了し、次命令にあるバリア同期命令を実行し、自プロセッサ１のバリア同期発レジスタ１４をセットする。サブプロセッサ２〜４についても同様である。こうして、すべてのプロセッサ１〜４でＳＹＮＣ命令が完了した時点で、すべてのプロセッサ１〜４のキャッシュと主記憶１３０の一致が保証され、すべてのプロセッサ１〜４がバリア同期発レジスタ１４、２４、３４、４４をセットすると、バリア同期専用インターフェース１４３を介してすべてのプロセッサ１〜４に対してバリア同期成立信号が送られ、同プロセッサ１〜４内のバリア同期受レジスタ１５、２５、３５、４５をセットすることにより、キャッシュと主記憶の一致保証を含むバリア同期制御が達成される。
【００１１】
【発明が解決しようとする課題】
主記憶共有型並列プロセッサシステムは、図９に示したような複数のプロセッサと主記憶間をバス結合で結ぶシステムが一般的である。このシステムでは１度にひとつのプロセッサしか主記憶に対してアクセスする事ができないので、キャッシュが有効に働き、各プロセッサからの主記憶へのリクエストがそれほど頻繁に起こらないようなシステムには適している。しかし、大規模科学技術計算のようにデータ容量がキャッシュ容量を大きく越えるためにプロセッサからの主記憶アクセスが頻繁に起こるようなシステムには適さない。
【００１２】
そこで、図１０に示すように、プロセッサ１〜４と主記憶１３０間を各々ＳＣ５〜８を介して独立したパスで結び、それぞれのプロセッサが同時に主記憶に対してアクセスできるようなシステムが考えられている。ところが、このようなシステムで、各プロセッサ間をバスで結び、他プロセッサからのリクエストをスヌープすることによりキャッシュと主記憶間の一致保証を行おうとすると、すべてのプロセッサが同時にメモリリクエストを発行する可能性があるので、プロセッサと主記憶間のスループットを確保するためには、スヌープ専用のアドレス線をプロセッサ数分用意し、同時に複数のリクエストをスヌープできるようにしなければならない。このためにプロセッサの物量が増大してしまうというという問題が生じる。そこですべてのプロセッサ１〜４のキャッシュに保持するデータの主記憶アドレス情報を一元管理するアドレス管理テーブル制御装置（ＦＡＡ）９を用意する。そして、あるプロセッサから主記憶１３０へのロードリクエストがあるとそのアドレスをＦＡＡ９に登録し、あるプロセッサからストアリクエストが発行された場合には、そのアドレスがＦＡＡ９に登録されているプロセッサに対して、キャッシュキャンセルリクエストを発行するという方法をとる。
【００１３】
しかしながら、図１０に示すシステムにおいて、キャッシュと主記憶の一致を保証する起動、終結、バリア同期動作を行う場合、従来と同様に、起動命令、終結命令あるいはバリア同期命令の前にＳＹＮＣ命令を挿入する必要があり、ＳＹＮＣ命令の処理と起動、終結、バリア同期命令の処理が逐次的となり、並列処理の性能向上の点で問題がある。
【００１４】
以下に、図１０に示すシステムにおける起動時の動作を図１１のタイムチャートに基づいて説明する。メインプロセッサ１のプログラムはストア命令、ＳＹＮＣ命令、起動命令の順で処理される。
【００１５】
まず、メインプロセッサ１でストア命令がデコードされると、ストアリクエストがＳＣ５へ送出され（ステップ２０１）、ＳＣ５では、ストアリクエストの完了が保証されると、ＦＡＡ９へ参照要求を送出する（ステップ２０２）。ＦＡＡ９では、ストアリクエストと同じアドレスのデータをキャッシュに保持しているサブプロセッサ２〜４に対するキャッシュキャンセルのリクエストをＳＣ６〜８に対して送出する（ステップ２０３）。キャッシュキャンセルリクエストは、ＳＣ６〜８から、各サブプロセッサ２〜４へ送出される（ステップ２０４）。サブプロセッサ２〜４がキャンセルリクエストを受け取り、キャッシュのキャンセルが完了すると、キャッシュと主記憶との一致が保証される（ステップ２０５）。
【００１６】
次に、メインプロセッサ１でストア命令の後にＳＹＮＣ命令がデコードされると、以前に発行されている命令がすべて完了した時点でＳＹＮＣリクエストをＳＣ５に対して送出する（ステップ２１０）。ＳＹＮＣリクエストは、ＳＣ５からＦＡＡ９へ送出され（ステップ２１１）、キャンセルリクエストの送出（ステップ２０３）が完了した時点で、ＦＡＡ９からＳＣ６〜８へ送出される（ステップ２１２）。このＳＹＮＣリクエストは、ＳＣ６〜８からサブプロセッサ２〜４へ送出され（ステップ２１３）、各サブプロセッサ２〜４ではキャッシュキャンセルの完了をもって（ステップ２０５）、ＳＣ６〜８へＳＹＮＣ完了通知を送出する（ステップ２１４）。ＳＹＮＣ完了通知はＳＣ６〜８からＦＡＡ９へ通知され（ステップ２１５）、ＦＡＡ９は、すべてのサブプロセッサ２〜４からのＳＹＮＣ完了通知を受けとった時点でＳＣ５に対してＳＹＮＣ完了通知を送る（ステップ２１６）。ＳＹＮＣ完了通知はＳＣ５からメインプロセッサ１へ送出され（ステップ２１７）、メインプロセッサ１では、このＳＹＮＣ完了通知によりＳＹＮＣ命令を完了し、起動命令をデコードする。起動命令のデコードにより、図９で示した起動発レジスタ１２がセットされると、起動専用インターフェースを介し、起動信号がサブプロセッサ２〜４へ送出され（ステップ２１８）、サブプロセッサ内の起動受レジスタ２２、３２、４２がセットされる（ステップ２１９）。
【００１７】
以上、起動処理について説明したが、終結、バリア同期においても同様であり、キャッシュと主記憶の一致保証のためのＳＹＮＣ命令の処理と起動、終結、バリア同期命令の処理が、逐次的に処理される。このことが、並列処理性能を向上せしめる上での問題となる。
【００１８】
本発明の目的は、起動、終結、バリア同期命令に対して、ＳＣでキャッシュと主記憶の一致保証をすることによって、高速なキャッシュと主記憶との一致保証を可能にする並列プロセッサシステムを提供することにある。
【００１９】
本発明の他の目的は、起動、終結、バリア同期を同一の回路で実現し、メインプロセッサとサブプロセッサが同じ動作をすることをプログラム的に保証することにより、メインプロセッサとサブプロセッサを区別しないハードウエアが実現できる並列プロセッサシステムを提供することにある。
【００２０】
本発明の他の目的は、キャッシュと主記憶との一致保証を行わない同期インターフェースを追加することにより、キャッシュと主記憶との一致保証を必要としない処理の開始を早めることができる並列プロセッサシステムを提供することにある。
【００２２】
【課題を解決するための手段】
本発明は、キャッシュを有する複数のプロセッサと、それぞれのプロセッサに接続された複数の主記憶制御装置（ＳＣ）と、複数のプロセッサにより共有される主記憶と、すべてのプロセッサのキャッシュに保持するデータの主記憶アドレス情報を一元管理するアドレス管理テーブル（ＦＡＡ）を持つ主記憶共有型並列プロセッサシステムにおいて、高速な同期インターフェースを実現するために、メインプロセッサがサブプロセッサに対して起動をかける命令（起動命令）をデコードした場合に、メインプロセッサが起動レジスタをセットし、メインプロセッサに接続されたＳＣに対して起動信号を送る手段と、起動信号を受け取ったメインプロセッサに接続されたＳＣが起動命令以前にメインプロセッサにて発行されたストア命令によるＦＡＡのチェック及び必要なキャッシュキャンセルのメインプロセッサ以外のプロセッサに接続されたＳＣへの発行が完了したことを検出し、各サブプロセッサに接続されたＳＣに対して通知する手段と、その通知を受け取った各サブプロセッサに接続されたＳＣが、メインプロセッサから起動命令以前に発行されたサブプロセッサへのキャッシュキャンセルをすべて当該ＳＣに接続されたサブプロセッサに発行したことを検出した時点で該接続されたサブプロセッサに対して起動をかける手段を有する、キャッシュと主記憶の一致保証を含む起動インターフェースを備えている。
【００２３】
また、各サブプロセッサが内部の処理を終結したことを示す命令（終結命令）をデコードした場合に、各サブプロセッサが終結レジスタをセットし、各サブプロセッサに接続されたＳＣに対して終結信号を送る手段と、終結信号を受け取った各サブプロセッサに接続されたＳＣが終結命令以前に当該ＳＣに接続されたサブプロセッサにて発行されたストア命令によるＦＡＡのチェック及び必要なキャッシュキャンセルの当該ＳＣに接続されたサブプロセッサ以外のプロセッサに接続されたＳＣへの発行が完了したことを検出する手段と、すべてのサブプロセッサに接続されたＳＣでストア命令によるＦＡＡのチェック及び必要なキャッシュキャンセルの当該ＳＣに接続されたサブプロセッサ以外のプロセッサに接続されたＳＣへの発行が完了したことを検出した場合に、それをメインプロセッサに接続されたＳＣに対して通知する手段と、その通知を受け取ったメインプロセッサに接続されたＳＣが、各サブプロセッサから終結命令以前に発行されたメインプロセッサへのキャッシュキャンセルをすべてプロセッサに発行したことを検出した時点でメインプロセッサに対して終結を通知する手段を有する、キャッシュと主記憶の一致保証を含む終結インターフェースを備えている。
【００２４】
また、すべてのプロセッサ間で同一アドレスの主記憶データアクセスの順序性を保証するために同期をとる命令（バリア同期）を各プロセッサがデコードした場合に、各プロセッサがバリア同期レジスタをセットし、各ＳＣに対してバリア同期信号を送る手段と、バリア同期信号を受け取った各ＳＣがバリア同期命令以前に当該ＳＣに接続されたプロセッサにて発行されたストア命令によるＦＡＡのチェック及び必要なキャッシュキャンセルの当該ＳＣに接続されたプロセッサ以外のプロセッサに接続されたＳＣへの発行が完了したことを検出する手段と、すべてのＳＣでストア命令によるＦＡＡのチェック及び必要なキャッシュキャンセルの当該ＳＣに接続されたプロセッサ以外のプロセッサに接続されたＳＣへの発行が完了したことを検出した場合に、それを各ＳＣに対して通知する手段と、該通知を受け取った各ＳＣが、受け付けたキャッシュキャンセルをすべて当該ＳＣに接続されたプロセッサに発行した時点で接続されたプロセッサにバリア同期成立を通知する手段を有する、キャッシュと主記憶の一致保証を含む同期インターフェースを備えている。
【００２５】
また、起動、終結において、メインプロセッサ用、サブプロセッサ用に特別なハードウエアを用意する必要がないように、起動を行うときには、メインプロセッサが起動の通知を行うと同様にサブプロセッサも起動の通知を行い、終結を行うときには、サブプロセッサが終結の通知を行うと同様にメインプロセッサも終結の通知を行ない、起動、終結をバリア同期と同じ動作で実現する。
【００２６】
さらに、キャッシュと主記憶との一致保証を含む同期インターフェースと、一致保証を含まない同期インターフェースを用いることにより、キャッシュと主記憶の一致保証を必要としない処理を、一致保証をした同期が完了する前に開始する。
【００３０】
【発明の実施の形態】
以下、本発明の実施の形態としての各実施例を詳細に説明する。
【００３１】
〈実施例１〉
図１は本実施例における起動インターフェースの構成を示すブロック図、図２は終結インターフェースの構成を示すブロック図、図３はバリア同期インターフェースの構成を示すブロック図である。なお、図１乃至図３では、便宜上、主記憶制御装置（ＳＣ）５〜８に共通に接続される主記憶は省略してある。
【００３２】
図１〜３において、メインプロセッサ１はデコーダ１１が起動命令をデコードすると起動発レジスタ１２をセットし、バリア同期命令をデコードするとバリア同期発レジスタ１４をセットする。終結受レジスタ１３は、サブプロセッサ２〜４の処理が終結するとセットされ、バリア同期受レジスタ１５はバリア同期がとれるとセットされる。サブプロセッサ２〜４は、デコーダ２１，３１，４１が終結命令をデコードすると終結発レジスタ２３，３３，４３をセットし、バリア同期命令をデコードするとバリア同期発レジスタ２４，３４，４４をセットする。起動受レジスタ２２、３２、４２はメインプロセッサ１から起動がかけられるとセットされ、バリア同期受レジスタ２５，３５，４５はバリア同期がとれるとセットされる。
【００３３】
アドレス管理テーブル制御装置（ＦＡＡ）９はアドレス管理テーブル９１を持ち、すべてのプロセッサ１〜４のキャッシュ１０〜４０に保持するデータの主記憶アドレス情報を一元管理する。キャンセル発行回路９２は、主記憶へのストアリクエストに対してアドレス管理テーブル９１を参照し、必要ならばＳＣ５〜８に対してキャッシュキャンセルリクエストの発行を行う。キャンセル完通知回路９３〜９６は、キャンセル発行回路９２を監視し、自プロセッサからの主記憶へのリクエストに対する他プロセッサへのキャッシュキャンセルリクエストの発行が完了したことを検出してＳＣ５〜８に通知する。
【００３４】
ＳＣ５〜８は発完了保証回路５１，６１，７１，８１と受完了保証回路５２，６２，７２，８２を有する。発完了保証回路５１，６１，７１，８１は自プロセッサが発行したストアリクエストに対する他プロセッサへのキャッシュキャンセルリクエストがＦＡＡ９からＳＣ５〜８に送られたことを保証し、受完了保証回路５２、６２、７２、８２はキャッシュキャンセルリクエストがＳＣ５〜８からプロセッサ１〜４へ送られたことを保証する。オープンドレインパス５５は、発完了保証回路５１，６１，７１，８１の発完了通知のアンドをとって、受完了保証回路５１，６１，７１，８１に伝えるパスである。
【００３５】
図４は、ＳＣ５〜８の発完了保証回路５１，６１，７１，８１の具体的構成を示すブロック図である。図４において、同期レジスタ１００は自プロセッサが同期命令（起動、終結、バリア同期）をデコードしたことを示す。セレクタ１０４は、自プロセッサがストアリクエストを発行するとインクリメンタ１０１によりインクリメントされた値を、ＦＡＡ９からキャンセル完通知を受け取るとデクリメンタ１０２によりデクリメントされた値を、それ以外はそのままの値をセレクトする。発カウントレジスタ１０３はセレクトされた値を保持する。ゼロ判定回路１０５は発カウントレジスタ１０３の値が０になったことを判定する。発完了判定回路１０６は、同期レジスタ１００がセットされ、かつ、発カウントレジスタ１０３の値が０になったことを判定する。
【００３６】
図５は、ＳＣ５〜８の受完了保証回路５２，６２，７２，８２の具体的構成を示すブロック図である。図５において、発完了レジスタ１１０は発完了保証が完了したことを示す。セレクタ１１４は、ＦＡＡ９から自ＳＣ５にキャンセルリクエストが送られるとインクリメンタ１１１によりインクリメントされた値を、自ＳＣから自プロセッサへキャンセルリクエストが送られるとデクリメンタ１１２によりデクリメントされた値を、それ以外はそのままの値をセレクトする。受カウントレジスタ１１３はセレクトされた値を保持する。ゼロ判定回路１１５は受カウントレジスタ１１３の値が０になったことを判定する。受完了判定回路１１６は、発完了レジスタ１１０がセットされ、かつ受カウントレジスタ１１３の値が０になったことを判定する。
【００３７】
まず、図１の構成により起動処理の動作を説明する。なお、図１２にこの場合のタイムチャートを示す。
【００３８】
メインプロセッサ１が起動命令をデコードすると、起動発レジスタ１２をセットする。起動発レジスタ１２の出力信号は、ＳＣ５内の発完了保証回路５１に送出され（ステップ２３０）、同期レジスタ１００をセットする。発完了保証回路５１では、メインプロセッサ１でストアリクエストが発行される度に発カウントレジスタ１０３をインクリメントしていくので、起動命令より前に発行されたストアリクエスト（ステップ２０１）によって発カウントレジスタ１０３はすでにカウントアップされている。ＳＣ５からＦＡＡ９へストアリクエストに対する参照要求が送出され（ステップ２０２）、ＦＡＡ９のキャンセル完通知回路９３からＳＣ５へ、メインプロセッサ１が発行したストアリクエストに対するキャッシュキャンセルの発行完了が通知されると、発カウントレジスタ１０３をデクリメントしていく。発カウントレジスタ１０３の値が０になると、発行したストアリクエストに対するキャッシュキャンセルリクエストがすべて発行された（ステップ２０３）ことを意味するので、これをゼロ判定回路１１５により判定する。ＣＳ５の発完了保証回路５１は、メインプロセッサ１により起動処理が通知され、かつ、キャッシュキャンセルリクエストがすべて発行されたことを発完了判定回路１０６により判定すると、それをパス（同期インターフェースパス）５４を介して各サブプロセッサ２〜４に接続されたＳＣ６〜８内の受完了保証回路６２，７２，８２に通知し（ステップ２３１）、その発完了レジスタ１１０をセットする。受完了保証回路６２，７２，８２では、ＦＡＡ９のキャンセル発行回路９２からＳＣ６〜８にキャッシュキャンセルリクエストが発行される度に受カウントレジスタ１１３をインクリメントしていくので、発完了レジスタ１１０がセットされたときにはすでにカウントアップされており、受け取ったキャンセルリクエストをプロセッサ２〜４に送る度に受カウントレジスタ１１３をデクリメントしていく。受カウントレジスタ１１３の値が０になると、キャッシュキャンセルリクエストをすべてプロセッサに発行した（ステップ２０４）ことを意味するので、これをゼロ判定回路１１５により判定する。ＳＣ６〜８の受完了保証回路６２，７２，８２は、ＳＣ５の発完了保証回路５１から発完了通知を受け取り、かつ、キャッシュキャンセルリクエストをすべてプロセッサ２〜４へ発行したことを受完了判定回路１１６により判定すると、各サブプロセッサ２〜４へ起動通知をし（ステップ２３２）、起動受レジスタ２２，３２，４２をセットする（ステップ２３３）。各サブプロセッサ２〜４は、起動受レジスタ２２，３２，４２がセットされると与えられた処理を開始する。
【００３９】
先の図１１と図１２のタイムチャートを比較して明らかな如く、本実施例では、起動命令に対して、ＳＣでキャッシュと主記憶の一致保証をすることによって、キャッシュと主記憶との一致保証を含む高速な同期制御が実現する。
【００４０】
次に、図２の構成により終結処理の動作を説明する。各サブプロセッサ２〜４が終結命令をデコードすると、終結発レジスタ２３，３３，４３をセットする。終結発レジスタ２３，３３，４３の出力信号は、それぞれＳＣ６〜８内の発完了保証回路６１，７１，８１に送られ同期レジスタ１００をセットする。発完了保証回路６１，７１，８１では、サブプロセッサ２〜４でストアリクエストが発行される度に発カウントレジスタ１０３をインクリメントしていくので、終結命令より前に発行されたストアリクエストによって発カウントレジスタ１０３はすでにカウントアップされており、ＦＡＡ９のキャンセル完通知回路９４，９５，９６から、発行したストアリクエストに対するキャッシュキャンセルの発行完了が通知される度に発カウントレジスタ１０３をデクリメントしていく。発カウントレジスタ１０３の値が０になると、発行したストアリクエストに対するキャッシュキャンセルリクエストがすべて発行されたことを意味するので、これをゼロ判定回路１１５により判定する。ＳＣ６〜８の発完了保証回路６１，７１，８１は、サブプロセッサ２〜４から処理終結が通知され、かつキャッシュキャンセルリクエストがすべて発行されたことを発完了判定回路１０６により判定すると、発完了通知信号をＳＣ間に張られているオープンドレインパス５５に送りつける。オープンドレインパス５５は、すべてのサブプロセッサ２〜４に接続されたＳＣ６〜８からの発完了通知信号を受けるとオンになり、メインプロセッサ１に接続されたＳＣ５の受完了保証回路５２に通知し、その発完了レジスタ１１０をセットする。受完了保証回路５２では、ＦＡＡ９のキャンセル発行回路９２からＳＣ５にキャッシュキャンセルリクエストが発行される度に受カウントレジスタ１１３をインクリメントしていくので、発完了レジスタ１１０がセットされたときにはすでにカウントアップされており、受け取ったキャンセルリクエストをプロセッサ１に送る度に受カウントレジスタ１１３をデクリメントしていく。受カウントレジスタ１１３の値が０になると、キャッシュキャンセルリクエストをすべてプロセッサ１に発行したことを意味するので、これをゼロ判定回路１１５により判定する。ＳＣ５の受完了保証回路５２は、ＳＣ６〜８からの発完了通知を受け取り、かつ、キャッシュキャンセルリクエストをすべてプロセッサ１へ発行したことを受完了判定回路１１６により判定すると、メインプロセッサ１へ終結通知をし、終結受レジスタ１３をセットする。メインプロセッサ１は、終結受レジスタ１３がセットされると、次に行う処理を開始する。
【００４１】
次に、図３の構成によりバリア同期を行うときの動作を説明する。各プロセッサ１〜４がバリア同期命令をデコードすると、バリア同期発レジスタ１３，２３，３３，４３をセットする。バリア同期発レジスタ１３，２３，３３，４３の出力信号は、それぞれＳＣ５〜８内の発完了保証回路５１，６１，７１，８１に送られ同期レジスタ１００をセットする。発完了保証回路５１，６１，７１，８１では、プロセッサ１〜４でストアリクエストが発行される度に発カウントレジスタ１０３をインクリメントしていくので、バリア同期命令より前に発行されたストアリクエストによって発カウントレジスタ１０３はすでにカウントアップされており、ＦＡＡ９のキャンセル完通知回路９３，９４，９５，９６から、発行したストアリクエストに対するキャッシュキャンセルの発行完了が通知される度に発カウントレジスタ１０３をデクリメントしていく。発カウントレジスタ１０３の値が０になると、発行したストアリクエストに対するキャッシュキャンセルリクエストがすべて発行されたことを意味するので、これをゼロ判定回路１１５により判定する。ＳＣ１〜４の発完了保証回路５１，６１，７１，８１はプロセッサ１〜４からバリア同期が通知され、かつ、キャッシュキャンセルリクエストがすべて発行されたことを発完了判定回路１０６により判定すると、発完了通知信号をＳＣ間に張られているオープンドレインパス５５に送りつける。オープンドレインパス５５は、すべてのＳＣ５〜８からの発完了通知信号を受けるとオンになり、各ＳＣ５〜８の受完了保証回路５２，６２，７２，８２に通知し、その発完了レジスタ１１０をセットする。受完了保証回路５２，６２，７２，８２では、ＦＡＡ９のキャンセル発行回路９２からＳＣ５〜８にキャッシュキャンセルリクエストが発行される度に受カウントレジスタ１１３をインクリメントしていくので、発完了レジスタ１１０がセットされたときにはすでにカウントアップされており、受け取ったキャンセルリクエストをプロセッサ１〜４に送る度に受カウントレジスタ１１３をデクリメントしていく。受カウントレジスタ１１３の値が０になると、キャッシュキャンセルリクエストをすべてプロセッサに発行したことを意味するので、これをゼロ判定回路１１５により判定する。受完了保証回路５２，６２，７２，８２は、すべてのＳＣ５〜８からの発完了通知を受け取り、かつ、キャッシュキャンセルリクエストをすべてプロセッサ１〜４へ発行したことを受完了判定回路１１６により判定すると、プロセッサ１〜４へバリア同期成立信号を送り、バリア同期受レジスタ１５，２５，３５，４５をセットする。各プロセッサ１〜４は、バリア同期受レジスタ１５，２５，３５，４５がセットされると次に行う処理を開始する。
【００４２】
〈実施例２〉
図３では、バリア同期のケースのみについて説明を行ったが、同一の構成で起動、終結、各ケースの同期制御を行うことも可能である。これを図６を用いて説明する。図６は、図３の構成を起動、終結、バリア同期の各ケースの同期制御に適用するために一般化して示したものである。
【００４３】
まず、起動を行う場合、図１の動作では、メインプロセッサ１のみが起動命令をデコードし起動発レジスタ１２をセットしていたが、図６の実施形態において起動を行う場合にはサブプロセッサ２〜４のプログラム中にも起動命令を挿入し、各サブプロセッサ２〜４が起動命令をデコードしたときに同期発レジスタ２６，３６，４６をセットするようにする。こうして、各プロセッサ１が起動命令をデコードすると、同期発レジスタ１６，２６，３６，４６がセットされる。これ以降は、上述の図３で説明したバリア同期制御と同様の処理が行われ、各プロセッサ１〜４の同期受レジスタ１７，２７，３７，４７がセットされると、各プロセッサ１〜４は起動がかけられたと判断し、処理を開始する。
【００４４】
次に、終結を行う場合、図２の動作では、サブプロセッサ２〜４のみが終結命令をデコードし終結発レジスタ２３，３３，４３をセットしていたが、図６の実施形態において終結を行う場合にはメインプロセッサ１のプログラム中にも終結命令を挿入し、メインプロセッサ１が終結命令をデコードしたときに同期発レジスタ１６をセットするようにする。こうして、各プロセッサ１〜４が終結命令をデコードすると、同期発レジスタ１６，２６，３６，４６がセットされる。これ以降は、上述の図３で説明したバリア同期制御と同様の処理が行われ、各プロセッサ１〜４の同期受レジスタ１７，２７，３７，４７がセットされると、各プロセッサ１〜４は処理が終結したと判断し、以降の処理を開始する。
【００４５】
〈実施例３〉
各プロセッサのキャッシュ上のデータのアクセスを伴わない処理を行う場合には、主記憶とキャッシュの一致保証は不要である。このような処理では、各プロセッサのキャッシュと主記憶との一致保証を行わないインターフェースを追加することにより、一致保証を必要としない処理を早く開始することができ、効率を上げることができる。
【００４６】
図７は、この場合の構成例を示したもので、図６の構成に保証無同期受レジスタ１８，２８，３８，４８を追加するとともに、同期発レジスタ１６，２６，３６，４６と該保証無同期受レジスタ１８，２８，３８，４８とをオープンドレインパス５６で接続したものである。なお、保証有同期受レジスタ１７，２７，３７，４７は図６の同期受レジスタの呼び名を変えただけである。
【００４７】
以下に、図７の動作を図１３のタイムチャートに基づいて説明する。なお、図１３は図１２との比較のため、メインプロセッサ１の同期命令（起動、終結、バリア同期命令）に着目しているが、サブプロセッサ２〜４の同期命令についても同様である。
【００４８】
まず、各プロセッサ１〜４が同期命令（起動、終結、バリア同期命令）をデコードし、同期発レジスタ１６，２６，３６，４６をセットすると、その出力信号はＳＣ５〜８に送られると共に（ステップ３３０）、オープンドレインパス５６に送られる。オープンドレインパス５６はすべての同期発レジスタ１６，２６，３６，４６がセットされるとオンになり、各プロセッサ１〜４に対して、キャッシュ１０〜４０と主記憶の一致保証なしの同期通知を行い、各プロセッサ１〜４の保証無同期受レジスタ１８，２８，３８，４８をセットする（ステップ３４０）。保証無同期受レジスタ１８，２８，３８，４８がセットされると、各プロセッサ１〜４ではキャッシュ１０〜４０と主記憶との一致保証を必要としない処理を開始する。その後、図１０と同様の動作で各プロセッサ１〜４に対してキャッシュと主記憶の一致保証をした同期通知がなされ、保証有同期受レジスタ１７，２７，３７，４７がセットされ（ステップ３４１）、一致保証を必要とする処理が開始される。
【００４９】
なお、図７では、図６の構成にキャッシュと主記憶との一致保証を行わないインターフェースを追加する場合を示したが、同様に、図１乃至図３の起動・終結・バリア同期インターフェースの各構成にキャッシュと主記憶との一致保証を行わないインターフェースを追加することも可能である。
【００５０】
〈実施例４〉
一般にコンパイラは、コンパイル時に複数のプロセッサに割当てる複数のプログラムのある時点以前の命令による主記憶アクセスアドレスと、それ以降の命令による主記憶アクセスアドレスに重なりがないと判定できない場合には、一律にキャッシュと主記憶の一致保証制御（キャッシュコヒーレンス制御）の完了を保証したバリア同期命令を挿入する。このコンパイル時にデータ依存関係がないことを保証できないため、キャッシュコヒーレンス制御の完了を保証したバリア同期命令を挿入した場合でも、プログラム実行時にはその依存関係が判定可能になる場合がある。例えば、ＤＯループにおいて実行時に配列サイズが決定するようなケースが挙げられる。この様に、動的にデータ依存関係がないと判定できるようなケースに、常にキャッシュコヒーレンス制御の完了を保証したバリア同期制御を実行すると、本来不要な待ち合わせ時間を費やし、高速処理の妨げとなる。
【００５１】
本実施例は、動的にデータ依存関係がないと判定できるような場合、キャッシュコヒーレンス制御の完了を考慮せずにバリア同期を成立させることにより、余計な待ち合わせ時間を削減し、高速な並列処理を実現するものである。
【００５２】
図８に、本実施例の概略構成図を示す。各々キャッシュを備える複数のプロセッサ１〜４は、主記憶制御装置（ＳＣ）５を介し、主記憶（図示せず）を共有してアクセスするように接続される。アドレス管理テーブル制御装置（ＦＡＡ）９は、すべてのプロセッサ１〜４のキャッシュ１０〜４０に保持するデータの主記憶アドレス情報を一元管理する。なお、ＣＳ５は、これまでの実施例のように各プロセッサごとに設けることでもよい。
【００５３】
各プロセッサ１〜４は、バリア同期発レジスタ１４，２４，４４およびバリア同期受レジスタ１５，２５，４５を備える。これは、図３と同様である。ここで、メインプロセッサ１は主に並列化できない処理を実行し、サブプロセッサ２，４は、メインプロセッサ１より並列化できる処理を割当てられ、並列処理を実行するものとする。メインプロセッサ１は、キャッシュコヒーレンス制御要否判定部１９を備える。該キャッシュコヒーレンス制御要否判定部１９は、キャッシュコヒーレンス不要レジスタ１９に加えてキャッシュコヒーレンス制御要否判定キュー１９２を備え、キャッシュコヒーレンス不要レジスタ１９１の値をキューイングすることができる。ＳＣ５は、キャッシュコヒーレンス制御部５１０、キャッシュコヒーレンスありバリア同期成立回路５２１とキャッシュコヒーレンスなしバリア同期成立回路５２２とＯＲ回路５２３を備えるバリア同期成立制御部５２０、及び、全プロセッサ１〜４のバリア同期信号を同期化する同期回路５３０を備える。キャッシュコヒーレンス制御部５１０は、図３の発完了保証回路と受完保証回路を一緒にしたものと基本的に同じである。オープンドレインパス５７は
、各プロセッサ１〜４のバリア同期発レジスタ１４，２４，４４が全てセットされたときオンになり、バリア同期信号をＳＣ５に伝達する。
【００５４】
本実施例の動作として、まず、図１４に示すような２つのＤＯループを含むプログラムを実行する場合のバリア同期を説明する。
【００５５】
図１４に示す２つのＤＯループは、隣接する２つのＤＯループであって、共に配列Ａをアクセスする。ここで、ループＤＯ１０の配列Ａ（ｉ）のアクセス範囲Ｊ〜Ｋと、ループＤＯ２０の配列Ａ（ｉ）のアクセス範囲Ｌ〜Ｍは、プログラム実行時に確定し、ＤＯ１０の配列Ａ（ｉ）とＤＯ２０の配列Ａ（ｉ）に重なりがあるか否かを動的に判定可能とする。
【００５６】
図１５に、各プロセッサ１，２，４で実行するバリア同期に係る命令列の概略を示す。メインプロセッサ１は、キャッシュコヒーレンス制御要否判定ルーチン、バリア同期命令、バリア同期成立確認の順に実行し、サブプロセッサ２，４は、ストア命令Ａ（ｉ）、バリア同期命令、バリア同期成立確認、ロード命令Ａ
（ｉ）の順に実行する。
【００５７】
メインプロセッサ１内のキャッシュコヒーレンス不要レジスタ１９１は、初期値が“０”であり、キャッシュコヒーレンス制御要否判定ルーチンによりキャッシュコヒーレンス制御要と判定した時は“０”、不要と判定した時は“１”をセットする。各サブプロセッサ２，４からストア命令が発行されると、ＦＡＡ９は、キャッシキャンセルリクエストを発行し、キャッシュキャンセル処理の終了を確認すると、キャンセル完を通知する。全プロセッサ１，２，４がバリア同期命令を実行すると、各バリア同期発レジスタ１４，２４，４４の値がすべて“１”にセットされる。これにより、オープンドレインパス５７がオンとなり、ＳＣ５の同期回路５０４を介してバリア同期成立制御部５００に“１”が伝達される。
【００５８】
キャッシュコヒーレンス制御要の場合、キャッシュコヒーレンス制御要否判定部１９の出力信号は“０”である。この時、キャッシュコヒーレンスなしバリア同期成立回路５２２は機能せず、キャッシュコヒーレンスありバリア同期成立回路２２１のみが機能する。キャッシュコヒーレンスありバリア同期成立回路５２１は、同期回路５０４の出力が“１”のとき、キャッシュコヒーレンス制御部５１０からキャッシュセル処理の終了通知を受け取った時点で、ＯＲ回路５０３を介して、バリア同期成立信号を全プロセッサ１，２，４に報告する。各プロセッサ１，２，４は該バリア同期成立信号を受信すると、バリア同期受レジスタ１５，２５，４５を“１”にセットする。同時に、バリア同期発レジスタ１４，２４，４４を“０”にリセットする。
【００５９】
一方、キャッシュコヒーレンス制御不要の場合、キャッシュコヒーレンス制御要否判定部１９の出力信号は“１”である。この場合、キャッシュコヒーレンスなしバリア同期成立回路５０２が機能し、全てのプロセッサ１，２，４がバリア同期に到達したことを示す同期回路５０４の出力が“１”となった時点で、ＯＲ回路５０３を介して、ただちにバリア同期成立信号を全プロセッサ１，２，４に報告する。これにより、各プロセッサ１，２，４はバリア同期受レジスタ１５，２５，４５を“１”にセットし、同時に、バリア同期発レジスタ１４，２５，４５の値を“０”にリセットする。さらに、メインプロセッサ１では、キャッシュコヒーレンス不要レジスタ１９１の値を“０”にリセットする。
【００６０】
次に、本実施例の動作として、図１６に示すような４つのＤＯループを含むプログラムを実行する場合のバリア同期を説明する。
【００６１】
図１６に示す４つのＤＯループは、隣接する４つのＤＯループである。ここで、ループＤＯ３０の配列Ａ（ｉ）のアクセス範囲Ｊ〜Ｋと、ループＤＯ４０の配列Ａ（ｉ）のアクセス範囲Ｌ０〜Ｍ０はプログラム実行時に確定し、ＤＯ３０の配列Ａ（ｉ）と、ＤＯ４０の配列Ａ（ｉ）に重なりがあるか否かは動的に判定可能とする。同様に、ＤＯ４０とＤＯ５０の配列Ｂ（ｉ）、ＤＯ５０とＤＯ６０の配列Ｃ（ｉ）に関しても、実行時にアクセス範囲が確定し、重なりがあるか否かは動的に判定可能とする。
【００６２】
図１７に、各プロセッサ１，２，４で実行するバリア同期に係る命令列の概略を示す。メインプロセッサ１は、キャッシュコヒーレンス制御要否判定ルーチン（０）〜（２）、バリア同期命令（０）、バリア同期成立確認（０）、バリア同期命令（１）、バリア同期成立確認（１）、バリア同期命令（２）、バリア同期成立確認（２）の順に実行し、サブプロセッサ２，４はストア命令Ａ（ｉ）、バリア同期命令（０）、バリア同期成立確認（０）、ロード命令Ａ（ｉ）、ストア命令Ｂ（ｉ）、バリア同期命令（１）、バリア同期成立確認（１）、ロード命令Ｂ（ｉ）、ストア命令Ｃ（ｉ）、バリア同期命令（２）、バリア同期成立確認（２）、ロード命令Ｃ（ｉ）の順に実行する。
【００６３】
キャッシュコヒーレンス判定ルーチンは、判定（０）、判定（１）、判定（２）の順に行われ、この判定結果は順に、キャッシュコヒーレンス制御要否判定部１９にてキャッシュコヒーレンス不要レジスタ１９１を介してキャッシュコヒーレンス制御要否判定キュー１９２にキューイングされる。
【００６４】
バリア同期命令（０）〜（２）の実行時、キャッシュコヒーレンス制御要否判定キュー１９２にキューイングされているキャッシュコヒーレンス制御要否判定値を順に使用して、キャッシュコヒーレンス制御の要否の情報がバリア同期成立制御部５００に伝達される。この情報により、図１４のケースと同様に、バリア同期成立制御部５００ではキャッシュコヒーレンス制御要もしくはキャッシュコヒーレンス制御不要のバリア同期成立制御を行う。メインプロセッサ１では、バリア同期成立動作ごとに、使用したキャッシュコヒーレンス要否判定キュー１９２の内容を順に“０”にリセットする。
【００６５】
本実施例において、キャッシュコヒーレンス制御要否判定を行わずにバリア同期を実行する場合には、キャッシュコヒーレンス制御要否判定部１９の出力をキャッシュコヒーレンス制御要を示す値に固定とすることで、必砂キャッシュコヒーレンス制御の完了を保証したバリア同期命令を実行することが可能となる。
【００６６】
なお、本実施例４は、先の実施例３と組み合せて使用することも可能である。即ち、まず、実施例３を適用して、各プロセッサでキャッシュと主記憶との一致保証を必要としない処理を開始し、その後、実施例４を適用して、動的にキャッシュと主記憶の一致保証制御の要／不要を場合わけし、いずれかを実行する。
【００６７】
【発明の効果】
以上述べたように、本発明では、キャッシュを有する複数のプロセッサが主記憶を共有する並列プロセッサシステムにおいて、起動、終結、バリア同期命令を処理する場合、ＳＣでキャッシュと主記憶との一致保証を含んで処理することによって、キャッシュと主記憶の一致保証を必要とする同期処理に対し、高速な同期インターフェースが実現できる。また、起動、終結、バリア同期を同一の構成で実現しメインプロセッサとサブプロセッサが同じ動作をすることをプログラム的に保証することにより、メインプロセッサとサブプロセッサを区別しないハードウエアが実現できる。さらに、キャッシュと主記憶との一致保証を行わない同期インターフェースを追加することにより、キャッシュと主記憶との一致保証を必要としない処理の開始を早めることができる。
【図面の簡単な説明】
【図１】本発明における起動インターフェースの構成例を示すブロック図である。
【図２】本発明における終結インターフェースの構成例を示すブロック図である。
【図３】本発明におけるバリア同期インターフェースの構成例を示すブロック図である。
【図４】本発明における発完了保証回路の構成例を示すブロック図である。
【図５】本発明における受完了保証回路の構成例を示すブロック図である。
【図６】本発明における起動、終結、バリア同期を同一構成で実現する同期インターフェースの構成例を示すブロック図である。
【図７】本発明におけるキャッシュと主記憶の一致保証を含む同期インターフェースと一致保証を含まない同期インターフェースを備える構成例を示す図である。
【図８】本発明における動的にデータ依存関係がないと判定できるケースを検出してバリア同期制御を実施する構成例を示す図である。
【図９】従来のバスインターフェースによる同期制御方式の構成例を示すブロック図である。
【図１０】スイッチング型のＳＣを用いた並列プロセッサシステムの構成例を示すブロック図である。
【図１１】従来技術による起動処理のタイムチャートである。
【図１２】図１の本発明による起動処理のタイムチャートである。
【図１３】図７の本発明による同期処理のタイムチャートである。
【図１４】図８の本発明によるバリア同期制御を説明する命令列の一例である。
【図１５】図１４の命令列の実行をプロセッサ別に記述した図である。
【図１６】図８の本発明によるバリア同期制御を説明する命令列の他の一例である。
【図１７】図１６の命令列の実行をプロセッサ別に記述した図である。
【符号の説明】
１，２，３，４          プロセッサ
５，６，７，８          主記憶制御装置（ＳＣ）
１２                    起動発レジスタ
２２，３２，４２        起動受レジスタ
１３                    終結受レジスタ
２３，３３，４３        終結発レジスタ
１４，２４，３４，４４  バリア同期発レジスタ
１５，２５，３５，４５  バリア同期受レジスタ
１６，２６，３６，４６  同期発レジスタ
１７，２７，３７，４７  保証有同期受レジスタ
１８，２８，３８，４８  保証無同期受レジスタ
１９                    キャッシュコヒーレンス制御要否判定部
５１，６１，７１，８１  発完了保証回路
５２，６２，７２，８２  受完了保証回路
５１０                  キャッシュコヒーレンス制御部
５２０                  バリア同期成立制御部
５２１                  キャッシュコヒーレンスありバリア同期成立回路
５２２                  キャッシュコヒーレンスなしバリア同期成立回路
５３０                  同期回路
【図１】
0003636871.tif 000002
【図２】
0003636871.tif 000003
【図３】
0003636871.tif 000004
【図４】
0003636871.tif 000005
【図５】
0003636871.tif 000006
【図６】
0003636871.tif 000007
【図７】
0003636871.tif 000008
【図８】
0003636871.tif 000009
【図９】
0003636871.tif 000010
【図１０】
0003636871.tif 000011
【図１１】
0003636871.tif 000012
【図１２】
0003636871.tif 000013
【図１３】
0003636871.tif 000014
【図１４】
0003636871.tif 000015
【図１５】
0003636871.tif 000016
【図１６】
0003636871.tif 000017
【図１７】
0003636871.tif 000018