(57)【特許請求の範囲】
【請求項１】
複数のプロセッサと、共有メモリと、前記複数のプロセッサと前記共有メモリを接続するネットワークを有する情報処理装置であって、
各々の前記プロセッサが、
キャッシュと、
前記プロセッサから前記共有メモリに対するアクセスを制御するメモリアクセス制御手段と、
前記共有メモリの無効化要求に基づいて、前記キャッシュの無効化の処理を行う無効化要求制御手段と、を包含し、
前記共有メモリが、データを書き込むリリース側のプロセッサからのデータ書き込みに基づいて、データを読み出すアクワイヤ側のプロセッサの前記無効化要求制御手段に、前記キャッシュの無効化要求を送信し、
前記リリース側のプロセッサの前記メモリアクセス制御手段が、
前記共有メモリに対しストア命令を発行すると加算し、前記共有メモリから前記ストア命令を正しく受信したことを示す工程応答を受信すると減算する、ストア・カウンタと、
前記ストア・カウンタが０になった場合に、所定の時間を示す値を設定し、所定の時間毎に減算し、前記所定の時間が、前記共有メモリが前記無効化要求を送信してから前記アクワイヤ側のプロセッサで前記キャッシュの無効化の処理が完了するまでの時間に比べ、前記共有メモリが前記リリース側のプロセッサの前記ストア命令に対する前記肯定応答を送信し、前記リリース側のプロセッサが前記所定の時間の後に前記共有メモリにフラグを書き込み、前記アクワイヤ側のプロセッサが前記フラグを読み出す時間の方が大きくなるように設定される、待機カウンタと、を有し、
前記ストア・カウンタ、及び、前記待機カウンタが０になった場合、前記アクワイヤ側のプロセッサの前記キャッシュの無効化の完了の保証を要求するストア・フェンス命令を発行し、
前記アクワイヤ側のプロセッサの前記メモリアクセス制御手段が、前記共有メモリからの前記無効化要求に基づいて、前記キャッシュの無効化の処理が完了した後で、前記ストア・フェンス命令に対して、前記キャッシュの無効化の完了を保証するロード・フェンス命令を発行する、情報処理装置。
【請求項２】
前記共有メモリが、複数のバンクから構成され、
各々の前記バンクが、
メモリ本体と、
前記メモリ本体へのデータの書き込みに応じて、前記無効化要求を送信するディレクトリ手段と、を備える、請求項１に記載の情報処理装置。
【請求項３】
共有メモリが、データを書き込むリリース側のプロセッサからのデータ書き込みに基づいて、データを読み出すアクワイヤ側のプロセッサに、キャッシュの無効化要求を送信し、
前記リリース側のプロセッサが、
前記共有メモリに対しストア命令を発行すると加算し、前記共有メモリから前記ストア命令を正しく受信したことを示す工程応答を受信すると減算する、ストア・カウンタと、
前記ストア・カウンタが０になった場合に、所定の時間を示す値を設定し、所定の時間毎に減算し、前記所定の時間が、前記共有メモリが前記無効化要求を送信してから前記アクワイヤ側のプロセッサで前記キャッシュの無効化の処理が完了するまでの時間に比べ、前記共有メモリが前記リリース側のプロセッサの前記ストア命令に対する前記肯定応答を送信し、前記リリース側のプロセッサが前記所定の時間の後に前記共有メモリにフラグを書き込み、前記アクワイヤ側のプロセッサが前記フラグを読み出す時間の方が大きくなるように設定される、待機カウンタと、を有し、
前記ストア・カウンタ、及び、前記待機カウンタが０になった場合、前記アクワイヤ側のプロセッサの前記キャッシュの無効化の完了の保証を要求するストア・フェンス命令を発行し、
前記アクワイヤ側のプロセッサが、前記共有メモリからの前記無効化要求に基づいて、前記キャッシュの無効化の処理が完了した後で、前記ストア・フェンス命令に対して、前記キャッシュの無効化の完了を保証するロード・フェンス命令を発行する、メモリ順序保障方法。
【請求項４】
前記共有メモリが、複数のバンクから構成され、
各々の前記バンクが、前記メモリ本体へのデータの書き込みに応じて、前記無効化要求を送信する、請求項３に記載のメモリ順序保障方法。
【請求項５】
共有メモリが、データを書き込むリリース側のプロセッサからのデータ書き込みに基づいて、データを読み出すアクワイヤ側のプロセッサに、キャッシュの無効化要求を送信する処理と、
前記リリース側のプロセッサが、
前記共有メモリに対しストア命令を発行すると加算し、前記共有メモリから前記ストア命令を正しく受信したことを示す工程応答を受信すると減算する、ストア・カウンタと、
前記ストア・カウンタが０になった場合に、所定の時間を示す値を設定し、所定の時間毎に減算し、前記所定の時間が、前記共有メモリが前記無効化要求を送信してから前記アクワイヤ側のプロセッサで前記キャッシュの無効化の処理が完了するまでの時間に比べ、前記共有メモリが前記リリース側のプロセッサの前記ストア命令に対する前記肯定応答を送信し、前記リリース側のプロセッサが前記所定の時間の後に前記共有メモリにフラグを書き込み、前記アクワイヤ側のプロセッサが前記フラグを読み出す時間の方が大きくなるように設定される、待機カウンタと、を有し、
前記ストア・カウンタ、及び、前記待機カウンタが０になった場合、前記アクワイヤ側のプロセッサの前記キャッシュの無効化の完了の保証を要求するストア・フェンス命令を発行する処理と、
前記アクワイヤ側のプロセッサが、前記共有メモリからの前記無効化要求に基づいて、前記キャッシュの無効化の処理が完了した後で、前記ストア・フェンス命令に対して、前記キャッシュの無効化の完了を保証するロード・フェンス命令を発行する処理と、をコンピュータに実行させるプログラム。
【請求項６】
前記共有メモリが、複数のバンクから構成され、
各々の前記バンクが、前記メモリ本体へのデータの書き込みに応じて、前記無効化要求を送信する処理、を前記コンピュータに実行させる請求項５に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、メモリ順序保障方法、及び、プログラムに関する。
【背景技術】
【０００２】
リリースコンシステンシモデルのメモリ順序保証とは、データの大域可視性（Ｇｌｏｂａｌ  Ｖｉｓｉｂｉｌｉｔｙ）を保証することであり、すなわち、共有メモリとキャッシュとが保持するデータの一貫性を実現するために必要な処理の完了を保証することである。
【０００３】
具体的には、共有メモリとキャッシュとが保持するデータの一貫性（例えば、マルチプロセッサシステムにおいて、各プロセッサが読み書きするメモリのデータに不整合が生じないこと等）を実現するため、共有メモリへデータを書き込むＳｔｏｒｅ命令（ストア命令）に伴って、キャッシュに対し同じデータの無効化を要求する無効化要求が発行される。対象のコンピュータ装置は、発行された無効化要求の処理完了のタイミングを検出することによって、大域可視性を保証する。
【０００４】
特許文献１は、「Ｓｔｏｒｅ  Ｆｅｎｃｅ命令」（以下、ＳｔｏｒｅＦｅｎｃｅ命令（ストア・フェンス命令）と記載）、及び、「Ｌｏａｄ  Ｆｅｎｃｅ命令」（以下、ＬｏａｄＦｅｎｃｅ命令（ロード・フェンス命令）と記載）によって、メモリ順序保証を実現している。ＳｔｏｒｅＦｅｎｃｅ命令は、Ｒｅｌｅａｓｅ側プロセッサ（リリース側プロセッサ）とＡｃｑｕｉｒｅ側プロセッサ（アクワイヤ側プロセッサ）とが同期をとるタイミングを指示する命令である。また、ＬｏａｄＦｅｎｃｅ命令が発行された以降では、共有メモリのデータの順序性が保証されなければならない。すなわち、共有メモリとキャッシュメモリとの一貫性が保証される必要がある。
【０００５】
特許文献２は、共有メモリを有するマルチプロセッサシステムにおいて、ストアの順序保障のために後続のストア命令の実行を待たせる必要のない共有メモリアクセス順序保障方式について記載している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−０４４５９９号公報
【特許文献２】特開２０００−１８１８９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
リリースコンテンシモデルでは、キャッシュの無効化要求の処理順序は問われない。このため、所定のタイミングまでに発行された無効化要求について、最終的に処理が完了している状態を「メモリ順序保証」、あるいは、「データ順序性の保証」と言う場合がある。
【０００８】
共有メモリから無効化要求を受信したＡｃｑｕｉｒｅ側プロセッサでの無効化処理は、ＬｏａｄＦｅｎｃｅ命令の実行より前でなければならない。しかし、無効化処理がＬｏａｄＦｅｎｃｅ命令より後になった場合、データ読み出しは、共有メモリからではなく、Ａｃｑｕｉｒｅ側プロセッサ内のキャッシュメモリから行われてしまう。その結果、データ順序性が保証できなくなる可能性がある。
【０００９】
特許文献１では、ＳｔｏｒｅＦｅｎｃｅ命令（特許文献１ではＲｅｌｅａｓｅ命令）の実行条件に関する記述はないが、Ｒｅｌｅａｓｅ側プロセッサが、メモリからのＡｃｋ（ａｃｋｎｏｗｌｅｄｇｅｍｅｎｔ：肯定応答）でＳｔｏｒｅ命令の完了を検出し、フラグの書き込みでＡｃｑｕｉｒｅ側のプロセッサに知らせる。特許文献１では、Ｌｏａｄ命令によってフラグを読み出した後ＬｏａｄＦｅｎｃｅ命令を全メモリバンクへブロードキャストし、そのリプライを受信することで無効化要求の完了を保証している。また、メモリでは、ＬｏａｄＦｅｎｃｅ命令を受信すると、先行のＳｔｏｒｅ命令による全ての無効化要求をプロセッサに送信後、ＬｏａｄＦｅｎｃｅ命令のリプライをＡｃｑｕｉｒｅ側のプロセッサに送信している。従って、特許文献１には、以下の課題がある。（ａ）メモリバンクにおいてＬｏａｄＦｅｎｃｅ命令は同期処理とは本来関係のない無効化要求も待つ可能性がある。（ｂ）ＬｏａｄＦｅｎｃｅ命令と無効化要求がプロセッサ・メモリ間ネットワークに負荷をかける可能性があり、この傾向はプロセッサ数、メモリバンク数が増えるほど顕著になる。
【００１０】
また、特許文献２は、ストアリクエストが無効化要求（パージリクエスト）を追い越さないように制御するが、無効化要求の処理の完了のタイミングまでは言及していない。
【００１１】
従って、本発明の目的は、上述した課題を解決しつつ、Ａｃｑｕｉｒｅ側プロセッサに対する無効化要求の大域可視性を保証することにある。
【課題を解決するための手段】
【００１２】
本発明の情報処理装置は、複数のプロセッサと、共有メモリと、前記複数のプロセッサと前記共有メモリを接続するネットワークを有する情報処理装置であって、各々の前記プロセッサが、キャッシュと、前記プロセッサから前記共有メモリに対するアクセスを制御するメモリアクセス制御手段と、前記共有メモリの無効化要求に基づいて、前記キャッシュの無効化の処理を行う無効化要求制御手段と、を包含し、前記共有メモリが、データを書き込むリリース側のプロセッサからのデータ書き込みに基づいて、データを読み出すアクワイヤ側のプロセッサの前記無効化要求制御手段に、前記キャッシュの無効化要求を送信し、前記リリース側のプロセッサの前記メモリアクセス制御手段が、前記アクワイヤ側のプロセッサの前記キャッシュの無効化の完了の保証を要求するストア・フェンス命令を発行し、前記アクワイヤ側のプロセッサの前記メモリアクセス制御手段が、前記共有メモリからの前記無効化要求に基づいて、前記キャッシュの無効化の処理が完了した後で、前記ストア・フェンス命令に対して、前記キャッシュの無効化の完了を保証するロード・フェンス命令を発行する。
【００１３】
本発明のメモリ順序保障方法は、共有メモリが、データを書き込むリリース側のプロセッサからのデータ書き込みに基づいて、データを読み出すアクワイヤ側のプロセッサに、キャッシュの無効化要求を送信し、前記リリース側のプロセッサが、前記アクワイヤ側のプロセッサの前記キャッシュの無効化の完了の保証を要求するストア・フェンス命令を発行し、前記アクワイヤ側のプロセッサが、前記共有メモリからの前記無効化要求に基づいて、前記キャッシュの無効化の処理が完了した後で、前記ストア・フェンス命令に対して、前記キャッシュの無効化の完了を保証するロード・フェンス命令を発行する。
【００１４】
本発明のコンピュータプログラムは、共有メモリが、データを書き込むリリース側のプロセッサからのデータ書き込みに基づいて、データを読み出すアクワイヤ側のプロセッサに、キャッシュの無効化要求を送信する処理と、前記リリース側のプロセッサが、前記アクワイヤ側のプロセッサの前記キャッシュの無効化の完了の保証を要求するストア・フェンス命令を発行する処理と、前記アクワイヤ側のプロセッサが、前記共有メモリからの前記無効化要求に基づいて、前記キャッシュの無効化の処理が完了した後で、前記ストア・フェンス命令に対して、前記キャッシュの無効化の完了を保証するロード・フェンス命令を発行する処理と、をコンピュータに実行させる。
【発明の効果】
【００１５】
本発明は、複数のプロセッサで共有されるメモリ（もしくは、共有キャッシュ）を持ち、かつ、コヒーレンス制御にディレクトリ方式を採用するコンピュータアーキテクチャにおいて、リリースコンシステンシモデルに基づくメモリの順序保証を行う際のＡｃｑｕｉｒｅ側プロセッサに対する無効化要求の大域可視性を保証する方式を実現する。
【図面の簡単な説明】
【００１６】
【図１】図１は、リリースコンシステンシモデルのメモリ順序保証を示す図である。
【図２】図２は、本発明の第１の実施形態に係る、情報処理装置の構成の一例を示すブロック図である。
【図３】図３は、本発明の第１の実施形態における情報処理装置を、コンピュータ装置で実現したハードウェア回路を示すブロック図である。
【図４】図４は、本発明の第１の実施形態に係る、情報処理装置の動作の一例を示すタイムチャートである。
【図５】図５は、本発明の第１の実施形態に係る、Ｒｅｌｅａｓｅ側プロセッサのメモリアクセス制御部におけるストア・カウンタと待機カウンタの動作を示すフローチャートである。
【図６】図６は、本発明の第１の実施形態に係る、情報処理装置における命令処理の動作を示したフローチャートである。
【図７】図７は、本発明の第二の実施形態に係る、情報処理装置の構成の一例を示すブロック図である。
【発明を実施するための形態】
【００１７】
発明を実施するための第一の形態について、図面を参照して詳細に説明する。
【００１８】
まず、前提となるリリースコンシステンシモデルについて説明する。
【００１９】
図１は、リリースコンシステンシモデルのメモリ順序保証を示す図である。
【００２０】
図１では、共有メモリ、及び、共有メモリが記憶するデータのキャッシュを有する複数のプロセッサを有する情報処理装置を前提としている。
【００２１】
また、図１において、リリースコンシステンシモデルにおける複数のプロセッサのうちの一つをＲｅｌｅａｓｅ（リリース）側プロセッサ、他の一つをＡｃｑｕｉｒｅ（アクワイヤ）側プロセッサとする。また、図１は、Ｒｅｌｅａｓｅ側とＡｃｑｕｉｒｅ側のプロセッサ間で同期をとる手順を説明している。その同期手順において、Ｒｅｌｅａｓｅ側プロセッサは、ＳｔｏｒｅＦｅｎｃｅ（ストア・フェンス）命令とＳｔｏｒｅ命令（ストア命令：書き込み命令）によるフラグのＡｃｑｕｉｒｅ側プロセッサへの書き込みを実行する。また、Ａｃｑｕｉｒｅ側プロセッサは、Ｌｏａｄ命令によるそのフラグの読み出し後、分岐命令、ＬｏａｄＦｅｎｃｅ（ロード・フェンス）命令を実行する。
【００２２】
ＳｔｏｒｅＦｅｎｃｅ命令は、Ｒｅｌｅａｓｅ側プロセッサとＡｃｑｕｉｒｅ側プロセッサとが同期をとるタイミングを指示する命令である。言い換えれば、ＳｔｏｒｅＦｅｎｃｅ命令は、共有メモリが保持するデータと、プロセッサが備えるキャッシュが保持するデータとの一貫性のため、キャッシュが保持する同じデータの無効化処理の完了を保証することを要求する命令である。従って、Ａｃｑｕｉｒｅ側プロセッサにとって、ＳｔｏｒｅＦｅｎｃｅ命令を検出するタイミングは、データの一貫性の処理完了保証を要求されたタイミングであると言える。
【００２３】
リリースコンシステンシモデルでは、ＳｔｏｒｅＦｅｎｃｅ命令が実行される前のメモリアクセス命令の可視化順序は、必ずしも保証されない。すなわち、メモリアクセス命令、例えば、Ｓｔｏｒｅ命令に伴って発行される無効化要求が処理されるタイミングは、バンク毎に独立して処理されるため、不確定である。従って、他のプロセッサから、メモリアクセス命令を実行した結果が参照できるタイミングは、保証されていないと言える。
【００２４】
Ｒｅｌｅａｓｅ側プロセッサは、同期化を行うＳｔｏｒｅＦｅｎｃｅ命令とそれに続くＳｔｏｒｅ命令の実行をきっかけに、ＳｔｏｒｅＦｅｎｃｅ命令以前の共有メモリへのアクセスの完了を保証する処理を開始する。
【００２５】
具体的に、Ｒｅｌｅａｓｅ側プロセッサは、ＳｔｏｒｅＦｅｎｃｅ命令で、共有メモリへのアクセス命令（特に、Ｓｔｏｒｅ命令）が完了したことを保証し、続くＳｔｏｒｅ命令で、共有メモリの所定の領域に所定のフラグを書き込む。一方、Ａｃｑｕｉｒｅ側プロセッサは、Ｓｔｏｒｅ命令によって共有メモリに書き込まれたフラグを読み出すＬｏａｄ命令（ロード命令：読み出し命令）と分岐命令とを実行することによって待ち合わせを行い（待ち状態）、待ち合わせが完了すると次の処理に進むシーケンスになっている。フラグについては、予め、Ｒｅｌｅａｓｅ側プロセッサとＡｃｑｕｉｒｅ側プロセッサとの間で取り決めてあることを前提とする。また、フラグの書き込み、読み出し先は、共有メモリではなく、同期用に別途レジスタを設け、その同期用のレジスタに対するフラグの書き込み、読み出しでもよい。
【００２６】
フラグの書き込みが検出されると、Ａｃｑｕｉｒｅ側プロセッサは、ＬｏａｄＦｅｎｃｅ命令を発行する。このＬｏａｄＦｅｎｃｅ命令が発行された以降では、Ａｃｑｕｉｒｅ側プロセッサは、共有メモリのデータの順序性を保証しなければならない。すなわち、共有メモリとキャッシュメモリとの一貫性が保証される必要がある。従って、ＬｏａｄＦｅｎｃｅ命令が発行された後の期間（厳密には、ＬｏａｄＦｅｎｃｅ命令の処理完了後の期間）での処理の前提として、ＳｔｏｒｅＦｅｎｃｅ命令が発行される前に要求された無効化要求の処理が完了し、共有メモリのデータ順序性が保証される必要がある。
【００２７】
共有メモリのデータの順序性を保証するために、ＳｔｏｒｅＦｅｎｃｅ命令とＬｏａｄＦｅｎｃｅ命令は、次の３つを実現しなければならない。
【００２８】
（１）ＳｔｏｒｅＦｅｎｃｅ命令は、ＳｔｏｒｅＦｅｎｃｅ命令より前のＳｔｏｒｅ命令の完了を保証すること。
【００２９】
（２）ＬｏａｄＦｅｎｃｅ命令より後続のＬｏａｄ命令が投機的に実行されないこと。すなわち、ＬｏａｄＦｅｎｃｅ命令は、待ち合わせが完了する前の共有メモリへのアクセスを抑止しなければならない。
【００３０】
（３）Ａｃｑｕｉｒｅ側が、ＬｏａｄＦｅｎｃｅ命令の完了時に、ＳｔｏｒｅＦｅｎｃｅ命令以前のＳｔｏｒｅ命令によるＡｃｑｕｉｒｅ側プロセッサに対する無効化要求の完了の保証をすること。
【００３１】
通常、（２）の機能は、プロセッサ内でＬｏａｄ命令がＬｏａｄＦｅｎｃｅ命令を追い越すことを不許可にすることで実現できるため、ここでは述べない。
【００３２】
前述のようにリリースコンシステンシモデルでは、同期化処理であるＬｏａｄＦｅｎｃｅ命令完了時には、無効化要求の完了順序は保証されていなければならない。すなわち、ＳｔｏｒｅＦｅｎｃｅ命令が発行される前に要求されたキャッシュの無効化要求の処理がすべて完了している必要がある。
【００３３】
従って、ＬｏａｄＦｅｎｃｅ命令の完了時には、ＳｔｏｒｅＦｅｎｃｅ命令以前のＳｔｏｒｅ命令による無効化要求が全て完了していることを保証する何らかの機構が必要である。以下の実施形態では、キャッシュの無効化要求の完了を保証する仕組みについて説明する。
【００３４】
図２は、本発明の第１の実施形態に係る情報処理装置１０の構成の一例を示すブロック図である。
【００３５】
図２を参照すると、情報処理装置１０は、複数のプロセッサ１（１Ａ〜１Ｍ）、複数のメモリバンク３（３Ａ〜３Ｎ）により構成される共有メモリ４、及び、プロセッサ１と共有メモリ４を接続するプロセッサ・メモリ間ネットワーク２を有する。ここで、プロセッサ１は、プロセッサ１Ａ、１Ｂ、・・・、１Ｍ（１Ａ〜１Ｍ）のいずれかを示すものであり、メモリバンク３は、メモリバンク３Ａ、３Ｂ、・・・、３Ｎ（３Ａ〜３Ｎ）のいずれかを示すものである。また、各構成要素の符号の付け方のルールは、以下のとおりである。すなわち、プロセッサ１の中の各構成要素の符号には、プロセッサ１の符号に使われている各アルファベットＡ、Ｂ〜Ｍが用いられている。メモリバンク３の中の各構成要素の符号には、メモリバンク３の符号に使われている各アルファベットＡ、Ｂ〜Ｎが用いられている。さらに、アルファベットをつけない番号のみで各構成要素を示す場合、異なるアルファベットをつけた同じ構成要素のうちのいずれかを示すものである。
【００３６】
なお、ここでは、「共有メモリ」としたが、共有キャッシュでも構わない。これには、近年のマルチコア構成のプロセッサ間で共有されるオンチップのキャッシュも含まれる。
【００３７】
最初に、プロセッサ１について説明する。プロセッサ１は、命令制御部１１、Ｌ１（Ｌｅｖｅｌ１）キャッシュ１２、無効化要求制御部１３、及び、メモリアクセス制御部１４を含む。
【００３８】
命令制御部１１は、命令の制御を行う。命令制御部１１は、ＬｏａｄＦｅｎｃｅ命令の後続のロード命令の投機的な実行を抑止する機能を有している。
【００３９】
Ｌ１キャッシュ１２は、プロセッサ１もしくはプロセッサコア毎に設けられる一次キャッシュである。
【００４０】
他のプロセッサ１から共有メモリ４へのＳｔｏｒｅ命令が発行された際、自身のプロセッサ１で同一キャッシュラインを保持している場合、共有メモリ４から、当該キャッシュラインの無効化要求が発行される。プロセッサ１の無効化要求制御部１３は、その無効化要求を受け、Ｌ１キャッシュ１２を無効化する機能を有している。
【００４１】
メモリアクセス制御部１４は、プロセッサ１から共有メモリ４に対するメモリアクセス命令（たとえば、Ｓｔｏｒｅ命令）の発行を制御する機能を有している。また、メモリアクセス制御部１４は、ストア・カウンタと待機カウンタを有し、ＳｔｏｒｅＦｅｎｃｅ命令検出時には、２つのカウンタの値が「０」になるまで、後続のＳｔｏｒｅ命令の実行を抑止する機能を有している。
【００４２】
プロセッサ・メモリ間ネットワーク２は、プロセッサ１と共有メモリ４を接続する機構であるが、接続形態は問わない。
【００４３】
次にメモリバンク３について説明する。メモリバンク３は、共有メモリ４を構成するバンク型メモリであり、各メモリバンク３（３Ａ〜３Ｎ）は、ディレクトリ３１（３１Ａ〜３１Ｎ）、及び、メモリ本体３２（３２Ａ〜３２Ｎ）を含む。
【００４４】
ディレクトリ３１は、Ｌ１キャッシュ１２−共有メモリ４間の一貫性を一元管理する機能を持つ。また、ディレクトリ３１は、メモリ本体３２へのデータの書き込みに応じて、Ｌ１キャッシュ１２の無効化が必要と判断された場合には、無効化が必要なＬ１キャッシュを有する当該プロセッサ１に向けた無効化要求を発行する機能も有する。
【００４５】
メモリ本体３２は、コンピュータシステムにおける一般的なメモリである。
【００４６】
ここで、命令制御部１１、無効化要求制御部１３、及び、メモリアクセス制御部１４は、たとえば、論理回路等のハードウェア回路で構成される。
【００４７】
また、共有メモリ４（各メモリバンク３）は、たとえば、ディスク装置、半導体メモリ等の記憶装置で構成される。
【００４８】
また、情報処理装置１０は、コンピュータ装置によって実現されてもよい。この場合、命令制御部１１、無効化要求制御部１３、及び、メモリアクセス制御部１４は、コンピュータである情報処理装置１０のプロセッサが、図示されないメモリ上のプログラムを実行することで実現されてもよい。プログラムは、不揮発性メモリに格納されてもよい。
【００４９】
図３は、情報処理装置１０を、コンピュータ装置４０で実現したハードウェア回路を示すブロック図である。
【００５０】
図３に示されるように、コンピュータ装置４０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ）４１、メモリ４２、プログラムを格納するハードディスク等の記憶装置４３、およびネットワーク接続用のＩ／Ｆ（Ｉｎｔｅｒｆａｃｅ）４４を含む。また、コンピュータ装置４０は、バス４５を介して入力装置４６および出力装置４７に接続されている。
【００５１】
ＣＰＵ４１は、オペレーティングシステムを動作させてコンピュータ装置４０の全体を制御する。また、ＣＰＵ４１は、例えばドライブ装置などに装着された記録媒体４８からプログラムやデータを読み出し、メモリ４２に格納してもよい。また、ＣＰＵ４１は、図２に示す情報処理装置１０における、命令制御部１１、無効化要求制御部１３、及び、メモリアクセス制御部１４の一部として機能し、プログラムに基づいて各種の処理を実行する。ＣＰＵ４１は、複数のＣＰＵによって構成されてもよい。また、それら複数のＣＰＵは、プロセッサ１Ａ、１Ｂ〜１Ｍであってもよい。
【００５２】
記憶装置４３は、例えば、光ディスク、フレキシブルディスク、磁気光ディスク、外付けハードディスク、または半導体メモリ等である。記憶媒体４８は、不揮発性記憶装置であり、そこにＣＰＵ４１が実行するプログラムを記録する。記憶媒体４８は、記憶装置４３の一部であってもよい。また、プログラムは、通信網に接続されている図示しない外部コンピュータからＩ／Ｆ４４を介してダウンロードされてもよい。記憶装置４３とメモリ４２は、共有メモリ４を構成するものであってもよい。
【００５３】
入力装置４６は、例えばマウスやキーボード、内蔵のキーボタンなどで実現され、入力操作に用いられる。入力装置４６は、マウスやキーボード、内蔵のキーボタンに限らず、例えばタッチパネルでもよい。出力装置４７は、例えばディスプレイで実現され、出力を確認するために用いられる。
【００５４】
以上のように、図２に示す第一の実施の形態における情報処理装置１０に対応するコンピュータ装置４０は、図３に示されるハードウェア構成によって実現される。ただし、コンピュータ装置４０は、図３の構成に限定されない。例えば、入力装置４６、出力装置４７は、インターフェース４４を介して外付けされるものでもよい。
【００５５】
また、コンピュータ装置４０は、物理的に結合した一つの装置により実現されてもよいし、物理的に分離した二つ以上の装置を有線または無線で接続し、これら複数の装置により実現されてもよい。
【００５６】
図４は、情報処理装置１０の動作の一例を示すタイムチャートである。
【００５７】
図４は、Ｒｅｌｅａｓｅ側のプロセッサ１（以下、Ｒｅｌｅａｓｅ側プロセッサと記載）、Ａｃｑｕｉｒｅ側のプロセッサ１（以下、Ａｃｑｕｉｒｅ側プロセッサと記載）、及び、共有メモリ４（以下、メモリと記載）の動作を時系列に記述している。
【００５８】
まず、タイムチャートの説明の前に、カウンタの機能について簡単に説明する。本実施形態では、各プロセッサ１のメモリアクセス制御部１４は同期用の２種類のカウンタ、すなわち、ストア・カウンタと、待機カウンタとを備える。また、メモリから各プロセッサへの無効化要求は、例えば、専用の信号線を用い、無効化処理に掛かる時間の最大値が保証されるものとする。
【００５９】
以下の説明において、各カウンタでの加算、減算の値は、「＋１」「−１」を例に記述しているが、これらの値に限定されず、任意の値を設定してよいものとする。
【００６０】
ストア・カウンタは、メモリアクセス制御部１４がメモリに対しＳｔｏｒｅ命令を発行した時にカウンタの値を「＋１」カウントアップし、メモリからＡｃｋ（Ａｃｋｎｏｗｌｅｄｇｅ）を受信するとカウンタの値を「−１」カウントアップ（「１」カウントダウン）する。メモリは、Ｓｔｏｒｅ命令を受信後、ストアデータのメモリへの反映が確実になった時点、つまり後続の命令に追い越されないことが決定した時点でＳｔｏｒｅ命令の送信元のプロセッサにＡｃｋを返す。このストア・カウンタの値が「０」の場合、そのプロセッサ１が発行したＳｔｏｒｅ命令は、全て完了していることを表す。
【００６１】
待機カウンタは、ストア・カウンタが「１」から「０」になった時に、所定の値（予め定められた値）をセットし、以降カウンタの値が「０」になるまで、所定の単位時間である１サイクル毎に「−１」を加算していく。待機カウンタが「０」になる前に、ストア・カウンタが再び「１」から「０」になった場合には、待機カウンタは、予め定められた値を再度セットする。なお、待機カウンタにセットされる値に関しては、後述する。
【００６２】
Ｒｅｌｅａｓｅ側プロセッサは、ＳｔｏｒｅＦｅｎｃｅ命令を検出した場合、ストア・カウンタと待機カウンタの両方が「０」になるまで待機し、後続のＳｔｏｒｅ命令のメモリへの発行を抑止する。これによって、Ａｃｑｕｉｒｅ側プロセッサでＬｏａｄＦｅｎｃｅ命令実行以前に無効化要求が完了することを保証する。
【００６３】
以下に、図４のタイムチャートを用いて、時系列で情報処理装置１０の動作を示す。なお、下記の説明において、処理ステップ（１）〜（７）は、図４の（１）〜（７）に対応するものとする。また、Ｒｅｌｅａｓｅ側プロセッサの動作は、該当するプロセッサ１のメモリアクセス制御部１４、または、無効化要求制御部１３の動作を示すものとする。同様に、Ａｃｑｕｉｒｅ側プロセッサの動作は、該当するプロセッサ１のメモリアクセス制御部１４、または、無効化要求制御部１３の動作を示すものとする。さらに、メモリの動作は、共有メモリ４の動作を示すものとする。
【００６４】
（１）Ｒｅｌｅａｓｅ側プロセッサが、メモリに対しＳｔｏｒｅ命令を発行する。そして、Ｒｅｌｅａｓｅ側プロセッサが、ストア・カウンタを「＋１」する。
【００６５】
（２）メモリは、ストアデータのメモリへの反映が確実になった時点でＳｔｏｒｅ命令の送信元にＡｃｋを送信する。同時に、メモリは、Ｓｔｏｒｅ命令と同じアドレスのデータを保持するＡｃｑｕｉｒｅ側プロセッサに無効化要求を送信する。Ｒｅｌｅａｓｅ側プロセッサは、Ａｃｋを受信すれば、ストア・カウンタを「−１」する。また、Ｒｅｌｅａｓｅ側プロセッサは、ストア・カウンタが「０」になった場合、待機カウンタに「Ｘ」をセットする。以降、Ｒｅｌｅａｓｅ側プロセッサは、１サイクル毎に待機カウンタを「−１」する。
【００６６】
（３）Ｒｅｌｅａｓｅ側プロセッサは、ＳｔｏｒｅＦｅｎｃｅ命令を検出すれば、ストア・カウンタと待機カウンタの両方が「０」になるまで待機する。
【００６７】
（４）ストア・カウンタと待機カウンタの両方が「０」になれば、Ｒｅｌｅａｓｅ側プロセッサは、後続のＳｔｏｒｅ命令の際にフラグを書き込む。
【００６８】
（５）Ａｃｑｕｉｒｅ側プロセッサは、（４）で書き込まれたフラグを読み出す。
【００６９】
（６）Ａｃｑｕｉｒｅ側プロセッサは、ＬｏａｄＦｅｎｃｅ命令を実行する。
【００７０】
（７）Ａｃｑｕｉｒｅ側プロセッサは、Ｌｏａｄ命令で、（１）でＳｔｏｒｅ命令が書き込んだストアデータを読み出す。
【００７１】
ところで、（２）のメモリからの無効化要求の送信とその無効化要求を受信したＡｃｑｕｉｒｅ側プロセッサでの無効化処理は、（６）のＬｏａｄＦｅｎｃｅ命令の実行より前でなければならない。ＬｏａｄＦｅｎｃｅ命令より後になった場合、（７）のデータ読み出しは、メモリからではなく、Ａｃｑｕｉｒｅ側プロセッサ内のキャッシュメモリから行われてしまう。このため、データ順序性が、保証できなくなってしまう。
【００７２】
よって、ストア・カウンタが「１」から「０」になった時に、待機カウンタにセットする所定の時間を示す値であるＸは、常に以下を満たすようなＸとする。
【００７３】
（（２）でメモリが無効化要求を送信してからＡｃｑｕｉｒｅ側プロセッサでキャッシュが無効化されるまでの時間）＜（（２）でメモリがＡｃｋを送信し、（４）でＲｅｌｅａｓｅ側プロセッサがフラグを書き込み、さらに（５）でＡｃｑｕｉｒｅ側プロセッサがフラグを読み出すのにかかる時間）＋Ｘ
すなわち、次の式（１）である。
Ｘ＝（無効化処理に掛かる時間の最大）−（（２）、（３）、（４）に掛かる時間の最小）  ・・・式（１）
次に、図２に示した情報処理装置１０の動作を図５、及び、図６に示すフローチャートを使用して説明する。
【００７４】
図５は、Ｒｅｌｅａｓｅ側プロセッサのメモリアクセス制御部１４におけるストア・カウンタと待機カウンタの動作を示すフローチャートである。
【００７５】
なお、Ａｃｑｕｉｒｅ側プロセッサでの動作は、命令制御部１１でＬｏａｄＦｅｎｃｅ命令以降の投機のＬｏａｄ命令を抑止するのみである。また、メモリバンク３（共有メモリ４）での動作は、Ｓｔｏｒｅ命令実行時にＡｃｋとディレクトリ３１を検索し無効化要求を送信するのみである。よって、これらの動作は、一般的な処理であるため、ここでは、フローチャートを用いての説明は行わない。
【００７６】
まず、メモリアクセス制御部１４は、待機カウンタが「０」よりも大きければ（ステップＳ１１でＹｅｓ）、待機カウンタの値を「−１」する（ステップＳ１２）。
【００７７】
次に、メモリアクセス制御部１４は、メモリに対しＳｔｏｒｅ命令を発行した場合（ステップＳ１３でＹｅｓ）、ストア・カウンタを「＋１」する（ステップＳ１４）。
【００７８】
メモリからＡｃｋを受信した場合には（ステップＳ１５でＹｅｓ）、メモリアクセス制御部１４は、ストア・カウンタを「−１」し（ステップＳ１６）、さらに、ストア・カウンタの値が「０」になった場合（ステップＳ１７）、待機カウンタに定数「Ｘ」をセットする（ステップＳ１８）。
【００７９】
なお、以上の操作は、１サイクルに１度実施され、１サイクル毎に、待機カウンタの値は「−１」される。
【００８０】
図６は、情報処理装置１０における命令処理の動作を示したフローチャートである。
【００８１】
まず、メモリアクセス制御部１４で検出した命令がＳｔｏｒｅＦｅｎｃｅ命令である場合（ステップＳ２１でＹｅｓ）、さらに、ストア・カウンタと待機カウンタが両方「０」である場合に（ステップＳ２２でＹｅｓ）、ＳｔｏｒｅＦｅｎｃｅ命令の処理は終了となる。しかし、ストア・カウンタか待機カウンタのどちらかが「０」より大きい場合には（Ｓ２２でＮｏ）、メモリアクセス制御部１４は、（ステップＳ２１）に戻り、次のサイクルに同じ処理をする。
【００８２】
以降、メモリアクセス制御部１４は、ストア・カウンタと待機カウンタの両方が「０」になり、ＳｔｏｒｅＦｅｎｃｅ命令の処理が終了するまで同じ操作を繰り返す。
【００８３】
一方、メモリアクセス制御部１４で検出した命令がＳｔｏｒｅ命令である場合（ステップＳ２３）、メモリアクセス制御部１４で処理が終了していないＳｔｏｒｅＦｅｎｃｅがなければ（ステップＳ２４でＹｅｓ）、メモリアクセス制御部１４は、プロセッサ・メモリ間ネットワーク２にＳｔｏｒｅ命令を発行し（ステップＳ２５）、Ｓｔｏｒｅ命令の処理は終了となる。
【００８４】
しかし、メモリアクセス制御部１４で処理が終了していないＳｔｏｒｅＦｅｎｃｅ命令がある場合には（ステップＳ２４でＮｏ）、メモリアクセス制御部１４は、（ステップＳ２１）に戻る。
【００８５】
以降、ストア・カウンタと待機カウンタの両方が「０」になり、ＳｔｏｒｅＦｅｎｃｅ命令の処理が終了するまで、メモリアクセス制御部１４は、同じ操作を繰り返す。
【００８６】
また、メモリアクセス制御部１４で検出した命令がＬｏａｄ命令である場合（ステップＳ２６でＹｅｓ）、メモリアクセス制御部１４は、プロセッサ・メモリ間ネットワーク２にＬｏａｄ命令を発行する（ステップＳ２５）。これにより、Ｌｏａｄ命令の処理は、終了となる。なお、（ステップＳ２６）でＬｏａｄ命令を検出しなかった場合は、メモリアクセス制御部１４は、検出した命令がなかったことを示し、処理を終了する。
【００８７】
本実施形態に係る情報処理装置１０は、以下に記載するような効果を奏する。
【００８８】
メモリの順序保証を行う際のＡｃｑｕｉｒｅ側プロセッサに対する無効化要求の大域可視性を保証する方式を実現することができる。
【００８９】
その理由は、ＬｏａｄＦｅｎｃｅ命令の実行より前に、無効化要求を受信したＡｃｑｕｉｒｅ側プロセッサでの無効化処理が完了するからである。
【００９０】
また、本実施形態では、ＬｏａｄＦｅｎｃｅ命令と無効化要求は、対象のプロセッサ、メモリのみに適用される（特許文献１のように全ての情報をプロセッサ・メモリ間で連絡し合って順序を保証する代わりに、時間的に確実なタイミングで処理を行い、順序を保証する）ため、（ａ）特許文献１のような「同期処理とは本来関係のない無効化要求も待つ」状態は発生しにくくなる。また、（ｂ）特許文献１に比べて、プロセッサ・メモリ間ネットワークへの負荷は低い。
＜第二の実施形態＞
次に、本発明を実施するための第二の形態について図面を参照して詳細に説明する。
【００９１】
図７は、第二の実施形態に係る、情報処理装置５０の構成の一例を示すブロック図である。
【００９２】
情報処理装置５０は、プロセッサ５１（５１Ａ〜５１Ｍ）、共有メモリ５３、及び、プロセッサ５１と共有メモリ５３を接続するプロセッサ・メモリ間ネットワーク５２を有する。なお、各構成要素の符号の付け方のルールは、第１の実施形態と同様である。
【００９３】
各々のプロセッサ５１が、キャッシュ５１０と、プロセッサ５１から共有メモリ５３に対するアクセスを制御するメモリアクセス制御部５１２と、共有メモリ５３の無効化要求に基づいて、キャッシュ５１０の無効化の処理を行う無効化要求制御部５１１と、を包含する。以下の説明では、リリース側のプロセッサがプロセッサ５１Ａである、アクワイヤ側のプロセッサがプロセッサ５１Ｂとして説明する。ただし、これに限定されず、アクワイヤ側のプロセッサの数は、複数であってもよい。
【００９４】
共有メモリ５３が、データを書き込むリリース側のプロセッサ５１Ａからのデータ書き込みに基づいて、データを読み出すアクワイヤ側のプロセッサ５１Ｂの無効化要求制御部５１１Ｂに、キャッシュ５１０Ｂの無効化要求を送信する。
【００９５】
リリース側のプロセッサ５１Ａのメモリアクセス制御部５１１Ａが、アクワイヤ側のプロセッサ５１Ｂにおけるキャッシュ５１０Ｂの無効化の完了の保証を要求するストア・フェンス命令を発行する。ストア・フェンス命令は、ネットワーク５２に送出される。
【００９６】
アクワイヤ側のプロセッサ５１Ｂのメモリアクセス制御部５１２が、共有メモリ５３からの無効化要求に基づいて、キャッシュ５１０Ｂの無効化の処理が完了した後で、ストア・フェンス命令に対して、その無効化の完了を保証するロード・フェンス命令を発行する。ロード・フェンス命令は、ネットワーク５２に送出される。
【００９７】
本実施形態に係る情報処理装置５０は、以下に記載するような効果を奏する。
【００９８】
メモリの順序保証を行う際のアクワイヤ（Ａｃｑｕｉｒｅ）側プロセッサに対する無効化要求の大域可視性を保証する方式を実現することができる。
【００９９】
その理由は、ロード・フェンス（ＬｏａｄＦｅｎｃｅ）命令の実行より前に、無効化要求を受信したＡｃｑｕｉｒｅ側プロセッサでの無効化処理が完了するからである。
【０１００】
以上、図面を参照して本発明の実施形態を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【０１０１】
１    プロセッサ
１０    情報処理装置
１１    命令制御部
１２    Ｌ１キャッシュ
１３    無効化要求制御部
１４    メモリアクセス制御部
２    プロセッサ・メモリ間ネットワーク
３    メモリバンク
３１    ディレクトリ
３２    メモリ本体
４    共有メモリ
４０    コンピュータ装置
５０    情報処理装置
５１    プロセッサ
５１０    キャッシュ
５１１    無効化要求制御部
５１２    メモリアクセス制御部
５２    プロセッサ・メモリ間ネットワーク
５３    共有メモリ
【要約】      （修正有）【課題】Ａｃｑｕｉｒｅ側プロセッサに対する無効化要求の大域可視性を保証する情報処理装置を提供する。【解決手段】情報処理装置１０は、複数のプロセッサ１と、共有メモリ４と、を有する。共有メモリが、データを書き込むリリース側のプロセッサからのデータ書き込みに基づいて、データを読み出すアクワイヤ側のプロセッサの無効化要求制御手段１３に、キャッシュの無効化要求を送信する。リリース側のプロセッサのメモリアクセス制御手段１４が、アクワイヤ側のプロセッサのキャッシュの無効化の完了の保証を要求するストア・フェンス命令を発行する。アクワイヤ側のプロセッサのメモリアクセス制御手段が、共有メモリからの無効化要求に基づいて、キャッシュの無効化の処理が完了した後で、ストア・フェンス命令に対して、キャッシュの無効化の完了を保証するロード・フェンス命令を発行する。【選択図】図２【図１】
0005811245.tif 000002
【図２】
0005811245.tif 000003
【図３】
0005811245.tif 000004
【図４】
0005811245.tif 000005
【図５】
0005811245.tif 000006
【図６】
0005811245.tif 000007
【図７】
0005811245.tif 000008