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