(57)【特許請求の範囲】
【請求項１】
複数のスレッドをサポートするマルチスレッドプロセッサによるメモリアクセスを制御するためのシステムであって、
プロセッサコアと、
複数のスレッドの各々によってアクセス可能なデータを記憶するキャッシュメモリと、  前記複数のスレッドによってアクセス可能なデータを記憶するメインメモリと、
非一貫性検出モジュールと、
メモリアービターであって、前記非一貫性検出モジュールが、前記プロセッサコアと該メモリアービターの間に接続され、該メモリアービターが、該非一貫性検出モジュールと前記メインメモリの間に接続され、前記キャッシュメモリから該メモリアービターに送信された読取及び書込要求のための各スレッドに対して個別の要求待ち行列が存在するメモリアービターと、
を含み、
使用において、前記非一貫性検出モジュールは、前記キャッシュメモリから前記メインメモリに送信された各書込要求に対するメモリアドレスの指示を書込アドレスメモリに記憶し、かつ該キャッシュメモリから該メインメモリに送信された各次の読取要求のアドレスを該書込アドレスメモリ内の指示と比較し、該次の読取要求のアドレスが指示に適合する場合に、該読取要求に対応する障壁を該適合指示が属する前記スレッドの前記要求待ち行列内に挿入し、前記メモリアービターは、前記対応する障壁が該メモリアービターによって受信されるまで、前記次の読取要求が前記メインメモリにアクセスすることを阻止する、
ことを特徴とするシステム。
【請求項２】
前記非一貫性検出モジュールは、サイドバンドデータを前記次の読取要求に添付することを特徴とする請求項１に記載のシステム。
【請求項３】
前記サイドバンドデータは、対応する障壁が挿入された前記要求待ち行列内にこれらのスレッドのリストを含め、
前記次の読取要求は、前記対応する障壁の全てが前記メモリアービターによって受信されるまで、前記メインメモリへのアクセスを阻止される、
ことを特徴とする請求項２に記載のシステム。
【請求項４】
前記非一貫性検出モジュールは、現在のタイムスタンプを各要求に添付するとともに、読取要求の前記アドレスが前記書込アドレスメモリ内の１つ又はそれよりも多くの指示に適合する毎に前記現在のタイムスタンプを更新することを特徴とする請求項１乃至３のいずれか一項に記載のシステム。
【請求項５】
前記非一貫性検出モジュールは、前記書込要求の前記メモリアドレスが属するアドレス範囲を該書込アドレスメモリに記憶することにより、該書込要求のメモリアドレスの指示を記憶することを特徴とする請求項１乃至４のいずれか一項に記載のシステム。
【請求項６】
前記非一貫性検出モジュールは、単一アドレス範囲エントリにおける複数のアドレスを前記書込アドレスメモリに記憶し、
前記アドレス範囲のサイズは、動的に変更することができる、
ことを特徴とする請求項５に記載のシステム。
【請求項７】
前記プロセッサコアからメモリバスに送信された各書込要求に対するメモリアドレスの前記指示は、前記非一貫性検出モジュールにおけるスレッド特定の書込アドレスメモリに記憶され、該非一貫性検出モジュールは、前記次の読取要求の前記アドレスを他のスレッドの各々の該書込アドレスメモリ内の指示と比較することを特徴とする請求項１乃至６のいずれか一項に記載のシステム。
【請求項８】
各スレッドが、特定の書込アドレスメモリを有し、
スレッドに対する書込アドレスメモリ内の全てのエントリが、障壁がそのスレッドに対する前記要求待ち行列に追加された時に削除される、
ことを特徴とする請求項１乃至７のいずれか一項に記載のシステム。
【請求項９】
前記障壁は、前記対応する読取要求が属する前記スレッドを識別するデータを含むことを特徴とする請求項１乃至８のいずれか一項に記載のシステム。
【請求項１０】
前記障壁は、前記適合指示が属する前記スレッドの前記要求待ち行列における既存の要求に添付された障壁サイドバンドデータを含むことを特徴とする請求項１乃至９のいずれか一項に記載のシステム。
【請求項１１】
前記適合指示が属する前記スレッドの前記要求待ち行列に要求が存在しない時に、前記障壁は、該要求待ち行列内に挿入された新しい要求に添付された障壁サイドバンドデータを含むことを特徴とする請求項１乃至９のいずれか一項に記載のシステム。
【請求項１２】
前記非一貫性検出モジュールは、前記適合指示が属する前記スレッドの前記要求待ち行列内に障壁を以前の障壁がそのスレッドに対して挿入されてからそのスレッドからの前記キャッシュメモリから要求が送信されていた場合にのみ挿入することを特徴とする請求項１乃至１１のいずれか一項に記載のシステム。
【請求項１３】
プロセッサコア、複数のスレッドの各々によってアクセス可能なデータを記憶するキャッシュメモリ、該複数のスレッドによってアクセス可能なデータを記憶するメインメモリに接続されたメモリバス、及び各スレッドに対する書込アドレスメモリを含むマルチスレッドプロセッサにおけるスレッドによるグローバルメモリへのアクセスを制御する方法であって、
（ａ）各スレッドに対して、前記メインメモリへの各書込要求のメモリアドレスの指示を対応する書込アドレスメモリに記憶する段階、
（ｂ）次の読取要求のメモリアドレスを他のスレッドの前記書込アドレスメモリのコンテンツと比較する段階、及び
（ｃ）前記読取要求の前記メモリアドレスが書込アドレスメモリ内の指示に対応する場合に、前記対応する書込要求が属する前記スレッドの要求待ち行列内に障壁を挿入し、かつ対応する障壁が前記メインメモリによって受信されるまで、該読取要求が該メインメモリにアクセスすることを阻止する段階、
を含むことを特徴とする方法。
【請求項１４】
スレッドに対する書込アドレスメモリ内の全てのエントリを障壁がそのスレッドの前記要求待ち行列に追加された時に削除する段階を更に含むことを特徴とする請求項１３に記載の方法。
【請求項１５】
前記障壁は、対応する読取要求が属するスレッドを識別するデータを含むことを特徴とする請求項１３又は１４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチスレッドプロセッサに関し、特に、マルチスレッドプロセッサにおける複数のスレッドによってアクセスされるキャッシャメモリとメインメモリ間のデータ非一貫性の問題に関する。
【背景技術】
【０００２】
マルチスレッドプロセッサは、複数の異なる命令シーケンス（又はスレッド）を同時に処理することができる。スレッドの実行中に、データ及び命令は、メモリからアクセスされなくてはならない。従って、異なるスレッドは、メモリ及び時にはメモリの同じ部分に同時にアクセスする必要がある場合がある。従って、メモリアクセスに対してスレッド間に何らかのアービトレーションが必要である。
【０００３】
マルチスレッドプロセッサは、典型的には、図１に示すように、最も一般的にアクセスされるデータ及び命令を収容する命令キャッシュ及びデータキャッシュを有する。要求されるデータ又は命令がキャッシュで見つからなかった場合、メモリバス上でのメモリへのアクセスを要求しなくてはならない。メモリへのアクセスは、スレッドが互いに衝突しないように制御しなくてはならない。この理由のために、命令及びデータキャッシュからの異なるスレッドからのメモリアクセスの各々は、メモリアービターモジュールまでのそれら独自の専用データ経路を有する。
【０００４】
図１は、従来技術によるマルチスレッドプロセッサのメモリアクセスシステムの概略図である。プロセッサコア１０で実行されるスレッドは、データ及び命令キャッシュ１１、１２からデータ及び命令を要求することができる。命令及びデータキャッシュの各々は、それらに関連付けられたメモリ管理ユニットを有する。要求されたデータ又は命令がキャッシュの１つになかった場合、要求は、メモリバスに通される。異なるスレッドからの要求の間を仲裁するために、要求は、最初にそのスレッドに対する要求を順序付けるスレッドアービター１３、１４を通して、かつ次にメモリバスへのアクセスを制御するメモリアービター１５を通して経路指定される。
【０００５】
メインメモリ内では、データは、典型的には、キャッシュラインと呼ばれる固定数のビットの単位で記憶され、かつアクセス可能である。従って、メモリからメモリアドレスを読み取るために、そのアドレスを収容するキャッシュライン全体をフェッチしなくてはならない。キャッシュラインの２つのタイプが存在する。一方のタイプは、特定のスレッドに対するデータを記憶するのみであるローカルキャッシュラインである。他方は、異なるスレッドによってアクセス可能なデータを記憶するグローバルキャッシュラインである。データピースが、グローバル又はローカルキャッシュラインに記憶されるか否かは、その線形アドレスに依存する。本発明は、スレッド間で共有されるメモリリソース、すなわち、グローバルキャッシュラインに関するものである。
【０００６】
グローバルキャッシュラインは、キャッシュライン内の異なるワード位置に異なるスレッドによって入力されたソフトウエアローカル変数の値を記憶することができると考えられる。スレッドＴｘがキャッシュラインからそのローカル変数を読み取った時、その最後に書かれた値を取り戻すことが予想される。しかし、他のスレッドによる同じキャッシュライン内のそれらのローカル変数へのアクセスがスレッドＴｘに古い間違った値を読み取らせるという状況が、書込スルーデータキャッシュを使用した時に起こる可能性がある。これが起こった時、Ｔｘは、「データが非一貫性」になったと呼ばれる。
【０００７】
図２ａ及び２ｂの各々は、スレッドＴ０上でデータ非一貫性を起こす異なるスレッドによるアクセスの例示的なシーケンスを示している。
【０００８】
図２ａを参照すると、Ｔ０は、書込要求により、最初にそのローカル変数Ａにアクセスする。次に、Ｔ１は、読取要求により、そのローカル変数Ｂにアクセスする。Ａ及びＢの物理アドレスは、これらが同じグローバルデータキャッシュライン内でキャッシュに入れられるようなものである。最初にＡ及びＢの両方はキャッシュにはない。
【０００９】
読取要求は、典型的には、書込要求よりはメモリバスに到達するための時間がかからない。この場合、Ｔ１読取は、Ｔ０書込の前にメモリに到達する。この結果、キャッシュラインの古い値が、データキャッシュに記憶される。Ｔ０書込要求は、データキャッシュではなく、メモリバスにのみ書き込む。従って、データキャッシュからのキャッシュラインの次の読取は、Ｔ１読取の結果としてデータキャッシュに記憶されている古い値をフェッチすることになる。
【００１０】
図２ｂを参照すると、ここでもまた、Ａ及びＢの両方が同じキャッシュラインにあり、最初はデータキャッシュにはない。Ｔ１は、最初に、読取要求によってメモリバスからＢにアクセスする。Ｂがフェッチされる前に、すなわち、読取要求がデータキャッシュを離れた時間とＢを収容するキャッシュラインがデータキャッシュに記憶された時間との間に、Ａに対する書込要求がＴ０からメモリバスに出される。ここでもまた、Ｔ０からの書込は、データキャッシュに書き込まれず、従って、データキャッシュは、次の読取要求によってアクセスされることになるキャッシュラインの古いバージョンを保持する。
【発明の概要】
【発明が解決しようとする課題】
【００１１】
図から分るように、複数のスレッドがメモリバスからグローバルキャッシュメモリにアクセスした時、データ非一貫性が、特に、書込スルーキャッシュを発生させる可能性がある。本発明は、非一貫性の障害を検出することにより、かつ読取又は書込命令がそれを行うことが安全である時にだけメモリバスから出されることを保証する機構を使用することにより、この問題に対処することを目的とする。
【課題を解決するための手段】
【００１２】
本発明は、添付の独立請求項に定められている。好ましい特徴は、従属請求項に定められている。
【００１３】
ここで、本発明の実施例を添付の図面に関連して以下に説明する。
【図面の簡単な説明】
【００１４】
【図１】従来のマルチスレッドプロセッサコアのメモリアクセスシステムを示す図である。
【図２ａ】キャッシュ非一貫性をもたらすメモリアクセスのシーケンスを示す図である。
【図２ｂ】キャッシュ非一貫性をもたらすメモリアクセスのシーケンスを示す図である。
【図３】本発明によるシステムを示す概略図である。
【図４】本発明による例示的なグローバル書込アドレスメモリの作動を示す図である。
【図５】図３のシステムで使用される非一貫性検出モジュールを示す図である。
【図６】図３のシステムで使用されるメモリアービターを示す図である。
【図７】アービターでの順序強制を示す図である。
【発明を実施するための形態】
【００１５】
図２ａ及び２ｂに示すように、データ非一貫性は、異なる状況から生じる可能性があり、これは、個別に扱うことができる。図２ａで示す非一貫性は、第１の機構を使用して防ぐことができ、図２ｂで示す非一貫性は、第２の機構を使用して防ぐことができる。
【００１６】
図３は、本発明の第１の態様によるシステムの概略図である。図３は、図２ａに関して説明した状況から起こる可能性があるデータ非一貫性を防ぐメモリバスからデータにアクセスするためのシステムを示している。本発明は、データ非一貫性、及び従ってデータへのアクセスに関するものであるから、メモリバスからの命令フェッチのための経路は、分かり易いように省略する。
【００１７】
システムは、プロセッサコアに接続したデータキャッシュメモリ管理ユニット３０、メモリ管理ユニットに接続したスレッドアービター３１、３２、及びスレッドアービターとメモリバス間に接続したメモリアービター３３を含む。
【００１８】
データキャッシュメモリ管理ユニット内に、データキャッシュそれ自体３４及びアドレス変換などのための関連のメモリ管理機能、並びに非一貫性検出モジュールがある。
【００１９】
図１に示すシステムのように、図２のシステムでは、プロセッサコアで実行されるスレッドが読取又は書込要求を出した時に、この要求は、データキャッシュＭＭＵ３０に経路指定される。読取要求では、データがデータキャッシュ３４にある場合、これは、即座にフェッチされて使用される。それがデータキャッシュにない場合、メモリバス上のメモリにアクセスしなくてはならない。書込スルーキャッシュでの書込要求では、書込要求は、常に、メモリバスにアクセスする。データキャッシュに関連付けられたメモリ管理ユニット（ＭＭＵ）機能は、プロセッサで実行されるプログラムによって使用される仮想メモリアドレスをメモリバス上の物理メモリアドレスに変換することになる。
【００２０】
本発明の１つの態様では、非一貫性検出モジュール３５が、グローバル読取要求及びグローバル書込要求から生じる非一貫性に対処するために提供される。本明細書で使用される「グローバル書込要求」及び「グローバル読取要求」という語は、複数のスレッドによって共有されるメモリの一部分への要求を意味する。データキャッシュ３４からのグローバル読取及び書込要求は、メモリアービター３３及び次にメモリバスに到達する前に、最初に、非一貫性検出モジュール３５を通過しなくてはならない。非一貫性検出モジュールは、図５に更に詳しく示されている。
【００２１】
非一貫性検出モジュールは、３つの機能を有する。１つは、以前のグローバル書込要求の物理アドレスの記録を維持することである。別のものは、あらゆる着信グローバル読取のアドレスを以前の書込要求の記録と比較し、同じグローバルキャッシュラインへの過去の書込があるかを判断することである。最後は、メモリアービター３３が非一貫性検出モジュール３５によって意図されるようなメモリバスに要求を出すための順序を強制することができるように、比較情報を使用して「順序強制サイドバンド」を各要求に追加する（又は、個別の「障壁要求」を挿入する）ことである。この機構は、性能劣化を起こすと考えられるメモリアービターの前の様々なモジュールを通るデータフローの停止又は失速を生じない。
【００２２】
全ての以前のグローバルキャッシュ書込の個々の物理アドレスの記録を維持することは、実施には実際的でないメモリの無限量を必要とする。代替としては、グローバル書込要求の個々のアドレスを代わりにアドレスの範囲に圧縮することである。この実施形態では、非一貫性検出モジュールは、各スレッドに対する「グローバル書込アドレスメモリ（ＧＷＡＭ）」を含む。各ＧＷＡＭは、少数のデータ記憶スロットから構成され、各々は、重なっていないアドレス範囲を記憶する。
【００２３】
図４は、本発明による例示的なＧＷＡＭがどのように作動するかを示している。図４ａは、４つのメモリスロットを有するＧＷＡＭを示している。メモリスロットは、最初は空である。各メモリスロットは、４つのフィールド、すなわち、有効フラグフィールド、３２ビットバイトアドレスフィールド（ＴＡＧ）、上位アドレス範囲サイズマスク（ＭＵ）、及び下位アドレス範囲サイズビットマスク（ＭＬ）を有する。
【００２４】
有効フラグは、記録された書込アドレスがメモリスロット内にあるかを単純に指示する。ＴＡＧフィールドは、スロットによって網羅されるメモリアドレスの範囲内のアドレスを指示する。
【００２５】
ＭＵ及びＭＬフィールドは、スロットによって網羅されるメモリアドレス範囲を定義する。網羅されるアドレス範囲に対して、下位アドレス＝ＴＡＧ  ＆＆（ＭＵ  ＆  ＭＬ）であり、ここで、＆＆は、ビットＡＮＤ演算を表し、＆は、ベクトル連結を表している。上位アドレス＝ＴＡＧ‖！（ＭＵ  ＆  ＭＬ）であり、ここで、‖は、ビットＯＲ演算を表している。例えば、１６進表記を使用して、ＴＡＧ  ＝  ０ｘＡＡＡＡＡＡ３４に対して、ＭＬ  ＝  ０ｘＦＦＦＦ００、ＭＵ  ＝  ０ｘＦＦ、アドレス範囲＝０ｘＡＡＡＡＡＡ００から０ｘＡＡＡＡＡＡＦＦである。
【００２６】
第１の書込アドレスが記録された時、これは、ＧＷＡＭのメモリスロットに割り当てられる。これは、図４ｂに示されている。スロットの全てがこの前に空であるので、データを圧縮する必要はない。この場合は０ｘＢ１００００００である書込アドレスは、最小アドレス範囲で第１のスロットに記憶される。
【００２７】
第２の書込アドレス０ｘＡ０００００００がＧＷＡＭに記憶される時、これは、ここでもまた最小範囲により、第２のスロットに記憶される。これは、図４ｃに示されている。
【００２８】
別のスロットのＭＵフィールドによって定義されたアドレス範囲に収まることができる第３の書込アドレスが出された時、これは、そのスロットに配置され、ＭＬフィールドが、新しいアドレスを入れるために変更される。図４ｄはこれを示している。図４ｄでは、新しい書込要求は、アドレス０ｘＢ１０００００４に対してのものである。このアドレスは、ＭＬの値を変更する（更にＭＵを変化させないでおく）ことによって第１のスロット内に圧縮することができるので、それは、第１のスロット内に圧縮される。
【００２９】
図４ｅ及び４ｆは、既存のスロット内に圧縮できない更に２つの書込要求アドレス０ｘ８０００００００及び０ｘ９０００００００の追加を示している。これらのアドレスの追加の後、スロットの全てが使用される。
【００３０】
図４ｇは、新しい要求アドレス０ｘＣ０００００００の次の追加を示している。このアドレスは、いずれのスロットにも圧縮できず、スロットの全てが満杯であるので、既存のスロットの全ては、第１のスロットにおいて１つの範囲内に圧縮される。こうして、着信書込要求アドレスに利用可能な３つのスロットが存在する。
【００３１】
このＧＷＡＭ構成は、小さなメモリに書込アドレスに関する十分な情報を記憶することを可能にする。必要がないのに挿入される一部の障壁をもたらすことがあるが、実際には、この妥協は、性能にそれ程影響を与えない。
【００３２】
図５は、図３の非一貫性検出モジュールの構成要素部分を示している。スレッドＴｘからの要求を受信すると、非一貫性検出モジュールは、最初に、これがグローバルキャッシュラインへの読取要求又は書込要求かをブロック５００で判断する。
【００３３】
これがグローバル書込要求である場合、スレッドＴｘに対するＧＷＡＭは、図４に関して上述したように更新される。
【００３４】
図５は、ブロック５１０において、各スレッドに対して非一貫性検出モジュールによって維持されるメモリ及びレジスタを示している。ＧＷＡＭは、ブロック５１５として示されている。同じく含まれるのは、メモリアービターに通されるのを待っているＦＩＦＯ５８０においてそのスレッドに対して待ち行列に入れられている要求の数の記録であるバッファカウントレジスタ５２０、１又は０の値を取り、更にそのスレッドに対する最後の障壁以来のそのスレッドに対するデータキャッシュからのいずれかの要求が通されたかを指示する最後の障壁バッファ空（ＬＢ_ｂｕｆｆ_ｅｍｐｔｙ）レジスタ５２５、及びＦＩＦＯ５８０における各要求に対する識別値を提供する要求ＩＤ（ｒｅｑ_ｉｄ）である。
【００３５】
これがスレッドＴｘからのグローバル読取要求である場合、要求は、比較器ユニット５３０に通される。比較器ユニット５３０は、グローバル読取要求のメモリアドレスが、他のスレッドのＧＷＡＭのいずれにおいてもアドレス範囲に収まるかを調べるために検査する。
【００３６】
読取要求アドレスが、別のスレッドのＧＷＡＭにおけるアドレス範囲に収まらない場合、読取要求は、いずれの障壁フラグ又は障壁要求の挿入もなしにメモリアービターに通すことができる。
【００３７】
しかし、読取要求アドレスが、別のスレッドのＧＷＡＭの記憶されたアドレス範囲内に収まる場合（以下では、本明細書で適合スレッドと呼ぶ）、要求は、各適合スレッドに対するＬＢ_ｂｕｆｆ_ｅｍｐｔｙレジスタの値を判断するブロック５４０に通される。ＬＢ_ｂｕｆｆ_ｅｍｐｔｙレジスタが、適合スレッドに対して値０を有する場合（すなわち、最後の障壁が挿入されてからはそのスレッドに対して要求が待ち行列に入れられていない場合）、更に別の障壁を挿入する必要はない。しかし、ＬＢ_ｂｕｆｆ_ｅｍｐｔｙレジスタが、適合スレッドに対して値１を有する場合、非一貫性の問題が起こらないようにするために、そのスレッドに対して障壁を挿入すべきである。
【００３８】
障壁を挿入することができる２つの方法がある。障壁は、既存の要求に添付されるサイドバンドデータとして挿入することができ、又は添付されたサイドバンドデータを有する新しい要求を含む個別の「障壁要求」として挿入することができる。問題のスレッドに対してＦＩＦＯ５８０において待ち行列に入れられている要求が存在する場合、障壁が、サイドバンドデータとしてＦＩＦＯでの最後の要求に追加される。ＦＩＦＯ５８０でそのスレッドに対して待ち行列に入れられた要求が存在しない場合、障壁サイドバンドデータを添付するものは何もない。この場合、障壁は、添付された障壁サイドバンドデータを有する新しい障壁要求の形式を取らなくてはならない。ブロック５４５において、非一貫性検出モジュールは、各適合スレッドに対するバッファカウントが０に等しいかを判断する。
【００３９】
バッファカウントが０に等しい場合、この障壁は、新しい障壁要求として挿入される。これは、ブロック５６５で指示されている。同時に、ブロック検査データと呼ばれるサイドバンドデータが、読取要求に追加され、各要求に添付されるタイムスタンプが、増分又はトグルされる。ブロック検査データは、障壁が挿入されている全ての適合スレッドのスレッドＩＤを含む。次に、要求は、これらがメモリアービターに出されるまでスレッド毎ＦＩＦＯ５８０において待ち行列に入れられる。「タイムスタンプ」という語は、本明細書では、変更された時に新しい期間をマーク付けする時間に関するデータピースを意味するのに使用される。好ましい実施形態では、タイムスタンプは、０又は１の値を有することができる１ビットフィールドである。
【００４０】
バッファカウントが、障壁が挿入される適合スレッドに対して０に等しくない場合、障壁は、サイドバンドデータとしてＦＩＦＯ５８０の最後の要求に添付される。しかし、障壁サイドバンドデータは、要求がＦＩＦＯ５８０を出た後でないと追加することができない。バックエンド障壁インサートＦＩＦＯ５５０が、従って、各スレッドに対して提供される。このＦＩＦＯ５５０は、障壁が添付される要求のスレッドＩＤを対応するグローバル読取要求のＩＤを含む障壁データ自体と共に記憶する。
【００４１】
説明した検査の全てに続いて、各スレッドに対する読取及び書込要求は、スレッド毎要求ＦＩＦＯ５８０において待ち行列に入れられる。多重化機能５７０が、図５に示され、要求及び障壁が適切なスレッドＦＩＦＯ５８０に経路指定されることを示している。ブロック５６５からの矢印は、挿入のための障壁要求を示している。図の上部からの矢印は、マルチプレクサ５７０を通してスレッド毎ＦＩＦＯに追加される読取及び書込要求を示している。障壁が、個別の障壁要求として挿入される場合、これは、正しいスレッド要求ＦＩＦＯにおいて待ち行列に入れられ、対応する読取要求は、そのスレッド要求ＦＩＦＯにおいて待ち行列に入れられる。
【００４２】
バックエンド障壁インサート検査段５６０が、各要求ＦＩＦＯ５８０の出口に提供される。ＦＩＦＯ５８０を離れるあらゆる要求が、対応するバックエンド障壁インサートＦＩＦＯ５５０での第１のエントリに対して検査される。適合性がある場合、サイドバンドデータが、メモリアービターに送信される前に要求に添付される。
【００４３】
サイドバンドデータ又は個別の障壁要求のいずれかとしての障壁が要求待ち行列に含まれる時、そのスレッドに対するＧＷＡＭは、瞬時に消去される。これらのメモリアドレスエントリに関連付けられたいずれの非一貫性の障害もこれ以上存在しない時、ＧＷＡＭにおける全てのエントリを消去することができる。
【００４４】
要約すると、順序強制をサポートするために、非一貫性検出モジュールは、着信読取アドレスがＧＷＡＭアドレス範囲スロットの１つの中に収まる時に以下の段階を実行する。
１）１つを必要とするスレッドに対する障壁要求を出す。
２）適切なブロック検査サイドバンドデータを読取要求に割り当てる
３）あらゆる読取／書込に添付される内部１ビットタイムスタンプをトグルする。
４）障壁要求を出されたスレッドのＧＷＡＭを瞬時に消去する。
【００４５】
図６は、この実施形態による順序強制メモリアービターの機能的ハードウエアブロックを示している。
【００４６】
メモリアービターは、障壁ステータスレジスタ６００及び現在のタイムスタンプレジスタ６０５を維持する。障壁ステータスレジスタ６００は、障壁がスレッドアービター６１０を通して出されているか及びどのスレッドからかを指示する。障壁ステータスレジスタは、メモリアービターの内部タイムスタンプが増分又はトグルされる度にクリアされる。内部タイムスタンプは、ブロック検査サイドバンドデータを有する読取要求がスレッドアービターによって出される度に増分又はトグルされる。タイムスタンプレジスタは、単純に現在のタイムスタンプ値の記録である。
【００４７】
非一貫性検出モジュールから到着した要求がブロック検査サイドバンドデータを有するグローバル読取要求であるかは、ブロック６１５において最初に判断される。これが、ブロック検査サイドバンドデータを有するグローバル読取要求である場合、ブロック６２０において、メモリアービターは、ブロック検査サイドバンドデータの障壁データを読み取り、これを障壁ステータスレジスタに対して検査し、関連の障壁が全てスレッドアービター６１０によって出されているかを判断する。関連の障壁の全てが出されている場合、グローバル読取要求は、スレッドアービターに公開される。関連の障壁の全てがスレッドアービターによって出されていない場合、グローバル読取要求は、メモリアービターの入力で阻止される。これらの検査は、グローバル読取要求が公開されるまで繰り返される。
【００４８】
要求がグローバル読取要求ではない場合、ブロック６２５でのブロック検査サイドバンドデータにより、そのタイムスタンプは、現在のタイムスタンプレジスタに記憶されている内部タイムスタンプ値と比較される。タイムスタンプが適合した場合、要求は、スレッドアービターに公開される。タイムスタンプが適合しなかった場合、要求は阻止される。このタイムスタンプ検査は、タイムスタンプが適合し、要求が公開されるまで繰り返される。
【００４９】
スレッドアービター６１０は、全てのスレッドに対する公開された要求を受信し、ラウンドロビン技術のようなアービトレーション技術を使用して、メモリバスへのアクセスのためにスレッド間を仲裁する。あらゆる望ましい計量法をスレッド間を仲裁するためにスレッドアービターにおいて使用することができる。
【００５０】
障壁を含む要求（又は個別の障壁要求）及びブロック検査サイドバンドデータを有するグローバル読取要求が、スレッドアービターによって出された時、障壁ステータスレジスタ及びタイムスタンプレジスタは、上記に説明して図６に示すように更新される。要求は、ブロック６３０及び６３５において、ブロック検査サイドバンドデータを有するグローバル読取要求に対して及び障壁に対して検査される。障壁が検出された場合、障壁ステータスレジスタが、ブロック６４０において更新される。ブロック検査サイドバンドデータを有するグローバル読取要求が検出された場合、障壁ステータスレジスタはクリアされ、タイムスタンプレジスタにおける内部タイムスタンプがブロック６４５においてトグルされる。
【００５１】
その全体的な効果は、その前の全てのスレッドからの全てのメモリ要求が出されるまで、問題の読取に続くいずれの要求もメモリアービターによって出されないということである。ＧＷＡＭコンテンツは、将来の着信要求がそれらに追い着くことができないように強制機構が保証しているので、障壁要求を出しているスレッドに対して消去することができる。
【００５２】
図２ａの例示的なシーケンスを参照すると、Ｔ１_Ｒｅａｄ_ｔｏ_Ｃ１が検出モジュール入力に呈示される時、ＧＷＡＭからの適合性は、検出モジュールによる以下のアクションを起こすと考えられる。
−他の非要求側スレッドＴ０への障壁要求Ｔ０_Ｂａｒ_Ｔ１を挿入する。障壁要求は、それがＴ１グローバル読取によって起こされた障壁要求であることを指示するスレッドＩＤ  Ｔ１のサイドバンドデータを有する。
−「Ｔ０からの障壁まで待つ」ために、Ｔ１_Ｒｅａｄ_ｔｏ_Ｃ１のブロック検査値を設定する。
−グローバルキャッシュ読取の後で将来の要求に対するタイムスタンプフラグを増分する。
メモリアービターは、それらの順序強制サイドバンド値を復号し、適切なアクションを取る。
−メモリバスに出された時に、障壁要求Ｔ０_Ｂａｒ_Ｔ１をストールせず、障壁イシューステータスレジスタを更新する。
−Ｔ０_Ｂａｒ_Ｔ１が出されたと障壁イシューステータスレジスタが指示するまで、Ｔ１_Ｒｅａｄ_ｔｏ_Ｃ１を持ち続ける。アービターは、Ｔ１_Ｒｅａｄ_ｔｏ_Ｃ１が出された後にそれら独自の現在のタイムスタンプレジスタを更新する。Ｔ０_Ｂａｒ_Ｔ１の発行は、Ｔ１_Ｒｅａｄ_ｔｏ_Ｃ１の前にＴ０からの問題の書込を含む全ての要求が出されたことを意味する。
−Ｔ０_Ｗｒｉｔｅ_ｔｏ_Ｃ３及びＴ１_Ｒｅａｄ_ｔｏ_Ｃ４の「安全な」要求のために、アービターの現在のタイムスタンプレジスタをタイムスタンプ値と比較し、タイムスタンプ値が適合した時にのみ発行する。
【００５３】
図７は、このような順序強制処理及びメモリアービターによる結果を示している。データキャッシュからの要求の初期ストリームは、ストリーム７０として図７の上部に示されている。要求は、スレッド毎ストリームと障壁に分離され、ストリーム７１及び７２としてスレッドアービター７３に入る図７の中心に説明して示すように、非一貫性検出モジュールによってサイドバンドデータが挿入される。図７の下部には、メモリバスに送信された要求７４の順序付けされたストリームが示されている。
【００５４】
図２ｂに示す非一貫性障害は、異なる機構を使用して対処することができる。データキャッシュは、データキャッシュのＤＡＴＡ  ＲＡＭにキャッシュラインの物理アドレスを記憶しているＴＡＧ  ＲＡＭを含む。データキャッシュが、データキャッシュで損失された読取要求を受信した時、ＴＡＧ  ＲＡＭからのエントリは、読取要求によってフェッチされるキャッシュラインの物理アドレス情報を記憶するように選択される。ＴＡＧ  ＲＡＭにおけるこの物理アドレス情報に充填フラグを追加することができ、これは、ＲＡＭのその部分が、現在フェッチされているキャッシュラインに対して除外されていることを指示するものである。充填フラグは、キャッシュラインがフェッチされている時は値１、及びフェッチされるキャッシュラインがない時は０を取る。
【００５５】
他のスレッドから同じキャッシュライン内の同じか又は異なる位置への次の書込がある時、充填フラグが値１を有する間は、「汚染フラグ」と呼ばれるＴＡＧ  ＲＡＭにおける別のフラグが、そのキャッシュラインに対して設定される。汚染フラグが値１を有する時、これは、１つのスレッドが、現在フェッチされているキャッシュラインを修正しており、データキャッシュに最終的に入れられているデータが最も最新のデータであるという保証がないので、潜在的な非一貫性の障害が存在することを指示する。汚染フラグが１である時、キャッシュラインは、そのデータが信頼できないので無効であると見なされる。この場合、次の読取要求は、データキャッシュにおけるデータを無視することになり、メインメモリから最新データをフェッチすることになる。
【００５６】
以下のシーケンスは、図２ｂに示す状況に対するこの機構を示している。
【００５７】
Ｔ１が、Ｂを読み取る。Ｂがデータキャッシュにないので、データキャッシュＭＭＵは、メモリバスからＢを収容するキャッシュラインをフェッチする。ＴＡＧ  ＲＡＭにおけるＴＡＧフィールドが更新され、充填フラグが１に設定され、汚染フラグが０に設定される。
【００５８】
Ｔ０が、データ０Ｘ１０をＡに書き込む。Ａはキャッシュにないが、ＲＡＭにおける充填フラグは、キャッシュラインが現在満たされていることを指示する。従って、汚染フラグは、１に設定される。
【００５９】
Ｔ１キャッシュラインフェッチが行われる。データキャッシュにおけるキャッシュラインは、読取要求の結果として、メインメモリからＡの古い値を収容している。
【００６０】
Ｔ０が、Ａを読み取る。データキャッシュが、Ａを含むキャッシュラインを収容しているので、ＴＡＧ  ＲＡＭコンテンツは、キャッシュヒットを指示するが、汚染フラグは、そのキャッシュラインに対して１に設定される。次に、ハードウエアが、この読取がキャッシュで損失したように判断し、このラインは、メモリバスから再度フェッチされる。この読取がＴ０書込の後に起こるので、読取は、Ａの最後の値を戻し、データの一貫性が維持される。
【００６１】
２つの機構、すなわち、図２ａで示すようにシナリオを扱う第１の機構と図２ｂで示すようにシナリオを扱う第２の機構の結合は、書込スルーデータキャッシュにおけるキャッシュ損失の結果として起こるデータ非一貫性に対する解決法を提供する。
【符号の説明】
【００６２】
３０  データキャッシュメモリ管理ユニット
３１、３２  スレッドアービター
３３  メモリアービター
３４  データキャッシュ
３５  非一貫性検出モジュール
【図１】
0005619869.tif 000002
【図２ａ】
0005619869.tif 000003
【図２ｂ】
0005619869.tif 000004
【図３】
0005619869.tif 000005
【図４ａ】
0005619869.tif 000006
【図４ｂ】
0005619869.tif 000007
【図４ｃ】
0005619869.tif 000008
【図４ｄ】
0005619869.tif 000009
【図４ｅ】
0005619869.tif 000010
【図４ｆ】
0005619869.tif 000011
【図４ｇ】
0005619869.tif 000012
【図５】
0005619869.tif 000013
【図６】
0005619869.tif 000014
【図７】
0005619869.tif 000015