(57)【要約】【課題】マルチプロセッサシステムで同一のデータを利用する際にキャッシュミスを低減し、プロセッサ間でコヒーレンシ要求が頻発するのを抑制する。【解決手段】システム制御部を介して主記憶または他のプロセッサと通信を行うインターフェース３０−０と、主記憶のデータを格納するキャッシュメモリ１０−０と、読み込み命令に含まれるアドレスのデータを前記主記憶から読み込んでキャッシュメモリ１０−０に格納する読み出し処理部と、を備え、読み出し処理部は、第１のロード命令で指定されたアドレスに対応するデータを前記主記憶または前記他のプロセッサから読み込んで前記キャッシュメモリに格納する第１ロード命令実行部Ｕ０−０と、第２のロード命令で指定されたアドレスに対応するデータを主記憶または他のプロセッサから読み込んでキャッシュメモリ１０−０に格納し、他のプロセッサに向けてデータを送信するようシステム制御部に要求する第２ロード命令実行部Ｕ１−０と、を備える。【選択図】図３
2007207004.tif 000002
【特許請求の範囲】
【請求項１】
システム制御部を介して主記憶または他のプロセッサと通信を行うインターフェースと、
前記主記憶のデータを格納するキャッシュメモリと、
読み込み命令に含まれるアドレスのデータを前記主記憶から読み込んで前記キャッシュメモリに格納する読み出し処理部と、
を備えたプロセッサにおいて、
前記読み出し処理部は、
第１のロード命令で指定されたアドレスに対応するデータを前記主記憶または前記他のプロセッサから読み込んで前記キャッシュメモリに格納する第１ロード命令実行部と、
第２のロード命令で指定されたアドレスに対応するデータを前記主記憶または前記他のプロセッサから読み込んで前記キャッシュメモリに格納し、前記他のプロセッサに向けて前記データを送信するよう前記システム制御部に要求する第２ロード命令実行部と、
を備えたことを特徴とするプロセッサ。
【請求項２】
前記第２ロード命令実行部は、
前記第２のロード命令で指定されたアドレスに対応するデータが前記キャッシュメモリに格納されていなければ、前記システム制御部を介して前記主記憶または前記他のプロセッサから前記指定されたアドレスのデータを読み込んで、当該プロセッサの前記キャッシュメモリに当該データを格納し、前記他のプロセッサに向けて当該データを送信するよう前記システム制御部に要求することを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記第２ロード命令実行部は、
前記第２のロード命令で指定されたアドレスに対応するデータが前記キャッシュメモリに格納されていなければ、前記アドレスに対応するデータが前記他のプロセッサのキャッシュメモリに格納されている場合には、前記システム制御部を介して他のプロセッサから前記指定されたアドレスのデータを読み込んで、当該プロセッサの前記キャッシュメモリに当該データを格納し、前記アドレスに対応するデータが前記主記憶に格納されている場合には、前記システム制御部を介して主記憶から前記指定されたアドレスのデータを読み込んで、当該プロセッサの前記キャッシュメモリに当該データを格納し、前記他のプロセッサに当該データを送信するよう前記システム制御部に要求することを特徴とする請求項１に記載のプロセッサ。
【請求項４】
前記第２ロード命令実行部は、
前記第２のロード命令で指定されたアドレスに対応するデータが前記キャッシュメモリに格納されていなければ、前記システム制御部を介して前記主記憶または前記他のプロセッサから前記指定されたアドレスのデータを読み込んで、当該プロセッサの前記キャッシュメモリに当該データを格納し、前記他のプロセッサに当該データを送信するよう前記システム制御部に要求し、
前記第２のロード命令で指定されたアドレスに対応するデータが前記キャッシュメモリに格納されていれば、前記キャッシュメモリの前記データを前記他のプロセッサに送信するよう前記システム制御部に要求することを特徴とする請求項１に記載のプロセッサ。
【請求項５】
前記インターフェースを介して受信した他のプロセッサまたは主記憶からのデータを前記キャッシュメモリに格納するキャッシュ制御部と、
前記読み込むデータのアドレスを格納する要求バッファと、をさらに有し、
前記読み出し処理部は、
前記主記憶または前記他のプロセッサから前記データを読み込む際に、前記要求バッファへ前記アドレスを登録し、
前記キャッシュ制御部は、
前記受信したデータのアドレスと前記要求バッファのアドレスが一致したときに当該データを前記キャッシュメモリに格納し、前記要求バッファに登録したアドレスを削除することを特徴とする請求項１に記載のプロセッサ。
【請求項６】
前記インターフェースを介して受信した他のプロセッサまたは主記憶からのデータを前記キャッシュメモリに格納するキャッシュ制御部と、
前記読み込むデータのアドレスと要求番号を格納する要求バッファと、をさらに有し、
前記読み出し処理部は、
前記主記憶または前記他のプロセッサから前記データを読み込む際に、前記要求バッファへ前記アドレスと前記要求番号を登録し、
前記キャッシュ制御部は、
前記受信したデータの要求番号と前記要求バッファの要求番号が一致したときに当該データを前記キャッシュメモリに格納し、前記要求バッファに登録したアドレスおよび要求番号を削除することを特徴とする請求項１に記載のプロセッサ。
【請求項７】
演算処理を実行するレジスタをさらに有し、
前記キャッシュメモリに格納したデータを前記レジスタにセットすることを特徴とする請求項１に記載のプロセッサ。
【請求項８】
キャッシュメモリを備えた複数のプロセッサと、
前記複数のプロセッサに接続されて主記憶へのアクセスと、プロセッサ間のアクセスとを制御するシステム制御部と、
を備え、
前記プロセッサが、
前記システム制御部を介して主記憶または他のプロセッサと通信を行うインターフェースと、
読み込み命令に含まれるアドレスのデータを前記システム制御部を介して読み込んで前記キャッシュメモリに格納する読み出し処理部と、
を有する計算機において、
前記読み出し処理部は、
第１のロード命令で指定されたアドレスに対応するデータを前記システム制御部に要求し、前記システム制御部から受信したデータを前記キャッシュメモリに格納する第１ロード命令実行部と、
第２のロード命令で指定されたアドレスに対応するデータを前記システム制御部に要求し、前記システム制御部から受信したデータを前記キャッシュメモリに格納し、前記他のプロセッサに前記データをブロードキャストするよう前記システム制御部に要求する第２ロード命令実行部と、を有し、
前記システム制御部は、
前記第２ロード命令実行部からブロードキャストの要求があったときには、前記複数のプロセッサに前記アドレスに対応するデータを送信することを特徴とする計算機。
【請求項９】
前記第２ロード命令実行部は、
前記第２のロード命令で指定されたアドレスに対応するデータが前記キャッシュメモリに格納されていなければ、前記システム制御部を介して前記主記憶または前記他のプロセッサから前記指定されたアドレスのデータを読み込んで、当該プロセッサの前記キャッシュメモリに当該データを格納し、前記他のプロセッサに向けて当該データを送信するよう前記システム制御部に要求し、
前記システム制御部は、前記要求に基づいて前記複数のプロセッサに前記データを送信することを特徴とする請求項８に記載の計算機。
【請求項１０】
前記システム制御部は、
前記第２のロード命令で指定されたアドレスに対応するデータが前記キャッシュメモリに格納されていなければ、前記他のプロセッサのキャッシュメモリと前記主記憶のいずれに前記アドレスに対応するデータが格納されているかを判定する判定部を有し、
前記第２ロード命令実行部は、
前記アドレスに対応するデータが前記他のプロセッサのキャッシュメモリに格納されている場合には、前記システム制御部を介して他のプロセッサから前記指定されたアドレスのデータを読み込んで、当該プロセッサの前記キャッシュメモリに当該データを格納し、
前記アドレスに対応するデータが前記主記憶に格納されている場合には、前記システム制御部を介して主記憶から前記指定されたアドレスのデータを読み込んで、当該プロセッサの前記キャッシュメモリに当該データを格納し、前記他のプロセッサに当該データを送信するよう前記システム制御部に要求し、
前記システム制御部は、前記要求に基づいて前記複数のプロセッサに前記データを送信することを特徴とする請求項８に記載の計算機。
【請求項１１】
前記第２ロード命令実行部は、
前記第２のロード命令で指定されたアドレスに対応するデータが前記キャッシュメモリに格納されていなければ、前記システム制御部を介して前記主記憶または前記他のプロセッサから前記指定されたアドレスのデータを読み込んで、当該プロセッサの前記キャッシュメモリに当該データを格納し、前記他のプロセッサに当該データを送信するよう前記システム制御部に要求し、前記第２のロード命令で指定されたアドレスに対応するデータが前記キャッシュメモリに格納されていれば、前記キャッシュメモリの前記データを前記他のプロセッサに送信するよう前記システム制御部に要求し、
前記システム制御部は、前記要求に基づいて前記複数のプロセッサに前記データを送信することを特徴とする請求項８に記載の計算機。
【請求項１２】
前記プロセッサは、
前記インターフェースを介して受信した他のプロセッサまたは主記憶からのデータを前記キャッシュメモリに格納するキャッシュ制御部と、
前記読み込むデータのアドレスを格納する要求バッファと、をさらに有し、
前記読み出し処理部は、
前記システム制御部から前記データを読み込む際に、前記要求バッファへ前記アドレスを登録し、
前記キャッシュ制御部は、
前記受信したデータのアドレスと前記要求バッファのアドレスが一致したときに当該データを前記キャッシュメモリに格納し、前記要求バッファに登録したアドレスを削除することを特徴とする請求項８に記載の計算機。
【請求項１３】
前記プロセッサは、
前記インターフェースを介して受信した他のプロセッサまたは主記憶からのデータを前記キャッシュメモリに格納するキャッシュ制御部と、
前記読み込むデータのアドレスと要求番号を格納する要求バッファと、をさらに有し、
前記読み出し処理部は、
前記システム制御部から前記データを読み込む際に、前記要求バッファへ前記アドレスと前記要求番号を登録し、
前記キャッシュ制御部は、
前記受信したデータの要求番号と前記要求バッファの要求番号が一致したときに当該データを前記キャッシュメモリに格納し、前記要求バッファに登録したアドレスと要求番号を削除することを特徴とする請求項８に記載の計算機。
【請求項１４】
前記プロセッサは、
演算処理を実行するレジスタをさらに有し、
前記キャッシュメモリに格納したデータを前記レジスタにセットすることを特徴とする請求項８に記載の計算機。
【請求項１５】
前記システム制御部は、
前記複数のプロセッサをグループ化するシステム分割管理部を有し、
前記プロセッサからブロードキャスト要求を受けたときには、前記ブロードキャスト要求を行ったプロセッサが所属するグループ内の全てのプロセッサに対して前記データを送信することを特徴とする請求項８に記載の計算機。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサで主記憶を共有するマルチプロセッサシステムのキャッシュメモリの制御に関する。
【背景技術】
【０００２】
複数のプロセッサで主記憶を共有するマルチプロセッサ計算機では、同一のプログラム（プロセス）を複数のプロセッサにそれぞれ実行させて、並列処理を行うものがＳＰＭＤ（Single Program、 Multiple Data）処理として知られている。
【０００３】
マルチプロセッサシステムのプロセッサには、主記憶よりも高速に読み書き可能なキャッシュメモリが設けられており、処理に必要なデータや命令を一旦キャッシュメモリに格納してから命令を実行している。各プロセッサのキャッシュメモリに同一アドレス（ブロック）の内容が格納されている場合、異なるキャッシュメモリ間で同一アドレスの内容が矛盾しないようにキャッシュコヒーレンシ制御を行うものが知られている（例えば、特許文献１、２）。
【特許文献１】特開２００２−１４９４９８号
【特許文献２】特開２００４−１９２６１９号
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上記主記憶共有得型のマルチプロセッサシステムでＳＰＭＤによる並列処理を行う際には、同一のプログラムを実行する複数のプロセッサが、同一のデータを利用する場合がある。いま、３つのプロセッサで同一のプログラムを実行し、同一のデータを利用する場合を考える。各プロセッサのキャッシュメモリには同一のデータ（例えば、アドレスＳのデータとする）は、まだ登録されていないものとのとする。
【０００５】
まず、第１のプロセッサがキャッシュメモリからアドレスＳのデータをロードする命令を実行すると、アドレスＳのデータはまだキャッシュメモリにないのでキャッシュミスとなる。第１のプロセッサは第２、第３のプロセッサにコヒーレンシ要求をブロードキャストする。第２、第３のプロセッサのキャッシュメモリにもアドレスＳのデータはないので、第１のプロセッサは主記憶からアドレスＳのデータをキャッシュメモリに読み込む。
【０００６】
次に、第２のプロセッサがキャッシュメモリからアドレスＳのデータをロードする命令を実行すると、アドレスＳのデータはまだキャッシュメモリにないのでキャッシュミスとなる。第２のプロセッサは第１、第３のプロセッサにコヒーレンシ要求をブロードキャストする。第１のプロセッサはアドレスＳのデータを持っているので、第１のプロセッサのキャッシュメモリから第２のプロセッサのキャッシュメモリへアドレスＳのデータが転送される。
【０００７】
次に、第３のプロセッサがキャッシュメモリからアドレスＳのデータをロードする命令を実行すると、アドレスＳのデータはまだキャッシュメモリにないのでキャッシュミスとなる。第３のプロセッサは第１、第２のプロセッサにコヒーレンシ要求をブロードキャストする。第１のプロセッサはアドレスＳのデータを持っているので、第１のプロセッサのキャッシュメモリから第３のプロセッサのキャッシュメモリへアドレスＳのデータが転送される。
【０００８】
以上のような手順で３つのプロセッサには各自のキャッシュメモリに同一のデータが登録されて、所定の処理を実行することができる。
【０００９】
上記従来例では、同一のデータのロードでキャッシュミスが発生すると、各プロセッサは自分のキャッシュメモリのみに該当データをロードしようとする。このため、キャッシュミスによるデータのロード遅延に加えて、頻発するコヒーレンシ要求により計算機の処理性能が低下する、という問題が生じる。
【００１０】
そこで本発明は、上記問題点に鑑みてなされたもので、マルチプロセッサシステムで同一のデータを利用する際にキャッシュミスを低減し、プロセッサ間でコヒーレンシ要求が頻発するのを抑制し、マルチプロセッサシステムの性能を向上させることを目的とする。
【課題を解決するための手段】
【００１１】
本発明は、キャッシュメモリを備えた複数のプロセッサと、前記複数のプロセッサに接続されて主記憶へのアクセスと、プロセッサ間のアクセスとを制御するシステム制御部と、を備え、前記プロセッサが、前記システム制御部を介して主記憶または他のプロセッサと通信を行うインターフェースと、読み込み命令に含まれるアドレスのデータを前記システム制御部を介して読み込んで前記キャッシュメモリに格納する読み出し処理部と、
を有する計算機において、
前記読み出し処理部は、第１のロード命令で指定されたアドレスに対応するデータを前記システム制御部に要求し、前記システム制御部から受信したデータを前記キャッシュメモリに格納する第１ロード命令実行部と、第２のロード命令で指定されたアドレスに対応するデータを前記システム制御部に要求し、前記システム制御部から受信したデータを前記キャッシュメモリに格納し、前記他のプロセッサに前記データをブロードキャストするよう前記システム制御部に要求する第２ロード命令実行部と、を有し、前記システム制御部は、前記第２ロード命令実行部からブロードキャストの要求があったときには、前記複数のプロセッサに前記アドレスに対応するデータを送信する。
【００１２】
また、前記複数のプロセッサは同一のグループ内で同一のプログラムを並列的に実行する。
【発明の効果】
【００１３】
したがって、本発明は、第２のロード命令を実行してキャッシュメモリに指定アドレスのデータがなかったときには、当該データを複数のプロセッサでキャッシュするようにブロードキャストが行われる。複数のプロセッサで同一または同種のプログラムを並列処理する場合では、前記従来例のように、複数のプロセッサが同一のアドレスのデータについてコヒーレンシ要求や主記憶へのアクセスが頻発するのを抑制でき、並列処理の性能を向上させることが可能となるのである。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【００１５】
図１は、第１の実施形態を示し、本発明を適用する主記憶共有型マルチプロセッサシステムの計算機の構成を示すブロック図である。
【００１６】
図１に示す計算機は、複数のプロセッサＣＰＵ−０〜ＣＰＵ−３と、プログラムやデータを格納する主記憶３と、プロセッサＣＰＵ−０〜ＣＰＵ−３からの主記憶３やＩ／Ｏバス（図示省略）へのアクセス制御などを行うシステム制御部２を主体に構成される。
【００１７】
プロセッサＣＰＵ−０は、データまたは命令を格納するキャッシュメモリ１０−０と、キャッシュメモリ１０−０へ格納するデータまたは命令のアドレスを管理する読み出し要求バッファ１１−０を備えている。プロセッサＣＰＵ−０は、キャッシュメモリ１０−０に格納した命令に基づいて、キャッシュメモリ１０−０上のデータを処理する。このため、プロセッサＣＰＵ−０は、図示しない命令実行ユニットを備えている。なお、以下の説明では、キャッシュメモリ１０−０はデータキャッシュの例を示し、図示はしないが命令キャッシュを別途備えるものとする。
【００１８】
他のプロセッサＣＰＵ−１〜ＣＰＵ−３も上記プロセッサＣＰＵ−０と同様に構成されてＳＭＰ（Symmetric Multiple Processor）を形成する。プロセッサＣＰＵ−１〜ＣＰＵ−３も添え字の−１〜−３に対応して、上記プロセッサＣＰＵ−０と同様にキャッシュメモリ１０−１〜１０−３と、読み出し要求バッファ１１−１〜１１−３を備えている。なお、各キャッシュメモリ１０−０〜３は、図示はしないが複数のキャッシュラインを備えている。
【００１９】
システム制御部２とプロセッサＣＰＵ−０〜ＣＰＵ−３はフロントサイドバス４を介して接続され、システム制御部２と主記憶３はメモリバス５を介して接続される。
【００２０】
システム制御部２は、プロセッサＣＰＵ−０〜ＣＰＵ−３の要求に応じて主記憶３に対して読み書きを行う。また、システム制御部２は、複数のプロセッサＣＰＵ−０〜ＣＰＵ−３をグループ化するためのシステム分割情報２１を有し、システム分割情報２１に基づいてＣＰＵ−０〜ＣＰＵ−３が所属する計算機を割り当てる。システム分割情報２１による割り当ては、例えば仮想分割（または物理分割）であり、以下の例では、プロセッサＣＰＵ−０〜ＣＰＵ−２が仮想計算機＃０に所属し、プロセッサＣＰＵ−３が仮想計算機＃１に所属する例を示す。また、システム制御部２は、プロセッサＣＰＵ−０〜ＣＰＵ−３からの要求に応じて図示しないバスなどを介してＩ／Ｏアクセスを行う。なお、システム制御部２は、例えば、ノースブリッジやメモリコントロールハブなどで構成することができる。
【００２１】
システム分割情報２１は、図６で示すように、この計算機が備えているプロセッサの番号（図中ＣＰＵ番号）と、プロセッサに割り当てるシステム番号（例えば、仮想計算機の場合は論理区画番号）を備えている。このシステム分割情報２１は、図示しないミドルウェアや管理ツールなどで設定される。図１の計算機が仮想計算機を構成する場合、図６の例では、プロセッサＣＰＵ−０〜ＣＰＵ−２が仮想計算機＃０に所属し、プロセッサＣＰＵ−３が仮想計算機＃１に所属する例を示す。
【００２２】
そして仮想計算機＃０では、ＳＰＭＤ（Single Program、Multiple Data）により並列処理が実行される。
【００２３】
＜処理の一例＞
仮想計算機＃０で実行されるプログラムＰの一例を図７に示す。プログラムＰは定数ｔｍｐ＝Ｓを配列Ｂ（ｉ）に３００回加算する処理を示す。ただし、「Ｓ」は主記憶３のアドレスを示す。各プロセッサＣＰＵ−０〜ＣＰＵ−２には、演算範囲を分割した同種のプログラムＰ０〜Ｐ２を並列的に実行させる。プログラムＰ０は上記配列Ｂ（ｉ）の演算をｉ＝１〜１００まで実行し、Ｐ１は上記配列Ｂ（ｉ）の演算をｉ＝１０１〜２００まで、Ｐ２は上記配列Ｂ（ｉ）の演算をｉ＝２０１〜３００まで実行するように並列化されている。これらプログラムＰ０〜Ｐ２をプロセッサＣＰＵ−０〜ＣＰＵ−２で同時に実行し、並列処理を実現する。
【００２４】
＜プロセッサの命令セット＞
次に、プロセッサＣＰＵ−０〜ＣＰＵ−３に予め設定された命令セットについて以下に説明する。プロセッサＣＰＵ−０〜ＣＰＵ−３の命令セットは、次のように大別される。演算に必要なデータをレジスタに読み込むロード命令群と、ロード命令の実行前に予め必要となるデータをキャッシュメモリ１０−０〜３に主記憶３から読み込むプリフェッチ命令群と、レジスタに格納された演算結果を主記憶３へ書き込むストア命令群と、加減乗除などの演算やビット操作の演算を行うその他の命令群とを実行する命令実行ユニット（後述）を備えている。
【００２５】
（１）ロード命令群
ロード命令群には、通常のロード命令と、キャッシュミスした際に同一グループ内の他のプロセッサにロードするデータをブロードキャストするブロードキャストヒント付きロード命令が含まれる。なお、キャッシュメモリ１０−０〜３にロード命令またはブロードキャストヒント付きロード命令で要求したアドレスのデータがある場合にはキャッシュヒットであり、ない場合にはキャッシュミスとなる
・通常ロード命令
キャッシュヒット時：キャッシュメモリ１０−０〜３から該当アドレスのデータを読み込んでレジスタにセットする。
【００２６】
キャッシュミス時：読み出し要求バッファ１１−０〜３に要求するアドレスをセットして、システム制御部２に主記憶３からの読み込みを要求する。要求されたアドレスのデータを読み込むと読み出し要求バッファ１１−０〜３の該当エントリを後述するようにクリアし、読み込んだデータをレジスタにセットする。
【００２７】
・ブロードキャストヒント付きロード命令
キャッシュヒット時：キャッシュメモリ１０−０〜３から該当アドレスのデータを読み込んでレジスタにセットする（通常ロード命令と同一）。
【００２８】
キャッシュミス時：読み出し要求バッファ１１−０〜３に要求するアドレスをセットして、システム制御部２にブロードキャスト要求と、主記憶３の読み込みを要求する。システム制御部２はシステム分割情報２１を参照して同一グループ（論理区画内）のプロセッサにロード要求をブロードキャストする。要求されたアドレスのデータを読み込むとグループ内の読み出し要求バッファ１１−０〜３の該当エントリを後述するようにクリアし、読み込んだデータをキャッシュメモリ１０−０〜３に格納してからレジスタにセットする。
【００２９】
（２）プリフェッチ命令群
プリフェッチ命令群には、通常のプリフェッチ命令と、キャッシュミスした際に同一グループ内の他のプロセッサにプリフェッチするデータをブロードキャストするブロードキャストヒント付きプリフェッチ命令が含まれる。
【００３０】
・通常プリフェッチ命令
キャッシュヒット時：処理なし。
【００３１】
キャッシュミス時：読み出し要求バッファ１１−０〜３に要求するアドレスをセットして、システム制御部２に主記憶３からの読み込みを要求する。要求されたアドレスのデータを読み込むと読み出し要求バッファ１１−０〜３の該当エントリを後述するようにクリアし、読み込んだデータをキャッシュメモリ１０−０〜３に格納する。
【００３２】
・ブロードキャストヒント付きプリフェッチ命令
キャッシュヒット時：処理なし（通常プリフェッチ命令と同一）。
【００３３】
キャッシュミス時：読み出し要求バッファ１１−０〜３に要求するアドレスをセットして、システム制御部２にブロードキャスト要求と、主記憶３の読み込みを要求する。システム制御部２はシステム分割情報２１を参照して同一グループ（論理区画内）のプロセッサにプリフェッチ要求をブロードキャストする。要求されたアドレスのデータを読み込むと同一グループ内のプロセッサの読み出し要求バッファ１１−０〜３の該当エントリを後述するようにクリアし、読み込んだデータをキャッシュメモリにセットする。
【００３４】
（３）ストア命令群
ストア命令群には、通常のストア命令と、キャッシュミスした際に同一グループ内の他のプロセッサにストアするデータをブロードキャストするブロードキャストヒント付きストア命令が含まれる。
【００３５】
・通常ストア命令
キャッシュヒット時：キャッシュメモリの該当アドレスのデータをレジスタの内容に更新する。プロセッサＣＰＵ−０〜３はシステム制御部２に対して同一グループ内の他のプロセッサにスヌープを要求する。
【００３６】
キャッシュミス時：読み出し要求バッファ１１−０〜３にレジスタの内容を書き込むアドレスをセットして、システム制御部２に主記憶３への書き込みを要求する。システム制御部２が要求されたアドレスにデータを書き込むと読み出し要求バッファ１１−０〜３の該当エントリを後述するようにクリアする。プロセッサＣＰＵ−０〜３はシステム制御部２に対して同一グループ内の他のプロセッサにスヌープを要求する。
【００３７】
・ブロードキャストヒント付きストア命令
キャッシュヒット時：通常ストア命令と同一。
【００３８】
キャッシュミス時：読み出し要求バッファ１１−０〜３にレジスタの内容を書き込むアドレスをセットして、システム制御部２に主記憶３への書き込みを要求する。また、プロセッサは、システム制御部２にストア命令のブロードキャストを要求する。システム制御部２はシステム分割情報２１を参照して同一グループ（論理区画内）のプロセッサにストア要求をブロードキャストする。システム制御部２は、要求された主記憶３のアドレスにレジスタの内容を書き込むと同一グループ内のプロセッサに書き込んだデータをブロードキャストし、各プロセッサは読み出し要求バッファの該当エントリをクリアし、他のプロセッサではキャッシュメモリ内の該当データを更新してスヌープが行われる。
【００３９】
＜読み出し要求バッファ＞
次に、各プロセッサＣＰＵ−０〜ＣＰＵ−３に設けられる読み出し要求バッファ１１−０〜３について以下に説明する。図８は、プロセッサＣＰＵ−０の読み出し要求バッファ１１−０の一例を示す。なお、プロセッサＣＰＵ−１〜ＣＰＵ−３の読み出し要求バッファ１１−１〜３もプロセッサＣＰＵ−０と同一である。
【００４０】
読み出し要求バッファ１１−０は所定の数（この例では４つ）のエントリを備える。各エントリには当該エントリが使用中であるか否かを示す有効フラグ１１１と、システム制御部２へ読み出し要求を行った主記憶３のアドレスを格納する要求アドレス１１２と、要求アドレス１１２に対して読み出し要求を発行したプロセッサの要求識別子を格納する要求番号１１３とからなる。有効フラグ１１１は「１」が使用中を示し、「０」が未使用を示す。
【００４１】
読み出し要求バッファ１１−０〜３のエントリの数は、適宜設定すればよい。また、要求番号１１３は要求を行ったプロセッサの読み出し要求バッファ内でユニークな値であればよく、この例では、プロセッサＣＰＵ−０〜ＣＰＵ−３の識別子（ＣＰＵ番号）に要求の順序を示す０〜３の番号を付すものとする。なお、要求の順序を示す番号は読み出し要求バッファ１１−０〜３のエントリ数に応じて設定すればよい。
【００４２】
プロセッサＣＰＵ−０は、ロード命令またはブロードキャストヒント付きロード命令などでキャッシュミスし、例えば、主記憶３のアドレスＡの読み込みをシステム制御部２へ要求すると、読み出し要求バッファ１１−０の図中第１のエントリに要求したアドレスと要求番号を書き込む。そして、システム制御部２から要求したデータを受け取ると、受け取ったデータのアドレスと、読み出し要求バッファ１１−０の要求アドレスの値を比較して、アドレスの値が一致したエントリの内容をクリアし、有効フラグ１１１を０にセットして新たな書き込みを許容する。なお、アドレスの代わりに、データに付随する要求番号と、読み出し要求バッファ１１−０の要求番号の値を比較して、要求番号の値が一致したエントリの内容をクリアし、有効フラグ１１１を０にセットして新たな書き込みを許容するようにしてもよい。
【００４３】
＜読み出し処理の詳細＞
次に、図２を参照しながらプロセッサ及びシステム制御部で実行される処理（ロードまたはプリフェッチ）の一例について説明する。この例では、図６に示したシステム分割情報２１より、仮想計算機＃０に割り当てられたプロセッサＣＰＵ−０〜ＣＰＵ−２で、図７に示した並列処理を実行する場合を示す。なお、プロセッサＣＰＵ−０〜ＣＰＵ−２では同一の流れのプログラムＰ０〜Ｐ２を実行するので、以下では、プロセッサＣＰＵ−０のみについて説明する。図２の処理は、プロセッサＣＰＵ−０が一命令毎に実行する処理の流れを示す。
【００４４】
まず、Ｓ１ではプロセッサＣＰＵ−０が命令を命令キャッシュから読み込み、Ｓ２で命令の種類を判定する。命令種類の判定の結果、プロセッサＣＰＵ−０が読み込んだ命令が通常ロード命令であればＳ３に進み、ブロードキャストヒント付きロード命令であればＳ４に進み、通常プリフェッチ命令であればＳ５に進み、ブロードキャストヒント付きプリフェッチ命令であればＳ６に進む。その他の命令（演算命令等）の場合はＳ９に進んで、命令に応じた処理を実行する。
【００４５】
＜通常ロード命令、通常プリフェッチ命令＞
通常ロード命令の場合は、Ｓ３において通常ロード命令で指定されたアドレスのデータがキャッシュメモリ１０−０に存在するか否かを判定する。キャッシュヒットした場合にはＳ１２に進んで、キャッシュメモリ１０−０の該当データをプロセッサＣＰＵ−０の所定のレジスタ（図示省略）にセットして命令を完了する。
【００４６】
一方、キャッシュミスした場合には、Ｓ７に進んで主記憶３または同一グループ内の他のプロセッサからの読み出し処理を実行した後、Ｓ１２に進んで読み込んだデータを所定のレジスタにセットして命令を完了する。
【００４７】
ここで、通常ロード命令による読み出し処理は図４で示すように実行される。まず、プロセッサＣＰＵ−０は、Ｓ５１で読み出し要求バッファ１１−０に空きエントリがあるかを判定する。つまり図８に示した読み出し要求バッファ１１−０のうち有効フラグ１１１が「０」のエントリを探索する。全てのエントリが使用中であれば、いずれかひとつのエントリが未使用になるまで待機する。
【００４８】
空きエントリができたらＳ５２へ進んで、読み出しを要求する主記憶３のアドレスを読み出し要求バッファ１１−０の要求アドレス１１２にセットし、所定の順序の要求番号１１３をセットしてから有効フラグ１１１を「１」に更新して当該エントリを使用中に変更する。ただし、読み出し要求バッファ１１−０内に、同一のアドレスが既にセットされている場合には、当該要求を破棄し、空きエントリへの書き込みは行わない。
【００４９】
Ｓ５３ではプロセッサＣＰＵ−０がシステム制御部２に対して、主記憶３の所定のアドレスに対して読み出し要求を発行する。
【００５０】
Ｓ５４では、システム制御部２が読み出し要求を送信したプロセッサが所属する仮想計算機（論理区画）内でプロセッサ間のキャッシュメモリのコヒーレンシ制御を実行する。この例では、システム制御部２はシステム分割情報２１を参照し、同一グループ（仮想計算機＃０）内のプロセッサＣＰＵ−０〜２のキャッシュメモリ１０−０〜２で、プロセッサＣＰＵ−０が要求したアドレスのデータを保有するキャッシュメモリ１０−１、２の値の有無と、データが更新されているか否かに応じて、同一のアドレスのデータが矛盾がないように調停する。
【００５１】
このコヒーレンシ制御は、例えば、公知のMESIプロトコルを利用すればよい。これは、キャッシュメモリ１０−０〜３のキャッシュラインの状態を、無効な場合をInvalid状態とし、キャッシュラインが有効で主記憶３と同じデータを持っている状態を、自分のキャッシュだけに入っている場合はExclusive状態とし、他のプロセッサのキャッシュメモリにも同じアドレスのデータがキャッシュされている場合をShared状態とし、内容は有効で書き換えられている場合をModified状態とする。そして、Modified状態のアドレスに対して他のプロセッサが読み込みを行うと、Modified状態のデータをキャッシュしているプロセッサはキャッシュラインの内容を主記憶３に書き戻し、状態をSharedに変更する。これにより、同一グループ内の各キャッシュメモリ１０−０〜２の同一のアドレスのデータの同一性を保証する。なお、コヒーレンシ制御は、この他Owned状態を加えたMOSEIプロトコルを利用してもよい。
【００５２】
次にＳ５５では、システム制御部２は、コヒーレンシ制御の結果、プロセッサＣＰＵ−０が要求したアドレスのデータの返送元を、主記憶３かデータをキャッシュしている他のプロセッサかを決定し、同一グループ内のプロセッサＣＰＵ−０〜２に返送元を通知する。Ｓ５６では、上記決定した返送元からシステム制御部２が該当アドレスのデータを受信する。そして、Ｓ５７でシステム制御部２は読み出し要求を発行したプロセッサＣＰＵ−０にデータを転送する。
【００５３】
Ｓ５８では、システム制御部２から要求したアドレスのデータを受信したプロセッサＣＰＵ−０は、このデータをキャッシュメモリ１０−０に格納する。そして、プロセッサＣＰＵ−０は、読み出し要求バッファ１１−０の該当するエントリの内容を削除し、有効フラグ１１１を「０」に更新して当該エントリを未使用に変更して処理を終了する。
【００５４】
通常ロード命令では、上記図４の処理でプロセッサＣＰＵ−０は主記憶３または他のプロセッサＣＰＵ−１、２からデータを読み込んで、要求を発行したプロセッサＣＰＵ−０のみがキャッシュメモリ１０−０へ格納した後、Ｓ１２に進んでキャッシュメモリ１０−０に格納したデータを所定のレジスタにセットして命令を完了する。
【００５５】
なお、図２のＳ５、Ｓ９で行われる通常プリフェッチ命令は、Ｓ１２のレジスタセットがないだけであり、その他は上記通常ロード命令と同様である。
【００５６】
また、通常ストア命令は、上記通常ロード命令とは逆方向にデータの書き込みを行うもので、読み出し要求バッファ１１−０〜２の使用などは上記通常ロード命令と同様に行われる。
【００５７】
＜ブロードキャストヒント付きロード命令、プリフェッチ命令＞
上記図２のＳ２でブロードキャストヒント付きロード命令と判定された場合には、Ｓ４においてブロードキャストヒント付きロード命令で指定されたアドレスのデータがキャッシュメモリ１０−０に存在するか否かを判定する。キャッシュヒットした場合にはＳ１２に進んで、キャッシュメモリ１０−０の該当データをプロセッサＣＰＵ−０の所定のレジスタにセットして命令を完了する。
【００５８】
一方、キャッシュミスした場合には、Ｓ８に進んでブロードキャスト処理１を実行して要求するアドレスのデータをキャッシュメモリ１０−０に読み込んだ後、Ｓ１２に進んで読み込んだデータを所定のレジスタにセットして命令を完了する。
【００５９】
ブロードキャストヒント付きロード命令によるブロードキャスト処理１は図５で示すように実行される。まず、プロセッサＣＰＵ−０は、Ｓ２１で読み出し要求バッファ１１−０に空きエントリがあるかを判定し、空きエントリがあればＳ２２へ進んで、読み出しを要求する主記憶３のアドレスを読み出し要求バッファ１１−０にセットする。ただし、同一のアドレスが既にセットされている場合には、当該要求を破棄し、空きエントリへの書き込みは行わない。これらＳ２１、Ｓ２２の処理は図４に示したＳ５１、Ｓ５２の処理と同一である。
【００６０】
次にＳ２３ではプロセッサＣＰＵ−０がシステム制御部２に対して、主記憶３の所定のアドレスに対する読み出し要求を同一グループ内のプロセッサにも通知するブロードキャスト要求１を発行する。
【００６１】
Ｓ２４では、上記図４のＳ５４と同様にシステム制御部２が同一グループ内でのキャッシュメモリのコヒーレンシ制御を実行する。
【００６２】
次にＳ２５では、上記図４のＳ５５と同様にシステム制御部２は、コヒーレンシ制御の結果、プロセッサＣＰＵ−０が要求したアドレスのデータの返送元を、主記憶３かデータをキャッシュしている他のプロセッサかを決定し、同一グループ内のプロセッサＣＰＵ−０〜２に返送元を通知する。
【００６３】
そして、Ｓ２６では、プロセッサＣＰＵ−０から受信したブロードキャスト要求１に基づいて、システム制御部２はシステム分割情報２１を参照して同一グループ内の他のプロセッサに要求アドレスと要求番号を配信する。つまり、システム制御部２は、ブロードキャスト要求１を発行したプロセッサＣＰＵ−０を除く同一グループ内のプロセッサＣＰＵ−１、２へ、プロセッサＣＰＵ−０のキャッシュメモリ１０−０の要求アドレスとプロセッサＣＰＵ−０の要求番号をブロードキャストする。
【００６４】
システム制御部２からブロードキャスト要求１を受けた同一グループ内のプロセッサＣＰＵ−１、２は、該当するアドレスのデータをキャッシュしていなければ、自身の読み出し要求バッファ１１−１、２の空きエントリに、プロセッサＣＰＵ−０の要求した内容を設定する。なお、空きエントリがない場合（バッファフル）には、プロセッサＣＰＵ−１、２は何もしない。
【００６５】
この処理により、並列処理を実行する同一グループ内のプロセッサＣＰＵ−０〜ＣＰＵ−２には、プロセッサＣＰＵ−０が要求したアドレスのデータをキャッシュしていなければ、プロセッサＣＰＵ−０の要求したアドレスとプロセッサＣＰＵ−０の要求番号が読み出し要求バッファ１１−０〜２にセットされる。
【００６６】
次に、Ｓ２７では、上記決定した返送元からシステム制御部２が該当アドレスのデータを受信する。そして、Ｓ２８ではシステム制御部２は受信したデータを同一グループ内の全てのプロセッサＣＰＵ−０〜ＣＰＵ−２に送信する。
【００６７】
Ｓ２９では、システム制御部２からプロセッサＣＰＵ−０が要求したアドレスのデータを受信した同一グループ内のプロセッサＣＰＵ−０〜ＣＰＵ−２のうち、読み出し要求バッファ１１−０〜２に該当アドレスをセットしているプロセッサＣＰＵ−０〜ＣＰＵ−２で、このデータをキャッシュメモリ１０−０〜２に格納する。そして、各プロセッサＣＰＵ−０〜２は、読み出し要求バッファ１１−０〜２の該当するエントリの内容を削除し、有効フラグ１１１を「０」に更新して当該エントリを未使用に変更して処理を終了する。
【００６８】
ブロードキャストヒント付きロード命令では、上記図５の処理でプロセッサＣＰＵ−０が要求したアドレスのデータは、同一グループ内の全てのプロセッサＣＰＵ−０〜２に転送され、同一グループ内のキャッシュメモリ１０−０〜２に同一のデータを格納することができる。つまり、同一グループ内のひとつのプロセッサがブロードキャストヒント付きロード命令を発行することで、同一グループ内のキャッシュメモリ１０−０〜２に同一のデータを登録することが可能となるのである。
【００６９】
このブロードキャストヒント付きロード命令は、図７で示したように、同一のデータをほぼ同時に使用する可能性が高い並列処理の際に使用することで、プロセッサ間でコヒーレンシ要求が頻発するのを抑制し、マルチプロセッサシステムで同一のデータを利用する際にキャッシュミスを低減することが可能となるのである。
【００７０】
なお、図２のＳ６、Ｓ１０で行われるブロードキャストヒント付きプリフェッチ命令は、Ｓ１２のレジスタセットがないだけであり、その他は上記ブロードキャストヒント付きプリフェッチ命令と同様である。
【００７１】
また、ブロードキャストヒント付きストア命令は、上記ブロードキャストヒント付きロード命令とは逆方向にデータの書き込みを行うもので、読み出し要求バッファ１１−０〜２の使用などは上記ブロードキャストヒント付きロード命令と同様に行われる。
【００７２】
なお、上記通常ロード命令、通常プリフェッチ命令、ブロードキャストヒント付きロード命令、ブロードキャストヒント付きプリフェッチ命令及びその他の命令は、プロセッサＣＰＵ−０〜３の実行ユニットで処理されるもので、プロセッサＣＰＵ−０の命令実行ユニットを模式的に示すと図３で示すようになる。なお、プロセッサＣＰＵ−１〜３も同様の構成である。
【００７３】
図３において、プロセッサＣＰＵ−０の代表的な命令実行ユニットは、キャッシュメモリ１０−０に読み込んだデータをレジスタＲにセットする通常ロード命令を処理する通常ロード命令実行ユニットＵ０−０と、キャッシュメモリ１０−０にデータを読み込む際に条件に応じてブロードキャスト要求を行い、読み込んだデータをレジスタＲにセットするブロードキャストヒント付きロード命令を処理するブロードキャストヒント付きロード命令実行ユニットＵ１−０と、キャッシュメモリ１０−０にデータを読み込む通常プリフェッチ命令を処理する通常プリフェッチ命令実行ユニットＵ２−０と、キャッシュメモリ１０−０にデータを読み込む際に条件に応じてブロードキャスト要求を行うブロードキャストヒント付きプリフェッチ命令を処理するブロードキャストヒント付きプリフェッチ命令実行ユニットＵ３−０と、その他の命令を実行するその他命令実行ユニットＵ４−０とを備える。
【００７４】
また、キャッシュメモリ１０−０は、読み出し要求バッファ１１−０などを含んでキャッシュメモリ１０−０の書き込みまたは読み出しを管理するキャッシュ制御部２０−０で管理される。また、キャッシュ制御部２０−０は、インターフェース３０−０を介してフロントサイドバス４に接続されており、システム制御部２を介して他のプロセッサや主記憶３へアクセス可能となっている。
【００７５】
＜並列処理へのブロードキャストヒント付き命令の適用＞
上記図７のようにプログラムＰを演算区間毎に分割したプログラムＰ０〜Ｐ２を同一グループ内のプロセッサＣＰＵ−０〜２で並列処理する場合にブロードキャストヒント付きロード命令（またはプリフェッチ命令）を適用する場合を以下に示す。
【００７６】
各並列化プログラムＰ０〜Ｐ２は、変数ｔｍｐに主記憶３のアドレスＳのデータをロードしてから、配列Ｂに変数ｔｍｐを１００回加算するよう記述されている。ここで、変数ｔｍｐは、レジスタ上に領域を確保するものとする。この変数ｔｍｐにアドレスＳのデータをロードする際に、通常ロード命令を使用した場合は次のようになる。
【００７７】
プロセッサＣＰＵ−０〜２は、各キャッシュメモリ１０−０〜３にアドレスＳのデータを読み込んでいないので、前記課題でも述べたように、プロセッサＣＰＵ−０〜２が順次キャッシュミスを引き起こした後、コヒーレンシ要求を行った後に、システム制御部２から主記憶３のアドレスＳのデータを読み込むことになる。このため、３回の主記憶３へのアクセスと、３回のコヒーレンシ要求が発生することになる。
【００７８】
このとき、プロセッサＣＰＵ−０〜ＣＰＵ−２の読み出し要求バッファ１１−０〜２の内容は、図９のように変化する。なお、図９はプロセッサＣＰＵ−０の読み出し要求バッファ１１−０を示し、他のプロセッサの読み出し要求バッファ１１−１〜２も同様である。
【００７９】
図中、プログラムＰ０の開始時刻Ｔ０では、プロセッサＣＰＵ−０が既にアドレスＡの読み出し要求を行っているものとする。そして、時刻Ｔ１でプロセッサＣＰＵ−０がアドレスＳに対して通常ロード命令を実行すると、キャッシュミスが発生する。
【００８０】
上記図２のＳ７の読み出し処理で、プロセッサＣＰＵ−０は読み出し要求バッファ１１−０の空きエントリにアドレスＳと要求番号をセットし、有効フラグを１にセットする。なお、プロセッサＣＰＵ−０は、読み出し要求バッファ１１−０のエントリ数に応じて、−０〜３の要求番号を繰り返して使用するものとする。
【００８１】
そして、時刻Ｔ２でプロセッサＣＰＵ−０が要求したアドレスＳのデータが、システム制御部２から送られると、プロセッサＣＰＵ−０はデータのアドレスがＳであるので、キャッシュメモリ１０−０に当該データを書き込んで、読み出し要求バッファ１１−０の該当アドレスＳのエントリをクリアする。
【００８２】
次に、上記並列処理のプログラムＰ０〜Ｐ２で変数ｔｍｐにアドレスＳのデータをロードする際に、ブロードキャストヒント付きロード命令を使用した場合は、各プロセッサＣＰＵ−０〜ＣＰＵ−２の読み出し要求バッファ１１−０〜２の状態は図１０で示すように変化する。なお、図１０の例では、プロセッサＣＰＵ−１の実行タイミングが、他のプロセッサＣＰＵ−０、２よりも早い場合を示す。
【００８３】
図中、プログラムＰ０〜Ｐ２の開始時刻Ｔ０では、プロセッサＣＰＵ−０が既にアドレスＡの読み出し要求をブロードキャストしていたものとする。そして、時刻Ｔ１ではプロセッサＣＰＵ−１が、他のプロセッサＣＰＵ−０、２よりも先にアドレスＳに対してブロードキャストヒント付きロード命令を実行する。プロセッサＣＰＵ−１はアドレスＳのデータをキャッシュしていないので、キャッシュミスが発生する。
【００８４】
上記図２のＳ８のブロードキャスト処理１で、システム制御部２はコヒーレンシ制御の結果、同一グループ内の他のプロセッサＣＰＵ−０、２が該当データをキャッシュしていないので、返送元を主記憶３と決定する。
【００８５】
時刻Ｔ１では、システム制御部２が、読み出し要求のアドレスＳとプロセッサＣＰＵ−１の要求番号１を各プロセッサＣＰＵ−０〜ＣＰＵ−２にブロードキャストする。各プロセッサＣＰＵ−０〜ＣＰＵ−２は、各読み出し要求バッファ１１−０〜２の空きエントリにアドレスＳと要求番号ＣＰＵ１−０をセットし、有効フラグを１にセットする。
【００８６】
そして、時刻Ｔ２でプロセッサＣＰＵ−１が要求したアドレスＳのデータが、システム制御部２から同一グループ内の全てのプロセッサＣＰＵ−０〜２にブロードキャストされる。
【００８７】
アドレスＳのデータを受信した各プロセッサＣＰＵ−０〜２はデータのアドレスがＳであるので、キャッシュメモリ１０−０〜２に当該データを書き込んで、読み出し要求バッファ１１−０〜２の該当アドレスＳのエントリをクリアする。
【００８８】
そして、各プロセッサＣＰＵ−０〜ＣＰＵ−２は、プログラムＰ０〜Ｐ２の次の演算処理を開始する。
【００８９】
なお、時刻Ｔ２では、プロセッサＣＰＵ−０、２も同一の処理を若干遅れて実行しているため、アドレスＳのデータをキャッシュミスすると、ブロードキャストヒント付きロード命令の要求を読み出し要求バッファ１１−０に登録しようとする。しかし、プロセッサＣＰＵ−０、２では、システム制御部２から送られてきたプロセッサＣＰＵ−１の読み出し要求（アドレスＳ）を読み出し要求バッファ１１−０、２に格納しているため、同一アドレスＳの要求は登録されずに破棄される。
【００９０】
したがって、並列処理にブロードキャストヒント付きロード命令を用いても、同一グループ内のプロセッサＣＰＵ−０〜２が同一のアドレスＳのデータについて競合を生じることはない。
【００９１】
このように、並列処理を行う主記憶共有型マルチプロセッサシステムにおいて、ブロードキャストヒント付きロード命令（またはブロードキャストヒント付きプリフェッチ命令あるいはブロードキャストヒント付きストア命令）を使用することにより、ブロードキャストヒント付き命令がキャッシュミスした場合には、当該キャッシュラインを同一グループ内の全プロセッサでキャッシュするようにブロードキャストが行われるので、前記従来例のように、同一グループ内のプロセッサＣＰＵ−０〜２が、同一のアドレスＳのデータについてコヒーレンシ要求や主記憶３へのアクセスが頻発するのを抑制でき、並列処理の性能を向上させることが可能となるのである。
【００９２】
なお、上記図１０の例では各プロセッサＣＰＵ−０〜ＣＰＵ−２の要求バッファ１１−０〜２に空きエントリが存在したが、空きエントリがない場合には、図１１で示すように、空きエントリが発生するまで、新たなデータ要求は保留される。
【００９３】
図１１において、時刻Ｔ０は、例えば、プロセッサＣＰＵ−０が通常ロード命令またはブロードキャストヒント付きロード命令を実行し、キャッシュミスした時点で読み出し要求バッファ１１−０の全エントリが使用中の状態を示している。そして、時刻Ｔ１では先行するアドレスＣのデータが到着し、キャッシュメモリ１０−０への書き込み後、このアドレスＣのエントリがクリアされ、有効フラグが０にリセットされる。
【００９４】
この後、時刻Ｔ２では、空きエントリが発生したので、プロセッサＣＰＵ−０は保留していた新たな読み出し要求であるアドレスＳを読み出し要求バッファ１１−０に登録し、続く処理を再開する。
【００９５】
このように、読み出し要求バッファ１１−０〜２に空きエントリがない場合には、新たな読み出し要求を保留し、空きエントリが生じるまで待機することで、確実に要求したデータをキャッシュに読み込むことが可能となる。
【００９６】
なお、上記ではブロードキャストヒント付きロード命令について説明したが、ブロードキャストヒント付きプリフェッチ命令はシステム制御部２から転送されたデータをキャッシュメモリ１０−０〜２へ書き込むまでの処理を行えば良く、ブロードキャストヒント付きストア命令は、読み出しに代わって書き込みを行えば良く、上記と同様に処理することができる。
【００９７】
＜第２実施形態＞
図１２、図１３は、第２の実施形態を示し、前記第１実施形態の図２に示したブロードキャストヒント付きロード命令またはブロードキャストヒント付きプリフェッチ命令のブロードキャスト処理１を、ブロードキャスト処理２に置き換えたもので、その他の構成は前記第１実施形態と同様である。
【００９８】
図１２は、図１に示した主記憶共有型マルチプロセッサシステムで実行される処理の一例を示すフローチャートで、図２のフローチャートのうちブロードキャストヒント付きロード命令とブロードキャストヒント付きプリフェッチ命令でキャッシュミスした場合のＳ８、Ｓ１０をそれぞれＳ８ＡとＳ１０Ａで示すブロードキャスト処理２に置き換えたもので、その他の処理は図２と同一である。
【００９９】
本第２実施形態のブロードキャスト処理２は、ブロードキャストヒント付き命令（ロード命令またはプリフェッチ命令）がキャッシュミスした場合には、当該キャッシュラインが同一グループ内の全プロセッサにキャッシュされておらず、主記憶３にアクセスする場合は同一グループ内の全プロセッサに当該キャッシュラインをブロードキャストするが、要求するキャッシュラインが同一グループ内の何れかのプロセッサにキャッシュされている場合には自プロセッサのみにキャッシュするものである。
【０１００】
つまり、前記第１実施形態のブロードキャスト処理１では、キャッシュミスしたときには、常に同一グループ内のプロセッサに対して同一のアドレスのデータ（キャッシュライン）をブロードキャストしていたのに対し、本第２実施形態では、同一グループ内のプロセッサが該当するアドレスをキャッシュしているときにはブロードキャストを行わずに、自プロセッサのみにデータの転送を行ってキャッシュする点が異なるものである。
【０１０１】
図１３は図１２のＳ８Ａ及びＳ１０Ａ（ブロードキャストヒント付きロード命令、ブロードキャストヒント付きプリフェッチ命令）で実行されるブロードキャスト処理２のサブルーチンを示す。なお、以下の説明ではプロセッサＣＰＵ−０がブロードキャストヒント付きロード命令を実行した例を示す。
【０１０２】
ブロードキャストヒント付きロード命令でキャッシュミスしたときのブロードキャスト処理２は、まず、プロセッサＣＰＵ−０が、Ｓ２１で読み出し要求バッファ１１−０に空きエントリがあるかを判定し、空きエントリがあればＳ２２へ進んで、読み出しを要求する主記憶３のアドレスを読み出し要求バッファ１１−０にセットする。ただし、同一のアドレスが既にセットされている場合には、当該要求を破棄し、空きエントリへの書き込みは行わない。これらＳ２１、Ｓ２２の処理は図４に示したＳ５１、Ｓ５２の処理と同一である。
【０１０３】
次にＳ２３ＡではプロセッサＣＰＵ−０がシステム制御部２に対して、主記憶３の所定のアドレスに対する読み出し要求を同一グループ内のプロセッサにも通知するブロードキャスト要求２を発行する。Ｓ２４では、上記図４のＳ５４と同様にシステム制御部２が同一グループ内でのキャッシュメモリのコヒーレンシ制御を実行する。
【０１０４】
次にＳ２５では、上記図４のＳ５５と同様にシステム制御部２は、コヒーレンシ制御の結果、プロセッサＣＰＵ−０が要求したアドレスのデータの返送元を、主記憶３かデータをキャッシュしている他のプロセッサかを決定し、同一グループ内のプロセッサＣＰＵ−０〜２に返送元を通知する。
【０１０５】
次に、Ｓ３０でシステム制御部はデータ返送元が主記憶３と同一グループ内のプロセッサ上のキャッシュメモリの何れであるかを判定する。そして、返送元が主記憶３であればＳ２６Ａに進み、同一グループ内のプロセッサであればＳ３１に進む。
【０１０６】
返送元が主記憶３の場合は、Ｓ２６ＡでプロセッサＣＰＵ−０が要求したブロードキャスト要求２を同一グループ内のプロセッサにブロードキャストする。このブロードキャスト要求を受信した同一グループ内のプロセッサＣＰＵ−１、２は各自の読み出し要求バッファ１１−１、２の空きエントリにブロードキャスト要求２のアドレスと要求番号を設定する。
【０１０７】
続くＳ２７〜Ｓ２９の処理は前記第１実施形態の図５と同様であり、Ｓ２７では、上記決定した返送元からシステム制御部２が該当アドレスのデータを受信する。そして、Ｓ２８ではシステム制御部２は受信したデータを同一グループ内の全てのプロセッサＣＰＵ−０〜ＣＰＵ−２に送信する。Ｓ２９では、システム制御部２からプロセッサＣＰＵ−０が要求したアドレスのデータを受信した同一グループ内のプロセッサＣＰＵ−０〜ＣＰＵ−２のうち、読み出し要求バッファ１１−０〜２に該当アドレスをセットしているプロセッサＣＰＵ−０〜ＣＰＵ−２で、このデータをキャッシュメモリ１０−０〜２に格納する。そして、各プロセッサＣＰＵ−０〜２は、読み出し要求バッファ１１−０〜２の該当するエントリの内容を削除し、有効フラグ１１１を「０」に更新して当該エントリを未使用に変更して処理を終了する。
【０１０８】
こうして、返送元が主記憶３の場合には、同一グループ内の全てのプロセッサにプロセッサＣＰＵ−０が要求したアドレスのデータ（キャッシュライン）がキャッシュされる。
【０１０９】
一方、返送元が主記憶３でない場合のＳ３１では、同一グループ内のプロセッサがシステム制御部２へプロセッサＣＰＵ−０が要求したアドレスのデータを送信する。そしてＳ３２では、システム制御部２が、読み出し要求を行ったプロセッサＣＰＵ−０のみに当該アドレスのデータを送信する。Ｓ３３では、読み出し要求を発行したプロセッサＣＰＵ−０が、システム制御部２から要求したアドレスのデータを受信してキャッシュメモリ１０−０に格納する。その後、プロセッサＣＰＵ−０は、読み出し要求バッファ１１−０の中から当該アドレスのエントリをクリアし、処理を完了する。
【０１１０】
以上のように、本発明の第２の実施形態によれば、ブロードキャストヒント付きロード命令やプリフェッチ命令では、ひとつのプロセッサが要求したアドレスのデータが主記憶３にある場合には、同一グループ内の他のプロセッサも当該データを必要となる時期が近いので、同一グループ内の全てのプロセッサに主記憶３から読み出したデータをブロードキャストし、同一グループ内の全てのプロセッサで当該データをキャッシュする。これにより、複数のプロセッサで並列処理を行う場合には、同一のアドレスのデータを一つの命令で同一グループ内の全てのプロセッサでキャッシュすることができ、ＳＰＭＤ等を並列処理で行う場合の性能を向上させることができる。
【０１１１】
一方、ひとつのプロセッサが要求したアドレスのデータが、同一グループ内の他のプロセッサにキャッシュされている場合には、該当データを保有するプロセッサから要求を発行したプロセッサのみにデータの転送が行われるので、既に該当データを保有するプロセッサへのデータ転送を防ぐことができる。これにより、プロセッサの無駄な処理を抑制して処理性能を向上させることができる。
【０１１２】
以上のように本発明の第２の実施形態によれば、ブロードキャストヒント付きロード命令やブロードキャストヒント付きプリフェッチ命令のときにはキャッシュメモリ１０−０に主記憶３からのデータを読み込むときにのみ全てのプロセッサにブロードキャストするので、データが必要となったプロセッサまたはデータが必要になる時期が近いプロセッサにのみ効率よくデータをキャッシュさせることができ、ＳＰＭＤ等の並列処理の性能を向上させることができる。
【０１１３】
なお、上記ではブロードキャストヒント付きロード命令、プリフェッチ命令について説明したが、ブロードキャストヒント付きストア命令に適用しても良い。
【０１１４】
＜第３実施形態＞
図１４、図１５は、第３の実施形態を示し、前記第１実施形態の図２に示したブロードキャストヒント付きロード命令またはブロードキャストヒント付きプリフェッチ命令のブロードキャスト処理１に加えて、キャッシュヒットした場合にもブロードキャスト処理３を実行するようにしたもので、その他の構成は前記第１実施形態と同様である。
【０１１５】
図１４は、図１に示した主記憶共有型マルチプロセッサシステムで実行される処理の一例を示すフローチャートで、図２のフローチャートのうちブロードキャストヒント付きロード命令でキャッシュヒットした場合には、Ｓ８０、Ｓ１００で示すブロードキャスト処理３を実行するようにしたもので、その他の処理は図２と同一である。
【０１１６】
本第３実施形態は、ブロードキャストヒント付き命令（ロード命令またはプリフェッチ命令）がキャッシュミスした場合には、前記第１実施形態と同様に、同一グループ内の全プロセッサに当該キャッシュラインをブロードキャストし、キャッシュヒットした場合には、ヒットしたデータを同一グループ内の他のプロセッサにブロードキャストしてキャッシュメモリに登録させるようにしたものである。
【０１１７】
つまり、ＳＰＭＤによる並列処理では、あるプロセッサが使用するデータは他のプロセッサが使用する可能性が高いので、同一グループ内の他のプロセッサにキャッシュヒットしたデータをブロードキャストしておくことで、他のプロセッサでキャッシュミスが生じるのを未然に防ぐことができる。なお、Ｓ８０、Ｓ１００の処理は、同一グループ内のいずれかひとつのプロセッサが実行するもので、他のプロセッサは前記第１実施形態の図２と同様の処理を実行する。以下では、プロセッサＣＰＵ−０が図１４の処理を実行する場合を示す。
【０１１８】
図１５は図１４のＳ４またはＳ６でブロードキャストヒント付きロード命令またはブロードキャストヒント付きプリフェッチ命令をプロセッサＣＰＵ−０が実行し、キャッシュヒットしたときに実行されるブロードキャスト処理３のサブルーチンを示す。
【０１１９】
図１５では、まずＳ２３ＢでプロセッサＣＰＵ−０がシステム制御部２へブロードキャスト要求３を発行する。次にＳ２５Ｂでは、システム制御部２が同一グループ内の全てのプロセッサに対してブロードキャスト要求３を発行したプロセッサＣＰＵ−０からデータが転送されることを通知する。
【０１２０】
Ｓ２６Ｂでは、ブロードキャスト要求３を受信した同一グループ内のプロセッサのうち、ブロードキャスト要求３を発行したプロセッサＣＰＵ−０を除くプロセッサＣＰＵ−１、ＣＰＵ−２が読み出し要求バッファ１１−１、２にプロセッサＣＰＵ−０から送られるデータのアドレスと要求番号を空きエントリに登録する。
【０１２１】
次に、Ｓ４０では、ブロードキャスト要求３を発行したプロセッサＣＰＵ−０がシステム制御部２へキャッシュヒットしたデータを送信する。そして、Ｓ２８ではシステム制御部２は受信したデータを同一グループ内の全てのプロセッサＣＰＵ−０〜ＣＰＵ−２に送信する。
【０１２２】
Ｓ２９では、システム制御部２からプロセッサＣＰＵ−０でキャッシュヒットしたアドレスのデータを受信した同一グループ内のプロセッサＣＰＵ−１、２が、このデータをキャッシュメモリ１０−１、２に格納する。そして、各プロセッサＣＰＵ−１、２は、読み出し要求バッファ１１−１、２の該当するエントリの内容を削除し、有効フラグ１１１を「０」に更新して当該エントリを未使用に変更して処理を終了する。
【０１２３】
以上のように、あるプロセッサが使用するデータをキャッシュヒットしたときに、同一グループ内の他のプロセッサに転送しておくことで、ＳＰＭＤによる並列処理では、他のプロセッサもこのキャッシュヒットしたデータを使用する可能性が高いので、他のプロセッサでキャッシュミスが生じるのを防いで、並列処理の性能を向上することができる。
【０１２４】
＜第４実施形態＞
図１６は第４の実施形態を示し、前記第１の実施形態に示した計算機の構成を変更したものである。
【０１２５】
プロセッサＣＰＵ−０’〜３’には、メモリバス５’を介して主記憶３に接続されたシステム制御部１２−０〜３がそれぞれ設けられる。各システム制御部１２−０〜３はそれぞれのプロセッサＣＰＵ−０’〜３’毎に主記憶３へアクセスすることができる。
【０１２６】
また、各システム制御部１２−０〜３同士はクロスバ等の通信機構により相互に接続されており、通信可能となっている。また、プロセッサＣＰＵ−０’〜３’をグループ化するためのシステム分割情報２１’は主記憶３に格納されて、各システム制御部１２−０〜３から参照可能となっている。なお、各プロセッサＣＰＵ−０’〜３’のキャッシュメモリ１０−０〜３及び読み出し要求バッファ１１−０〜３は前記第１実施形態と同様である。
【０１２７】
このように、プロセッサＣＰＵ−０’〜３’にシステム制御部１２−０〜３を各プロセッサＣＰＵ−０’〜３’設けることで主記憶３のアクセスレイテンシを低減し、処理の高速化を図ることができる。
【０１２８】
＜付記＞
なお、上記各実施形態において、キャッシュメモリ１０−０〜３は単一な記憶領域とした例を示したが、Ｌ１キャッシュ、Ｌ２キャッシュ、Ｌ３キャッシュなど複数の階層のキャッシュメモリを備えるプロセッサの場合では、Ｌ２キャッシュやＬ３キャッシュメモリに本発明のブロードキャストヒント付きロード命令、ブロードキャストヒント付きプリフェッチ命令、ブロードキャストヒント付きストア命令を適用することができる。
【０１２９】
また、上記各実施形態においてブロードキャストヒント付きロード命令またはブロードキャストヒント付きプリフェッチ命令のときには、システム制御部が同一グループ内の全てのプロセッサにデータをブロードキャストする例を示したが、ブロードキャスト要求を行ったプロセッサが同一グループ内の他のプロセッサにデータをブロードキャストしても良い。
【産業上の利用可能性】
【０１３０】
以上のように、本発明はＳＰＭＤにより並列処理を行う主記憶共有型マルチプロセッサシステムに適用することができる。
【図面の簡単な説明】
【０１３１】
【図１】第１の実施形態を示し、本発明を適用する主記憶共有型マルチプロセッサシステムの計算機の構成を示すブロック図。
【図２】計算機で実行される処理の一例を示すフローチャート。
【図３】プロセッサの主な構成を示すブロック図。
【図４】読み出し処理の一例を示すフローチャート。
【図５】ブロードキャスト処理１の一例を示すフローチャート。
【図６】システム分割情報の一例を示す説明図。
【図７】ＳＰＭＤによる並列処理のプログラムの説明図。
【図８】読み出し要求バッファの一例を示す説明図。
【図９】通常ロード命令による読み出し要求バッファの状態変化の一例を示す説明図。
【図１０】ブロードキャストヒント付きロード命令による読み出し要求バッファの状態変化の一例を示す説明図。
【図１１】バッファがフルの場合の読み出し要求バッファの状態変化の一例を示す説明図。
【図１２】第２の実施形態を示し、計算機で実行される処理の一例を示すフローチャート。
【図１３】第２の実施形態を示し、ブロードキャスト処理２の一例を示すフローチャート。
【図１４】第３の実施形態を示し、計算機で実行される処理の一例を示すフローチャート。
【図１５】第３の実施形態を示し、ブロードキャスト処理３の一例を示すフローチャート。
【図１６】第４の実施形態を示し、主記憶共有型マルチプロセッサシステムの計算機の構成を示すブロック図。
【符号の説明】
【０１３２】
ＣＰＵ−０〜３  プロセッサ
２  システム制御部
３  主記憶
４  フロントサイドバス４
５  メモリバス
１０−０〜３  キャッシュメモリ
１１−０〜３  読み出し要求バッファ
【図１】
2007207004.tif 000003
【図２】
2007207004.tif 000004
【図３】
2007207004.tif 000005
【図４】
2007207004.tif 000006
【図５】
2007207004.tif 000007
【図６】
2007207004.tif 000008
【図７】
2007207004.tif 000009
【図８】
2007207004.tif 000010
【図９】
2007207004.tif 000011
【図１０】
2007207004.tif 000012
【図１１】
2007207004.tif 000013
【図１２】
2007207004.tif 000014
【図１３】
2007207004.tif 000015
【図１４】
2007207004.tif 000016
【図１５】
2007207004.tif 000017
【図１６】
2007207004.tif 000018