(57)【要約】【課題】メモリシステム（１５０）に対するアクセス要求（２５）を並べ替えてメモリシステム競合を減らすためのアービトレータ（２４）を提供する。【解決手段】アービトレータは、アクセス要求（２５）をバッファリングするためのトランザクション・バッファ（２０３）と、アービトレータ（２４）によって発行されたアクセス要求をカウントするための出力カウンタ（２０７）と、少なくとも出力カウンタ（２０７）をトランザクション・バッファ（２０３）内のアクセス要求（２５）にマッピングするためのマッピング・テーブル（２１１）と、メモリシステム競合が減る発行順にアクセス要求（２５）をポイントするように、マッピング・テーブル（２１１）内のエントリを動的に並べ替える並べ替えユニット（２２５）とを含む。【選択図】図２
2004252985.tif 000002
【特許請求の範囲】
【請求項１】
メモリシステム競合を減らすためメモリシステムに対するアクセス要求を並べ替えるアービトレータであって、
前記アクセス要求をバッファリングするためのトランザクション・バッファと、
アービトレータによって発行されたアクセス要求をカウントするための出力カウンタと、
少なくとも前記出力カウンタを前記トランザクション・バッファ内の前記アクセス要求にマッピングするためのマッピング・テーブルと、
メモリシステム競合が減る発行順序で前記アクセス要求をポイントするように、前記マッピング・テーブル内のエントリを動的に並べ替える並べ替えユニットと、
を備えることを特徴とするアービトレータ。
【請求項２】
前記並べ替えユニットは、
１つまたは複数の発行済みアクセス要求と前記トランザクション・バッファ内の前記アクセス要求の間のメモリシステム競合を検出するための競合検出回路と、
入力順に次の競合フリーアクセス要求を選択するための選択ユニットと、
入力順に前記次の競合フリーアクセス要求に基づいて前記マッピング・テーブル内の前記エントリを並べ替えるマッピング・テーブル更新回路と、
を備えることを特徴とする請求項１に記載のアービトレータ。
【請求項３】
前記入力順序を並べ替えるためのキュー位置レジスタをさらに備えることを特徴とする請求項２に記載のアービトレータ。
【請求項４】
アービトレータによって受け取られたアクセス要求をカウントするための入力カウンタをさらに含み、前記マッピング・テーブルは、前記入力カウンタを次に受け取られるアクセス要求によって埋められる前記トランザクション・バッファ内のエントリにマッピングすることを特徴とする請求項３に記載のアービトレータ。
【請求項５】
前記マッピング・テーブルは、ハッシュ・テーブルであることを特徴とする請求項１に記載のアービトレータ。
【請求項６】
メモリシステム競合を減らすためにメモリシステムに対するアクセス要求を並べ替えるアービトレーション方法であって、
（ａ）前記アクセス要求をトランザクション・バッファにバッファリングするステップと、
（ｂ）少なくとも出力カウンタを前記トランザクション・バッファ内の前記アクセス要求にマッピングするマッピング・テーブルを保持するステップと、
（ｃ）前記マッピングが、メモリシステム競合を減らす発行順序で前記アクセス要求をポイントするように前記マッピング・テーブル内のエントリを動的に並べ替えるステップと、
を含むことを特徴とするアービトレーション方法。
【請求項７】
ステップ（ｃ）は、
（ｃ１）１つまたは複数の発行済みアクセス要求と前記トランザクション・バッファ内の前記アクセス要求の間のメモリシステム競合を検出するサブステップと、
（ｃ２）入力順序の次の競合フリーアクセス要求を選択するサブステップと、
（ｃ３）入力順序の前記次の競合フリーアクセス要求に基づいて前記マッピング・テーブル内の前記エントリを並べ替えるサブステップと、
を含むことを特徴とする請求項６に記載のアービトレーション方法。
【請求項８】
（ｄ）前記入力順序を並べ替えるキュー位置レジスタを維持するステップをさらに含むことを特徴とする請求項７に記載のアービトレーション方法。
【請求項９】
次のアクセス要求を受け取った際、
（ｅ）前記アービトレータによって受け取られたアクセス要求をカウントするステップと、
（ｆ）前記トランザクション・バッファ内の、前記マッピング・テーブルを介してマッピングによってポイントされたバッファ位置における、次に受け取られるアクセス要求を、前記アービトレータによって受け取られたアクセス要求の数で置き換えるステップと、
をさらに含むことを特徴とする請求項８に記載のアービトレーション方法。
【請求項１０】
前記マッピング・テーブルは、ハッシュ・テーブルであることを特徴とする請求項６に記載のアービトレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、いくつかのデータ処理ユニットを含むシステムに関し、詳細には、共用メモリ・サブシステムにアクセスするいくつかのベクトル処理ユニットを含むシステムに関する。
【背景技術】
【０００２】
本明細書で、ベクトルとは、スカラー値の順序付けられたリストとして定義される。コンピュータのメモリ内の単純なベクトルは、開始アドレス、長さ（要素の数）、およびストライド（メモリ内における要素間の一定の距離）を有するものと定義される。例えば、メモリ内に格納されたアレイが、ベクトルである。ベクトル・プロセッサは、メモリ・サブシステムから値のベクトルをフェッチし、それらの値に対して演算を行い、再びメモリ・サブシステムに格納するベクトル命令を処理する。基本的に、ベクトル処理は、当技術分野で周知の単一命令多重データ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）（ＳＩＭＤ）並列処理技術である。他方、スカラー処理は、１つの命令が各データ値に対して作用することを必要とする。
【０００３】
ベクトル・プロセッサのパフォーマンスは、ベクトル・プロセッサがアクセスするメモリ・サブシステム内におけるリソース競合の出現回数（ｏｃｃｕｒｒｅｎｃｅｓ）に大きく依存する。それらの競合により、ベクトル・プロセッサを含むシステム全体にピーク・メモリ帯域幅の一部分が使用不可能で、アクセス不可能になる。また、そのようなリソース競合により、メモリ・サブシステムの平均メモリ・アクセス待ち時間も増加する。複数のベクトルが同時にアクティブであるシステムにおいて、ベクトル内競合として知られる同一のベクトルに対するアクセス間の競合、またはベクトル間競合として知られる異なるベクトルに対するアクセス間の競合が生じる可能性がある。
【０００４】
メモリ・サブシステム・リソース競合の原因は、多数、存在する。ただし、原因は、特に、インターリーブ・メモリ・サブシステムを使用していること、および／または異種のアーキテクチャでメモリ・コンポーネントを使用していることに関連する。例えば、最新のダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）技術は、通常、バンクおよびページに階層式に構成されている。メモリ・コンポーネント内のメモリ・アレイのそれらのパーティションがアクティブにされる順序が、メモリ・コンポーネントのパフォーマンスに相当な影響を与える。これらのデバイスの階層構造化に加えて、ＲＡＭＢＵＳ（商標）ダイレクト・ランダム・アクセス・メモリ（Ｄｉｒｅｃｔ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）（ＲＤＲＡＭ（登録商標））やダブル・データ・レート・シンクロナス・ダイナミック・ランダム・アクセス・メモリ（Ｄｏｕｂｌｅ  Ｄａｔａ  Ｒａｔｅ  Ｓｙｎｃｈｒｏｎｏｕｓ  Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）（ＤＤＲ  ＳＤＲＡＭ）などの一部の技術は、バンク・インターリーブまたはページ・インターリーブをサポートする。この特徴により、ある要件が満たされる限り、メモリ・サブシステムの待ち時間によって制限されない速度でトランザクションを発行することができるメモリ・アクセスのパイプライン手法（ｐｉｐｅｌｉｎｅｄ  ａｐｐｒｏａｃｈ）が容易になる。
【０００５】
メモリ・サブシステムのパフォーマンスを最適化する２つの従来の手法が存在する。それらの手法は、一般に、２つの可能なアクセス・ポリシー、すなわち、オープン・ページ・ポリシーおよびクローズド・ページ・ポリシーに従って適用される。
【０００６】
オープン・ページ・ポリシー
一度、ページがアクセスのために開かれると、そのページに対する後のアクセスを比較的短い待ち時間で実行することができる。オープン・ページ・ポリシーのケースでは、競合は、ページ交差（ｐａｇｅ−ｃｒｏｓｓｉｎｇ）イベントとして定義される。ページ交差イベントが生じた場合、ＤＲＡＭコアに再び現在のオープン・ページを復元し、次の要求されたデータを含むページを抽出（つまり、開く）のに数サイクル余計に必要とされる。同一のページに対する繰り返しのアクセスを持続することができる場合、トランザクションをより高い速度で発行することができるが、その速度は、システム・クロック周期の分数にとどまる。これは、この短い待ち時間の動作モードでも、各トランザクションを完了するのに数サイクルが必要とされるためである。さらに、インターリーブが可能ではないので、各トランザクションが完了してからでないと、次のトランザクションが発行されない。メモリシステムのピーク・トランザクション速度は、最短待ち時間の動作モードによって制限され、メモリの同じページに繰り返しアクセスすることによって達せられる。
【０００７】
この動作モードを活用する最も一般的に使用される手法は、各ベクトルにバースト・アクセスを行う（ｂｕｒｓｔ  ａｃｃｅｓｓ）ことである。実質的に、後の計算で必要とされるものと予期されるデータが、あらかじめフェッチ（ｐｒｅ−ｆｅｔｃｈ）される。
【０００８】
この手法は、以下を含むいくつかの欠点を抱えている。
【０００９】
・最大トランザクション速度が、クロック周期と比べて比較的低くとどまる。
【００１０】
・データ処理ユニット近くにバースト・データをバッファリングする比較的大きいキャッシュ群が必要とされる。この文脈で、データという用語は、フェッチされた命令、または前記命令のオペランドを指す。
【００１１】
・メモリ・アクセス・パターンにおけるデータ依存関係により、あらかじめフェッチされたデータが無効化され、正しいデータを獲得する繰り返しのフェッチが必要とされる可能性がある。
【００１２】
クローズド・ページ・ポリシー
オープン・ページ・ポリシーに対する代替として、特に、メモリ・サブシステムがインターリーブ・アーキテクチャを有する場合、クローズド・ページ・ポリシーを使用することができる。トランザクションは、インターリーブ・メモリシステムの要件に従って発行される限り、毎クロック・サイクルに発行されることが可能である。例えば、メモリシステムは、４サイクルの最小待ち時間、および４重インターリーブ・アーキテクチャを有することが可能である。その場合、トランザクション発行速度を最大化するため、メモリシステムのいずれの単独のサブユニットにも、４クロックサイクルごとに１回より頻繁にアクセスを行ってはならない。これが達せられた場合、ピーク・トランザクション速度は、メモリ・サブシステム待ち行列によって制限されず、代わりに、システム・クロック周波数だけによって制限される。ここでは、メモリ・サブユニットとは、インターリーブが適用されるメモリ・サブシステム内の階層のレベルを指す。クローズド・ページ・ポリシー競合は、メモリのインターリーブされたサブユニットに対するアクセス頻度をそのサブユニットの最大動作周波数より低く保つことができないこととして定義される。以上の要件は、メモリの同じサブユニットに対して何度もアクセスすることを回避し、メモリ・サブシステム待ち時間の逆数として定義された最大周波数でサブユニットに再アクセスすることによって満たされる。
【００１３】
インターリーブ・メモリにおいて競合の頻度を減らそうとする試みにおいて最も一般的に使用される１つの方法が、アドレスの再マッピングである。この技術は、各ストリームに、直線的に、通常、１のストライドでアクセスが行われることを前提にする。この前提が成り立つ場合には、アドレス・バスのビットを適切に入れ替えることにより、ベクトルアクセスが常に競合を免れることが確実になる。実質上、アドレスの再マッピングにより、インターリーブの要件を満たす形でメモリ・サブシステムにわたってベクトルが分散されることが確実になる。アドレスの再マッピングは、一般に、静的に適用されるが、原理的には、動的に適用することも可能である。
【００１４】
この手法には、以下を含むいくつかの欠点が存在する。
【００１５】
・この技術は、ベクトル内競合を減らすことだけに役立ち得る。
【００１６】
・統計上、この技術は、ベクトル間競合の頻度を改善することができない。
【００１７】
・以上、最初の２点に鑑みて、アドレスの再マッピングは、オープン・ページ・ポリシーの場合と同様に、バースト指向のプリフェッチ（ｐｒｅ−ｆｅｔｃｈ）動作モードにおいてだけ本当に有効である。したがって、オープン・ページ・ポリシーの場合と同様に、処理ユニット近くで比較的大きいキャッシュ群が必要とされ、アクセス・パターンにおけるデータ依存関係により、一部のプリフェッチが無効化される可能性があり、
・ベクトルには、常に１のストライドでアクセスが行われるわけではない。しばしば、アクセス・パターンは、アドレスの再マッピングによって競合がないようにすることが可能ないずれの明確に定義されたストライドにも類似しない。
【発明の開示】
【発明が解決しようとする課題】
【００１８】
本発明の目的は、上記従来技術の１つまたは複数の欠点を実質的に克服するか、あるいは少なくとも改善することである。
【課題を解決するための手段】
【００１９】
本発明の第１の態様によれば、メモリシステムに対するアクセス要求を並べ替えてメモリシステム競合を減らすためのアービトレータ（ａｒｂｉｔｒａｔｏｒ）が提供され、アービトレータは、
アクセス要求をバッファリングするためのトランザクション・バッファと、
アービトレータによって発行されたアクセス要求をカウントするための出力カウンタと、
少なくとも出力カウンタをトランザクション・バッファ内のアクセス要求にマッピングするためのマッピング・テーブルと、
メモリシステム競合を減らせる発行順序でマッピングがアクセス要求をポイントするように、マッピング・テーブル内のエントリを動的に並べ替える並べ替えユニットとを含む。
【００２０】
本発明の第２の態様によれば、メモリシステムに対するアクセス要求を並べ替えてメモリシステム競合を減らすアービトレーション方法が提供され、方法は、
（ａ）アクセス要求をトランザクション・バッファ内にバッファリングするステップ、
（ｂ）少なくとも出力カウンタをトランザクション・バッファ内のアクセス要求にマッピングするマッピング・テーブルを維持するステップ、および
（ｃ）メモリシステム競合を減らせる発行順序でマッピングがアクセス要求をポイントするように、マッピング・テーブル内のエントリを動的に並べ替えるステップを含む。
【００２１】
また、本発明のその他の態様も開示する。
【００２２】
次に、本発明の１つまたは複数の実施形態を図面を参照して説明する。
【発明を実施するための最良の形態】
【００２３】
添付の図面の１つまたは複数において、同じ符号を有するステップおよび／または特徴を参照する場合、それらのステップおよび／または特徴は、この説明では、そうでないことを明記しない限り、同じ機能、または同じ動作を有する。
【００２４】
図１は、ホスト・コンピュータ１００およびプリンタ・デバイス８０を含むプリンタ・システム５０の概略ブロック図を示している。ホスト・コンピュータ１００は、コンピュータ・モジュール１０１、入力デバイス１０２、およびディスプレイ・デバイス１１４を含む。コンピュータ・モジュール１０１は、通常、少なくとも１つの処理ユニット１０５、例えば、半導体ランダム・アクセス・メモリ（ＲＡＭ）および読み取り専用メモリ（ＲＯＭ）から形成されたメモリ・ユニット１０６、ビデオ・インターフェース１０７、入力デバイス１０２のためのＩ／Ｏインターフェース１１３、およびプリンタ・デバイス８０のためのプリンタ・インターフェース１０４を含む入力／出力（Ｉ／Ｏ）インターフェースを含む。記憶デバイス１０９が提供され、通常、ハードディスク・ドライブ１１０およびフロッピー(登録商標)ディスク・ドライブ１１１を含む。ＣＤ−ＲＯＭドライブ１１２が、通常、データの不揮発性ソースとして提供される。コンピュータ・モジュール１０１のコンポーネント１０４ないし１１３は、通常、相互接続されたバス１１７を介して、当分野の技術者に周知のコンピュータ・システム１００の従来の動作モードをもたらす形で通信する。
【００２５】
ホスト・コンピュータ１００のプロセッサ１０５上で実行されるアプリケーションが、イメージ・データを、例えば、ディスプレイ・デバイス１１４上で表示可能であるグラフィックス・デバイス・インターフェース（ＧＤＩ）フォーマットからオブジェクト・グラフィックス・フォーマットに変換してから、印刷のためにそのイメージ・データをプリンタ・デバイス８０にプリンタ・インターフェース１０４を介して送る。
【００２６】
プリンタ・デバイス８０は、Ｉ／Ｏインターフェース８６、プリントエンジン８１、複数のベクトル・プロセッサ８２ないし８５、メモリ・インターフェース２０、およびローカル・メモリ１５０を含む。Ｉ／Ｏインターフェース８６、プリントエンジン８１、ベクトル・プロセッサ８２ないし８５、およびメモリ・インターフェース２０は、当技術分野で周知の形で通信バス９１を介して通信する。ローカル・メモリ１５０は、メモリ・インターフェース２０とインターフェースをとる。
【００２７】
Ｉ／Ｏインターフェース８６は、プリンタ・インターフェース１０４を介してプリンタ・デバイス８０をホスト・コンピュータ１００にインターフェースする。ホスト・コンピュータ１００からＩ／Ｏインターフェース８６によって受け取られたイメージ・データが、メモリ・インターフェース２０を介してローカル・メモリ１５０に転送され、格納されてから、さらに処理される。
【００２８】
ベクトル・プロセッサ８２ないし８５は、ローカル・メモリ１５０から圧縮イメージ・データを読み取り、その圧縮イメージ・データをオブジェクト・グラフィックス・フォーマットのイメージ・データに変換し、イメージ・データを格納するためにローカル・メモリ１５０に送り返すディコンプレッサ（ｄｅｃｏｍｐｒｅｓｓｏｒ）８２を含む。
【００２９】
ベクトル・プロセッサ８２ないし８５は、オブジェクト−エッジ・トラッカ（ｔｒａｃｋｅｒ）８３およびピクセル・ジェネレータ８４をさらに含む。オブジェクト−エッジ・トラッカ８３は、ローカル・メモリ１５０内にオブジェクト・グラフィックス・フォーマットで格納されたイメージ・データを解析して、複数層のイメージ・オブジェクトが印刷される順序を決める。これは、ピクセルのプロパティをラスタ順に決めるのに必要とされる。次に、ピクセル・ジェネレータ８４が、オブジェクト−エッジ・トラッカ８３からイメージ・オブジェクトの順序を受け取り、各ピクセルに関するピクセル・データを順にフォーマットし、そのピクセル・データを格納するためにローカル・メモリ１５０に送り返す。
【００３０】
ベクトル・プロセッサ８２ないし８５は、ピクセル・データにアクセスし、そのピクセル・データをＣＭＹＫなどのプリンタ色空間に変換する色空間変換器８５をさらに含む。プリンタ色空間内のピクセル・データが、格納のためにローカル・メモリ１５０に送り返される。
【００３１】
したがって、Ｉ／Ｏインターフェース８６、プリントエンジン８１、および複数のベクトル・プロセッサ８２ないし８５がまとまりとしてトランザクション要求のソースを生じさせて、いくつかのトランザクション・ストリームを形成する。各データ処理ユニット８１ないし８６は、メモリ・インターフェース２０を介してローカル・メモリ１５０内の１つまたは複数のベクトルにアクセスすることができる。
【００３２】
メモリ・インターフェース２０は、第１レベル・アービトレータ２２および第２レベル・アービトレータ２４を含む。データ処理ユニット８１ないし８６が、第１レベル・アービトレータ２２に対して同時にメモリ・アクセスの要求を行う。第１レベル・アービトレータ２２は、データ処理ユニット８１ないし８６から、ローカル・メモリ１５０内の別個のベクトルに対するトランザクション／別個のベクトルからのトランザクションにそれぞれが関連する複数のトランザクション要求を入力として受け取り、別個のトランザクション・ストリームをインターリーブして、使用されるアービトレーションアルゴリズムの規則に従って第２レベル・アービトレータ２４に対する単一の合成トランザクション・ストリーム２５にする。第１レベル・アービトレータ２２によって実行されるアービトレーションは、データ処理ユニット８１ないし８６の間でメモリ帯域幅を配分して、すべてのデータ処理ユニット８１ないし８６がアクティブに保たれることを確実にすることに関わる。第１レベルアービトレーションアルゴリズムは、例えば、データ処理ユニット８１ないし８６からのトランザクション要求にラウンドロビン・スタイルのアービトレーションを適用することができる。
【００３３】
単一の合成データ・ストリーム２５は、ローカル・メモリ１５０などのメモリに送ることができる。ただし、第１レベル・アービトレータ２２によって形成された単一の合成データ・ストリーム２５は、メモリ・サブシステムの要件に関して最適化されておらず、メモリ・サブシステム内で複数のリソース競合イベントを生じさせる可能性がある。
【００３４】
したがって、第２レベル・アービトレータ２４が、第２のアービトレーションアルゴリズムを適用して、最適化されたベクトル間インターリーブを有する単一の合成トランザクション・ストリーム２７を生成することにより、第１レベル・アービトレータ２２によって形成された合成データ・ストリーム２５を処理するために、第１レベル・アービトレータ２２とローカル・メモリ１５０の間でトランザクション・インターフェースを提供する。
【００３５】
図２は、第２レベル・アービトレータ２４のブロック図をより詳細に示している。第２レベル・アービトレータ２４の動作の中心となるのが、Ｎ個のトランザクション・エントリを保持するトランザクション・バッファ２０３である。第１レベル・アービトレータ２２（図１）から受け取られた合成トランザクション・ストリーム２５（入力ストリーム）に対するトランザクションが、トランザクション・バッファ２０３内にバッファリングされてから、ローカル・メモリ１５０（図１）に対する競合を減らす順序で並べ替えられたトランザクション・ストリーム２７（リオーダード出力ストリーム）に発行される。
【００３６】
トランザクション・バッファ２０３には、２つのモジュロ１６カウンタ、すなわち、入力カウンタ２０５および出力カウンタ２０７によってインデックスが付けられる。ただし、カウンタ２０５および２０７は、トランザクション・バッファ２０３に直接にインデックスを付けない。代わりに、カウンタ２０５および２０７は、ハッシュ・テーブル２１１の形態のマッピング・テーブルにインデックスを付け、テーブル２１１が、入力カウンタ２０５および出力カウンタ２０７からそれぞれ書き込みポインタ２８５および読み取りポインタ２８７を生成する。入力カウンタ２０５は、トランザクションがバッファ２０３にロードされた場合にはいつでも増分され、他方、出力カウンタ２０７は、バッファ２０３から並べ替えられたトランザクション・ストリーム２７にトランザクションが発行された場合にはいつでも更新される。
【００３７】
入力カウンタ２０５は、ハッシュ・テーブル２１１を介して、デマルチプレクサ２０４に対して動作することによってトランザクション・バッファ２０３にインデックスを付け、デマルチプレクサ２０４は、合成トランザクション・ストリーム２５上で受け取られた次のトランザクションを書き込みポインタ２８５によってポイントされたバッファ位置でバッファ２０３にロードする。同様に、出力カウンタ２０７も、ハッシュ・テーブル２１１を介して、マルチプレクサ２０６に対して動作することによってトランザクション・バッファ２０３にインデックスを付け、マルチプレクサ２０６は、トランザクション・バッファ２０３内の読み取りポインタ２８７によってポイントされたトランザクションが、並べ替えられたトランザクション・ストリーム２７上に発行される次のトランザクションとなるように選択する。読み取りポインタ２８７がトランザクション・バッファ２０３内のトランザクションをポイントする順序は、ローカル・メモリ１５０（図１）に対する競合を少なくする順序である。
【００３８】
以上のことから、ハッシュ・テーブル２１１は２つの機能を実行することを見て取ることができる。第１に、テーブル２１１は、入力カウンタ２０５をトランザクション・バッファ２０３内のバッファ位置に、そのバッファ位置が第２レベルのアービトレータ順で空にされ、そのバッファ位置を新しいトランザクションで埋めることが可能になるにつれてマッピングする。第２に、ハッシュ・テーブル２１１は、出力カウンタ２０７をメモリ・リソース競合の最小の出現回数を含むトランザクション・バッファ２０３内の一続きのバッファ位置にマッピングする。ハッシュ・テーブル２１１は、第２レベル・アービトレータ２４がリソース競合を回避するように出力ストリームを並べ替えた場合にはいつでも更新される。
【００３９】
リソース競合は、ベクトル間競合検出回路２１５およびベクトル内競合検出回路２１９によって検出される。また、合成トランザクション・ストリーム２７上で発行された最新のいくつかのトランザクションのアドレスを格納する発行済みアドレス・パイプライン２１７も提供される。
【００４０】
ベクトル間競合検出回路２１５が、トランザクション・バッファ２０３内にバッファリングされた各トランザクションＢ（ｎ）のアドレスを発行済みアドレス・パイプライン２１７の中に格納された発行済みアドレスと比較し、そのトランザクションＢ（ｎ）のいずれが発行済みアドレス・パイプライン２１７の中に格納された発行済みアドレスと競合するかを特定する。これを行う際、ベクトル間競合検出回路２１５は、アドレスのメモリ・サブユニットを定義していないすべてのアドレス・ビットをマスクして消し（ｍａｓｋ  ｏｕｔ）、トランザクションＢ（ｎ）のアドレスが、発行済みアドレス・パイプライン２１７の中に格納された１つまたは複数の前の発行済みアドレスのアドレスと同じメモリ・サブユニットの中にあるかどうかを判定する。
【００４１】
４重インターリーブ・アーキテクチャを有するベクトル間競合検出サブ回路２５０を図３に詳細に示している。ベクトル間競合検出回路２１５（図２）は、Ｎ個のそのようなサブ回路２５０を含む。各ベクトル間競合検出サブ回路２５０は、トランザクション・バッファ２３０の１つのバッファ・アドレスにおけるトランザクションＢ（ｎ）のアドレスを発行済みアドレス・パイプライン２１７の中に格納された発行済みアドレスと比較する。
【００４２】
４重インターリーブ・アーキテクチャを有するベクトル間競合検出サブ回路２５０は、３つのアドレス比較器２５２を含む。各アドレス比較器２５２は、トランザクションＢ（ｎ）のアドレスを発行済みアドレス・パイプライン２１７の中に格納された１つの発行済みアドレスと比較する。ベクトル間競合検出サブ回路２５０により、したがって、ベクトル間競合検出回路２１５により、第２レベル・アービトレータ２４が、クローズド・ページ・メモリ動作モードとオープン・ページ・メモリ動作モードの両方の規則を実現することが可能になる。クローズド・ページ・モードが所望される場合、クローズド・ページ・モード・フラグ２５１を「１」の値に設定することにより、展開されたメモリ技術のタイプに合うようにいずれのモードも選択することができる。クローズド・ページ・モードでは、つまり、クローズド・ページ・モード・フラグ２５１が「１」に設定されているとき、トランザクションＢ（ｎ）のアドレスが、前の３つの発行済みアドレスのいずれか１つのアドレスと同じメモリ・サブユニット内にある場合、論理要素２５４ないし２５７の動作を介して、ベクトル間競合フリー（ｆｒｅｅ）フラグ２５３が「０」に設定されて、競合が検出されたことが示される。代替として、トランザクションＢ（ｎ）のアドレスが、前の３つの発行済みトランザクションのそれぞれのアドレスとは異なるメモリ・サブユニット内にあると、ベクトル間競合フリー・フラグ２５３が「１」に設定されて、クローズド・ページ・モード競合がまったく存在しないことが示される。
【００４３】
オープン・ページ・モードでは、つまり、クローズド・ページ・モード・フラグ２５１が「０」の値に設定されている場合、ベクトル間競合検出サブ回路２５０は、トランザクションＢ（ｎ）のアドレスが、前の発行済みアドレスのアドレスと同じメモリ・サブユニット内だけにあるかどうかを検出する。トランザクションＢ（ｎ）のアドレスが前の発行済みトランザクションのアドレスと同じメモリ・サブユニット内にある場合、ベクトル間競合フリー・フラグ２５３が、「１」の値に設定される。代替として、ベクトル間競合フリー・フラグ２５３が「０」の値に設定され、トランザクションＢ（ｎ）のアドレスが前の発行済みトランザクションのアドレスとは異なるメモリ・サブユニット内にあることが示される。
【００４４】
図２を再び参照すると、トランザクション・バッファ２０３内の各トランザクションＢ（ｎ）のベクトル間競合フリー・ステータスがベクトル間競合検出回路２１５によって判定された後、ベクトル内競合検出回路２１９により、ベクトル間競合を有さないトランザクションＢ（ｎ）のいずれが、ベクトル内競合も有さず、ストリーム内要求の時間的順序が保たれるかを判定する。ベクトル内競合検出回路２１９の動作を以下により詳細に説明する。
【００４５】
ハッシュ・テーブル更新回路２２５が、ベクトル内競合検出回路２１９から受け取られたトランザクションＢ（ｎ）のそれぞれの競合ステータスを使用して、ハッシュ・テーブル２１１およびキュー位置レジスタ２１３を更新する。詳細には、ハッシュ・テーブル更新回路２２５は、コンテントアドレサブルメモリ（ＣＡＭ）を使用して、競合フリートランザクションを含むトランザクション・バッファ２０３内のエントリをポイントする、キュー位置レジスタ２１３内の位置をまず特定する。例えば、バッファ位置８におけるトランザクションに競合がなく、値８がキュー位置レジスタ２１３のエントリ４に入っている場合、位置４が、ＣＡＭによって戻される。
【００４６】
次に、ＣＡＭによって戻された位置から、ハッシュ・テーブル更新回路２２５は、最低の位置を特定する。その位置の値が、次の競合フリートランザクションを含むトランザクション・バッファ２０３内の位置をポイントする。ベクトル間競合検出回路２１５およびベクトル内競合検出回路２１９によって競合フリートランザクションがまったく存在しないと判定された場合は、ＣＡＭによって値０が戻される。
【００４７】
ＣＡＭによって戻された値が０より大きい場合には、トランザクションが発行された順序が、競合を回避するように変更可能である。その場合、次の競合フリートランザクションの位置を示すエントリを、出力カウンタが示すエントリに、移動することにより、ハッシュ・テーブル更新回路２２５がハッシュ・テーブル２１１を更新する。同時に、出力カウンタによってポイントされたエントリから次の競合フリートランザクションの位置をポイントするエントリの下のエントリまでに位置するハッシュ・テーブル２１１のエントリが、１エントリだけ上方に移動される。ハッシュ・テーブル２１１は円形であり、エントリがハッシュ・テーブル２１１の境界を越えて移動された場合、「循環（ｗｒａｐ−ａｒｏｕｎｄ）」がもたらされる。以上のことから分かるように、ハッシュ・テーブル２１１は、第２レベル・アービトレータ２４（図２）がリソース競合を回避するために出力ストリームを並べ替える度に更新される。
【００４８】
並べ替えられたトランザクション・ストリーム２７上にトランザクションが発行される度に、キュー位置レジスタ２１３が、ハッシュ・テーブル更新回路２２５によって更新される。特に、キュー位置レジスタ２１３は、発行済みトランザクションの位置に対応するキュー位置レジスタ２１３の位置にある値を、キュー位置レジスタ２１３の後に送り、空の位置のエントリを、１つだけ前に進めることによって更新される。
【００４９】
図４Ａおよび４Ｂは、第２レベル・アービトレータ２４の動作を描いたフローチャートである。詳細には、図４Ａは、並べ替えられたトランザクション・ストリーム２７上にトランザクションを発行する際に第２レベル・アービトレータ２４によって使用される方法８００のフローチャートであり、図４Ｂは、新しいトランザクションをトランザクション・バッファ２０３にロードする際に第２レベル・アービトレータ２４によって使用される方法８５０のフローチャートである。
【００５０】
方法８００および８５０について、図５Ａないし５Ｆを参照して説明する。これらの図は、オープン・ページ・モード動作の例を示すものである。図５Ａは、第２レベル・アービトレータ２４の初期設定に続く処理を示している。ここで、トランザクション・バッファ２０３（図２）には、合成トランザクション・ストリーム２５から最初の１６個の保留中のトランザクションがロードされている。入力カウンタ７０２の値と出力カウンタ７０３の値はともに０である。テーブル７０１は、トランザクション・バッファ２０３のバッファ位置にロードされたトランザクションのアドレスを示している。テーブル７０４および７０５はそれぞれ、ハッシュ・テーブル２１１（図２）内およびキュー位置レジスタ２１３（図２）内の（初期）値を示している。テーブル７０４に示したハッシュ・テーブル２１１は、カウンタ値のバッファ位置に対する直接マッピングを保持している。テーブル７０５に示したキュー位置レジスタ２１３は、トランザクションがトランザクション・バッファ２０３にロードされた順序を保持しており、つまり、位置０×０が最初に埋められ、次に位置０×１が埋められているといった具合である。トランザクション・バッファ２０３に対する入力は、すべてのバッファ位置が現在、埋められているため、停止（ｓｔａｌｌ）している。
【００５１】
次に、並べ替えられたトランザクション・ストリーム２７上にトランザクションを発行する際に第２レベル・アービトレータ２４によって使用される方法８００（図４Ａ）も参照する。方法８００は、ステップ８０２で開始し、ベクトル間競合検出回路２１５（図２）が、トランザクション・バッファ２０３内にバッファリングされたトランザクションのアドレスを発行済みアドレス・パイプライン２１７の中に格納された最新の発行済みアドレスと比較する。トランザクションがまだまったく発行されておらず、したがって、ページがまだまったく開いていないため、発行済みアドレス・パイプライン２１７は空である。したがって、ベクトル間競合検出回路２１５により、すべてのトランザクションに競合がないことが判定される。また、テーブル７０１も、トランザクション・バッファ２０３内の有効な（または保留中の）トランザクションのそれぞれの競合ステータスを示す。バッファ位置０×０であるトランザクション・バッファ２０３内の次のトランザクションには、競合がないことに留意されたい。
【００５２】
ステップ８０４で、ハッシュ・テーブル更新回路２２５（図２）が、トランザクションのそれぞれの競合ステータスを使用して、競合フリートランザクションを含むトランザクション・バッファ２０３内のエントリをポイントするキュー位置レジスタ２１３内の位置を特定する。この例では、テーブル７０１内のすべてのトランザクションに競合がなく、テーブル７０５に例示するキュー位置レジスタ２１３のすべての位置が、競合フリートランザクションを保持するバッファ位置へのポインタを含むものとして戻される。初期キュー位置レジスタ（テーブル７０５）のエントリ０に入っている最小の位置が選択される。
【００５３】
ステップ８０６で、第２レベル・アービトレータ２４により、ステップ８０４で特定された最小の位置が０であるかどうかが判定される。０の最小の位置は、競合フリートランザクションがまったく存在しないことか、または次のトランザクション、つまり、キュー位置レジスタ２１３の前部におけるエントリによってポイントされる位置におけるトランザクションに競合がないことを示す。このケースでは、次のトランザクションに競合がないために間隔が０になっている。並べ替えはまったく必要とされず、方法８００は、ステップ８１０に進む。
【００５４】
ステップ８１０で、出力カウンタ２０７によってインデックスの付けられた次のトランザクションが、ローカル・メモリ１５０（図１）に発行される。出力カウンタ７０３の値は０であるので、ハッシュ・テーブル７０４内の対応するエントリも０である。したがって、ローカル・メモリ１５０に発行されるトランザクションは、バッファ位置０×０にあるトランザクションである。ＡＸＸＸＸＸＸＸであるそのトランザクションのアドレスも、ステップ８１２で発行済みアドレス・パイプライン２１７（図２）の中に格納される。
【００５５】
このトランザクション発行イベントにより、ステップ８１４で、出力カウンタ２０７が、この例において１の値に増分される。ステップ８１６が続いて行われ、発行済みトランザクションの位置に対応するキュー位置レジスタ２１３の位置の値をキュー位置レジスタ２１３の後部に送り、空にされた位置より上のエントリが１つの位置だけ前に進められることにより、キュー位置レジスタ２１３が更新される。
【００５６】
図５Ｂは、別のトランザクションが並べ替えられたトランザクション・ストリーム２７上に発行されるシナリオを描いている。したがって、方法８００が、第２レベル・アービトレータ２４によって再び呼び出される。ステップ８０２で再び開始して、ベクトル間競合検出回路２１５が、トランザクション・バッファ２０３内にバッファリングされたトランザクションのアドレスをＡＸＸＸＸＸＸＸである発行済みアドレス・パイプライン２１７の中に格納された最新の発行済みアドレスと比較する。テーブル７０１は、トランザクション・バッファ２０３内にある保留中のトランザクションのそれぞれの競合ステータスを示している。バッファ位置０×１であるトランザクション・バッファ２０３内の次のトランザクションは、競合を免れていないことに留意されたい。
【００５７】
ステップ８０４で、ハッシュ・テーブル更新回路２２５（図２）が、トランザクションのそれぞれの競合ステータスを使用して、競合フリートランザクションを含むトランザクション・バッファ２０３内のエントリをポイントするキュー位置レジスタ２１３内の位置を特定する。この例では、バッファ位置０×４、０×９、および０×Ｄが、競合フリートランザクションを含む。エントリ０×４、０×９、および０×Ｄは、キュー位置レジスタ（テーブル７０６）内のエントリ３、８、およびＣをそれぞれ占めているので、ハッシュ・テーブル更新回路２２５は、キュー位置レジスタ（テーブル７０６）内のエントリ３を占めるエントリ０×４が、キュー位置レジスタ内の最低のエントリを占めていると判定する。
【００５８】
ステップ８０６で、第２レベル・アービトレータ２４により、ステップ８０４で特定された最低のエントリが０であるかどうかが判定される。この例では、最低の位置がエントリ３であり、これは、メモリ・リソース競合を回避するようにトランザクションの順序を並べ替えることができることを示しているので、方法８００は、ステップ８０８に進み、ハッシュ・テーブル２１１が、ハッシュ・テーブル更新回路２２５によって更新される。この例では、エントリ４である次の競合フリートランザクションの位置をポイントするエントリをエントリ１である出力カウンタによってポイントされるエントリに移動することにより、初期ハッシュ・テーブル７０４が更新されて、更新されたハッシュ・テーブル７０８が形成される。同時に、出力カウンタによってポイントされるエントリから次の競合フリートランザクションの位置をポイントするエントリの下のエントリにまで位置するハッシュ・テーブルのエントリが、１エントリだけ上方に移動される。この例では、エントリ１からエントリ４の下のエントリまでに位置するハッシュ・テーブルのエントリ、つまり、エントリ１、２、および３が、１エントリだけ上方に移動され、他方、エントリ４は、エントリ１に移動される。ハッシュ・テーブル２１１が更新されると、１の値を有する出力カウンタ２０７が、バッファ位置０×４にインデックスを付ける。
【００５９】
ステップ８１０で、バッファ位置０×４にあるトランザクションである出力カウンタ２０７によってインデックスが付けられた次のトランザクションが、ローカル・メモリ１５０に対して発行される（図１）。やはりＡＸＸＸＸＸＸＸであるそのトランザクションのアドレスも、ステップ８１２で、発行済みアドレス・パイプライン２１７（図２）の中に格納される。
【００６０】
このトランザクション発行イベントにより、ステップ８１４で、出力カウンタ２０７が、この例において２の値に増分される。ステップ８１６が続いて行われ、エントリ３である発行済みトランザクションの位置に対応するキュー位置レジスタ２１３の位置の値をキュー位置レジスタ２１３の後部に送り、空にされた位置より上のエントリを１つの位置だけ前に進めることにより、キュー位置レジスタ２１３が更新される。テーブル７０９は、キュー位置レジスタ２１３内の更新された値を示している。
【００６１】
図５Ｃは、さらに別のトランザクションが並べ替えられたトランザクション・ストリーム２７上に発行されるシナリオを描いている。発行済みアドレス・パイプライン２１７の中に格納された最新の発行済みアドレスがＡＸＸＸＸＸＸＸであり、ベクトル間競合検出回路２１５により、バッファ位置０×９および０×Ｄが競合フリートランザクションを含むことが特定される。
【００６２】
ステップ８０４で、ハッシュ・テーブル更新回路２２５（図２）により、バッファ位置０×９および０×Ｄをポイントする初期キュー位置レジスタ（テーブル７０９）内のエントリが、７およびＢであることが特定される。したがって、最低の位置は、７であると特定される。
【００６３】
この例では、最低の位置がエントリ７であり、これは、０より大きいので、方法８００は、ステップ８０８に進み、ハッシュ・テーブル２１１が、ハッシュ・テーブル更新回路２２５によって更新される。この例では、エントリ９である次の競合フリートランザクションの位置をポイントするエントリをエントリ２である出力カウンタによってポイントされたエントリに移動することにより、初期ハッシュ・テーブル７０８が更新されて、更新されたハッシュ・テーブル７１０が形成される。同時に、出力カウンタによってポイントされるエントリから次の競合フリートランザクションの位置をポイントするエントリの下のエントリまでに位置するハッシュ・テーブルのエントリが、１エントリだけ上方に移動される。ハッシュ・テーブル２１１が更新されると、２の値を有する出力カウンタ２０７が、バッファ位置０×９にインデックスを付ける。
【００６４】
ステップ８１０で、バッファ位置０×９にあるトランザクションである出力カウンタ２０７によってインデックスが付けられた次のトランザクションが、ローカル・メモリ１５０（図１）に発行される。やはりＡＸＸＸＸＸＸＸであるそのトランザクションのアドレスも、ステップ８１２で、発行済みアドレス・パイプライン２１７の中に格納される。
【００６５】
このトランザクション発行イベントにより、ステップ８１４で、出力カウンタ２０７が、この例では３の値に増分される。ステップ８１６が続いて行われ、エントリ７である発行済みトランザクションの位置に対応するキュー位置レジスタ２１３の位置の値がキュー位置レジスタ２１３の後部に送られ、空にされた位置より上のエントリが、１つの位置だけ前に進められる。テーブル７１１は、キュー位置レジスタ２１３内の更新された値を示している。
【００６６】
図５Ｄは、新たなトランザクションがトランザクション・バッファ２０３にロードされ、次に、トランザクション発行が行われるシナリオを描いている。
【００６７】
新たなトランザクションをロードすることから始め、合成トランザクション・ストリーム２５から受け取られたトランザクションをロードする際に第２レベル・アービトレータ２４によって使用される方法８５０（図４Ｂ）を参照すると、方法８５０は、ステップ８５２で開始し、新たなトランザクションが、ハッシュ・テーブル２１１を介して入力カウンタ２０５によってインデックスが付けられたバッファ位置でトランザクション・バッファ２０３にロードされる。この例では、入力カウンタ値７０２は、０である。テーブル７１０に現在の状態が示されるハッシュ・テーブル２１１を介して入力カウンタ２０５によってインデックスが付けられたバッファ位置は、バッファ位置０×０である。この例では、新たなトランザクションのアドレスは、ＡＸＸＸＸＸＸＸである。
【００６８】
方法８５０は、ステップ８５４で終り、入力カウンタ２０５が増分される。
【００６９】
並べ替えられたトランザクション・ストリーム２７上に別のトランザクションを発行するため、方法８００が呼び出される。発行済みアドレス・パイプライン２１７の中に格納された最新の発行済みアドレスがＡＸＸＸＸＸＸＸであり、ベクトル間競合検出回路２１５により、バッファ位置０×０および０×Ｄが競合フリートランザクションを含むことが特定される。バッファ位置０×０は、新たにロードされたトランザクションを含むことに留意されたい。
【００７０】
ステップ８０４で、ハッシュ・テーブル更新回路２２５により、バッファ位置０×０および０×Ｄをポイントする初期キュー位置レジスタ（テーブル７１１）内のエントリがそれぞれ、ＤおよびＡであることが特定される。したがって、最低の位置は、Ａであると特定される。
【００７１】
方法８００は、ステップ８０８に進み、ハッシュ・テーブル２１１が、ハッシュ・テーブル更新回路２２５によって更新される。この例では、エントリＤである次の競合フリートランザクションの位置をポイントするエントリをエントリ３である出力カウンタによってポイントされるエントリに移動することにより、初期ハッシュ・テーブル７１０が更新されて、更新されたハッシュ・テーブル７１２が形成される。同時に、出力カウンタによってポイントされるエントリから次の競合フリートランザクションの位置をポイントするエントリの下のエントリまでに位置するハッシュ・テーブルのエントリが、１エントリだけ上方に移動される。ハッシュ・テーブル２１１が更新されると、３の値を有する出力カウンタ２０７が、バッファ位置０×Ｄにインデックスを付ける。
【００７２】
ステップ８１０で、バッファ位置０×Ｄにあるトランザクションである出力カウンタ２０７によってインデックスが付けられた次のトランザクションが、ローカル・メモリ１５０（図１）に発行される。そのトランザクションのアドレスも、ステップ８１２で、発行済みアドレス・パイプライン２１７（図２）の中に格納され、出力カウンタ２０７が、ステップ８１４で、４の値に増分される。
【００７３】
ステップ８１６が続いて行われ、エントリＡである発行済みトランザクションの位置に対応するキュー位置レジスタ２１３の位置の値をキュー位置レジスタ２１３の後部に送り、空けられた位置より上のエントリを１つの位置だけ前に進めることにより、キュー位置レジスタ２１３が更新される。テーブル７１３は、キュー位置レジスタ２１３内の更新された値を示している。
【００７４】
図５Ｅは、新たなトランザクションがトランザクション・バッファ２０３にロードされ、次にトランザクション発行が行われる別のシナリオを描いている。やはり新たなトランザクションをロードすることから始めると、方法８５０がステップ８５２で開始し、新たなトランザクションが、ハッシュ・テーブル２１１を介して入力カウンタ２０５によってインデックスが付けられたバッファ位置でトランザクション・バッファ２０３にロードされる。現在、入力カウンタ値７０２は１であり、テーブル７１２に現在の状態を示すハッシュ・テーブル２１１を介して入力カウンタ２０５によってインデックスが付けられたバッファ位置は、バッファ位置０×４である。この例では、新たなトランザクションのアドレスは、２ＸＸＸＸＸＸＸである。方法８５０は、ステップ８５４で終り、入力カウンタ２０５が増分される。
【００７５】
トランザクションは、方法８００を呼び出すことによって並べ替えられたトランザクション・ストリーム２７上に発行される。各ステップを個別に説明せずに、ベクトル間競合検出回路２１５により、バッファ位置０×０だけが競合フリートランザクションを含むことが特定される。バッファ位置０×０をポイントする初期キュー位置レジスタ（テーブル７１３）内のエントリは、Ｃである。したがって、最低の位置は、Ｃであると特定される。
【００７６】
ステップ８０８で、エントリ０である次の競合フリートランザクションの位置をポイントするエントリをエントリ４である出力カウンタによってポイントされたエントリに移動することにより、ハッシュ・テーブル２１１が、ハッシュ・テーブル更新回路２２５によって更新されて、更新されたハッシュ・テーブル７１４が形成される。同時に、出力カウンタによってポイントされるエントリから次の競合フリートランザクションの位置をポイントするエントリの下のエントリまでに位置するハッシュ・テーブルのエントリが、１エントリだけ上方に移動される。テーブル７１２および７１４によって表わされるハッシュ・テーブル２１１の円形の性質は、図５Ｅから明らかである。ハッシュ・テーブル２１１が更新されると、４の値を有する出力カウンタ２０７が、バッファ位置０×０にインデックスを付ける。
【００７７】
ステップ８１０ないし８１４で、バッファ位置０×０にある出力カウンタ２０７によってインデックスが付けられた次のトランザクションが発行され、そのトランザクションのアドレスが、発行済みアドレス・パイプライン２１７の中に格納され、出力カウンタ２０７が５の値に増分される。
【００７８】
ステップ８１６が続いて行われ、エントリＣである発行済みトランザクションの位置に対応するキュー位置レジスタ２１３の位置の値をキュー位置レジスタ２１３の後部に送り、空けられた位置より上のエントリを１つの位置だけ前に進めることにより、キュー位置レジスタ２１３が更新される。テーブル７１５は、キュー位置レジスタ２１３内の更新された値を示している。
【００７９】
また、競合フリートランザクションがもはや存在しない場合の第２レベル・アービトレータ２４の動作も例示するため、図５Ｆは、新たなトランザクションがトランザクション・バッファ２０３にロードされ、続いてトランザクション発行が行われる別のシナリオを描いている。やはり新たなトランザクションをロードすることから始めると、方法８５０は、ステップ８５２で開始し、新たなトランザクションが、ハッシュ・テーブル２１１を介して入力カウンタ２０５によってインデックスが付けられたバッファ位置でトランザクション・バッファ２０３にロードされる。現在、入力カウンタ値７０２は、２であり、テーブル７１４に現在の状態を示したハッシュ・テーブル２１１を介して入力カウンタ２０５によってインデックスが付けられたバッファ位置は、バッファ位置０×９である。この例では、新たなトランザクションのアドレスは、３ＸＸＸＸＸＸＸである。方法８５０は、ステップ８５４で終り、入力カウンタ２０５が増分される。
【００８０】
トランザクションは、やはり方法８００を呼び出すことによって並べ替えられたトランザクション・ストリーム２７上に発行される。各ステップを個別に説明せずに、ベクトル間競合検出回路２１５によって有効な競合を免れたトランザクションが存在しないと判定される。
【００８１】
競合フリートランザクションが存在しないので、最小の位置は０に設定され、並べ替えはまったく必要とされず、方法８００は、ステップ８１０に進み、バッファ位置０×１にある出力カウンタ２１７によってインデックスが付けられたトランザクションが発行される。そのバッファ位置は、トランザクション・バッファ２０３内の最も古いトランザクションを含むことに留意されたい。したがって、トランザクション・バッファ２０３がアンロード（ｕｎｌｏａｄ）される順序は、最も古い競合フリートランザクションから開始して、すべての競合フリートランザクションが発行されるまで続き、次に、トランザクション・バッファ内に残っている最も古いトランザクションの順である。
【００８２】
ステップ８１２および８１４で、そのトランザクションのアドレスが発行済みアドレス・パイプライン２１７の中に格納され、出力カウンタ２０７が６の値に増分される。ステップ８１６が続いて行われ、エントリ０である発行済みトランザクションの位置に対応するキュー位置レジスタ２１３の位置の値をキュー位置レジスタ２１３の後部に送り、空けられた位置より上のエントリを１つの位置だけ前に進めることにより、キュー位置レジスタ２１３が更新される。テーブル７１７は、キュー位置レジスタ２１３内の更新された値を示している。
【００８３】
図５Ａないし５Ｆに示した例を参照して第２レベル・アービトレータ２４の動作を詳細に説明したので、表１は、別のオープン・ページ例を示している。トランザクション・バッファ２０３（図２）が、トランザクションがポイントするアドレスのメモリ・サブユニットを含む１６のエントリを保持している。先入れ先出し（ＦＩＦＯ）順に対応する、トランザクションが第１レベル・アービトレータ２２（図１）からローカル・メモリ１５０（図１）に転送される通常のケースでは、合計で１３の競合が生じる。例えば、メモリ・サブユニット８内のトランザクションを含むエントリ２を参照すると、そのトランザクションと前のトランザクションの間で競合が検出される。というのは、前のトランザクション、つまり、エントリ１は、異なるメモリ・サブユニット内のトランザクションを含むからである。したがって、第１レベル・アービトレータ２２から受け取られた合成トランザクション・ストリーム２５は、１３のメモリが競合することを生じさせる順序でトランザクションを含んでいる。その１６のトランザクションを並べ替えて、例示する最適化された順序でそのトランザクションを発行するように第２レベル・アービトレータ２４を使用すると、メモリ競合が６つだけに削減される。
【００８４】
【表１】
2004252985.tif 000003
【００８５】
表２は、クローズド・ページ例を示している。４ステージ・パイプライン・アクセスで、第１レベル・アービトレータ２２から受け取られた合成トランザクション・ストリーム２５が、４つのメモリの競合を生じさせる順序でトランザクションを含む。例えば、メモリ・サブユニット３内のトランザクションを含むエントリ１を参照すると、前のトランザクションもやはりメモリ・サブユニット３に対するものであったため、競合が検出される。同様に、エントリＥ内のトランザクションも競合を生じさせる。というのは、前の３つのトランザクションの１つも、メモリ・サブユニット３に対するものであったからである。表２は、クローズド・ページの最適化済み順序に並べ替えられたトランザクションも示している。４ステージ・パイプラインコンテンツも示される。並べ替えられたトランザクションでは、１つの競合だけが生じる。つまり、バッファ・エントリＥ内のトランザクションがローカル・メモリ１５０に転送された場合である。というのは、最新の３つのトランザクションの別のトランザクションもメモリ・サブユニット３にアクセスしたからである。
【００８６】
【表２】
2004252985.tif 000004
【００８７】
次に、ベクトル内競合検出回路２１９（図２）の動作をより詳細に説明する。第２レベル・アービトレータ２４が、詳細には、ハッシュ・テーブル更新回路２２５がトランザクションを並べ替える際、トランザクションは、別々のストリームのインターリーブを変更することによって並べ替えられなければならない。ストリーム内要求の時間的順序は、保たれなければならない。トランザクション・ベクトルは、一般に、競合境界にまたがるので、回路２２５は、境界横断においてストリーム内要求を並べ替えてはならない。表３が誤った動作の例を提示する一方で、表４は、第２レベル・アービトレータ２４がどのように動作すべきかを示している。
【００８８】
【表３】
2004252985.tif 000005
【００８９】
表３は、７つの保留中のトランザクションを有するトランザクション・バッファを示している。３つのベクトル（ベクトル＿Ａ、ベクトル＿Ｂ、およびベクトル＿Ｃ）に対するトランザクション／３つのベクトル（ベクトル＿Ａ、ベクトル＿Ｂ、およびベクトル＿Ｃ）からのトランザクションを生じさせる３つの要求ソースが存在する。ベクトル＿Ａに対するアクセスによって生成された並べ替えられたトランザクション・ストリーム２７が、ページ境界を横断して、ベクトル＿Ａに対する順序の乱れたアクセスを生じさせる。したがって、第２レベル・アービトレータ２４により、その状況が検出され、データ破損を回避するようにその並べ替えが抑制される。
【００９０】
【表４】
2004252985.tif 000006
【００９１】
表４に示した例では、バッファ・エントリ０内のトランザクションにサービスを提供した後、第２レベル・アービトレータ２４は、次の競合フリーエントリがバッファ・エントリ３にあることを検出する。しかし、ハッシュ・テーブル更新回路２２５により、エントリ０とエントリ３の間の間隔が順序の乱れたトランザクションを含むことが検出される。これにより、そのサイクルに関する並べ替えの抑制が行われ、したがって、エントリ１（第１レベルのアービトレーションされた順序における次のエントリ）が、サービスを受ける次のエントリである。続く２つのトランザクションで、メモリ・サブユニット３にアクセスするトランザクションが先に処理されて、さらなる競合が回避されてから、メモリ・サブユニット４のトランザクションの残りのトランザクションがサービスを受ける。
図６は、第２レベル・アービトレータ２４’の代替の実装例を示している。この実装例では、第１レベル・アービトレータ２２からの合成トランザクション・ストリーム２５が、読み取り／書き込みデインターリーブ（ｄｅ−ｉｎｔｅｒｌｅａｖｅ）１２０によって読み取りトランザクション・ストリーム１２１と書き込みトランザクション・ストリーム１２２に分けられる。読み取りトランザクション・ストリーム１２１および書き込みトランザクション・ストリーム１２２のトランザクションも、読み取りバッファ１２３および書き込みバッファ１２４にそれぞれ別々にバッファリングされる。
【００９２】
第２レベル読み取りアービトレータ１２５が、読み取りバッファ１２３内のトランザクションに対して第２のアービトレーションアルゴリズムを実行して、読み取りマルチプレクサ１２６が、より少ない競合の回数を有する読み取りトランザクションを動的に選択することを可能にし、そのトランザクションが、読み取り／書き込みインターリーブ１３０に転送される。したがって、読み取りバッファ１２３の機能は、第２レベル読み取りアービトレータ１２５に読み取りトランザクション・ストリーム１２１内のウインドウに対する同時実行のアクセスを提供することである。ウインドウ内のトランザクションが、第２レベル・アービトレータ１２５によって解析され、トランザクションの第１レベルのアービトレーション順序が、メモリ・リソース競合の出現回数を最小限に抑えるように必要に応じて調整され、第２レベルのアービトレーション順で読み取りトランザクション・ストリーム１３１が生成される。
【００９３】
第２レベル読み取りアービトレータ１２５と同様に、第２レベル書き込みアービトレータ１２７も、書き込みバッファ１２４内の書き込みトランザクションに対して第２のアービトレーションアルゴリズムを実行する。書き込みマルチプレクサ１２８が、並べ替えられた順序でそれらのトランザクションを選択して第２レベルのアービトレーション順で書き込みトランザクション・ストリーム１３２を形成してから、トランザクションを書き込み／読み取りインターリーブ１３０に転送する。
【００９４】
読み取り／書き込みインターリーブ１３０は、並べ替えられた読み取りトランザクション・ストリームと書き込みトランザクション・ストリームをインターリーブして、ローカル・メモリ１５０（図１）に転送される単一の合成トランザクション・ストリーム２７にする。
【００９５】
図６のデュアル・バッファ実装例は、読み取り／書き込みターンアラウンド（ｔｕｒｎａｒｏｕｎｄ）頻度を最小限に抑えることができるというさらなる利点を有する。これにより、読み取り／書き込みターンアラウンドに関連するあらゆるパフォーマンス・ペナルティが最小限に抑えられる。
【００９６】
この実装例では、読み取りバッファ１２３、マルチプレクサ１２６、および第２レベル読み取りアービトレータ１２５が構築され、図２に関連して提示した機能を実行する。同様に、書き込みバッファ１２４、マルチプレクサ１２８、および第２レベル書き込みアービトレータ１２７も、図２に提示したとおり構築される。
【００９７】
以上、本発明の一部の実施形態だけを説明したが、本発明の趣旨および範囲を逸脱することなく、それらの実施形態に変更および／または改変を加えることができる。
【００９８】
本明細書では、「備える（ｃｏｍｐｒｉｓｉｎｇ）」という語は、「主に含むが、必ずしも限定されない（ｉｎｃｌｕｄｉｎｇ  ｐｒｉｎｃｉｐａｌｌｙ  ｂｕｔ  ｎｏｔ  ｎｅｃｅｓｓａｒｉｌｙ  ｓｏｌｅｌｙ）」こと、あるいは「有し（ｈａｖｉｎｇ）」または「含む（ｉｎｃｌｕｄｉｎｇ）」、ことを意味し、「だけから構成される（ｃｏｎｓｉｔｉｎｇ  ｏｎｌｙ  ｏｆ）」という意味ではない。「ｃｏｍｐｒｉｓｅ」や「ｃｏｍｐｒｉｓｅｓ」などの「ｃｏｍｐｒｉｓｉｎｇ」という語の変形も、同様の意味を有する。
【図面の簡単な説明】
【００９９】
【図１】ホスト・コンピュータおよびプリンタ・デバイスを含むプリンタ・システムを示す概略ブロック図である。
【図２】第２レベル・アービトレータを示すブロック図である。
【図３】４重インターリーブ・アーキテクチャを有するベクトル間競合検出サブ回路を示すブロック図である。
【図４Ａ】トランザクションを発行する際の第２レベル・アービトレータの動作を示すフローチャートである。
【図４Ｂ】新たに受け取られたトランザクションをロードする際の第２レベル・アービトレータの動作を示すフローチャートである。
【図５Ａ】例示的なオープン・ページ・モードの第２レベル・アービトレータ回路の動作を示す図である。
【図５Ｂ】例示的なオープン・ページ・モードの第２レベル・アービトレータ回路の動作を示す図である。
【図５Ｃ】例示的なオープン・ページ・モードの第２レベル・アービトレータ回路の動作を示す図である。
【図５Ｄ】例示的なオープン・ページ・モードの第２レベル・アービトレータ回路の動作を示す図である。
【図５Ｅ】例示的なオープン・ページ・モードの第２レベル・アービトレータ回路の動作を示す図である。
【図５Ｆ】例示的なオープン・ページ・モードの第２レベル・アービトレータ回路の動作を示す図である。
【図６】第２レベル・アービトレータの代替の実装例を示す図である。
【符号の説明】
【０１００】
２４  アービトレータ
２５  データ・ストリーム
２７  トランザクション・ストリーム
２０３  トランザクション・バッファ
２０４  デマルチプレクサ
２０５  入力カウンタ
２０６  マルチプレクサ
２０７  出力カウンタ
２１１  ハッシュ・テーブル
２１３  キュー位置レジスタ
２１５  ベクトル間競合検出回路
２１７  発行済みアドレス・パイプライン
２１９  ベクトル内競合検出回路
２２５  ハッシュ・テーブル更新回路
２５１  クローズド・ページ・モード・フラグ
２８５、２８７  ポインタ
【図１】
2004252985.tif 000007
【図２】
2004252985.tif 000008
【図３】
2004252985.tif 000009
【図４Ａ】
2004252985.tif 000010
【図４Ｂ】
2004252985.tif 000011
【図５Ａ】
2004252985.tif 000012
【図５Ｂ】
2004252985.tif 000013
【図５Ｃ】
2004252985.tif 000014
【図５Ｄ】
2004252985.tif 000015
【図５Ｅ】
2004252985.tif 000016
【図５Ｆ】
2004252985.tif 000017
【図６】
2004252985.tif 000018
【外国語明細書】
2004252985.tif 000019
2004252985.tif 000020
2004252985.tif 000021
2004252985.tif 000022
2004252985.tif 000023
2004252985.tif 000024
2004252985.tif 000025
2004252985.tif 000026
2004252985.tif 000027
2004252985.tif 000028
2004252985.tif 000029
2004252985.tif 000030
2004252985.tif 000031
2004252985.tif 000032
2004252985.tif 000033
2004252985.tif 000034
2004252985.tif 000035
2004252985.tif 000036
2004252985.tif 000037
2004252985.tif 000038
2004252985.tif 000039
2004252985.tif 000040
2004252985.tif 000041
2004252985.tif 000042
2004252985.tif 000043
2004252985.tif 000044
2004252985.tif 000045
2004252985.tif 000046
2004252985.tif 000047
2004252985.tif 000048
2004252985.tif 000049
2004252985.tif 000050
2004252985.tif 000051
2004252985.tif 000052
2004252985.tif 000053
2004252985.tif 000054
2004252985.tif 000055
2004252985.tif 000056
2004252985.tif 000057
2004252985.tif 000058