(57)【特許請求の範囲】
【請求項１】
連続するリクエストアドレスに対する一連の書込みリクエストを結合する書込み結合機構とプロセッサとをそれぞれ有し、相互接続された送信ドメイン及び受信ドメインを有する情報処理システムにおけるデータ転送方法において、
前記送信ドメインのプロセッサが、キャッシュラインに対する一連のリクエストをリクエストアドレスとともに、前記送信ドメインのメモリマップ入出力空間にアクセスするステップと、
前記送信ドメインが、前記リクエストアドレスと前記メモリマップ入出力空間の開始アドレスを表す基底アドレスとを比較し、前記リクエストアドレスをデコードすることにより、前記リクエストアドレスに対応する受信ドメインを特定するステップと、
前記書込み結合機構が、前記キャッシュラインに対する一連のリクエストを結合するステップと、
前記送信ドメインが、前記結合された一連のリクエストを前記リクエストアドレスに対応する受信ドメインに送信するステップと、
を有することを特徴とするデータ転送方法。
【請求項２】
プロセッサとメッセージ受信バッファとキャッシュメモリとをそれぞれ有し、相互接続された送信ドメイン及び受信ドメインを有する情報処理システムにおけるデータ転送方法において、
前記受信ドメインが、連続するリクエストを表すカウント情報を含む前記送信ドメインにおける前記キャッシュメモリのキャッシュラインに対する一連のリクエストを、前記送信ドメインから受信するステップと、
前記受信ドメインが、前記受信ドメインにおけるメッセージ受信バッファ内の空きエントリの排他アクセス権を獲得するとともに、前記排他アクセス権を獲得した空きエントリに対応する前記キャッシュメモリのキャッシュラインを無効化するステップと、
前記受信ドメインが、前記受信した一連のリクエストが有するカウント情報を変更するステップと、
前記受信ドメインのプロセッサが、前記受信した一連のリクエストを、前記排他アクセス権を獲得した前記メッセージ受信バッファ内の空きエントリに対して書込むステップと、
前記受信ドメインのプロセッサが、前記メッセージ受信バッファ内のエントリが有するカウント情報をポーリングするステップと、
前記受信ドメインのキャッシュメモリが、前記空きエントリに対応するキャッシュラインが無効化されていることにより、キャッシュミスを発生するステップと、
前記受信ドメインのキャッシュメモリが、前記キャッシュミスが発生した前記無効化されたキャッシュラインに、前記受信した一連のリクエストを書込むステップと、
前記受信した一連のリクエストが前記メッセージ受信バッファに書込まれる度に、前記一連のリクエストの循環カウント情報をポーリングするステップと、
前記ポーリングした前記一連のリクエストの循環カウント情報に基づいて、前記一連のリクエストの最終リクエストを検出するステップと、
を有することを特徴とするデータ転送方法。
【請求項３】
前記受信ドメインが、前記受信した一連のリクエストが有するカウント情報を変更するステップは、
前記受信ドメインが、新たなキャッシュラインに対する一連のリクエストを、前記排他アクセス権を獲得した前記メッセージ受信バッファ内の空きエントリに対して書込む場合に、新たな値により前記受信バッファ内のエントリが有するカウント情報を上書きすることを特徴とする、請求項２に記載のデータ転送方法。
【請求項４】
前記カウント情報は０〜Ｎ（Ｎは整数）の範囲で１増分する整数であり、Ｎは前記メッセージ受信バッファ内のエントリ数に対して素であることを特徴とする、請求項２又は３に記載の方法。
【請求項５】
前記転送方法は、さらに、
前記受信ドメインが、連続するリクエストを表すカウント情報を含む前記送信ドメインにおけるキャッシュラインに対する一連のリクエストを、前記送信ドメインから受信するステップにおいて、
前記受信ドメインが、誤り訂正コードを使用して、前記受信した一連のリクエストを検査するステップと、
前記受信ドメインが、前記受信した一連のリクエストが有するカウント情報を変更するステップにおいて、
前記受信ドメインが、前記受信した一連のリクエストに対する誤り訂正コードを再生成するステップを有することを特徴とする、請求項２〜４のいずれか一項に記載のデータ転送方法。
【請求項６】
キャッシュメモリと、前記キャッシュメモリのキャッシュラインに対する一連のリクエストをリクエストアドレスとともに、メモリマップ入出力空間にアクセスするプロセッサを有し、前記リクエストアドレスと前記メモリマップ入出力空間の開始アドレスを表す基底アドレスとを比較し、前記リクエストアドレスをデコードすることにより、前記リクエストアドレスに対応する受信ドメインを特定する送信ドメインと、
前記キャッシュラインに対する一連のリクエストを結合して、前記特定した受信ドメインに送信する書込み結合機構と、
前記送信ドメインに相互接続され、前記結合された一連のリクエストを受信する受信ドメインと、
を有することを特徴とする情報処理システム。
【請求項７】
キャッシュメモリと、前記キャッシュメモリのキャッシュラインに対する一連のリクエストをリクエストアドレスとともに、メモリマップ入出力空間にアクセスするプロセッサを有し、前記リクエストアドレスと前記メモリマップ入出力空間の開始アドレスを表す基底アドレスとを比較し、前記リクエストアドレスをデコードすることにより、前記リクエストアドレスに対応する受信ドメインを特定する送信ドメインと、
前記キャッシュラインに対する一連のリクエストを結合して、前記特定した受信ドメインに送信する書込み結合機構と、を有し、
前記結合された一連のリクエストを受信ドメインに送信することを特徴とする情報処理装置。
【請求項８】
キャッシュメモリと、前記キャッシュメモリのキャッシュラインに対する一連のリクエストをリクエストアドレスとともに送信する送信ドメインと、前記送信ドメインに相互接続された受信ドメインと、を有する情報処理システムにおいて、
前記受信ドメインは、
連続するリクエストを表すカウント情報を含む前記送信ドメインにおけるキャッシュラインに対する一連のリクエストを受信する受信手段と、
メッセージ受信バッファ内の空きエントリの排他アクセス権を獲得するとともに、前記排他アクセス権を獲得した空きエントリに対応する前記キャッシュメモリのキャッシュラインを無効化する無効化手段と、
前記受信した一連のリクエストが有するカウント情報を変更するカウント情報変更手段と、
前記受信した一連のリクエストを、前記排他アクセス権を獲得した前記メッセージ受信バッファ内の空きエントリに対して書き込み、前記メッセージ受信バッファ内のエントリが有するカウント情報をポーリングするプロセッサと、
前記空きエントリに対応するキャッシュラインが無効化されていることにより、キャッシュミスを発生するキャッシュメモリと、
前記受信した一連のリクエストが前記メッセージ受信バッファに書き込まれる度に、前記一連のリクエストの循環カウント情報をポーリングする手段と、
前記ポーリングした前記一連のリクエストの循環カウント情報に基づいて、前記一連のリクエストの最終リクエストを検出する最終リクエスト検出手段と、
を有することを特徴とする情報処理システム。
【請求項９】
キャッシュメモリと、前記キャッシュメモリのキャッシュラインに対する一連のリクエストをリクエストアドレスとともに送信する送信ドメインとに相互接続され、
連続するリクエストを表すカウント情報を含む前記送信ドメインにおけるキャッシュラインに対する一連のリクエストを受信する受信手段と、
メッセージ受信バッファ内の空きエントリの排他アクセス権を獲得するとともに、前記排他アクセス権を獲得した空きエントリに対応する前記キャッシュメモリのキャッシュラインを無効化する無効化手段と、
前記受信した一連のリクエストが有するカウント情報を変更するカウント情報変更手段と、
前記受信した一連のリクエストを、前記排他アクセス権を獲得した前記メッセージ受信バッファ内の空きエントリに対して書き込み、前記メッセージ受信バッファ内のエントリが有するカウント情報をポーリングするプロセッサと、
前記空きエントリに対応するキャッシュラインが無効化されていることにより、キャッシュミスを発生するキャッシュメモリと、
前記受信した一連のリクエストが前記メッセージ受信バッファに書き込まれる度に、前記一連のリクエストの循環カウント情報をポーリングする手段と、
前記ポーリングした前記一連のリクエストの循環カウント情報に基づいて、前記一連のリクエストの最終リクエストを検出する最終リクエスト検出手段と、
を有する受信ドメインを備えたことを特徴とする情報処理装置。
【請求項１０】
キャッシュメモリと、前記キャッシュメモリのキャッシュラインに対する一連のリクエストをリクエストアドレスとともに送信する送信ドメインと、前記送信ドメインに相互接続された受信ドメインと、を有する情報処理システムにおいて、
前記送信ドメインは、
前記キャッシュメモリに接続され、キャッシュラインに対する一連のリクエストをリクエストアドレスとともに送信するプロセッサと、
前記受信ドメインに対する前記一連のアクセスを送信する送信手段と、
書込み結合属性に基づいて、連続するリクエストアドレスに対する一連の書込みリクエストを結合する書込み結合機構と、を有し、
前記受信ドメインは、
前記受信ドメインが有するメッセージ受信バッファに対して前記一連のアクセスを書き込む受信手段を有することを特徴とする情報処理システム。
【請求項１１】
前記送信手段は、前記受信ドメインに対する前記一連のアクセスを送信する場合に、
前記リクエストアドレスをデコードすることにより、前記リクエストアドレスに対応する受信ドメインを特定することを特徴とする、請求項１０に記載の情報処理システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般的に、マルチノードコンピュータシステムの論理的分割に関し、さらに特に、分割されたコンピュータシステムにおけるドメイン間のメッセージ受渡しに関する。
【０００２】
【従来の技術】
マルチノードコンピュータシステムはドメインの形に分割されることがあり、このドメインの各々は、それ独自のアドレス空間を有する独立したマシンとして機能する。オペレーティングシステムが各ドメイン上で別々にランする。この分割によって、コンピュータネットワークのリソースが個々のタスクに効率的に割り当てられることと、コンピュータシステムの使用における柔軟性を実現することと、ネットワークの一部分におけるハードウェアまたはソフトウェアの効果がシステム全体の動作に干渉するのを制限するために、コンピュータリソース間の分離を実現することが可能になる。ドメインは、そのドメインが別のドメインの共有アドレス空間に対して直接的に読取り／書込みをすることが不可能であるように、互いに孤立せしめられている。
【０００３】
分割されたコンピュータシステムにおけるドメイン間のメッセージ受渡しのための従来のメッセージ通信機構が公知である。例えば、従来の実現方法は、１つのドメイン（送信ドメイン）における入力／出力（Ｉ／Ｏ）装置から別のドメイン（受信ドメイン）のＩ／Ｏへのメッセージ通信を行う。このアプローチは幾つかの欠点を有する。第１に、このアプローチは、Ｉ／Ｏネットワークインタフェースコントローラが送信ドメイン内のメモリからデータを読取るように、送信ドメインにおけるダイレクトメモリアクセス（ＤＭＡ）を必要とする。このアプローチは、さらに、Ｉ／Ｏネットワークインタフェースコントローラが受信ドメイン内のメモリにデータを書き込むように、ＤＭＡ書込みを必要とする。各ＤＭＡ転送がプロセッサＩ／Ｏアクセスのオーバヘッドの増加を生じさせる。
【０００４】
第２に、メッセージ通信ドライバがネットワークプロトコルスタック上でランするので、短いメッセージに関するラウンドトリップ待ち時間が極めて長くなる。さらに、従来の実現方法は、有効データが送信ドメイン内に到着する時点を表示するためにハードウェア（Ｈ／Ｗ）ポインタレジスタをポーリングすることを必要とする。Ｈ／Ｗポインタレジスタをポーリングすることは、高帯域幅オーバヘッドをもたらすプロセッサインタフェース上でのトランザクションを生じさせる。さらに、メッセージのフラグメンテーションがネットワークルータ／スイッチにおいて発生するので、メッセージは、サイズがキャッシュラインよりも小さいフラグメントの形で到着することがある。データのこうした転送は、インタコネクトにおける帯域幅を浪費し、メモリにおけるオーバヘッドを増大させるので、非効率的である。
【０００５】
【発明が解決しようとする課題】
したがって、システムがドメイン間においてキャッシュラインのサイズのメッセージを受け渡すことを可能にする機構を有することが望ましい。さらに、プロセッサインタフェース上でのトランザクションを発生させることなしに、有効データが受信ドメイン内に到着するときにインメモリ通知(in-memory notification)を提供することが望ましい。
【０００６】
【課題を解決するための手段】
本発明は、（図１に示すように）インタコネクトを介して互いに接続されている複数の中央プロセッサユニット（ＣＰＵ）ノードと入力／出力（Ｉ／Ｏ）ノードとメモリノードとを含む分散マルチノードコンピュータシステムを含む。ＣＰＵノードはキャッシュメモリを含むことがある。このコンピュータシステムは複数のドメインに分割されており、この各ドメインは、その独自のアドレス空間を有する独立したマシンとして機能する。オペレーティングシステムが各ドメイン上で別々にランする。
【０００７】
さらに、本発明は、パイプライニング(pipelining)を伴うメモリアクセスも含む。さらに特に、本発明は、１つのドメイン内のＣＰＵノードが別のノード内のメモリノードに対して要求を行うことを可能にするメッセージ通信機構を含む。要求が送り出されるドメインを送信ドメインと呼ぶ。要求を受け取るドメインを受信ドメインと呼ぶ。送信ドメイン内のＣＰＵノードは、Ｉ／Ｏノードが特定の予約アドレスでアドレス指定される受信ドメインのアドレス空間の一部分に書き込む。アドレス空間のこの部分は、メモリマップ入力／出力（ＭＭＩＯ）ウィンドウと呼ばれる。ＭＭＩＯウィンドウに対する各書込みのサイズはキャッシュラインのサイズである。宛先ドメイン（受信ドメイン）が、ＭＭＩＯウィンドウにアクセスするために使用されるアドレスから復号される。送信ドメイン内のＭＭＩＯウィンドウに書き込むことが、受信ドメインに対するメッセージの送り出しをトリガする。すべてのメッセージはキャッシュラインのサイズである。
【０００８】
受信側では、受信ドメインはメッセージを受け取って、コヒーレントアドレス空間(coherent address space)内のメッセージをメッセージ受信バッファに書き込む。循環カウンタフィールド(cyclic counter field)と呼ばれる各キャッシュラインの小さな部分が、キャッシュラインが受信ドメインのコヒーレントアドレス空間内に書き込まれる前に、循環カウンタによってオーバライトされる。循環カウンタは、メッセージ受信バッファのサイズに対して比較的プライム(prime)である。メッセージ通信ドライバ(messaging driver)は、次のメッセージがメッセージ受信バッファ内に書き込まれる時点を判定するために、プロセッサキャッシュ内のキャッシュラインの循環カウントフィールドをポーリングする。逐次的にアドレス指定されるキャッシュラインの循環カウントフィールド内の循環シーケンスが中断されるときに、書き込まれた最終キャッシュラインが検出される。メッセージ受信バッファのサイズに対して比較的プライムであるモジュラスを有する循環カウンタを維持することによって、最終キャッシュラインがどこに書き込まれるかを表示するシーケンス中の中断が、新たなキャッシュラインが到着するときに常に出現することが確実になる。したがって、循環カウンタは、ＣＰＵインタフェース上でのトランザクションを発生させることなしにインメモリ通知を有利に実現する。
【０００９】
【発明の実施の形態】
図１を参照すると、この図には、ドメイン間でのメッセージの受渡しに関する複数のドメインに分割されているマルチノードコンピュータシステム１００のアーキテクチャ全体のブロック図が示されている。ドメイン１３０、１３５、１３６の各々が、複数のノード、すなわち、中央処理ユニット（ＣＰＵ）ノード１１０ａ−１１０ｎ（一般的に１１０）と、メモリノード１１５ａ−１１５ｎ（１１５）と、入力／出力（「Ｉ／Ｏ」）ノード１２０ａ−１２０ｎ（１２０）とを含む。
【００１０】
ＣＰＵノード１１０は、例えば、ＩｎｔｅｌまたはＩｎｔｅｌ互換ＩｔａｎｉｕｍTMクラスもしくはより高位のプロセッサ、Ｓｕｎ  ＳＰＡＲＣTMクラスもしくはより高位のプロセッサ、または、ＩＢＭ／Ｍｏｔｏｒｏｌａ  ＰｏｗｅｒＰＣTMクラスもしくはより高位のプロセッサのような従来通りの処理ユニットである。各々のＣＰＵノード１１０がプロセッサキャッシュ１２７を含むことが好ましい。Ｉ／Ｏノード１２０は、例えば、記憶装置、入力装置、ネットワークインタフェースコントローラ、周辺装置等のような従来通りのＩ／Ｏシステムである。メモリノード１１５は、例えば、動的ランダムアクセスメモリ（ＤＲＡＭ）システム、静的ランダムアクセスメモリ（ＳＲＡＭ）等のような従来通りのメモリシステムである。システム１００内のノード１１０、１１５、１２０はインタコネクト１２５によって接続されている。インタコネクト１２５は、命令、データ、および、他の信号が各ノード間で受け渡されるように、２つ以上のノードを結合する。インタコネクト１２５は、例えば、ルータまたはスイッチを使用して実装される網目、リング、または、超立方体であってよい。
【００１１】
システム１００内のノード１１０、１１５、１２０はドメインの形にグループ化される。説明を容易にするために３つのドメイン１３０、１３５、１３６だけが図１に示されているが、システム１００は任意の数のドメインに分割されることが可能であるということを理解しなければならない。システム１００の各ドメイン１３０、１３５、１３６は、ドメイン内のノードだけにしかアクセスできないそれ自体のアドレス空間を有する独立したマシンとして機能する。さらに、各ドメイン１３０、１３５、１３６は、どのドメインも別のドメインの共有アドレス空間に対して直接読み書きすることが不可能であるように、互いに孤立している。要求が送り出されるドメインが送信ドメインである。メッセージが書き込まれるドメインが受信ドメインである。
【００１２】
次に図２を参照すると、この図には、システム１００の送信ドメイン１３０のアドレス空間２００が示されている。アドレス空間２００は、ドメイン内のメモリ構造にアクセスするための１組のメモリアドレスを有する。アドレス空間２００は０で開始し、２64ビットのサイズを有する。図２の例では、０から２32までのあらゆるアドレスがメモリ１１５に対する参照を維持する。２34から２40までのあらゆるアドレスが、メモリマップ入出力（ＭＭＩＯ）ウィンドウ２１０に対する参照を維持する。インタコネクト１２５内に存在するベースレジスタ（図２には示されていない）が、ＭＭＩＯウィンドウ２１０が送信ドメイン１３０のコヒーレント空間２００内のどこで始まるかを表示するようにプログラムされていることが好ましい。システム１００内の各ドメインがそのアドレス空間内にＭＭＩＯウィンドウを有することに留意されたい。
【００１３】
再び図１を参照すると、本発明の一実施形態では、ドメイン１３０のＣＰＵノード１１０は、ドメイン１３６のメモリノード１１５に対して要求を行う。ドメイン１３０は送信ドメインである。ドメイン１３６は受信ドメインである。任意のドメインが送信ドメインと受信ドメインであることが可能であるということを理解されたい。本発明の一実施形態では、送信ドメイン１３０内のＣＰＵノード１１０は、能動メッセージ通信機構を使用して受信ドメイン１３６内のメモリノード１１５に対して要求を行う。能動メッセージ通信機構は、送信ドメイン１３０内のＣＰＵノード１１０が送信ドメイン１３０のアドレス空間内のＭＭＩＯウィンドウ２１０に対して書込み要求を送り出すことを可能にする。ＭＭＩＯウィンドウ２１０に対する書込み要求は、受信ドメイン１３６に対するメッセージの送出をトリガする。各メッセージはキャッシュラインのサイズである。受信ドメイン１３６はメッセージを受け取り、その受信ドメイン１３６のコヒーレントアドレス空間内にそのメッセージを書き込む。コヒーレントアドレス空間とは、ソフトウェアによって使用される命令とデータとが存在するメモリ領域を意味する。受信ドメイン１３６のコヒーレントアドレス空間を後で図５において示す。本発明の一実施形態では、メッセージが、受信ドメイン１３６のコヒーレントアドレス空間内に存在するメッセージ受信バッファの中に書き込まれる。メッセージ受信バッファは、キャッシュラインサイズ（ｃａｃｈｅ−ｌｉｎｅ  ｓｉｚｅｄ）のメッセージが読取り／書込みをされるメモリ内の区域である。メッセージ受信バッファを、図５に関連付けてより詳細に後述する。
【００１４】
システム１００は、さらに、ＣＰＵ  １１０の命令を実行するためのメッセージ通信ドライバ１０６を含む。メッセージ通信ドライバ１０６は、ループの形で一連の動作シーケンスを行うようになっている。メッセージ通信ドライバ１０６は（必要に応じて）、その次のメッセージが受信ドメイン１３６内に到着するのを待ち、メッセージ受信バッファ５００からそのメッセージをコピーし、そのメッセージを他のなんらかのソフトウェアに送る。メッセージ通信ドライバ１０６は、ソフトウェア、ハードウェア、または、これらのあらゆる組合せの形で実装されることが可能である。
【００１５】
システム１００は、さらに、送信ドメイン１３０のインタコネクト１２５内に存在する送信エンジン１４０を含む。この送信エンジン１４０は、ＭＭＩＯウィンドウ２１０に対する書込み要求で使用されるＭＭＩＯアドレスから宛先ドメインを復号するようになっていることが好ましい。ＭＭＩＯアドレスについては、図３に関連付けて後述する。送信エンジン１４０は、さらに、受信エンジン１５０に対してメッセージを送出する。
【００１６】
受信エンジン１５０は、受信ドメイン１３６のインタコネクト１２５内に存在する。受信エンジン１５０が、送信エンジン１４０からのメッセージを受け取って、受信ドメイン１３６のコヒーレントアドレス空間にその受け取ったメッセージを書き込むようになっていることが好ましい。
【００１７】
受信エンジン１５０は、さらに、ソフトウェア（Ｓ／Ｗ）読取りポインタレジスタ１９０を含む。このＳ／Ｗ読取りポインタレジスタ１９０は、値、すなわち、Ｓ／Ｗ読取りポインタ１９０ａを含む。Ｓ／Ｗ読取りポインタレジスタ１９０は、受信エンジン１５０がメッセージ受信バッファ内の幾つかの自由エントリを判定することを可能にする。Ｓ／Ｗ読取りポインタレジスタ１９０とＳ／Ｗ読取りポインタ１９０ａとについては、図５と図６とに関連付けてさらに詳細に後述する。
【００１８】
受信エンジン１５０は、さらに、ハードウェア（Ｈ／Ｗ）書込みポインタレジスタ１９５を含む。Ｈ／Ｗ書込みポインタレジスタ１９５は、値、すなわち、Ｈ／Ｗ書込みポインタ１９５ａを記憶する。Ｈ／Ｗ書込みポインタレジスタ１９５とＨ／Ｗ書込みポインタ１９５ａとについては、図５と図６とに関連付けてさらに詳細に後述する。
【００１９】
本発明は、有利なことに、システム１００が、一連の書込み要求を集めて、受信ドメイン１３６のコヒーレントアドレス空間内に書き込む前にこれらの書込み要求を結合させることを可能にする。一実施形態では、書込み結合属性が、ＣＰＵ  １１０が、キャッシュラインの全バイトが１回の転送で送られるように、オンチップのキャッシュライン書込み結合レジスタ１８０（図１に示されている）内への一連の書込みを内部的に結合させることを可能にする。キャッシュラインサイズであるメッセージデータを転送することが、プロトコルオーバヘッドを減少させると共に、メモリリソースの使用を減少させる。本発明の一実施形態では、書込み結合属性がＩｎｔｅｌ  Ｉｔａｎｉｕｍプロセッサによってサポートされている。別の実施形態では、書込み結合属性がアンキャッシュドアクセレーテッド（Ｕｎｃａｃｈｅｄ  Ａｃｃｅｌａｔｅｄ）であり、これはＭＩＰＳ  Ｒ１２０００プロセッサによってサポートされている。
【００２０】
次に図３を参照すると、この図には、図２のＭＭＩＯウィンドウ２１０にアクセスするために使用されるアドレス３００の好ましい形式のブロック図が示されている。このアドレスが基底フィールド３１０とドメインフィールド３２０とサイズフィールド３３０とキャッシュラインオフセットフィールド(cache line offset field)３４０とを含むことが好ましい。
【００２１】
基底フィールド３１０は、受け取られた要求がメッセージ要求であるかどうかを判定するために基底レジスタ（図示していない）内に記憶されている値に対して比較される値を記憶する。基底レジスタ内に記憶されている値は、ＭＭＩＯウィンドウ２１０が送信ドメイン１３０のアドレス空間内のどこで開始するかを表示する。
【００２２】
ドメインフィールド３２０はＤビット幅であり、宛先ドメインを表示する。本発明は２D個のドメインをサポートする。ＣＰＵ  １１０がＭＭＩＯウィンドウ２１０に対する書込みを送り出す時には、送信エンジン１４０は、アドレス３００からドメインフィールド３２０を読取ることによって、メモリに対する要求の宛先ドメイン（受信ドメインとも呼ばれる）を復号する。
【００２３】
Ｓビット幅であるサイズフィールド３３０は、ＭＭＩＯウィンドウ２１０内の各宛先ドメインに関するエントリの数を指定する。各宛先ドメインは２S個のエントリを有する。キャッシュラインオフセットフィールド３４０が、特定のバイトを識別するために使用されるそのキャッシュライン内のバイトのオフセットである。
【００２４】
次に図４を参照すると、この図には、送信ドメイン１３０で行われるメッセージ受渡しプロトコルの流れ図が示されている。４１０においてこのプロセスが開始し、および、４２０において、ＣＰＵ  １１０はキャッシュラインサイズの書込みをＭＭＩＯウィンドウ２１０に送る。同一のキャッシュラインアドレスを有するデータの全ユニットがレジスタ１８０内で内部的に集められる。レジスタ１８０が一杯になると、このレジスタ１８０が自動的にフラッシュ（ｆｌｕｓｈ）され、ＣＰＵ  １１０インタフェース上に非コヒーレントなキャッシュラインサイズの書込みトランザクションとして現れる。ＣＰＵ  １１０によって与えられる書込み要求の全てが調べられる。４３０においてＭＭＩＯアドレス３００の基底フィールド３１０が基底レジスタ内に格納されている値に一致するならば、このことは書込み要求がメッセージであることを表示する。送信エンジン１４０は、ＭＭＩＯウィンドウ２１０に対する書込み要求で使用されるアドレス３００から宛先ドメインを復号する。さらに、４４０において、送信エンジン１４０は、受信エンジン１５０に対するメッセージを送り出す。受信エンジン１５０は、受信ドメイン１３６のコヒーレントアドレス空間にそのメッセージを書き込む。受信ドメイン１３６内で行われるメッセージ受渡しプロトコルについては、図８に関連付けてさらに詳細に後述する。
【００２５】
次に図５を参照すると、この図には、本発明の一実施形態による受信ドメイン１３６のコヒーレントアドレス空間５９０内におけるメッセージ受信バッファ５００のブロック図が示されている。メッセージ受信バッファ５００は複数のエントリを有する。各エントリは番号によって識別されている。各エントリは、受信ドメイン１３６に到着する時に、キャッシュラインサイズのメッセージを記憶することが好ましい。第１のエントリが数０を有し、第２のエントリが数１を有し、第３のエントリが数２を有し、および、以下同様である。これらの番号は、メッセージ受信バッファ５００内のエントリの「オフセット」５７０である。オフセット５７０は、特定のエントリを識別するためにＳ／Ｗ読取りポインタ１９０ａとＨ／Ｗ書込みポインタ１９５ａとによって使用される値である。図５に示されているように、Ｓ／Ｗ読取りポインタ１９０ａは、メッセージ受信バッファ５００内の第１のエントリ（オフセット「０」を伴う）をポイントする。Ｈ／Ｗ書込みポインタ１９５ａは、メッセージ受信バッファ５００内の最終エントリ（オフセット「６」を伴う）をポイントする。受信基底アドレス５１０ａが、メッセージ受信バッファ５００がコヒーレントアドレス空間５９０内のどこで開始するかを表示する区域をポイントする。受信エンジン１５０（図５には示していない）が、キャッシュラインサイズのメッセージをアドレス順序でメッセージ受信バッファ５００に書き込む。
【００２６】
次に図６を参照すると、この図は、メッセージ受信バッファ５００にアクセスするために使用されるアドレス５４０の形式を示す。アドレス５４０が、受信基底フィールド５１０と、ハードウェア（Ｈ／Ｗ）書込みポインタフィールド５２０と、キャッシュラインオフセットフィールド５３０とを含むことが好ましい。
【００２７】
受信基底フィールド５１０は、メッセージ受信バッファ５００が受信ドメイン１３６のコヒーレントアドレス空間内のどこで開始するのかを表示する受信基底アドレス５１０ａを記憶することが好ましい。受信基底フィールド５１０内に記憶されている受信基底アドレス５１０ａは一定不変であるようにプログラムされている。
【００２８】
Ｈ／Ｗ書込みポインタフィールド５２０は、（図５に示されている）Ｈ／Ｗ書込みポインタ１９５ａの現在値を記憶する。フィールド５２０は、新たなメッセージが書き込まれることになるメッセージ受信バッファ５００内のキャッシュラインのアドレスを求めるために使用される。
【００２９】
キャッシュラインオフセットフィールド５３０は、図３に示されているキャッシュラインオフセットフィールド３４０と同一である。キャッシュラインオフセットフィールド５３０はそのキャッシュライン内のバイトのオフセットである。例えば、オフセットフィールド５３０が０であれば、アドレス５４０がそのキャッシュラインの第１のバイトを参照する。オフセットフィールド５３０が３であれば、アドレス５４０がそのキャッシュラインの第４のバイトを参照し、他も同様である。キャッシュラインサイズが１２８バイトである場合には、オフセットフィールド５３０は、キャッシュライン内の各バイトがアドレス指定されることを可能にするために０から１２７の値を有することが可能である。
【００３０】
再び図５を参照すると、動作中に、受信エンジン１５０がメッセージ受信バッファ５００内の最終エントリに対してキャッシュラインサイズのメッセージを書き込み終わると、その次の受信メッセージがメッセージ受信バッファ５００内の第１のエントリに書き込まれる。説明のための具体例では、受信されたメッセージがメッセージ受信バッファ５００内の第１のエントリに書き込まれる場合には、Ｈ／Ｗ書込みポインタ１９５ａは０である。その次のメッセージがメッセージ受信バッファ５００内の第２のエントリに書き込まれる場合には、Ｈ／Ｗ書込みポインタ１９５ａは１であり、他も同様である。受信エンジン１５０が新たなメッセージを受信すると、その受信エンジン１５０は、そのメッセージを書き込むことになるメッセージ受信バッファ５００内のキャッシュラインのアドレスを求めるために、Ｈ／Ｗ書込みポインタフィールド１９５ａの現在値をＨ／Ｗ書込みポインタフィールド５２０として使用する。その次に、受信エンジン１５０は、Ｈ／Ｗ書込みポインタレジスタ１９５内に記憶されているＨ／Ｗ書込みポインタ１９５ａを増分する。次に、Ｈ／Ｗ書込みポインタ１９５ａは、新たなメッセージが書き込まれることになるメッセージ受信バッファ５００内のその次のエントリをポイントする。Ｈ／Ｗ書込みポインタレジスタ１９５はＷビット幅であり、および、そのＨ／Ｗ書込みポインタ１９５ａ最大値を増分することが、その値が０にラップアラウンドすることを引き起こす。
【００３１】
メッセージ通信ドライバ１０６は、メッセージの処理を完了しており、したがって、そのメッセージを含むメッセージ受信バッファ５００内のキャッシュラインエントリが受信エンジン１５０にとって新たなメッセージを記憶するために現時点で使用可能であることを表示するために、Ｓ／Ｗ読取りポインタ１９０ａを更新する。説明のための具体例として、メッセージ通信ドライバ１０６は、第１のエントリ（オフセット０）からメッセージを読取るのに成功すると、そのドライバ１０６がその次に第２のエントリから読取ることを示すためにＳ／Ｗ読取りポインタレジスタ１９０を１に設定する。受信エンジン１５０は、メッセージ受信バッファ５００が一杯である時点を検出するために、Ｓ／Ｗ読取りポインタレジスタ１９０を使用する。Ｈ／Ｗ書込みポインタレジスタ１９５を増分することが、Ｈ／Ｗ書込みポインタ１９５ａをＳ／Ｗ読取りポインタレジスタ１９０における値と等しくする場合には、このことはメッセージ受信バッファ５００が一杯であることを表示する。この場合には、受信エンジン１５０は、Ｈ／Ｗ書込みポインタレジスタ１９５を増分しないか、または、メッセージ通信ドライバ１０６がＳ／Ｗ読取りポインタレジスタ１９０を変更してそのドライバが１つまたは複数のエントリを処理し終わっていることを示すまで、あらゆる到着メッセージをメッセージ受信バッファ５００内に記憶する。
【００３２】
次に図７を参照すると、この図には、本発明の実施形態による変型されたキャッシュラインサイズのメッセージが示されている。図８に示されているキャッシュラインサイズのメッセージ６００は２10ビット（１０２４ビット）幅である。各々のキャッシュラインサイズのメッセージは、ｋビット幅である循環カウントフィールド６０５を有することが好ましい。受信エンジン１５０は、メッセージがメッセージ受信バッファ５００内に書き込まれる前に循環カウントフィールド６０５を循環カウンタ１７０でオーバライトする。循環カウンタ１７０はインタコネクト１２５内に存在する。循環カウンタ１７０はハードウェアの形で実装される。本発明の一実施形態では、循環カウンタ１７０は２ビット幅である。循環カウンタ１７０が任意のサイズであることが可能であるということを理解されたい。循環カウンタ１７０によって生成されおよび循環カウントフィールド６０５内に入れられる様々な値の数が、２W個のキャッシュラインを記憶するメッセージ受信バッファ５００のサイズに対して比較的プライムである。例えば、ｋが２ビットである場合には、循環カウンタ１７０は００、１０、および、０１（これらはそれぞれに数０、１、および、２を表す）を記憶することが可能である。２Wが３で割り切れないので、０、１、２、０、１、２等をカウントするモジュロ３カウンタが使用可能である。
【００３３】
次に図８を参照すると、この図には、受信ドメイン１３６で行われるメッセージ受渡しプロトコルの流れ図が示されている。新たなメッセージの到着を検出するために、ＣＰＵ  １１０は、循環カウントフィールド６０５がその受信した最終メッセージのカウントフィールド６０５の値に対する循環シーケンスにおける次の値を有することになるまで、メッセージ受信バッファ５００内のその次のキャッシュラインエントリにおける循環カウントフィールド６０５（図８に示されている）をそのＣＰＵのキャッシュ１２７内で反復的にポーリングする。１０において新たなメッセージが到着し、２０において、受信エンジン１５０が、Ｈ／Ｗ書込みポインタ１９５ａがポイントしおよび受信エンジン１５０がメッセージを書き込むことになるメッセージ受信バッファ５００内のキャッシュラインの独占的な所有権を獲得する。受信エンジン１５０は、そのプロセッサキャッシュ１２７内のキャッシュラインの既存の（古い）コピーをすべて無効化する。３０において、受信エンジン１５０は、循環カウンタ１７０で循環カウントフィールド６０５をオーバライトすることによってメッセージを変更し、および、４０において、メッセージ受信バッファ５００内のその次のキャッシュラインにそのメッセージを再び書き込む。
【００３４】
５０において、ＣＰＵ  １１０は、循環シーケンスの持続を検出するためにそのＣＰＵのキャッシュ１２７内の循環カウントフィールド６０５をポーリングする。この時点では、独占的に獲得されたキャッシュラインの既存の（古い）コピーのすべてが無効化され、および、６０においてＣＰＵ  １１０はキャッシュ「ミス（ｍｉｓｓ）」を送り出す。７０において、メッセージ受信バッファ５００内の到着メッセージを含むキャッシュラインは、プロセッサキャッシュ１２７内にインストールされる。８０において、ＣＰＵ  １１０はメッセージ通信ドライバ１０６にそのメッセージを送る。９０において、メッセージ通信ドライバ１０６は、メッセージ受信バッファ５００からのメッセージの受信を確認するためにＳ／Ｗ読取りポインタ１９０ａを更新し、それによって、メッセージ受信バッファ５００に書き込まれることになっている新たなメッセージのためのスペースを解放する。キャッシュラインの後続の読取りがプロセッサキャッシュ１２７内でヒットし、その結果としてＣＰＵ  １１０インタフェース上でのトランザクションが生じない。
【００３５】
有利なことに、プロセッサキャッシュ１２７内のキャッシュラインの循環カウントフィールド６０５をポーリングすることが、キャッシュラインサイズのメッセージがメッセージ受信バッファ５００に到着する時に、システム１００が、Ｈ／Ｗ書込みポインタレジスタ１９５をポーリングすることなしに、インメモリ通知を与えることを可能にする。この結果として、メッセージが到着するまではトランザクションがＣＰＵ  １１０インタフェース上で生じさせられることがない。循環カウントフィールド６０５のモジュラスをメッセージ受信バッファ５００のサイズに対して比較的プライムに維持することが、新たなメッセージがメッセージ受信バッファ５００の中に書き込まれる時に新たな数が循環カウントフィールド６０５内に挿入されることを確実なものにする。このことが、最終メッセージがメッセージ受信バッファ５００内のどこに書き込まれたかを表示する中断が、新たなメッセージが書き込まれる時に常に出現することを確実なものにする。
【００３６】
Ｓ／Ｗ読取りポインタ１９０ａが更新される時には何時でもＣＰＵ  １１０が受信エンジン１５０内のＳ／Ｗ読取りポインタレジスタ１９０を更新するということに留意されたい。受信エンジン１５０は、Ｈ／Ｗ書込みポインタレジスタ１９５の値とＳ／Ｗ読取りポインタレジスタ１９０とを比較することによって、メッセージ受信バッファ５００内の自由エントリの数を求める。メッセージ受信バッファ５００が一杯である場合には、メッセージ受信バッファ５００内でスペースが空くまで、さらに別のメッセージが受け取られることはない。一実施形態では、メッセージがインタコネクト１２５内に記憶されることがある。別の実施形態では、ドロップアウトされたメッセージを検出して再び送信するために、メッセージがメッセージ通信ドライバ１０６に依拠して廃棄されることがある。
【００３７】
次に図９から図１３を参照すると、これらの図には、新たなキャッシュラインサイズのメッセージをメッセージ受信バッファ５００に書き込む例が示されている。この例では、メッセージ受信バッファ５００は４つのキャッシュラインエントリから成り、および、循環カウンタ１７０がモジュロ３シーケンス０、１、２、０、１、２等を生成する。図９は、受信エンジン１５０によってメッセージが書き込まれていないメッセージ受信バッファ５００の初期状態を示す。メッセージ通信ドライバ１０６（図９には示されていない）はメッセージ受信バッファ５００を初期化し終わっており、したがって、全エントリスロット内の循環カウントフィールド６０５は、循環シーケンスの一部分としては発生しない値を有し、この場合にはこの値は３である。
【００３８】
図１０では、メッセージが受信ドメイン１３６内にすでに受信されており、０の値を伴ってメッセージ受信バッファ５００の第１のエントリの中に入れられている。その次のメッセージはまだ到着していない。メッセージ通信ドライバ１０６は、第１のエントリ内の第１のメッセージを取り扱うことを終える。例えば、メッセージ通信ドライバ１０６はメッセージ受信バッファ５００のメッセージをコピーし、それを他のソフトウェアに渡す。メッセージ通信ドライバ１０６は、到着することになっているその次のメッセージがメッセージ受信バッファ５００の第２のエントリの中に入れられるだろうということを知っている。第１のエントリに書き込まれたメッセージの循環カウントフィールド６０５が０だったので、メッセージ通信ドライバ１０６は、その次のメッセージが到着した時に、第２のエントリ内の循環カウントフィールド６０５が１になるだろうということを知っている。
【００３９】
その次のメッセージが到着しているかどうかを判定するために、メッセージ通信ドライバ１０６は第２のエントリから循環カウントフィールド６０５を読み取る。第２のエントリに対応するキャッシュラインは、プロセッサのキャッシュ１２７（図１０には示されていない）内に存在しても存在しなくてもよい。第２のエントリに対応するキャッシュラインが存在しない場合には（すなわち、このキャッシュラインがキャッシュ１２７内に「欠落している（ｍｉｓｓ）」場合には）、ＣＰＵ  １１０（図１０には示されていない）は、第２のエントリを含むメッセージ受信バッファ５００にアクセスし、第２のエントリのキャッシュラインをそのキャッシュ１２７内にインストールする。その次に、ＣＰＵ  １１０は、そのキャッシュ１２７内のインストールされたキャッシュラインからの循環カウントフィールド６０５の読取りを完了する。キャッシュラインがキャッシュ１２７内にすでに存在していなかった場合には、プロセッサ１１０は、そのキャッシュラインを得るために、メモリノード１１５（図１０には示されていない）に対する外部アクセスを行うことが必要だったということに留意されたい。しかし、そのキャッシュラインがすでにキャッシュ１２７内に存在していた場合には、外部アクセスは不要だった。
【００４０】
次のメッセージがまだ到着していないので、第２のエントリの循環カウントフィールド６０５は予測値１を持たない。メッセージ通信ドライバ１０６は、第２のエントリの循環カウントフィールド６０５の値が１になるのを待ちながら循環カウントフィールド６０５を「ポーリング」することによって（すなわち、繰り返し読取ることによって）次のメッセージの到着を待ち受ける。この時点で、第２のエントリに関連したキャッシュラインがプロセッサのキャッシュ１２７内に存在している。この結果として、これらの繰り返された読取りのすべてがプロセッサのキャッシュ１２７から直接的にそれらのデータを受け取る。これは、次のメッセージが到着していない限りは、ＣＰＵ  １１０がメッセージがまだ到着していないことを表示するために外部アクセスを行う必要がないので、有利である。
【００４１】
逐次的にアドレス指定されるキャッシュラインの循環カウントフィールド６０５内の循環シーケンス０、１、２、０、１、２等が中断されている時に、メッセージ受信バッファ５００に書き込まれた最終メッセージが検出される。この例では、第２のエントリの循環カウントフィールド６０５内の「３」がその循環シーケンス内で０の直ぐ後にないので、第１のエントリは最終メッセージを含む。
【００４２】
次のメッセージが到着すると、受信エンジン１５０はメッセージの循環カウントフィールド６０５を１に更新し、および、図１１に示されているように、メッセージ受信バッファ５００内の第２のエントリにそのメッセージを有効に書き込む。受信エンジン１５０は、第２のメッセージを書き込む時に、プロセッサキャッシュ１２７内のエントリのキャッシュラインの全コピーを無効化することによって第２のエントリの独占的な所有権を獲得する。
【００４３】
図１１では、第２のメッセージがメッセージ受信バッファ５００内に書き込まれた後に、循環シーケンスが０、１、３、３になる。１と３の間のシーケンスの中断が、第２のエントリが最終メッセージを含むことを表示する。
【００４４】
次に、第２のエントリ内の循環カウントフィールド６０５のその次のポーリング読取りがキャッシュミスを引き起こし、したがってプロセッサ１１０がその外部インタフェースを経由して作動し、メモリからキャッシュラインの新たなコピーを得る。この新たなコピーは、１に設定されたその循環カウントフィールドを有する新たに到着したメッセージを含み、したがってメッセージ通信ドライバ１０６は、次のメッセージがすでに到着しており、および、メッセージ受信バッファ５００内の第２のエントリから読取られることが可能であるということを知る。
【００４５】
別の実施形態では、受信エンジン１５０が、この受信エンジンがキャッシュラインの更新コピーを有するということをその他のすべてのキャッシュ１２７に通知してもよく、および、その次にＣＰＵ  １１０が受信エンジンのキャッシュ（図示されていない）からその新たなコピーを得るということを理解しなければならない。
【００４６】
図１２に示されているように、受信エンジン１５０は第３のメッセージを受信し、プロセッサのキャッシュ１２７内の第３のエントリのラインを無効化することによって第３のエントリの独占的な所有権を獲得し、そのシーケンス内の循環カウンタ６０５の予想値である「２」を挿入することによってそのメッセージを変更し、および、そのメッセージを第３のエントリに書き込む。その次の後続のアクセスでは、ＣＰＵ  １１０はメッセージ受信バッファ５００からキャッシュラインを読取って、それをＣＰＵ  １１０のキャッシュ１２７の中にインストールする。図１２では、第４のメッセージがメッセージ受信バッファ５００内に書き込まれると、循環シーケンスが０、１、２、０になる。この場合には、このシーケンスにおける中断は「０」と「０」との間であり、第４のエントリ（バッファ内の最終エントリ）が最終メッセージを含むことを表示する。
【００４７】
図１３では、第５のメッセージがすでに到着している。この例ではメッセージ受信バッファ５００が４つのエントリを含むので、第５のメッセージが第１のエントリに書き込まれる。この場合にはシーケンスは１、１、２、０である。この場合にこのシーケンスにおける中断は「１」と「１」との間であり、第１のエントリが最終メッセージを含むということを示す。このプロセスが循環的に続く。
【００４８】
有利なことに、循環カウンタ１７０を挿入することが、そのプロセッサキャッシュ１２７内のキャッシュラインサイズのメッセージ６００の循環カウントフィールド６０５を単にポーリングすることによって、メッセージ受信バッファ内に新たなキャッシュラインサイズのメッセージが到着する時点をシステム１００が検出することを可能にする。逐次的にアドレス指定されるキャッシュラインの循環カウントフィールド６０５内の循環シーケンスが中断される時に、メッセージ受信バッファ５００に書き込まれた最終メッセージが検出される。
【００４９】
次に、図１４を参照すると、この図には、循環カウンタ１７０を挿入する方法の流れ図が示されている。このプロセスは８０５で開始し、メッセージ要求が８１０で受信ドメイン１３６内に到着する。８２０においてこのメッセージ内のデータがＥＣＣ（誤り訂正コード）誤りに関して検査される。ＥＣＣは、単一の誤りの回復を可能にするために十分な詳細を含むビットのブロックの形に情報を符号化する。ＥＣＣは２、３、４ビット誤りを検出し、データ破損をシステム１００に通知する。ＥＣＣは３２ビットを保護するために７ビットを使用し、または、６４ビットを保護するために８ビットを使用する。データが８２０においてＥＣＣ誤りに関して検査された後に、そのデータは、８３０において、受信エンジン１５０とメモリ１１５との間のデータ経路内に存在する保持ＦＩＦＯ（先入れ先出し）ユニットの中に書き込まれる。データが８４０においてＦＩＦＯユニットから読み出されると、循環カウンタ１７０がそのメッセージの中に挿入され、新たなＥＣＣが８５０において再生成される。最後に、メッセージが８６０においてメッセージ受信バッファ５００内に書き込まれ、このプロセスが８７０において終了する。
【００５０】
（付記１）  送信ドメインと受信ドメインとに分割されており、かつ、前記送信ドメインと前記受信ドメインの各々は、インタコネクトを経由して互いに通信結合されているプロセッサノードとＩ／Ｏノードとメモリノードとを有するコンピュータシステムにおける、ドメイン間でのメッセージ受渡しの方法であって、
アドレスを含むキャッシュラインサイズの要求を、前記送信ドメインのアドレス空間内のメモリマップ入力／出力（ＭＭＩＯ）ウィンドウに書き込むことと、
前記アドレスの一部分を、前記ＭＭＩＯウィンドウが前記送信ドメインの前記アドレス空間内のどこで開始するかを表示する基底アドレスと比較することと、
前記基底アドレスに一致する前記アドレスの前記一部分に応答して、
前記受信ドメインを復号することと、
前記キャッシュラインサイズの要求を前記送信ドメインから前記受信ドメインに送信することと、
を含む方法。
【００５１】
（付記２）  さらに、書込み結合機構を使用して前記キャッシュラインサイズの書込み要求の中の複数のプロセッサ書込み要求を内部的に結合することを含む、付記１に記載の方法。
【００５２】
（付記３）  送信ドメインと受信ドメインとを含み、前記送信ドメインと前記受信ドメインの各々は複数のＣＰＵノードを含み、および、前記ＣＰＵノードの各々は少なくとも１つのキャッシュメモリに通信結合されているコンピュータシステムにおける、キャッシュラインサイズの要求が前記受信ドメイン内に到着するときにインメモリ通知を提供する方法であって、
前記キャッシュラインサイズのメッセージを受信する段階と、
前記受信ドメイン内に存在するメッセージ受信バッファ内の次のキャッシュラインエントリの独占的な所有権を獲得する段階と、
前記受信されたキャッシュラインサイズのメッセージ内の循環カウントフィールドを変更する段階と、
前記メッセージ受信バッファ内の前記独占的に所有されたキャッシュラインエントリに対して、前記受信されたキャッシュラインサイズのメッセージを書き込む段階と、
循環シーケンスの連続を検出するために前記受信されたキャッシュラインの前記循環カウントフィールドをポーリングする段階と、
少なくとも１つのプロセッサキャッシュメモリ内のミスを発生させる段階と、
前記少なくとも１つのプロセッサキャッシュメモリ内に前記受信されたキャッシュラインサイズのメッセージをインストールする段階と、
最終メッセージが前記メッセージ受信バッファ内に書き込まれる時点を通知するために前記少なくとも１つのプロセッサキャッシュメモリ内の前記インストールされたキャッシュラインサイズのメッセージの前記循環カウントフィールドをポーリングする段階と、
を反復的に行うことを含む方法。
【００５３】
（付記４）  前記メッセージ受信バッファ内に書き込まれた前記最終メッセージを、逐次的にアドレス指定されるキャッシュライン内の前記循環カウントフィールドの循環シーケンスが中断されるときに検出する、付記３に記載の方法。
【００５４】
（付記５）  循環カウンタを挿入する前記段階は、さらに、新たなキャッシュラインサイズのメッセージが前記メッセージ受信バッファ内に書き込まれるときに新たな値で前記循環カウントフィールドをオーバライトすることを含む、付記３に記載の方法。
【００５５】
（付記６）  前記循環カウンタはモジュロＮカウンタであり、Ｎは前記メッセージ受信バッファ内のキャッシュラインの数に対してプライムである、付記３に記載の方法。
【００５６】
（付記７）  さらに、
誤り訂正コード（ＥＣＣ）を使用して誤りに関して前記キャッシュラインサイズのメッセージを検査することと、
保持ＦＩＦＯユニットに前記キャッシュラインサイズのメッセージを書き込むことと、
前記ＥＣＣコードを再生成することと、
を含む、付記３に記載の方法。
【００５７】
（付記８）  インタコネクトによって互いに接続されている送信ドメインと受信ドメインとの間で複数のメッセージを送信するためのコンピュータシステムであって、前記ドメインの各々は、
複数のキャッシュラインサイズの書込みを各々が送出する複数のＣＰＵと、
前記受信ドメインに対する前記複数のキャッシュラインサイズの書込みを送り出すための、前記送信ドメイン内に存在する送信エンジンと、
前記受信ドメインのコヒーレント空間内に存在するメッセージ受信バッファに対して前記キャッシュラインサイズの書込みを書き込むための、前記受信ドメインに存在する受信エンジンと、
を含むコンピュータシステム。
【００５８】
（付記９）  各ＣＰＵは、書込み結合属性を使用する複数のキャッシュラインサイズの書込みを生じさせる、付記８に記載のシステム。
【００５９】
（付記１０）  前記送信エンジンは、前記受信ドメインに対する前記キャッシュラインサイズのメッセージを送り出す前に行先ドメインを復号する、付記８に記載のシステム。
【００６０】
（付記１１）  前記受信エンジンは、前記メッセージ受信バッファに前記メッセージを書き込む前にプロセッサキャッシュ内の前記メッセージ受信バッファキャッシュラインの既存のコピーを無効化する、付記８に記載のシステム。
【００６１】
（付記１２）  各ＣＰＵは、メモリマップ入力／出力（ＭＭＩＯ）ウィンドウに対する前記キャッシュラインサイズの書込みを送出し、前記ＭＭＩＯウィンドウにアクセスするために使用されるアドレスは、
前記キャッシュラインサイズのメッセージが前記ＭＭＩＯに書き込まれるときに前記送信エンジンによって復号される前記受信ドメインを表示するためのドメインフィールド、
を含む、付記８に記載のシステム。
【００６２】
（付記１３）  各ＣＰＵは、ＭＭＩＯウィンドウに対する前記キャッシュラインサイズの書込みを送出し、前記ＭＭＩＯウィンドウにアクセスするために使用されるアドレスは、
前記ＭＭＩＯウィンドウ内に書き込まれることが可能なキャッシュラインの数を表示するサイズフィールド、
を含む、付記８に記載のシステム。
【００６３】
（付記１４）  前記メッセージ受信バッファは２W個のキャッシュラインを記憶し、および、前記記憶されたキャッシュラインの数は循環カウンタのモジュラスに対してプライムである、付記８に記載のシステム。
【図面の簡単な説明】
【図１】本発明の実施形態による複数のドメインに分割されたマルチノードコンピュータシステムのアーキテクチャ全体のブロック図である。
【図２】本発明の実施形態による送信ドメインのアドレス空間のブロック図である。
【図３】送信ドメインのアドレス空間内のＭＭＩＯウィンドウにアクセスするために使用されるアドレスの好ましい形式のブロック図である。
【図４】送信ドメインにおいて図１の実施形態によって行われるメッセージ受渡しプロトコルの流れ図である。
【図５】本発明の一実施形態における受信ドメインのメモリ内に存在するメッセージ受信バッファのブロック図である。
【図６】図５の実施形態のメッセージ受信バッファにアクセスするために使用されるアドレス形式を示す。
【図７】本発明の実施形態によるキャッシュラインサイズのメッセージを示す。
【図８】受信ドメインにおいて図１の実施形態によって行われるメッセージ受渡しプロトコルの流れ図である。
【図９】メッセージ受信バッファに対する新たなメッセージの書込みの例である。
【図１０】メッセージ受信バッファに対する新たなメッセージの書込みの例である。
【図１１】メッセージ受信バッファに対する新たなメッセージの書込みの例である。
【図１２】メッセージ受信バッファに対する新たなメッセージの書込みの例である。
【図１３】メッセージ受信バッファに対する新たなメッセージの書込みの例である。
【図１４】図１の実施形態によって行われる循環カウンタを挿入する方法の流れ図である。
【符号の説明】
１００…マルチノードコンピュータシステム
１３０、１３５、１３６…ドメイン
１１０ａ−１１０ｎ…中央処理ユニット
１１５ａ−１１５ｎ…メモリノード
１２０ａ−１２０ｎ…入力／出力ノード
１２５…インタコネクト
１２７…プロセッサキャッシュ
【図１】
0003996454.tif 000002
【図２】
0003996454.tif 000003
【図３】
0003996454.tif 000004
【図４】
0003996454.tif 000005
【図５】
0003996454.tif 000006
【図６】
0003996454.tif 000007
【図７】
0003996454.tif 000008
【図８】
0003996454.tif 000009
【図９】
0003996454.tif 000010
【図１０】
0003996454.tif 000011
【図１１】
0003996454.tif 000012
【図１２】
0003996454.tif 000013
【図１３】
0003996454.tif 000014
【図１４】
0003996454.tif 000015