(57)【特許請求の範囲】
【請求項１】
マルチプロセッサシステムにおいてデータにアクセスする方法であって、
前記マルチプロセッサシステムは、複数のプロセッサ、キャッシュメモリ管理モジュー
ル、メインメモリ及びメインメモリ管理モジュールを含み、各プロセッサは対応するキャ
ッシュメモリと関連付けられ、
前記方法は、
一のプロセッサがデータにアクセスするための最初のリクエストを、前記キャッシュメ
モリ管理モジュールによって受信する工程と、
前記データに関する少なくとも第１リクエストを、前記キャッシュメモリ管理モジュールによって、前記複数のプロセッサのうち前記一のプロセッサ以外のプロセッサのそれぞれに対応するキャッシュメモリに送信する第１送信工程と、
前記データに関する少なくとも第２リクエストを、前記キャッシュメモリ管理モジュー
ルによって、前記メインメモリ管理モジュールへと、前記第１送信工程と並行して送信す
る第２送信工程と、
前記メインメモリ管理モジュールによって、前記メインメモリへのクエリを開始するか
否かをチェックする工程と、
前記チェックする工程に従って、前記メインメモリ管理モジュールによって、前記メイ
ンメモリのクエリを行う又は行わない工程と、を備える方法。
【請求項２】
前記データが前記メインメモリにおいて利用不可能である場合には、前記メインメモリ
管理モジュールによって、前記第２リクエストを却下する工程を更に備える、請求項１に
記載の方法。
【請求項３】
前記データが、前記マルチプロセッサシステムの少なくとも一つのキャッシュメモリにおいて利用可能であると判断された場合には、前記メインメモリ管理モジュールによって、前記第２リクエ
ストが却下される、請求項１に記載の方法。
【請求項４】
前記キャッシュメモリ管理モジュールは更に、前記第１リクエストに応じて、前記少な
くとも一つのキャッシュメモリから前記データを取得するのを待つ、請求項３に記載の方
法。
【請求項５】
複数のプロセッサによる前記データへのアクセスの競合が検出された場合には、前記メ
インメモリ管理モジュールによって、前記第２リクエストが却下される、請求項２に記載
の方法。
【請求項６】
ディレクトリを使用したキャッシュメモリ管理が前記マルチプロセッサシステムに実装され、
前記チェックする工程は、キャッシュメモリ内のデータのステータスのディレクトリを
参照する工程を有する、請求項１に記載の方法。
【請求項７】
前記キャッシュメモリ管理モジュールからの前記第２リクエストの確認を、前記メイン
メモリ管理モジュールによって受信する工程を更に備える、請求項１に記載の方法。
【請求項８】
前記確認に応じて、前記メインメモリへのクエリを開始する工程を更に備える、請求項７に記載の方法。
【請求項９】
前記確認に応じて、前記最初のリクエストに対する終了メッセージを、前記キャッシュ
メモリ管理モジュールへと送信する工程を更に備える、請求項７に記載の方法。
【請求項１０】
マルチプロセッサシステムであって、
それぞれがキャッシュメモリと関連付けられた複数のプロセッサと、
キャッシュメモリ管理モジュールと、
メインメモリと、
メインメモリ管理モジュールと、を備え、
前記マルチプロセッサシステムにおいてデータにアクセスするために、
前記キャッシュメモリ管理モジュールは、一のプロセッサがデータにアクセスすること
に関する最初のリクエストを受信し、前記データに関する少なくとも第１リクエストを、
前記複数のプロセッサのうち前記一のプロセッサ以外のプロセッサのそれぞれに対応するキャッシュメモリに送信する第１送信工程と、前記データに関する少なくとも第２リクエストを、前記メインメモリ管理モジュールへと、前記第１送信工程と並行して送信する第２送信工程とを実行するように構成され、
前記メインメモリ管理モジュールは、前記メインメモリへのクエリをトリガするか又は
しないかのチェックを実行し、当該チェックに従って前記メインメモリへのクエリを行う
又は行わないように構成される、マルチプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願の相互参照］
本出願は、２０１４年５月２７日出願の仏国特許出願第1454792号に基づく優先権を主張するものであり、こその内容は、参照により全体として本明細書に組み込まれる。
【０００２】
本発明は、マルチプロセッサコンピュータシステムのキャッシュメモリの管理に関する。
【背景技術】
【０００３】
マルチプロセッサコンピュータシステムでは、各プロセッサは、実行すべき命令を指すメモリアドレスのようなコンピュータデータを格納する自身のメモリキャッシュを有する。並行に動作する複数のプロセッサは、このようなデータの一部を共有する。したがって、複数のプロセッサが、同一の読み出しデータ又は書き込みデータにアクセスしたり、場合によっては、これらデータを修正したり、コンピュータプログラムを実行したりする場合がある。
【０００４】
複数のプロセッサが使用するデータの更新を確実にするべく、「キャッシュコヒーレンス」アルゴリズムが実装されており、２つのプロセッサが同じデータの異なる２つのバージョンを処理することを防いでいる。ＭＥＳＩアルゴリズムは、このようなアルゴリズムの一例である。
【０００５】
キャッシュコヒーレンスアルゴリズムを実装するには、複数のプロセッサが如何なる時点においてもデータのロケーションを知ることを可能にするべく、これら複数のプロセッサ間で多量の通信を行う必要がある。これは、データが位置するキャッシュメモリのＩＤとデータのステータスを判断することを伴う。
【０００６】
キャッシュメモリ内のデータのステータスは、使用するプロトコルに依存する。上記で挙げたＭＥＳＩプロトコルの例では、データが一つのキャッシュにのみ存在し、非キャッシュメモリに（当該データの最初の出所）に存在するデータと比較して変更が加えられている場合には、当該データは「変更（ｍｏｄｉｆｉｅｄ）」ステータス（「ｍｏｄｉｆｉｅｄ」を表すＭ）を有する。この場合、当該データにアクセスすることを望むプロセッサは、メモリ内のバージョンと一致する状態となるまで待たなければならない。同じ例において、データが１つのキャッシュメモリにのみ存在し、非キャッシュメモリに存在するバージョンと対応している場合には、「排他（ｅｘｃｌｕｓｉｖｅ）」（「ｅｘｃｌｕｓｉｖｅ」を表すＥ）ステータスを有する。データが複数のキャッシュメモリに存在する場合には、「共有（ｓｈａｒｅｄ）」（「ｓｈａｒｅｄ」を表すＥ）ステータスを有する。データが古い場合には、当該データは「無効（ｉｎｖａｌｉｄ）」（「ｉｎｖａｌｉｄ」を表すＩ）ステータスを有する。プロセッサは、無効ステータスのデータを無視し、使用しない。
【０００７】
他のプロトコルは、上記のように規定されたステータス数よりも多い又は少ないステータスを有する。例えば、ＭＳＩプロトコルは、上記で規定されたＭ、Ｓ及びＩの３つのステータスのみを有し、ＭＯＥＳＩプロトコルでは、「所有（ｏｗｎｅｄ）」ステータス（「ｏｗｎｅｄ」を表すＯ）が追加され、これは、データは最新のバージョンであるが、当該データの出所の非キャッシュメモリが古いことを意味する。
【０００８】
キャッシュコヒーレンスプロトコルの多くは、各データに対して行われたリクエストの履歴を反映したリスト又はディレクトリを実装する。この種のプロトコルは、「ディレクトリベース」と称される。
【０００９】
各プロセッサは、登録されているデータが格納されているプロセッサ及び当該データのステータスを示すべく、キャッシュメモリの各ラインのリストを保持する。このリストは、当該リストが収容する情報に関しては、おおよそ完全であると考えられる。
【００１０】
このリストを使用することにより、複数のプロセッサ内のデータに関して、複数のプロセッサからのリクエストの履歴を保持することが可能になる。特に、例えば、データを扱っていないプロセッサのキャッシュに対してクエリを行うことを避けるなど、キャッシュのクエリをフィルタすることが可能になる。また、プロセッサのリストに特定のデータが存在しない場合には、当該データがプロセッサによって使用されておらず、メインメモリに格納されていない（キャッシュされていない）ことから、最新のデータであることが推察される。
【００１１】
図１には、マルチプロセッサシステムが概略的に示されている。
【００１２】
システムは、４つのモジュール１００、１１０、１２０、１３０を備える。各モジュールは、複数のプロセッサを有する。モジュール１００は、２つのプロセッサ１０１及び１０２を有する。モジュール１１０は、２つのプロセッサ１１１及び１１２を有する。モジュール１２０は、２つのプロセッサ１２１及び１２２を有する。モジュール１３０は、２つのプロセッサ１３１及び１３２を有する。各プロセッサは、それぞれのキャッシュメモリを有する。これらキャッシュメモリは図示されていない。
【００１３】
図示したシステムにおける複数のモジュール及びモジュール内の複数のプロセッサは、一例に過ぎない。モジュールは、異なる数のプロセッサを有してもよい。
【００１４】
複数のプロセッサ間の通信を管理するため、特に、キャッシュコヒーレンスを管理するために、各モジュール１００、１１０、１２０、１３０は、それぞれプロキシモジュール１０３、１１３、１２３、１３３を有する。図示を簡単にするべく、プロキシモジュール間の接続は省略されている。
【００１５】
図示の例の場合、各プロセッサは、他のプロセッサと通信を行う一つのインターフェースを有する。すなわち、各プロセッサは、一度に、一つの他のプロセッサからのみアドレス指定される。具体的には、プロキシモジュールが、それぞれのプロセッサモジュールに代わって、ディレクトリを保持する。
【００１６】
システム内のプロセッサの数が多い場合には、プロキシモジュールを使用することが望ましい。
【００１７】
更に、システムは、メインメモリモジュール１４０を備える。メインメモリモジュールモジュールは、持続可能な態様でデータを格納する。プロセッサによって操作されるデータ及びキャッシュメモリに一時的に格納される元のデータが取り出されるのは、このメモリからである。また、メインメモリモジュール１４０は、データにアクセスをリクエストしたプロセッサ及び当該データの一覧を示すディレクトリを保持する。図示を簡略化するために、モジュール１４０がモジュール１００、１１０、１２０及び１３０とは別個に示されているが、メインメモリモジュール１４０は、モジュール１００、１１０、１２０及び１３０内に分配されてもよい。この場合、これらモジュールはそれぞれ、メインメモリの一部を収容していることになる。メインメモリモジュール１４０は、システム内に物理的に分配された共有仮想メモリ空間である。
【００１８】
マルチプロセッサシステムの性能は、プロキシモジュールがシステム内のキャッシュメモリ又はメインメモリにデータを素早く見つけることができる能力に一部依存している。
【発明の概要】
【発明が解決しようとする課題】
【００１９】
マルチプロセッサシステムにおいて、データ検索にかかる時間を更に短縮したいという要求が存在する。本発明の一側面は、このような課題を解決しようとするものである。
【課題を解決するための手段】
【００２０】
本発明の第１の態様は、マルチプロセッサシステムにおいてデータにアクセスする方法を提供する。前記マルチプロセッサシステムは、複数のプロセッサ、キャッシュメモリ管理モジュール、メインメモリ及びメインメモリ管理モジュールを含み、各プロセッサは対応するキャッシュメモリと関連付けられる。方法は、一のプロセッサがデータにアクセスすることに関する最初のリクエストを、前記キャッシュメモリ管理モジュールによって受信する工程と、前記データに関する少なくとも第１リクエストを、前記キャッシュメモリ管理モジュールにより、少なくとも一つのキャッシュメモリに送信する第１送信工程と、前記データに関する少なくとも第２リクエストを、前記キャッシュメモリ管理モジュールによって、前記メインメモリ管理モジュールへと、前記第１送信工程と並行して送信する第２送信工程と、前記メインメモリ管理モジュールにより、前記メインメモリへの問い合わせを開始するか否かをチェックする工程と、前記チェックする工程に従って、前記メインメモリ管理モジュールにより、前記メインメモリのクエリを行う又は行わない工程とを備える。
【００２１】
上記の第１の態様に係る方法によれば、キャッシュメモリ又はメインメモリの何れかからデータを取得するために、クエリを並行して行うことが可能になる。
【００２２】
この場合、メインメモリにクエリを行う際に、キャッシュメモリにデータが存在しないことを知るのを待たないことから、データの取得をスピードアップすることができる。
【００２３】
加えて、上記の第１の態様に係る方法によれば、メインメモリの投機的読み出しは応答を受信することから、マルチプロセッサシステムにおけるメモリクエリプロトコルを単純化することができる。別のリクエストを使用して、リクエストへの応答がないことを確かめる必要はない。
【００２４】
方法は、また、メインメモリ内のデータが利用不可能である場合には、メインメモリ管理モジュールにより、第２リクエストを却下することを含む。例えば、前記データが、前記システムの少なくとも一つのキャッシュメモリにおいて利用可能であると判断された場合には、前記メインメモリ管理モジュールにより、前記第２リクエストが却下される。
【００２５】
別の例において、キャッシュメモリ管理モジュールは更に、第１リクエストに応じて、前記少なくとも一つのキャッシュメモリから前記データを取得するのを待つモードになる。
【００２６】
一実施形態によれば、複数のプロセッサによる前記データへのアクセスの競合が検出された場合には、前記メインメモリ管理モジュールにより、前記第２リクエストが却下される。
【００２７】
例えば、ディレクトリを使用したキャッシュメモリ管理をシステムに実装して、検証過程は、キャッシュメモリ内のデータのステータスのディレクトリを参照することを含む。
【００２８】
前記方法は、前記キャッシュメモリ管理モジュールから、前記第２リクエストの確認を、前記メインメモリ管理モジュールによって受信する工程を更に備える。
【００２９】
前記方法は、前記確認に応じて、前記メインメモリモジュールへのクエリを開始する工程を更に備える。
【００３０】
前記方法は、前記確認に応じて、前記最初のリクエストを終了させるメッセージを、前記キャッシュメモリ管理モジュールへと送信する工程を更に備える。
【００３１】
本発明の第２の態様は、上記の第１の態様に係る方法を実装するように構成されたマルチプロセッサシステムに関する。
【００３２】
本発明の第２の態様によれば、第１の態様によって提供される利点と同様な利点を少なくとも一部、様々な実施形態において提供する。
【００３３】
本発明のその他の特徴及び利点が、以下の詳細な説明を読むことにより、非制限的な例及び添付の図面から明らかとなるであろう。
【図面の簡単な説明】
【００３４】
【図１】マルチプロセッサシステムが概略的に示されている。
【図２】一実施形態に係るシステムが示されている。
【図３】システムの様々な要素間のインタラクションを例示した図である。
【発明を実施するための形態】
【００３５】
本発明の様々な実施形態について以下に説明する。特に、プロセッサモジュールのキャッシュメモリ管理モジュール（例えば、プロキシモジュール）が、マルチプロセッサシステムのメモリ（キャッシュメモリ又はメインメモリ）内のデータのロケーションを素早く見つけることを可能とするメッセージの交換について説明する。
【００３６】
図２は、マルチプロセッサシステムにおける様々な実施形態の実装の一般的な状態を示している。
【００３７】
プロセッサモジュール２００は、複数の物理的なプロセッサ２０１、２０２を備える。図示の例では、プロセッサモジュール２００は、２つのプロセッサを備えるが、その他の数のプロセッサを備えてもよい。
【００３８】
各プロセッサは、キャッシュメモリ（図示せず）と関連付けられる。メモリは、「機械記憶媒体」と広く称することもできる。プロセッサモジュール２００はまた、キャッシュメモリを管理する、特に、キャッシュメモリのコンテンツのコヒーレンスを管理する、キャッシュメモリ管理モジュール２０３を有する。キャッシュメモリ管理モジュール２０３は、例えば、キャッシュコヒーレンス管理を実装する。
【００３９】
簡略化のために、図示の例では、マルチプロセッサシステムは、１つのプロセッサモジュールを備えるとしている。しかしながら、マルチプロセッサシステムは、全く異なる数のプロセッサモジュールを備えることができることは明らかである。
【００４０】
マルチプロセッサシステムはまた、メインメモリモジュール２０４（キャッシュではない）を備える。メインメモリモジュールは、データを格納するメインメモリ２０５及びメインメモリ管理モジュール２０６を含む。図示を簡略化するために、メインメモリモジュール２０４がプロセッサモジュール２００とは別個に示されているが、メインメモリモジュールは、プロセッサモジュール内に設けられてもよい。この場合、これらモジュールはそれぞれ、メインメモリの一部を収容していることになる。したがって、メインメモリモジュール２０４は、システム内に物理的に分配された共有仮想メモリ空間である。
【００４１】
プロセッサ２０１（又は別のプロセッサモジュール２００）の最初のリクエストに続いて、キャッシュメモリ管理モジュール２０３が特定のデータの取得を望む場合、キャッシュメモリ管理モジュール２０３は、当該データに関してメインメモリ管理モジュール２０６に対してリクエストを送信する。最初のリクエストは、例えば、プロセッサによるメモリアドレスの参照をキャッシュメモリに送信した後で行われる。このクエリが満たされない、すなわち、当該メモリアドレスに対応するメモリブロックがキャッシュにない場合（これは、メモリブロックが存在する場合の「ヒット」の反対で「ミス」と称される）、プロセッサは、メインメモリ内の当該メモリブロックを取得する最初のリクエストを送信する。プロセッサのクエリは、データを変更する意図があるかないかに関わらず、データの呼び出しに関するものであってもよい。
【００４２】
キャッシュメモリ管理モジュール２０３は、モジュールが属するプロセッサモジュール２００のキャッシュメモリに対象のデータが存在するか否か、又は、別のプロセッサモジュールのキャッシュメモリに存在するか否か、をまだチェックしていないが、キャッシュメモリ管理モジュール２０３はこのリクエストを送信する。したがって、モジュール２０３からのモジュール２０６に対するリクエストは、「投機的（ｓｐｅｃｕｌａｔｉｖｅ）」である。このリクエストを、「事前リクエスト」と称することもできる。
【００４３】
モジュール２０６がリクエストの投機的な性質を特定するために、特別なコードを規定して当該リクエストに関連付けしてもよい。モジュール２０６は、以下に説明するように、投機的なリクエストに関連する処理を実装してもよい。
【００４４】
例えば、モジュール２０６は、データのステータスに関する情報（例えば、上記したＭＥＳＩプロトコルのステータスのような情報）と、プロトコルエージェントのリストに関する情報、特に、それぞれのキャッシュメモリにコピーを所有するプロセッサについての情報を提供するモジュール２０５に格納されている全てのデータについてのディレクトリを有してもよい。情報は、実装されるメモリ管理プロトコルに応じた詳細度であってもよい。プロトコルエージェントは、複数のプロセッサ及びプロキシ、並びに、メインメモリ内のデータにアクセスするリクエストを送信する立場にあるその他のエンティティを対象の範囲とする。プロトコルエージェントの階層構造において、プロセッサはリクエストの源（すなわち、データを使用する）である末端エージェントであり、プロキシはメインメモリにおいてプロセッサを代理することから中間エージェントである。
【００４５】
モジュール２０６が投機的リクエストを受信すると、モジュール２０６は自身のディレクトリを参照して、システム内のキャッシュメモリ内のデータのステータスをチェックする。
【００４６】
このディレクトリ情報により、データがキャッシュメモリに存在しない、又は、データが当該リクエストに適合するステータスを有する（例えば、ＭＥＳＩプロトコルで規定されるようなステータス）と判断できた場合には、モジュール２０６は、投機的リクエストを通常の態様で処理する、すなわち、投機的リクエストでないかのように処理する。通常のリクエストでは、モジュール２０３が自身のキャッシュメモリを参照した後にのみリクエストが送信される、すなわち、データがキャッシュメモリに存在しないと分かった後でのみリクエストが送信される。そして、モジュール２０６が受け付けたリクエストは、キャッシュメモリコヒーレンスプロトコルに規定される通常の処理に従う。
【００４７】
ディレクトリ情報により、データがキャッシュメモリに存在し、リクエストに適合するステータスを有すると判断できた場合には、モジュール２０６は、投機的リクエストの処理を開始しない。
【００４８】
モジュール２０６が、投機的リクエストの対象であるデータに対する別の現在のリクエストとの競合（コンフリクト）を検出した場合には、ディレクトリによって提供される情報が如何なるものであろうとも、このリクエストに対して応答を行わなくてもよい。２つのプロトコルエージェント（プロセッサ、プロキシ）がそれぞれ、同じメモリアドレスにリクエストを送信した場合に、競合が発生する。例えば、２つのプロセッサが同じデータに対して変更を加えたいと望む場合、データのコヒーレンスが失われてしまうのを防ぐために、連続して変更を加えるようにすべきである。
【００４９】
全ての場合において、モジュール２０６は、投機的リクエストが処理されたことをモジュール２０３に通知するべく、メッセージを送信する。
【００５０】
このメッセージは、モジュール２０６による、投機的リクエストの結果（通常処理又は処理の終了）を示す情報を含んでもよい。この情報により、モジュール２０３によって実行される次の処理の条件を決定してもよい。
【００５１】
投機的リクエストの送信と並行して、モジュール２０３は、システムのキャッシュメモリの参照を通常の態様で開始する。参照が終了すると、モジュール２０３は、投機的リクエストの処理の終了を示すモジュール２０６からの応答を待つ。参照は、一般的に、モジュール２０６に対するクエリよりも短い時間で行われる。しかしながら、参照の方が長く掛かり、モジュール２０３が参照を終了する前にモジュール２０６から応答を受信した場合は、参照が終了するまで待つ。この２つの条件（参照の終了と、モジュール２０６からの応答受信）が満たされない限り、モジュール２０３が、最初にプロセッサ２０１から受信したリクエストの処理の続きを行わない。加えて、同じプロセッサ２０１から又はプロセッサモジュールの別のプロセッサからの、同じデータに対する他のリクエストの処理についても開始しない。
【００５２】
キャッシュメモリの参照の結果により、モジュール２０６は、次に実行するべき処理を決定することができる。
【００５３】
キャッシュメモリに、最初のリクエストに適合するステータスを有するデータが存在する場合には、モジュール２０３は、その投機的リクエストに対して応答を行わない。ディレクトリを介してこの情報を有するモジュール２０６も、当該投機的リクエストに対するアクションを起こさない。このようにシステム全体において、当該投機的リクエストが完全に終了する。
【００５４】
キャッシュメモリにデータが存在しない、又は、データが最初のリクエストに適合するステータスを有さない場合には、モジュール２０６からの応答は、次の処理を決定するための情報を含んでもよい。
【００５５】
例えば、モジュール２０６は、自身の応答に、投機的リクエストに関してとったアクションを示す情報を含める。例えば、応答は、データの提供又は不提供、対処すべきコンフリクトの可能性等を示す情報を含む。モジュール２０６が投機的リクエストの処理を続ける場合には、モジュール２０３は、データを待たなければならない。モジュール２０６が投機的リクエストの処理を継続していない場合には、モジュール２０３は、データを取得するために、処理の確認通知を送信する。この処理の確認通知は、例えば、投機的リクエストに最初に含まれていた情報をモジュール２０６が保持していない場合に、モジュール２０６が投機的リクエストを処理するのに必要な情報を含む。したがって、これは、投機的リクエストの繰り返しとなる。処理の確認通知に含まれる情報は、例えば、データをリクエストしているエンティティのＩＤ、リクエスト番号、リクエストされたアドレスの番号、又は、その他の情報を含んでもよい。
【００５６】
別の例として、モジュール２０６は、投機的リクエストに関してどのようなアクションをとったかを示す情報を、自身の応答に含めない。この場合、モジュール２０３は、投機的リクエストの処理の確認通知をモジュール２０６に送信する。処理の確認通知は、モジュール２０６がアクションをとらずに投機的リクエストの処理を終了し、関連する情報を保持していない場合に、モジュール２０６がリクエストを処理するのに必要となる情報を含んでもよい。モジュール２０６が投機的リクエストの処理を継続する場合は、いずれにせよ、モジュール２０６はモジュール２０３からの確認を待ち、当該確認を受信するまで投機的リクエストの処理を終了させない。
【００５７】
上記した全ての場合において、この時点以降は、投機的リクエストに対して、キャッシュメモリ管理モジュールによって実装されるキャッシュコヒーレンスプロトコルによって提供される通常の処理が行われる。
【００５８】
図３は、システムの様々な要素間のインタラクションを例示している。
【００５９】
図３には、プロセッサ２０１、２０２を備えるプロセッサモジュール２００、キャッシュメモリ管理モジュール２０３、並びに、メインメモリ管理モジュール２０６及びメインメモリ２０５を備えるメインメモリモジュール２０４が示されている。図２の場合のように、プロセッサにそれぞれ関連付けられているキャッシュメモリは示されていない。
【００６０】
第１工程３００において、モジュール２０３は、プロセッサ２０１から、データに関する最初のリクエストを受信する。モジュール２０３がこのリクエストを受信すると、モジュール２０３は、モジュール２０６に対する投機的クエリ３０１と、プロセッサ２０２のキャッシュメモリに対する参照３０２とを並行して開始する。プロセッサ２０１は、前記最初のリクエストを送信する前にすでにキャッシュメモリの参照を行っていることから、プロセッサ２０１のキャッシュメモリに対しては参照を行わない。
【００６１】
プロセッサへの参照は、例えば、スヌープ型（ｓｎｏｏｐｙ  ｔｙｐｅ）のトランザクションで行われてもよい。モジュール２０３が、ディレクトリによるキャッシュメモリコヒーレンス管理を実装する場合には、ディレクトリにクエリを行うことによって参照が行われてもよい。
【００６２】
投機的リクエスト自体は、例えば、プロセッサ２０１によって送信された最初のリクエストのコピーであってもよい。工程３０１で送信されたリクエストの投機的な性質は、メッセージの分類、すなわち、同種の複数のメッセージからなるセットによって特定されてもよく、例えば、そのような種類が、メモリ管理モジュールによって管理されるトランザクションの種類に追加されてもよい。例えば、このメッセージの分類が、固有の番号によって同定され、プロセッサによって使用される「リクエスト」メッセージ分類のリクエストの特性が採用される（例えば、データ読み出しリクエスト）。投機的リクエストに固有のメッセージ分類が、例えば、同じ仮想キュー内に伝達され、通常のリクエスト（すなわち、非投機的なリクエスト）と同じプロトコルルールに従う。リクエスト及び応答は、仮想チャネル上のプロセッサモジュールを介して受け渡される（物理的リンクが、複数の仮想チャネルをサポートしてもよい）。したがって、投機的リクエスト及び通常のリクエストは、同じ仮想チャネルに従う。
【００６３】
モジュール２０６が投機的リクエストを受信すると、モジュール２０６は、リクエストを考慮に入れたことを確認させる受領書としてメッセージ３０３を送信する。
【００６４】
モジュール２０３が工程３０１及び工程３０２においてリクエストを送信した後は、モジュール２０３は、モジュール２０６又はプロセッサ２０２からの応答を待つ。
【００６５】
したがって、モジュール２０３がプロセッサモジュール２００のプロセッサ２０２のキャッシュメモリにクエリを行う一方、必要なデータのロケーション及び場合によっては当該データのステータスを決定するべく、工程３０４においてモジュール２０５が自身のディレクトリを参照する。
【００６６】
投機的なクエリにより、プロセッサからのリクエストを受信するキャッシュメモリ管理モジュールがディレクトリにクエリを行わないようにすることができ、これらモジュールがメインメモリにクエリを行う前に投機的なクエリを行う場合と同等なレベルの性能を維持することができる。
【００６７】
工程３０１における投機的リクエストの送信と並行して、工程３０２における送信を行うことにより、時間を節約することができ、システム動作を加速させることができる。
【００６８】
モジュール２０６が投機的リクエストを受信すると、モジュール２０６は最初に当該投機的リクエストをサブモジュールに格納し、当該リクエストを処理可能にする。そしてモジュール２０６は、データのステータス及び当該データが格納されているプロセッサのリストを含むディレクトリを参照する（ここで、対象のデータは異なるキャッシュメモリに存在する可能性もあることに注意されたい）。
【００６９】
工程３０５において、対象のデータに関して、プロセッサ間でコンフリクトが生じていないかを検出するべくチェックを行う。コンフリクトが検出された場合（ＯＫ）、投機的リクエストは工程３０６において却下される。
【００７０】
競合が検出されなかった場合（ＮＯＫ）、対象のデータがキャッシュされているかのチェックを行う工程３０７が実行される。
対象のデータがキャッシュされている（ＯＫ）ことをディレクトリが示している場合、投機的リクエストは工程３０６において却下される。
【００７１】
却下する工程３０６において、通常のリクエストの場合のように、投機的リクエストが格納されているサブモジュールがゼロにリセットされる。
【００７２】
モジュール２０６のディレクトリが、キャッシュメモリにおいて対象のデータが利用可能であると示している場合には、モジュール２００に内部で当該データを取得させる。そして、モジュール２０３は、対象のデータを有するプロセッサ（この例では、プロセッサ２０２）から当該データを送信することを示す応答を受信し、モジュール２０３は当該データを受信する（この工程は図示されていない）。
【００７３】
競合が検出されず、また、データがモジュール２００で発見されなかった場合には、工程３０９においてプロキシモジュール２０６は待機することなく即時に対象のデータの読み出しリクエストをメモリ２０５に送信する。
【００７４】
そして、工程３１０においてメモリ２０５はデータを応答して、工程３１１においてプロキシモジュール２０６は当該データをプロキシモジュール２０３へと送信し、工程３１２においてプロキシモジュール２０３は当該データをプロセッサ３００に送信することができる。
【００７５】
投機的リクエストを考慮するにあたってメッセージ３０３の受信に続いて並行して、モジュール２０３は、対象のデータを取得するために投機的リクエストを確認するメッセージ３１３を送信する。
【００７６】
実際には、これは、通常の読み出しリクエストを伴う。モジュール２０６によるリクエストの解釈は、投機的リクエストが却下されたか、されていないかに基づく。リクエストが却下されていない場合には、投機的リクエストの確認メッセージがどのタイミングで到達してもよい。例えば、データがメモリから受信される前に、確認メッセージが受信されてもよい。
【００７７】
更に、メモリからモジュール２０６が受信したデータは、リクエスト確認メッセージを待つことなくモジュール２０３に送信される。このようにすることにより、最初のリクエストとデータの受信との間のレイテンシを最適化することができる。
【００７８】
モジュール２０６は、確認メッセージを受信し対象のデータを送信した後で、終了メッセージ３１４をモジュール２０３に送信する。
【００７９】
実際のところ、読み出しリクエストは、複数の種類のメッセージ（リクエスト及び応答）をトリガするトランザクションであり、データを伴う応答、データを伴わない応答がある（例えば、キャッシュ参照応答）。複数の応答を一つのメッセージにまとめることができ、その上でこれら複数のメッセージの内容を区別できるようにすることができる。
【００８０】
リクエストされたデータを含む応答によって、当該応答を待っているプロセッサが開放される。
【００８１】
加えて、システムにおいてトランザクションが番号で同定されている場合には、当該番号の再利用のために、このトランザクションに関する全ての処理が完了していることを確かめることが望ましい。したがって、終了メッセージは、番号の開放を可能にする。モジュール２０６が、トランザクションの全ての内部処理を終了すると（例えば、トランザクションに続いて自身のディレクトリを更新すると）、終了モジュール２０３に前記メッセージを送信する。
【００８２】
投機リクエストが却下された場合（図示せず）には、モジュール２０６は、確認リクエストを受信したことを条件として、リクエスト３０９を送信する。モジュール２０６は、上記確認リクエストを通常リクエストと解釈して、メモリ２０５にクエリを行う（投機的リクエストが却下された上記の場合では、確認リクエストはプロセスの終了の確認であると解釈された）。
【００８３】
モジュール２０６のディレクトリ内の情報は、正確でない場合がある。その場合、工程３０６において、投機的リクエストが間違って却下される可能性がある。この場合、確認リクエスト３１３は、リクエスト３０９の送信もトリガする。
【００８４】
投機的リクエストの後には、常に応答が行われる。したがって、投機的リクエストが処理されたか、されていないかをリクエストの発信者が知ることなく、当該リクエストがシステムに持続するということはない。したがって、システムオペレーションが最適化される。
【００８５】
上記の実施形態に対して、様々な実装形態を考え得る。例えば、ディレクトリに格納されたデータのステータスを使用してもよい。例えば、工程３０４においてモジュール２０６が自身のディレクトリを参照する場合、工程３００における最初のリクエストにおいて、例えば、プロセッサによって指定された特定のステータスのデータを有するプロセッサのリストのみを参照することが考えられる。この時、データがキャッシュメモリに存在しているが、リクエストされたものと異なるステータスを有する場合は、当該リクエストは処理されない。
【００８６】
例えば、プロセッサがデータを排他的に有することを望む場合、すなわち、当該プロセッサが唯一、当該データを有するという状態を望む場合、当該データがキャッシュ内に共有ステータスで存在する場合には、これらのデータは使用できない。したがって、排他ステータスのデータを取得しなければならない。キャッシュ内のデータのステータスが、リクエストによって要求されているデータと合致していない場合には、モジュール２０６はリクエストの処理の継続を決定してもよい。
【００８７】
キャッシュメモリ管理モジュールは、ディレクトリを使用してキャッシュメモリコヒーレンス管理を実装してもよいし、その他の種類のコヒーレンス管理を採用してもよい。
【００８８】
システムによっては、複数のマルチプロセッサモジュール（又は「クラスタ」）を備える場合がある。マルチプロセッサモジュールはそれぞれ、複数のプロセッサを含み、各プロセッサはそれぞれ自身のキャッシュメモリと関連付けされて、メインメモリモジュール（メインメモリ及び管理モジュール）の一部をホストする。すなわち、メインメモリモジュールは、複数のマルチプロセッサモジュールに分配される。このようなシステムにおいて、各マルチプロセッサモジュール内において「スヌープ型」のキャッシュコヒーレンス管理であってもよく、複数のマルチプロセッサモジュール間でディレクトリ（「ディレクトリベース」）によって管理される。
【００８９】
上記の実施形態及び変形例によれば、キャッシュコヒーレンスプロトコルに関してマルチプロセッサシステムの性能を向上させる、簡単で強力な且つ一般的な解決策を提供すると同時に、プロキシモジュールの開発及び製造のコストを低減することを可能にする。
【００９０】
特に、キャッシュコヒーレンスが保証される。むしろ、投機的リクエストの処理は、キャッシュコヒーレンシプロトコルを変更していない。リクエストの通常の処理の前に、一段回、追加している。この段階は、関係するデータについてキャッシュのステータスをチェックするだけであるから、キャッシュコヒーレンスを危険に晒すようなアクションを含まない。
【００９１】
更に、複数のシステムプロセッサが同時に同じデータにアクセスする場合のように、データアクセスの競合を管理することが可能である。キャッシュメモリ管理モジュールに関して、投機的リクエストが送信されたモジュールの応答がまだ受信されていない限り、投機的リクエスト及び同じデータに関するその他のリクエストの処理をブロックすることによって競合を管理してもよい。メインメモリ管理モジュールの場合、僅かな競合が検出されただけでも、更なるアクションをとることなく投機的処理が終了される場合がある。
【００９２】
一般的に、データへのアクセスが、より早くプロセッサに付与されてもよい。キャッシュを参照するが、参照結果を知る前に、メインメモリにリクエストを送信するべくメインメモリにクエリを行ってもよい。
【００９３】
実施形態を実装するのに使用するリソースを減らすことができる。各リソースは、半導体の作成でコストが掛かるだけではなく、エネルギー消費、生産収率又はチェックの時間を費やすことになる。したがって、システムを動作させるのに使用するリソースを最低限にすることは非常に実利にかなうことである。
【００９４】
プロキシモジュールにディレクトリ又はキャッシュを実装する必要がないことから、投機的な読み出しによりこの問題を完全に解決することができる。ディレクトリを設けないことは、メインメモリへのアクセス時間を短縮できることで、埋め合わせできる。プロキシモジュールは、メインメモリ管理モジュールのディレクトリに依存する。投機的読み出しは、プロキシモジュールが、ディレクトリ又はキャッシュが存在する場合に提供されるような性能と等価な性能を、これらを実装することなしに提供することを可能にする。
【００９５】
当業者であれば、本明細書の開示の構成及び方法は、技術者が現在直面する技術的な問題として、マルチプロセッサシステムにおけるデータ検索時間を短縮させるべく、解決策を提示していることが理解できる。
【００９６】
様々な実施形態を参照して本発明の原理を説明及び例示したが、本発明の原理から逸脱することなく、当該様々な実施形態を構成及び詳細部分において変更することが可能である。本明細書に記載されたデバイス、モジュール、プロセッサ、処理装置、プログラム、プロセス又は方法は、別途の記載がない限り、コンピュータ環境の特定の種類に関連付けされない又は限定されない。様々な種類の専用コンピュータ環境を使用することができる又は上記の教示に従ってオペレーションを実行することができる。ソフトウェアにおいて示される実施形態の要素を、ハードウェアで実装してもよいし、またその反対も成り立つ。
【００９７】
メモリに収容された機械命令のシーケンスが実行されると、プロセッサ又は処理ユニットに、上記したプロセスの工程又は上記したプロセスの機能の少なくとも一部を実行させる。マルチプロセッサ構成における一の又は複数のプロセッサ又は物理的処理ユニットは、メモリ又は機械／コンピュータ可読媒体に含まれる命令のシーケンスを実行するのに採用されてもよい。別の実施形態では、有線の回路を、ソフトウェア命令に代えて又はソフトウェア命令と組み合わせて使用してもよい。
【００９８】
本明細書で使用される「コンピュータ可読媒体」、「機械可読媒体」又は「機械記憶媒体」という言葉は、プロセッサ又は処理ユニットが実行する命令の提供を行う任意の媒体を指す。このような媒体は、非一時的であって任意の形態をとってもよく、これに限定されないが、不揮発性媒体、揮発性媒体及び伝送媒体が含まれる。不揮発性媒体としては、例えば、光学ディスク又は磁気ディスクを含む。不揮発性媒体としては、ダイナミックメモリを含む。伝送媒体としては、同軸ケーブル、銅線及び光ファイバーを含む。コンピュータ／機械可読媒体の一般的な形態としては、例えば、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープ、その他の磁気媒体、ＣＤ−ＲＭ、ＤＶＤ、その他の光学媒体、パンチカード、穿孔テープ、孔の開けられたパターンを有するその他の物理的な媒体、ＲＡＭ、ＰＲＯＭ及びＥＰＲＯＭ、フラッシュＥＰＲＯＭ、任意のその他のメモリチップ又はカートリッジ、以下に記載された搬送波、又は、コンピュータが読み出すことができる任意のその他の媒体を含む。
【００９９】
様々な形式のコンピュータ／機械可読媒体は、プロセッサが実行する一の又は複数の命令の一の又は複数のシーケンスを搬送することを伴う。
【０１００】
本明細書で記載した方法の工程のうちの少なくとも一つ、又は、構造的な配置の様々な要素の機能を実装するための機械実行可能命令を含むコンピュータプログラムは、少なくともインターフェース、物理的なプロセッサ、非一時的メモリ（非一時的機械可読媒体又は記憶媒体とも称される）を含む一の又は複数のコンピュータによって実装することができる。コンピュータは、上記した方法の特定の工程を実行するようにプログラムされるという観点において、専用コンピュータである。非一時的メモリは、上記した方法及びこれに関連する工程を実行するための特定のコード命令を使用してエンコード又はプログラムされる。非一時的メモリは、物理的なプロセッサと通信を行うように配置され、使用時には当該物理的なプロセッサは、非一時的メモリに埋め込まれた特定のコード命令を読み出す及び実行する。専用コンピュータのインターフェースは、物理的なプロセッサと通信を行うように配置されてもよく、物理的プロセッサによって処理される入力パラメータを受信する。
【０１０１】
詳細な説明及び添付の図面を参照して本発明を説明した。しかしながら、本発明は説明した実施形態に限定されない。本発明の説明及び添付の図面を読んだ当業者が、他の変形例及び実施形態を導き出す又は実装することが可能である。
【０１０２】
請求項においては、「含む（ｃｏｍｐｒｉｓｅ）」の語は他の構成要素又は他の工程を排除しない。不定冠詞「ａ」は複数であることを排除しない。一つのプロセッサ又は複数のその他のモジュールを使用して、本発明を実装してもよい。説明された及び／又は特許請求された様々な特徴を有益に組み合わせることができる。これらの構成が説明中又は異なる独立請求項中にあったとしても、組合せの可能性は排除されない。参照符号は発明の範囲を限定するものと解釈すべきではない。
【図１】
0006570873.tif 000002
【図２】
0006570873.tif 000003
【図３】
0006570873.tif 000004