(57)【特許請求の範囲】
【請求項１】
コンピュータ実装の方法であって、
第１の処理ユニットから、前記第１の処理ユニット及び第２の処理ユニットの間のバスインタフェースを介して、前記第２の処理ユニットのローカルメモリの領域に記憶されたデータの一部分に対する第１の要求を送ることと、
前記第１の処理ユニットが、前記第１の要求に応じて、前記一部分を含む前記領域に記憶された前記データの全てのコピーを受信することと、
前記第１の処理ユニットが、前記データの前記受信したコピーを前記第１の処理ユニットのバッファに記憶することと、
前記第１の処理ユニットが、前記第２の処理ユニットの前記ローカルメモリの前記領域に記憶された前記データのうち前記一部分とは異なる部分に対する第２の要求を送ることと、
前記第１の処理ユニットが、前記第２の要求に応じて、前記データの異なる部分のコピーを前記第１の処理ユニットの前記バッファからリトリーブすることと、を含み、
前記第１の処理ユニットは、中央処理ユニット（ＣＰＵ）及びグラフィックス処理ユニット（ＧＰＵ）のうち一方であって、前記第２の処理ユニットは、前記ＣＰＵ及び前記ＧＰＵのうち他方である、コンピュータ実装の方法。
【請求項２】
前記領域はキャッシュラインを備える請求項１のコンピュータ実装の方法。
【請求項３】
前記第１の処理ユニットが、前記受信することに先立ち前記バスインタフェースを介して前記第２の処理ユニットの前記ローカルメモリの別の領域に記憶されたデータのコピーに対する別の要求を送ることを更に備える請求項１のコンピュータ実装の方法。
【請求項４】
前記第１の処理ユニット及び第２の処理ユニットの間のバスインタフェースは、周辺要素相互接続エクスプレス（ＰＣＩＥ）バスを含む請求項１のコンピュータ実装の方法。
【請求項５】
第１の処理ユニットであって、
少なくとも第２の処理ユニットと通信可能に接続されたバスインタフェースであって、前記第２の処理ユニットのローカルメモリの領域に記憶されたデータの一部分に対する第１の要求を送り、前記第１の要求に応じて、前記一部分を含む前記領域に記憶された前記データの全てのコピーを受信するように構成されるバスインタフェースと、
前記データの前記受信したコピーを記憶するように構成されるバッファと、を備え、
前記第１の処理ユニットは、前記ローカルメモリの前記領域に記憶された前記データのうち前記一部分とは異なる部分に対する第２の要求を送り、前記第２の要求に応じて、前記異なる部分のコピーを前記バッファからリトリーブするように構成されており、
前記第１の処理ユニットは、中央処理ユニット（ＣＰＵ）及びグラフィックス処理ユニット（ＧＰＵ）のうち一方であって、前記第２の処理ユニットは、前記ＣＰＵ及び前記ＧＰＵのうち他方である、第１の処理ユニット。
【請求項６】
前記領域はキャッシュラインを備える請求項５の第１の処理ユニット。
【請求項７】
前記領域から前記データのコピーを受信することに先立ち前記バスインタフェースは前記第２の処理ユニットの前記ローカルメモリの別の領域におけるデータの別の部分のコピーに対する後続の要求を送るように更に構成される請求項５の第１の処理ユニット。
【請求項８】
前記バスインタフェースは周辺要素相互接続エクスプレス（ＰＣＩＥ）バスへの結合を含む請求項５の第１の処理ユニット。
【請求項９】
中央処理ユニット（ＣＰＵ）及びグラフィックス処理ユニット（ＧＰＵ）のうち一方を含み、且つ、バッファを含む第１の処理ユニットと、ローカルメモリに結合され、前記ＣＰＵ及び前記ＧＰＵのうち他方を含む第２の処理ユニットと、を備えるコンピューティングシステムであって、
前記第１の処理ユニットは、第２の処理ユニットと通信可能に接続されたバスインタフェースであって、前記第２の処理ユニットの前記ローカルメモリの領域に記憶されたデータの一部分に対する第１の要求を送り、前記第１の要求に応じて、前記一部分を含む前記領域に記憶された前記データの全てのコピーを受信するように構成されるバスインタフェースを備え、
前記第１の処理ユニットは、前記データの前記受信したコピーを前記第１の処理ユニットの前記バッファに記憶し、前記第２の処理ユニットの前記ローカルメモリの前記領域に記憶された前記データのうち前記一部分とは異なる部分に対する第２の要求を送り、前記第２の要求に応じて、前記異なる部分のコピーを前記第１の処理ユニットの前記バッファからリトリーブするように構成されている、コンピューティングシステム。
【請求項１０】
前記領域はキャッシュラインを備える請求項９のコンピューティングシステム。
【請求項１１】
前記領域から前記データのコピーを受信することに先立ち前記バスインタフェースは前記第２の処理ユニットの前記ローカルメモリの別の領域におけるデータの別の部分のコピーに対する後続の要求を送るように更に構成される請求項９のコンピューティングシステム。
【請求項１２】
前記バスインタフェースは周辺要素相互接続エクスプレス（ＰＣＩＥ）バスへの結合を含む請求項９のコンピューティングシステム。
【請求項１３】
コンピューティングデバイス上で実行されると、第１の処理ユニットに動作を実行させる命令を含むコンピュータプログラムであって、前記動作は、
前記第１の処理ユニット及び第２の処理ユニットの間のバスインタフェースを介して、前記第２の処理ユニットのローカルメモリの領域に記憶されたデータの一部分に対する第１の要求を送ることと、
前記第１の要求に応じて、前記一部分を含む前記領域に記憶された前記データの全てのコピーを受信することと、
前記データの前記受信したコピーを前記第１の処理ユニットのバッファに記憶することと、
前記第２の処理ユニットの前記ローカルメモリの前記領域に記憶された前記データのうち前記一部分とは異なる部分に対する第２の要求を送ることと、
前記第２の要求に応じて、前記異なる部分のコピーを前記第１の処理ユニットの前記バッファからリトリーブすることと、を含み、
前記第１の処理ユニットは、中央処理ユニット（ＣＰＵ）及びグラフィックス処理ユニット（ＧＰＵ）のうち一方であって、前記第２の処理ユニットは、前記ＣＰＵ及び前記ＧＰＵのうち他方である、コンピュータプログラム。
【請求項１４】
前記第１の処理ユニットはハードウエア記述言語ソフトウエアにおいて具現化される請求項１３のコンピュータプログラム。
【請求項１５】
前記第１の処理ユニットはベリログハードウエア記述言語ソフトウエア、ベリログＡハードウエア記述言語ソフトウエア及びＶＨＤＬハードウエア記述言語ソフトウエアの１つにおいて具現化される請求項１４のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は概してコンピューティングシステムにおいて行われるコンピューティング動作に向けられている。
【背景技術】
【０００２】
従来のコンピューティングシステムは、中央処理ユニット（ＣＰＵ）及びグラフィクス処理ユニット（ＧＰＵ）等の複数のハードウエア要素を含む。ＣＰＵは、コンピューティングシステムの他の全てのデバイスの動作を連携させる集積回路（ＩＣ）である。ＧＰＵは、グラフィクス処理タスク等のデータ並列コンピューティングタスクを行うように適合させられている集積回路である。ＧＰＵは、例えば、ビデオゲームアプリケーション等のエンドユーザアプリケーションによって要求されるグラフィクス処理タスクを実行することができる。
【０００３】
従来のコンピューティングシステムはまた、ランダムアクセスメモリ（ＲＡＭ）等のシステムメモリを含む。典型的には、ＣＰＵ及びＧＰＵは各々システムメモリへのアクセスを有する。システムメモリに加えて、ＧＰＵはまたローカルメモリに結合されていることがある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
残念なことに、ＧＰＵローカルメモリに対するＣＰＵ読み出しは低速である。具体的には、読み出しはアンキャッシュ(uncached)（ＵＣ）で行われ、このことは読み出されるデータがローカルキャッシュメモリ内へ複製されないことを意味する。また、全てのアンキャッシュの読み出しは３２ビット又は６４ビットの幅でシリアル化されており、このことは、ＣＰＵは一度に１つの読み出し要求のみを発行し、そして別の読み出し要求を発行するのに先立ち読み出し要求からのデータを待ってデータを返送することを意味する。結果として、ＧＰＵローカルメモリに対するＣＰＵ読み出しは、通常、低速である。
【０００５】
従って、第１の処理ユニット（例えばＣＰＵ）が第２の処理ユニット（例えばＧＰＵ）のローカルメモリを速やかに読むことを可能にするシステム、装置及び方法が必要とされている。
【課題を解決するための手段】
【０００６】
本発明の実施形態は、処理ユニットのローカルメモリに対する高速な読み出しをもたらすシステム、装置及び方法を提供することによって、上述の必要性を満たす。
例えば、本発明の実施形態は、第１の処理ユニットが第２の処理ユニットのローカルメモリを効率的に読むことを可能にするためのコンピュータ実装の方法(computer-implemented method)を提供する。このコンピュータ実装の方法に従うと、第２の処理ユニットのローカルメモリの領域におけるデータの一部分に対する要求は、第１の処理ユニット及び第２の処理ユニットの間のインタフェースを介してを送られる。要求に応答して、領域からの全てのデータが受信される。このコンピュータ実装の方法は、領域からのデータをバッファ内に記憶することを更に含んでいてよい。領域におけるデータに対する後続の要求は、バッファからサービスされてよい。
【０００７】
本発明の別の実施形態は、インタフェース及びバッファを含む処理ユニットを提供する。インタフェースは、（i）他の処理ユニットのローカルメモリの領域におけるデータの一部分に対する要求を送ると共に（ii）要求に応答して領域からの全てのデータを受信するように構成される。バッファは、他の処理ユニットのローカルメモリの領域からのデータを記憶するように構成される。例においては、領域におけるデータに対する後続の要求は、バッファからサービスされる。
【０００８】
本発明の更なる実施形態は、第１の処理ユニット及び第２の処理ユニットを含むコンピューティングシステムを提供する。第２の処理ユニットはローカルメモリに結合されている。第１の処理ユニットは、（i）第２の処理ユニットのローカルメモリの領域におけるデータの一部分に対する要求を送ると共に（ii）要求に応答して領域からの全てのデータを受信するように構成されるインタフェースを含む。第１の処理ユニットは、第２の処理ユニットのローカルメモリの領域からのデータを記憶するように構成されるバッファを含んでいてもよい。領域におけるデータに対する後続の要求は、バッファからサービスされてよい。
【０００９】
本発明の更なる特徴及び利点の他、本発明の種々の実施形態の構成及び動作は、添付の図面を参照して以下に詳細に説明される。尚、本発明はここに説明される特定の実施形態に限定されない。そのような実施形態は例示の目的のみのためにここに提示されている。ここに含まれる教示に基き追加的な実施形態が関連分野を含めた当業者にとって明らかであろう。
【図面の簡単な説明】
【００１０】
ここに組み込まれ且つ出願書類の一部をなす添付の図面は本発明を示し、そして明細書と共に、本発明の原理を説明すること及び関連分野を含めた当業者が本発明を作りそして使用するのを可能にすることに更に役立つ。
【００１１】
【図１】図１は本発明の実施形態に従い第２の処理ユニットのローカルメモリを読むように構成される第１の処理ユニットを示す図である。
【００１２】
【図２】図２は本発明の実施形態に従う例示的なコンピューティングシステムを示す図である。
【００１３】
【図３】図３は本発明の実施形態に従う例示的なＣＰＵ及びＧＰＵを示す図である。
【００１４】
【図４】図４は本発明の実施形態に従い別の処理ユニットのローカルメモリ内に記憶されるデータをリトリーブするための例示的な方法を示すフローチャートである。
【００１５】
【図５】図５は本発明の実施形態に従いデータに対する要求を受信するための例示的な方法を示すフローチャートである。
【００１６】
本発明の特徴及び利益は、図面と共に以下に記述される詳細な説明からより明らかになり、図面において同様の参照符号は全体を通して対応する要素を識別する。図面において、同様の参照番号は一般的に同一の、機能的に類似の、且つ／又は構造的に類似の要素を示す。ある要素が最初に現れる図面は対応する参照番号の一番左の単一又は複数の桁によって示される。
【発明を実施するための形態】
【００１７】
I．概説
本発明の実施形態は、処理ユニットのローカルメモリに対する高速な読み出し及びそのアプリケーションに向けられている。以下の詳細な説明において、「１つの実施形態」、「ある実施形態」、「例示的実施形態」等に対する言及は、説明される実施形態が特定の特徴、構造又は特性を含んでいてよいが、全ての実施形態が必ずしも当該特定の特徴、構造又は特性を含む必要がなくてよいことを示している。また、そのような表現は必ずしも同じ実施形態を参照しているとは限らない。更に、特定の特徴、構造又は特性がある実施形態に関連して説明されている場合には、明示的に説明されていようとなかろうと、他の実施形態に関連して当該特定の特徴、構造又は特性を具現化することは当業者の知識の範囲内にあることと言える。
【００１８】
図１に示されるように、実施形態は、第１の処理ユニット１０４Ａが第２の処理ユニット１０４Ｂのローカルメモリ１０６を効率的に読むことを可能にする。処理ユニット１０４はバスによって互いに結合されており、そして別個のパッケージ（又はチップ）内に含まれていてよく、あるいは単一のパッケージ（又はチップ）内に含まれていてよい。各処理ユニット１０４は、ＣＰＵ、ＧＰＵ、ビデオ処理ユニット、コプロセッサ（例えば浮動小数点プロセッサ等）、及び／又は別の種類の処理ユニットを備えていてよい。
【００１９】
例示のみを目的とし且つ限定を目的とせずに、本発明の実施形態はＧＰＵのローカルメモリを読むことに関してここに説明されることになる。しかし、関連分野を含めた当業者であれば、本発明の実施形態は、中央処理ユニット及びコプロセッサ等の他の種類の処理ユニットのローカルメモリを読むことにも適用され得ることを理解するはずである。そのような他の実施形態は本発明の精神及び範囲内で検討される。
【００２０】
本発明の実施形態は、書き込み性能を損なうことなしにＧＰＵローカルメモリに対するＣＰＵ読み出しの性能を向上させることに向けられている。例えば本発明の実施形態は、ＧＰＵローカルメモリに対する従来のＣＰＵ読み出しに比べて１０倍を超えて高速な、ＧＰＵローカルメモリに対するＣＰＵ読み出しを提供し得る。ＧＰＵローカルメモリに対する高速なＣＰＵ読み出しを提供するために、ＷＣメモリ種類の一部である読み出しメカニズムが、読み出し結合(read combining)（ＲＣ）に変更される。この点において、ＣＰＵノースブリッジは、読み出し結合をサポートするために１つ以上の読み出しバッファを含むように構成される。ある実施形態においては、１つ以上の読み出しバッファはキャッシュライン長（例えば６４バイト幅）のものである。
【００２１】
本発明の別の実施形態は、第１のＧＰＵが第２のＧＰＵのローカルメモリから効率的に読み出すことを可能にする。周辺要素相互接続エクスプレス(peripheral component interconnect express)（ＰＣＩＥ）バスによって接続される２つ以上のＧＰＵを含む従来のシステムにおいては、第１のＧＰＵは第２のＧＰＵのローカルメモリから、それが低速すぎるという理由で、効率的に読み出すことはできない。本発明の実施形態に従いＧＰＵローカルメモリに対するＣＰＵからの読み出しパスを高速化することは、ピア・ツー・ピア(peer-to-peer)読み出しが効率的で且つ有用な様態で実装されることを可能にする。
【００２２】
そのようなＣＰＵ及びＧＰＵを詳細に説明するのに先立ち、そのようなＣＰＵ及びＧＰＵが実装され得る例示的なコンピュータシステムを説明することはむしろ有益である。
【００２３】
II．例示的なコンピューティングシステム
本発明の実施形態は、ハードウエア、ソフトウエア又はそれらの組み合わせを用いて実装されてよく、そして１つ以上のコンピューティングシステム内又は他の処理システム内に実装されてよい。図２は例示的なコンピューティングシステム２００を示している。
【００２４】
コンピューティングシステム２００は１つ以上の処理ユニット１０４を含む。処理ユニット１０４は汎用処理ユニット（例えばＣＰＵ）又は専用処理ユニット（例えばＧＰＵ）であってよい。処理ユニット１０４は通信基盤２０６（例えば通信バス、クロスオーバーバー又はネットワーク）に接続される。処理ユニット１０４の少なくとも１つはまた、ローカルメモリ１０６に結合される。後で更に詳細に説明されるように、１つ以上の他の処理ユニット１０４は、本発明の実施形態に従ってローカルメモリ１０６に効率的にアクセスすることができる。
【００２５】
コンピューティングシステム２００はまた、通信基盤２０６からの（又は図示しないフレームバッファからの）グラフィクスデータ、テキストデータ及び他のデータをディスプレイユニット２３０（例えば液晶ディスプレイ）上での表示のために転送するディスプレイインタフェース２０２を含む。
【００２６】
コンピューティングシステム２００はまた、主メモリ２０８、望ましくはランダムアクセスメモリ（ＲＡＭ）を含み、補助メモリ２１０を含んでいてもよい。補助メモリ２１０は例えば、ハードディスクドライブ２１２及び／又はリムーバブル記憶ドライブ２１４を含んでいてよく、フロッピー（登録商標）ディスクドライブ、磁気テープドライブ、光学ディスクドライブ等を代表する。リムーバブル記憶ドライブ２１４は周知の方法でリムーバブル記憶ユニット２１８から読み出し且つ／又はリムーバブル記憶ユニット２１８へ書き込みする。リムーバブル記憶ユニット２１８はフロッピー（登録商標）ディスク、磁気テープ、光学ディスク等を代表し、リムーバブル記憶ドライブ２１４によって読まれ且つ書き込まれる。理解されるであろうように、リムーバブル記憶ユニット２１８はコンピュータソフトウエア及び／又はデータが既に記憶されたコンピュータ可読記憶媒体を含む。
【００２７】
代替的な実装においては、補助メモリ２１０は、コンピュータプログラム又は他の命令がコンピュータシステム２００にロードされることを可能にするための他の同様のデバイスを含んでいてよい。そのようなデバイスは例えばリムーバブル記憶ユニット２２２及びインタフェース２２０を含み得る。そのような例は、プログラムカートリッジ及びカートリッジインタフェース（ビデオゲームデバイスにおいて見られるようなもの）、リムーバブルメモリチップ（例えば消去可能プログラム可能リードオンリメモリ（ＥＰＲＯＭ）又はプログラム可能リードオンリメモリ（ＰＲＯＭ））及び関連するソケット、並びにソフトウエア及びデータがリムーバブル記憶ユニット２２２からコンピューティングシステム２００へ転送されることを可能にする他のリムーバブル記憶ユニット２２２及びインタフェース２２０を含み得る。
【００２８】
コンピューティングシステム２００はまた通信インタフェース２２４を含んでいてよい。通信インタフェース２２４は、ソフトウエア及びデータがコンピューティングシステム２００と外部デバイスの間で転送されることを可能にする。通信インタフェース２２４の例は、モデム、ネットワークインタフェース（例えばイーサネット（登録商標）カード）、通信ポート、パーソナルコンピュータメモリカード国際協会(Personal Computer Memory Card International Association)（ＰＣＭＣＩＡ）スロット及びカード等を含み得る。通信インタフェース２２４を介して転送されるソフトウエア及びデータは、通信インタフェース２２４によって受信されることが可能な電子的信号、電磁気的信号、光学的信号又は他の信号であってよい信号２２８の形態にある。これらの信号２２８は通信パス（例えばチャネル）２２６を介して通信インタフェース２２４へ供給される。このチャネル２２６は信号を伝え、そしてワイヤ若しくはケーブル、光ファイバ、電話線、携帯電話リンク、ラジオ周波数（ＲＦ）リンク又は他の通信チャネルを用いて実装され得る。
【００２９】
この文書では、「コンピュータ可読記憶媒体」の用語は、リムーバブル記憶ドライブ２１４、及びハードディスクドライブ２１２内に組み込まれるハードディスクを一般的には参照して用いられる。これらのコンピュータプログラム製品は、コンピューティングシステム２００にソフトウエアを提供する。
【００３０】
コンピュータプログラム（コンピュータ制御論理とも称される）は主メモリ２０８及び／又は補助メモリ２１０内に記憶される。コンピュータプログラムはまた、リムーバブル記憶ドライブ２１４、ハードドライブ２１２又は通信インタフェース２２４を用いてコンピューティングシステム２００内へロードされてよい。そのようなコンピュータプログラムは、実行されるときに、ここで論じられるような本発明の特徴をコンピューティングシステム２００が行うことを可能にする。特に、コンピュータプログラムは、実行されるときに、本発明の実施形態に従い処理ユニット１０４の１つが処理ユニット１０４の別の１つのローカルメモリ１０６を効率的に読むことを可能にする。従って、そのようなコンピュータプログラムは、コンピューティングシステム２００の制御器を代表する。
【００３１】
III．例示的な処理ユニット
図３は例示的な処理ユニット１０４を示しており、ここで第１の処理ユニットは、本発明の実施形態に従い第２の処理ユニットのローカルメモリを読む。例えば図３は、ＣＰＵ３０２と、第１のローカルメモリ３５２Ａに結合される第１のＧＰＵ３５０Ａと、第２のローカルメモリ３５２Ｂに結合される第２のＧＰＵ３５０Ｂと、を示している。別個の且つ同様のデバイスとして図示されているが、ＧＰＵ３５０Ｂ及び３５０Ａは、単一のボードの一部、単一のパッケージの一部（例えば多重チップモジュールと同様の単一パッケージ内の２つの集積回路）、又は単一のデバイス内の別個のコアであってよい。追加的に又は代替的に、ＧＰＵ３５０Ａ及び３５０Ｂは同一である必要はなく異なっていてよい。例えば、ＧＰＵ３５０Ａは統合化グラフィクスデバイス（例えばチップセットノースブリッジ３２６内に統合化されているデバイス）として具現化されてよい一方で、ＧＰＵ３５０Ｂは別個の又はディスクリートなＧＰＵデバイスにおいて具現化されてよい。
【００３２】
ＣＰＵ３０２は１つ以上のコア３１０及びノースブリッジ３２０を含む。各コア３１０は、書き込み結合を可能にする１つ以上の書き込みバッファ３０６を含む。ある実施形態においては、ノースブリッジ３２０は、ＣＰＵノースブリッジ３２２及びチップセットノースブリッジ３２６を含む。別の実施形態においては、チップセットノースブリッジ３２６はＣＰＵ３０２内に組み込まれていない。ノースブリッジ３２０はシステムメモリ３３０に結合される。
【００３３】
ＣＰＵ３０２は、インタフェース３５６Ａによって第１のＧＰＵ３５０Ａに結合され、またインタフェース３５６Ｂによって第２のＧＰＵ３５０Ｂに結合される。インタフェース３５６は、例えば、周辺要素インタフェース(peripheral component interface)（ＰＣＩ）バス、アクセラレーテッドグラフィクスポート(accelerated graphics port)（ＡＧＰ）バス、ＰＣＩエクスプレス（ＰＣＩＥ）バス、又はコンピューティングシステムにおいて用いられる別の種類のバスであってよい。
【００３４】
各ＧＰＵ３５０は、バスインタフェース（ＢＩＦ）３５４及びホストデータパス（ＨＤＰ）３５６を含む。バスインタフェース３５４は、インタフェース３５６を介して通信するためのプロトコルを実装している。ホストデータパス３５６は、ローカルメモリ３５２へのＣＰＵ３０２アクセスを提供する。
【００３５】
動作において、ＣＰＵ３０２は、第１のＧＰＵ３５０Ａの第１のローカルメモリ３５２Ａに対する又は第２のＧＰＵ３５０Ｂの第２のローカルメモリ３５２Ｂに対する読み出し要求を作成してよい。６４バイト領域におけるアドレスに対する各読み出し要求の最初の４バイト（３２ビット）又は８バイト（６４ビット）は、ローカルメモリ３５２内の全６４バイトラインが読み出しバッファ３２４へと読み出されるようにする。同じ６４バイトラインに対する後続の全ての読み出しは読み出しバッファ３２４内でヒットし、従って従来の読み出しよりも高速にデータをＣＰＵ３０２へ返す。
【００３６】
また、ＣＰＵ３０２は、多重のアンキャッシュの(uncached)読み出しが同時にインフライト(in flight)になることを可能にし得るので、それによりメモリ３５２に対する読み出しが更に高速に進行することが可能になる。この機能をサポートするために、ＧＰＵ３５０のエンドポイントハードウエアが特別に構成される。具体的には、多重のアンキャッシュの読み出しが同時にインフライトになることを可能にするために、バスインタフェース（ＢＩＦ）３５４及びホストデータパス（ＨＤＰ）３５６が構成される。
【００３７】
ＣＰＵノースブリッジ３２２内に多重読み出しバッファを含ませることによって、更なる改良が得られる。既にＣＰＵノースブリッジ３２２内にある書き込みバッファ３０６を読み出しバッファのためにも用いられるように共有することは、幾つかの理由で更に性能を改善する。先ず、ハードウエアを共有することでコストが低減される。第２に、ハードウエアを共有することは、最も興味深いケースにおける性能に負担をかけない。第３に、書き込み及び読み出しのために共有されるバッファは、書き込み後読み出しハザード(read-after-write hazards)の検出及び訂正を容易にする。
【００３８】
ある実施形態においては、ピア・ツー・ピア読み出し（例えば第２のＧＰＵ３５０Ｂに対する第１のＧＰＵ３５０Ａからの読み出し、及びその逆）を可能にするために、チップセットノースブリッジ３２６にデータパスが追加される。１つ以上の読み出し結合バッファ（例えば読み出しバッファ３２４）が、ピア・ツー・ピア読み出しトラフィックをサポートするために専用にされてよい。この実施形態においては、第２のＧＰＵ３５０Ｂの第２のローカルメモリ３５２Ｂ上の６４バイト領域におけるアドレスに対して第１のＧＰＵ３５０Ａから読み出される最初の４バイト（３２ビット）又は８バイト（６４ビット）は、第２のローカルメモリ３５２Ｂ内の全６４バイトラインがＣＰＵノースブリッジ３２２の読み出しバッファ３２４へと読み出されるようにする。同じ６４バイトラインに対する後続の全ての読み出しは読み出しバッファ３２４内でヒットし、従って従来のピア・ツー・ピア読み出しよりも高速にデータを第１のＧＰＵ３５０Ａへ返す。同様のメカニズムは、第２のＧＰＵ３５０Ｂが第１のＧＰＵ３５０Ａの第１のローカルメモリ３５２Ａから読み出すことを可能にする。
【００３９】
加えて、多重のピア読み出しがインフライトになることを可能にするためにＧＰＵ３５０を変更することは、ピア・ツー・ピア読み出しが更に高速に進行することを可能にする。また、性能を更に改良するために、ＣＰＵノースブリッジ３２２内に多重読み出しバッファが含まれていてよい。更に、追加的な性能向上をもたらすために、幾つかの理由で、書き込みバッファ３０６は読み出しバッファのために用いられてもよい。先ず、ハードウエアを共有することでコストが低減される。第２に、ハードウエアを共有することは、最も興味深いケースにおける性能に負担をかけない。第３に、書き込み及び読み出しのために共有されるバッファは、書き込み後読み出しハザードの検出及び訂正を容易にする。
【００４０】
IV．例示的な動作
上述したように、本発明の実施形態は、第１の処理ユニットが第２の処理ユニットのローカルメモリを効率的に読むことを可能にする。以下に説明されるのは、（Ａ）第２の処理ユニットのローカルメモリ内に記憶されているデータをリトリーブする(retrieving)ために第１の処理ユニットによって実装される例示的な方法、及び（Ｂ）第１の処理ユニットからの要求を処理するために第２の処理ユニットによって実装される例示的な方法である。
【００４１】
Ａ．処理ユニットのローカルメモリ内に記憶されているデータをリトリーブするための例示的な方法
図４は本発明の実施形態に従い第２の処理ユニットのローカルメモリ内に記憶されているデータをリトリーブするために第１の処理ユニットによって実装される例示的な方法４００を示すフローチャートである。例えば方法４００は、ＣＰＵ３０２、第１のＧＰＵ３５０Ａ、及び／又は第２のＧＰＵ３５０Ｂによって実装されてよい。図４の方法４００は、図３に示される構成を参照して以下に説明される。
【００４２】
方法４００はステップ４０２で開始し、第１の処理ユニットは、第２の処理ユニットのローカルメモリからデータを読み出す必要性を識別する。例えば、ＣＰＵ３０２が、第１のＧＰＵ３５０Ａのローカルメモリ３５２Ａ又は第２のＧＰＵ３５０Ｂのローカルメモリ３５２Ｂを読む必要性を識別してよい。別の例では、第１のＧＰＵ３５０Ａ又は第２のＧＰＵ３５０Ｂのいずれかが、他のＧＰＵのローカルメモリ３５２に対するピア・ツー・ピア読み出しの必要性を識別してよい。
【００４３】
ステップ４０４では、要求されたデータが既にローカルバッファ内に記憶されているかどうかが決定される。他の処理ユニットのローカルメモリのある領域に対して先行する要求が作成されていた場合には、要求されたデータはローカルバッファ内に記憶されているであろう。例えば、上述したように、ＣＰＵ３０２がローカルメモリ３５２のメモリ領域（例えば６４バイト領域）に対して読み出し要求を作成すると、当該領域からの全てのデータが読み出しバッファ３２４内に記憶されていることになる。
【００４４】
ステップ４０４においてデータがローカルバッファ内にあると決定されると、ステップ４０６に示されるように、要求されたデータはローカルバッファからリトリーブされる。一方、ステップ４０４においてデータがローカルバッファ内にないと決定されると、ステップ４０８に示されるように、要求されたデータに対するメモリ要求は、他の処理ユニットへ送られる。
【００４５】
従来の読み出し要求とは異なり、多重読み出し要求が本発明の実施形態に従い並列に送られてよい。例えば、第１の処理ユニットは、第１の読み出し要求を第２の処理ユニットへ送ってよく、そして第１の読み出し要求に対応するデータを受信するのに先立ち、後続の読み出し要求を第２の処理ユニット又は別の処理ユニットへ送ってよい。第１及び第２の読み出し要求に対応するデータが準備されている場合にはいつでも、そのデータは第１の処理ユニットに提供される。このようにして、多重読み出し要求が並列に発行され得るので、１つ以上の他の処理ユニットのローカルメモリへのより高速なアクセスが可能である。
【００４６】
ステップ４１０では、データの全領域が他の処理ユニットから受信される。例えば、第１の処理ユニット（例えばＣＰＵ３０２又はＧＰＵ３５０）は、第２の処理ユニットのローカルメモリの領域（例えば６４バイトライン）の数バイト（例えば４又は８バイト）のみを読み出すように要求することがある。それにもかかわらず、第２の処理ユニットは全領域からのデータ（例えば６４バイトのデータ）を送る。
【００４７】
ステップ４１２では、全領域からのデータがローカルバッファ内に記憶される。当該領域内のデータに対する後続の読み出し要求は、他の処理ユニットのローカルメモリからよりはむしろ、ローカルバッファからサービスされることになる。
【００４８】
Ｂ．ローカルメモリ内でデータの読み出し要求を処理するための例示的な方法
図５は本発明の実施形態に従い第２の処理ユニットのローカルメモリ内のデータを読み出す第１の処理ユニットからの要求を処理するために第２の処理ユニットによって実装される例示的な方法５００を示すフローチャートである。例えば方法５００は、第１のＧＰＵ３５０Ａ又は第２のＧＰＵ３５０Ｂによって実装されてよい。図５の方法５００は、図３に示される構成を参照して以下に説明される。
【００４９】
方法５００はステップ５０２で開始し、第２の処理ユニットは、第２の処理ユニットのローカルメモリ内に記憶されているデータを読み出す要求を受信する。例えば、第１のＧＰＵ３５０Ａは、第１のＧＰＵ３５０Ａのローカルメモリ３５２Ａのある領域からデータを読み出すＣＰＵ３０２又は第２のＧＰＵ３５０Ｂのいずれかからの要求を受信してよい。同様に、第２のＧＰＵ３５０Ｂは、第２のＧＰＵ３５０Ｂのローカルメモリ３５２Ｂのある領域からデータを読み出すＣＰＵ３０２又は第１のＧＰＵ３５０Ａのいずれかからの要求を受信してよい。
【００５０】
ステップ５０４では、要求されたデータがスレッショルドを満足し又は超えているかが随意的に決定される。例えば、要求されたデータが少なくとも４バイト、８バイト、又は他の何らかのデータの最小量であるかどうかが随意的に決定されてよい。要求されたデータがスレッショルドを満足せず又は超えていない場合には、ステップ５０６に示されるように、要求されたデータのみが要求した処理ユニットへ送られる。
【００５１】
要求されたデータがスレッショルドを満足し若しくは超えている場合又はステップ５０４が含まれていない場合には、制御はステップ５０８に進む。ステップ５０８では、要求されたデータを含む全領域からの全データが、要求している処理ユニットへ送られる。例えば、データの領域は、メモリの６４バイトライン又はメモリの別の領域を備えていてよい。この例においては、要求されたデータが６４バイトラインのデータに含まれている場合には、全６４バイトのデータが、要求している処理ユニットへ送られる。このようにして、要求している処理ユニットは、全領域（例えばメモリの６４バイトライン）をローカルバッファ内に記憶してその領域内のデータへのより高速なアクセスを可能にし得る。
【００５２】
V．例示的なソフトウエア実装
ＣＰＵ３０２及びＧＰＵ３５０のハードウエア実装に加えて、そのような処理ユニットはまた、例えばソフトウエア（例えばコンピュータ可読プログラムコード）を記憶するように構成されるコンピュータ可読媒体内に配置されるソフトウエアにおいて具現化されてもよい。プログラムコードは、（i）ここに開示されるシステムの機能及び技術（例えば図４の方法４００及び／又は図５の方法５００）、（ii）ここに開示されるシステムの製造及び技術（例えばＣＰＵ３０２及び／又はＧＰＵ３５０の製造）又は（iii）ここに開示されるシステムの機能及び製造並びに技術の組み合わせ、の実施形態を含めて本発明の実施形態の実施可能性を生じさせる。
【００５３】
このことは、例えば、一般的なプログラミング言語（例えばＣ又はＣ＋＋）、ベリログ(Verilog)ＨＤＬ、ＶＨＤＬ、アルテラ(Altera)ＨＤＬ（ＡＨＤＬ）等を含むハードウエア記述言語(hardware description languages)（ＨＤＬ）、あるいは他の利用可能なプログラミング及び／又は回路図等（schematic）キャプチャツール(capture tools)（例えば回路キャプチャツール）の使用を通して達成され得る。プログラムコードは、半導体、磁気ディスク、又は光学ディスク（例えばＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ）を含む任意の既知のコンピュータ可読媒体内に配置され得る。従って、コードは、インターネット及びそれと同等のもの(the Internet and internets)を含む通信ネットワークを介して伝送され得る。上述したシステム及び技術によって達成される機能及び／又は提供される構造は、プログラムコードにおいて具現化されるコア（例えばＣＰＵコア又はＧＰＵコア）内で表現することができ、また集積回路の生産の一部としてハードウエアに変換されてよいことが理解される。
【００５４】
VI．結論
以上提示されているのは、第１の処理ユニット（例えばＣＰＵ又はＧＰＵ）が第２の処理ユニット（例えばＧＰＵ）のローカルメモリを効率的に読むことを可能にするための実施形態及びそのアプリケーションである。概要及び要約の欄ではなく詳細な説明の欄が特許請求の範囲を解釈するために用いられることを意図されていることが理解されるべきである。概要及び要約の欄は、発明者によって検討されているような本発明の１つ以上であるが全てではない例示的な実施形態を記述することができ、従って、本発明及び添付の特許請求の範囲を限定することを意図されるものでは決してない。
【図１】
0006029980.tif 000002
【図２】
0006029980.tif 000003
【図３】
0006029980.tif 000004
【図４】
0006029980.tif 000005
【図５】
0006029980.tif 000006