(57)【要約】複数のアクセラレーテッド処理デバイス（ＡＰＤ）を有するシステムにおけるデータ転送を改善するための技術を本明細書で説明する。このようなシステムでは、複数のＡＰＤは、一般的な相互接続ファブリックを介してプロセッサ（例えば、中央処理装置（ＣＰＵ））に接続されており、高速相互接続を介して互いに接続されている。本明細書の技術は、各ＡＰＤに接続された相互接続ファブリックの一部を介して両方のＡＰＤにデータを送信することによって、ＣＰＵとＡＰＤとの間のデータ転送のための有効帯域幅を増加させる。次に、一方のＡＰＤは、高速ＡＰＤ間相互接続を介して、データを他方のＡＰＤ又はプロセッサに転送する。ヘルパーＡＰＤを介して「間接的に」転送されるデータは、直接転送に比べて転送に若干時間がかかるが、ターゲットへの全体的な有効帯域幅は、高速ＡＰＤ間相互接続のために増加する。【選択図】図４
2021507337.tif 000002
【特許請求の範囲】
【請求項１】
ターゲットデバイスのための第１データ及び第２データを送信する方法であって、
プロセッサとターゲットデバイスとの間のデータ転送の要求を識別することであって、前記要求は、前記ターゲットデバイスと前記プロセッサとの間で転送するための前記第１データ及び前記第２データを指定する、ことと、
前記要求に応じて、第１期間中に第１相互接続バスを介して、前記ターゲットデバイスと前記プロセッサとの間で前記第１データを送信することと、
ヘルパーデバイスと前記プロセッサとの間の第２相互接続バスに予備帯域幅が存在することを識別することと、
前記予備帯域幅が存在すると識別したことに応じて、第２期間中に前記第２相互接続バスを介して、前記ヘルパーデバイスと前記プロセッサとの間で前記第２データを送信し、前記ターゲットデバイスと前記ヘルパーデバイスとの間に接続されたデバイス相互接続を介して、前記ヘルパーデバイスと前記ターゲットデバイスとの間で前記第２データを送信することと、を含む、
方法。
【請求項２】
前記第１相互接続バス及び前記第２相互接続バスの各々は、最大帯域幅を有し、
前記第１相互接続バス上で転送されるデータは、前記第２相互接続バスの帯域幅を消費せず、
前記第２相互接続バス上で転送されるデータは、前記第１相互接続バスの帯域幅を消費しない、
請求項１の方法。
【請求項３】
前記デバイス相互接続は、前記第１相互接続バスの前記帯域幅及び前記第２相互接続バスの前記帯域幅の両方よりも高い帯域幅を有する、
請求項１の方法。
【請求項４】
前記ヘルパーデバイスと前記プロセッサとの間で前記第２データを送信することは、
前記ヘルパーデバイスに関連するローカルメモリに前記第２データを書き込むことを含む、
請求項１の方法。
【請求項５】
前記ヘルパーデバイスと前記ターゲットデバイスとの間で前記第２データを送信することは、
前記ＡＰＤ相互接続を介して、前記ターゲットデバイスに関連するローカルメモリに前記第２データをコピーすること、又は、
前記プロセッサに関連するシステムメモリに前記第２データをコピーすることを含む、
請求項４の方法。
【請求項６】
前記データ転送の要求は、メモリアドレスを指定し、
前記ヘルパーデバイスと前記ターゲットデバイスとの間で前記第２データを送信することは、
前記ヘルパーデバイスにおいて、前記メモリアドレスが、前記ターゲットデバイスのローカルメモリ又は前記プロセッサに関連するシステムメモリに関連するメモリアドレスにマッピングされていることを検出することと、
前記検出したことに応じて、前記ヘルパーデバイス又は前記プロセッサに前記第２データを転送することと、を含む、
請求項１の方法。
【請求項７】
前記第１データ及び前記第２データは、前記第１データ及び前記第２データを複数のデバイスにレンダリングするように構成されていないアプリケーションによって生成される、
請求項１の方法。
【請求項８】
前記ドライバによって、前記アプリケーションから前記第１データ及び前記第２データを受信することと、
前記アプリケーションが、前記第１データ及び前記第２データを複数のデバイスにレンダリングするように構成されていないと判別したことに応じて、前記第１データを前記ターゲットデバイスに送信し、前記第２データを前記ヘルパーデバイスに送信し、前記第２のデータを前記ヘルパーデバイスから前記ターゲットデバイスに送信することと、を含む、
請求項７の方法。
【請求項９】
前記第１相互接続バスは、周辺コンポーネント相互接続エクスプレス（ＰＣＩｅ）接続を含み、
前記第２相互接続バスは、ＰＣＩｅ接続を含む、
請求項１の方法。
【請求項１０】
ターゲットデバイスのための第１データ及び第２データを送信するシステムであって、
プロセッサと、
第１相互接続バスを介して前記プロセッサに接続された前記ターゲットデバイスと、
第２相互接続バスを介して前記プロセッサに接続されたヘルパーデバイスと、
前記ターゲットデバイスと前記ヘルパーデバイスとの間に接続されたデバイス相互接続と、を備え、
前記プロセッサは、
前記プロセッサと前記ターゲットデバイスとの間のデータ転送の要求を識別することであって、前記要求は、前記ターゲットデバイスと前記プロセッサとの間で転送するための前記第１データ及び前記第２データを指定する、ことと、
前記要求に応じて、第１期間中に前記第１相互接続バスを介して、前記ターゲットデバイスと前記プロセッサとの間で前記第１データを送信することと、
前記第２相互接続バスに予備帯域幅が存在することを識別することと、
前記予備帯域幅が存在すると識別したことに応じて、第２期間中に前記第２相互接続バスを介して、前記ヘルパーデバイスと前記プロセッサとの間で前記第２データを送信し、前記デバイス相互接続を介して、前記ヘルパーデバイスと前記ターゲットデバイスとの間で前記第２データを送信することと、
を行うように構成されている、
システム。
【請求項１１】
前記第１相互接続バス及び前記第２相互接続バスの各々は、最大帯域幅を有し、
前記第１相互接続バス上で転送されるデータは、前記第２相互接続バスの帯域幅を消費せず、
前記第２相互接続バス上で転送されるデータは、前記第１相互接続バスの帯域幅を消費しない、
請求項１０のシステム。
【請求項１２】
前記デバイス相互接続は、前記第１相互接続バスの前記帯域幅及び前記第２相互接続バスの前記帯域幅の両方よりも高い帯域幅を有する、
請求項１０のシステム。
【請求項１３】
前記プロセッサは、
前記ヘルパーデバイスに関連するローカルメモリに前記第２データを書き込むことによって、前記ヘルパーデバイスと前記プロセッサとの間で前記第２データを送信するように構成されている、
請求項１０のシステム。
【請求項１４】
前記プロセッサは、
前記ＡＰＤ相互接続を介して、前記ターゲットデバイスに関連するローカルメモリに前記第２データをコピーすること、又は、
前記プロセッサに関連するシステムメモリに前記第２データをコピーすることによって、
前記ヘルパーデバイスと前記ターゲットデバイスとの間で前記第２データを送信するように構成されている、
請求項１３のシステム。
【請求項１５】
前記データ転送の要求は、メモリアドレスを指定し、
前記プロセッサは、
前記ヘルパーデバイスにおいて、前記メモリアドレスが、前記ターゲットデバイスのローカルメモリ又は前記プロセッサに関連するシステムメモリに関連するメモリアドレスにマッピングされていることを検出することと、
前記検出したことに応じて、前記ヘルパーデバイス又は前記プロセッサに前記第２データを転送することと、によって、
前記ヘルパーデバイスと前記ターゲットデバイスとの間で前記第２データを送信するように構成されている、
請求項１０のシステム。
【請求項１６】
前記第１データ及び前記第２データは、前記第１データ及び前記第２データを複数のデバイスにレンダリングするように構成されていないアプリケーションによって生成される、
請求項１０のシステム。
【請求項１７】
ドライバを備え、
前記ドライバは、
前記アプリケーションから前記第１データ及び前記第２データを受信することと、
前記アプリケーションが、前記第１データ及び前記第２データを複数のデバイスにレンダリングするように構成されていないと判別したことに応じて、前記第１データを前記ターゲットデバイスに送信する動作と、前記第２データを前記ヘルパーデバイスに送信する動作と、前記第２データを前記ヘルパーデバイスから前記ターゲットデバイスに送信する動作と、を実行することと、
を行うように構成されている、
請求項１６のシステム。
【請求項１８】
前記第１相互接続バスは、周辺コンポーネント相互接続エクスプレス（ＰＣＩｅ）接続を含み、
前記第２相互接続バスは、ＰＣＩｅ接続を含む、
請求項１０のシステム。
【請求項１９】
ドライバのための命令を記憶するコンピュータ可読記憶媒体であって、
前記命令は、プロセッサによって実行されると、
前記プロセッサとターゲットデバイスとの間のデータ転送の要求を識別することであって、前記要求は、前記ターゲットデバイスと前記プロセッサとの間で転送するための第１データ及び第２データを指定する、ことと、
前記要求に応じて、第１期間中に第１相互接続バスを介して、前記ターゲットデバイスと前記プロセッサとの間で前記第１データを送信することと、
ヘルパーデバイスと前記プロセッサとの間の第２相互接続バスに予備帯域幅が存在することを識別することと、
前記予備帯域幅が存在すると識別したことに応じて、第２期間中に前記第２相互接続バスを介して、前記ヘルパーデバイスと前記プロセッサとの間で前記第２データを送信し、前記ターゲットデバイスと前記ヘルパーデバイスとの間に接続されたデバイス相互接続を介して前記ヘルパーデバイスと前記ターゲットデバイスとの間で前記第２データを送信することと、によって、
前記ターゲットデバイスのための前記第１データ及び前記第２データを前記プロセッサに送信させる、
コンピュータ可読記憶媒体。
【請求項２０】
前記第１相互接続バス及び前記第２相互接続バスの各々は、最大帯域幅を有し、
前記第１相互接続バス上で転送されるデータは、前記第２相互接続バスの帯域幅を消費せず、
前記第２相互接続バス上で転送されるデータは、前記第１相互接続バスの帯域幅を消費しない、
請求項１９のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１７年１２月１５日出願の米国特許出願第１５／８４３，６６３号の利点を主張するものであり、この出願の内容は、本明細書に完全に記載されるかのように、言及することによって本明細書に組み込まれる
【背景技術】
【０００２】
アクセラレーテッド処理デバイス（ＡＰＤ）は、グラフィックスのレンダリング等のタスクを実行するためのハードウェアを含む。いくつかのコンピュータシステムは、複数のＡＰＤを含む。複数のＡＰＤを含むことは、ＡＰＤによって実行されるタスクを高速化することを目的としている。しかしながら、複数のＡＰＤの存在を利用するように構成されたソフトウェアを設計することは複雑であるため、コンピュータシステムは、マルチＡＰＤシステムの潜在能力を十分に活用してしない場合がある。
【０００３】
添付図面と併せて例として与えられる以下の説明から、より詳細な理解を得ることができる。
【図面の簡単な説明】
【０００４】
【図１】本開示の１つ以上の機能を実装することができる例示的なデバイスのブロック図である。
【図２】一例による、図１のデバイスの詳細を示す図である。
【図３】図２に示すグラフィックス処理パイプラインのさらなる詳細を示すブロック図である。
【図４】一例による、２つのＡＰＤ及びＡＰＤ相互接続を含む図１のシステムの構成を示す図である。
【図５】Ａ〜Ｃは、１つのＡＰＤを利用して別のＡＰＤの機能を改善するための例示的な技術を示す図である。
【図６】Ａ〜Ｂは、ヘルパーＡＰＤを使用してデータをターゲットＡＰＤに送信するための例示的な方法のフロー図である。
【発明を実施するための形態】
【０００５】
本明細書では、複数のアクセラレーテッド処理デバイス（ＡＰＤ）を有するシステムにおけるデータ転送を改善するための技術について説明する。このようなシステムでは、複数のＡＰＤは、周辺コンポーネント相互接続エクスプレス（ＰＣＩｅ）等の一般的な相互接続ファブリックを介してプロセッサ（例えば、中央処理装置（ＣＰＵ））に接続されている。各ＡＰＤは、相互接続ファブリックの特定の部分（所定数のＰＣＩｅレーン等）でプロセッサに接続される。ファブリックの各部分は、最大帯域幅等の独自のデータ特性を有する（例えば、１つのＡＰＤに接続された特定数のＰＣＩｅレーンは、特定の最大帯域幅を有する）。また、複数のＡＰＤは、高速相互接続（ＡＭＤのチップ間グローバルメモリ相互接続（ＸＧＭＩ）等）を介して互いに接続されている。
【０００６】
特定のＡＰＤでの作業は、相互接続ファブリックの割り当てられた部分（そのＡＰＤに割り当てられたＰＣＩｅ接続等）の速度によって制約を受ける可能性がある。より具体的には、ＡＰＤでの作業を、ＰＣＩｅ接続を介してＡＰＤに転送するよりも迅速に処理することが可能である。本明細書の技術は、マルチＡＰＤシステムにおける１つ以上の他のＡＰＤの連携を通じて、ＣＰＵからＡＰＤへ及び／又はＡＰＤからＣＰＵへのデータ転送の有効帯域幅を増加させる。「ターゲット」ＡＰＤへの書き込みの場合、本技術では、ターゲットＡＰＤへの直接的なデータ送信と、１つ以上の他のＡＰＤ（「ヘルパー」ＡＰＤとして指定される）を介したターゲットＡＰＤへの間接的なデータ送信の両方を含む。次に、１つ以上のヘルパーＡＰＤは、データを、高速ＡＰＤ間相互接続を介してターゲットＡＰＤに送信する。ヘルパーＡＰＤを介して「間接的に」転送されるデータは、直接転送に比べて、ターゲットＡＰＤに転送される時間がより長くかかる可能性があるが、ターゲットＡＰＤに対する全体的な有効帯域幅は、高速ＡＰＤ間相互接続のために増加する。「ソース」ＡＰＤからの読み出し動作の場合、本技術は同様であるが、逆になる。より具体的には、本技術は、データを、ソースＡＰＤからプロセッサへ直接送信することと、データを、１つ以上のヘルパーＡＰＤを介して間接的に送信することと、を含む。「ソース」ＡＰＤ、すなわち、プロセッサ１０２からの読み出し動作に関わるＡＰＤは、本明細書において「ターゲット」ＡＰＤと呼ばれることもある。
【０００７】
図１は、本開示の１つ以上の機能を実装することができる例示的なデバイス１００のブロック図である。デバイス１００は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、タブレットコンピュータ、又は、他のコンピューティングデバイスのうち何れかとすることができるが、これらに限定されない。デバイス１００は、プロセッサ１０２と、メモリ１０４と、ストレージ１０６と、１つ以上の入力デバイス１０８と、１つ以上の出力デバイス１１０と、を含む。また、デバイス１００は、１つ以上の入力ドライバ１１２及び１つ以上の出力ドライバ１１４を含む。何れも入力ドライバ１１２も、ハードウェア、ハードウェアとソフトウェアとの組み合わせ、又は、ソフトウェアとして具現化され、入力デバイス１１２を制御（例えば、動作を制御する、入力ドライバ１１２から入力を受信する、及び、入力ドライバにデータを提供する）する目的を果たす。同様に、何れの出力ドライバ１１４も、ハードウェア、ハードウェアとソフトウェアとの組み合わせ、又は、ソフトウェアとして具現化され、出力デバイス１１４を制御（例えば、動作を制御する、出力ドライバ１１４から入力を受信する、及び、出力ドライバにデータを提供する）する目的を果たす。図示及び説明するデバイス１００は一例であり、図１に示されていない追加のコンポーネントを含むことができ、又は、図１に示す１つ以上のコンポーネントを省略することができることを理解されたい。
【０００８】
様々な代替例では、プロセッサ１０２は、中央処理装置（ＣＰＵ）、グラフィックス処理ユニット（ＧＰＵ）、同じダイ上に配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコアを含み、各プロセッサコアは、ＣＰＵ又はＧＰＵとすることができる。様々な代替例では、メモリ１０４は、プロセッサ１０２と同じダイ上に配置されてもよいし、プロセッサ１０２とは別に配置されてもよい。メモリ１０４は、揮発性又は不揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ、キャッシュ等）を含む。
【０００９】
ストレージ１０６は、固定ストレージ又は取り外し可能なストレージ（例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク、フラッシュドライブ等）を含むが、これらに限定されない。入力デバイス１０８は、限定されないが、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロホン、加速度計、ジャイロスコープ、生体認証スキャナ、又は、ネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含む。出力デバイス１１０は、限定されないが、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、１つ以上のライト、アンテナ、又は、ネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含む。
【００１０】
入力ドライバ１１２及び出力ドライバ１１４は、入力デバイス１０８及び出力デバイス１１０の各々とインタフェースし、これらを駆動するように構成された１つ以上のハードウェア、ソフトウェア及び／又はファームウェアコンポーネントを含む。入力ドライバ１１２は、プロセッサ１０２及び入力デバイス１０８と通信し、プロセッサ１０２が入力デバイス１０８から入力を受信するのを可能にする。出力ドライバ１１４は、プロセッサ１０２及び出力デバイス１１０と通信し、プロセッサ１０２が出力デバイス１１０に出力を送信するのを可能にする。出力ドライバ１１４は、ディスプレイデバイス１１８に接続されたアクセラレーテッド処理デバイス（Accelerated Processing Device：ＡＰＤ）１１６を含む。ディスプレイデバイスは、いくつかの例では、物理ディスプレイデバイス、又は、リモートディスプレイプロトコルを使用して出力を表示するシミュレートされたデバイスである。ＡＰＤ１１６は、プロセッサ１０２から計算コマンド及びグラフィックスレンダリングコマンドを受け入れ、これらの計算コマンド及びグラフィックスレンダリングコマンドを処理して、ピクセル出力を表示のためにディスプレイデバイス１１８に提供し、及び／若しくは、メモリに記憶された計算結果等の他の出力を生成し、並びに／又は、メディア符号化及び復号化等の他の動作の結果を生成するように構成されている。特定のタイプのワークロードがＡＰＤ１１６によって実行されるものとして本明細書で説明するが、当業者は、他のタイプのワークロードがＡＰＤ１１６によって代替的又は追加的に実行可能であることを理解するであろう。以下より詳細に説明するように、ＡＰＤ１１６は、単一命令複数データ（single-instruction-multiple-data：ＳＩＭＤ）パラダイムに従って計算を実行するように構成された１つ以上の並列処理ユニットを含む。したがって、本明細書では、様々な機能がＡＰＤ１１６によって又はＡＰＤと連動して実行されるものとし説明するが、様々な代替例では、ＡＰＤ１１６によって実行されるものとして説明する機能は、ホストプロセッサ（例えば、プロセッサ１０２）によって駆動されず、グラフィカル出力をディスプレイデバイス１１８に提供するように構成された、同様の機能を有する他のコンピューティングデバイスによって追加的又は代替的に実行される。例えば、ＳＩＭＤパラダイムに従って処理タスクを実行する任意の処理システムが、本明細書で説明する機能を実行するように構成されてもよいことが企図される。或いは、ＳＩＭＤパラダイムに従って処理タスクを実行しないコンピューティングシステムが、本明細書で説明する機能を実行することが企図される。
【００１１】
図２は、一例による、デバイス１００及びＡＰＤ１１６の詳細を示す図である。プロセッサ１０２（図１）は、オペレーティングシステム１２０と、ドライバ１２２と、アプリケーション１２６と、を実行する。また、このプロセッサは、他のプロセッサを代替的又は追加的に実行してもよい。オペレーティングシステム１２０は、ハードウェアリソースの管理、サービス要求の処理、プロセス実行のスケジューリング及び制御、並びに、他の動作の実行等のデバイス１００の様々な態様を制御する。ＡＰＤドライバ１２２は、ＡＰＤ１１６の動作を制御し、グラフィックスレンダリングタスク又は他の作業等のタスクを、処理のためにＡＰＤ１１６に送信する。また、ＡＰＤドライバ１２２は、ＡＰＤ１１６の処理コンポーネント（例えば、以下により詳細に説明するＳＩＭＤユニット１３８等）によって実行されるプログラムをコンパイルするジャストインタイムコンパイラを含む。
【００１２】
ＡＰＤ１１６は、グラフィックス操作及び非グラフィックス操作等のように、並列処理に適している選択された機能のためのコマンド及びプログラムを実行する。ＡＰＤ１１６は、ピクセル演算、幾何学的計算等のグラフィックスパイプライン操作を実行し、プロセッサ１０２から受信したコマンドに基づいて画像をディスプレイデバイス１１８にレンダリングするのに使用することができる。また、ＡＰＤ１１６は、プロセッサ１０２から受信したコマンドに基づいて、ビデオ、物理シミュレーション、計算流体力学又は他のタスクに関連する操作等のように、グラフィックス操作に直接関連しない計算処理操作を実行する。
【００１３】
ＡＰＤ１１６は、１つ以上のシェーダエンジン１３１を含む。シェーダエンジンの各々は、１つ以上の計算ユニット１３２を含み、計算ユニットは、プロセッサ１０２（又は、別のユニット）の要求時にＳＩＭＤパラダイムに従って並列に動作を実行するように構成された１つ以上のＳＩＭＤユニット１３８を含む。ＳＩＭＤパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有することによって同じプログラムを実行するが、異なるデータを用いて当該プログラムを実行することができるパラダイムである。一例では、各ＳＩＭＤユニット１３８は、１６のレーンを含む。各レーンは、ＳＩＭＤユニット１３８内の他のレーンと同時に同じ命令を実行するが、異なるデータを用いて当該命令を実行することができる。全てのレーンが所定の命令を実行する必要がない場合、予測によってレーンをオフに切り替えることができる。また、予測を使用して、分岐した制御フローを有するプログラムを実行することもできる。具体的には、制御フローが、個々のレーンによって実行された計算に基づく条件付き分岐又は他の命令を有するプログラムの場合、現在実行されていない制御フローパスに対応するレーンの予測及び異なる制御フローパスの連続実行により、任意の制御フローが可能になる。
【００１４】
計算ユニット１３２における実行の基本単位は、ワークアイテムである。各ワークアイテムは、特定のレーンで並列に実行されるプログラムの単一のインスタンス化を表す。ワークアイテムは、単一のＳＩＭＤユニット１３８上で「ウェーブフロント（wavefront）」として同時に（又は、部分的に同時であって部分的に順次に）実行することができる。１つ以上のウェーブフロントは、同じプログラムを実行するように指定されたワークアイテムの集合を含む「ワークグループ」に含まれる。ワークグループを構成するウェーブフロントの各々を実行することによって、ワークグループを実行することができる。代替例では、ウェーブフロントは、単一のＳＩＭＤユニット１３８又は異なるＳＩＭＤユニット１３８上で実行される。ウェーブフロントは、単一のＳＩＭＤユニット１３８上で同時に（又は、擬似的に同時に）実行可能なワークアイテムの最大の集合と考えることができる。「擬似的に同時」な実行は、ＳＩＭＤユニット１３８のレーン数よりも多いウェーブフロントの場合に行われる。このような状況では、ウェーブフロントは、複数のサイクルに亘って実行され、ワークアイテムの異なる集合が異なるサイクルで実行される。ＡＰＤスケジューラ１３６は、計算ユニット１３２及びＳＩＭＤユニット１３８上で様々なワークグループ及びウェーブフロントのスケジューリングに関連する動作を実行するように構成されている。
【００１５】
計算ユニット１３２によってもたらされる並列性は、ピクセル値計算、頂点変換及び他のグラフィックス動作等のグラフィックス関連動作に適している。したがって、場合によっては、プロセッサ１０２からグラフィックス処理コマンドを受け入れるグラフィックス処理パイプライン１３４は、計算タスクを、並列実行のために計算ユニット１３２に提供する。
【００１６】
また、計算ユニット１３２は、グラフィックスに関連しないか、グラフィックス処理パイプライン１３４の「通常」の動作（例えば、グラフィックス処理パイプライン１３４の動作のために実行される処理を補うために実行されるカスタム動作）の一部として実行されない計算タスクを実行するために使用される。プロセッサ１０２上で実行されるアプリケーション１２６又は他のソフトウェアは、このような計算タスクを定義するプログラムを、実行のためにＡＰＤ１１６に送信する。
【００１７】
図３は、図２に示すグラフィックス処理パイプライン１３４のさらなる詳細を示すブロック図である。グラフィックス処理パイプライン１３４は、各々がグラフィックス処理パイプライン１３４の特定の機能を実行するステージを含む。各ステージは、プログラム可能な計算ユニット１３２で実行されるシェーダプログラムとして部分的若しくは完全に実装され、又は、計算ユニット１３２の外部の固定機能のプログラム不可能なハードウェアとして部分的若しくは完全に実装される。
【００１８】
入力アセンブラステージ３０２は、ユーザが充填したバッファ（例えば、プロセッサ１０２によって実行されるアプリケーション１２６等のソフトウェアの要求によって充填されたバッファ）からプリミティブデータを読み出し、当該データを、パイプラインの残りの部分によって使用されるプリミティブにアセンブルする。入力アセンブラステージ３０２は、ユーザが充填したバッファに含まれるプリミティブデータに基づいて、異なるタイプのプリミティブを生成することができる。入力アセンブラステージ３０２は、パイプラインの残りの部分で使用するために、アセンブルされたプリミティブをフォーマットする。
【００１９】
頂点シェーダステージ３０４は、入力アセンブラステージ３０２によってアセンブルされたプリミティブの頂点を処理する。頂点シェーダステージ３０４は、変換、スキニング、モーフィング及び頂点毎のライティング等の様々な頂点毎の操作を実行する。変換操作は、頂点の座標を変換するための様々な操作を含む。これらの操作は、頂点座標を変更するモデリング変換、ビュー変換、投影変換、パースペクティブ分割及びビューポート変換等のうち１つ以上と、座標以外の属性を変更する他の操作と、を含む。
【００２０】
頂点シェーダステージ３０４は、１つ以上の計算ユニット１３２で実行される頂点シェーダプログラムとして部分的又は完全に実装される。頂点シェーダプログラムは、プロセッサ１０２によって提供され、コンピュータプログラマによって事前に書き込まれたプログラムに基づいている。ドライバ１２２は、このようなコンピュータプログラムをコンパイルして、計算ユニット１３２での実行に適したフォーマットを有する頂点シェーダプログラムを生成する。
【００２１】
ハルシェーダステージ３０６、テッセレータステージ３０８及びドメインシェーダステージ３１０は、連携してテッセレーションを実行する。テッセレーションは、プリミティブを細分化することによって、単純なプリミティブをより複雑なプリミティブに変換する。ハルシェーダステージ３０６は、入力プリミティブに基づいてテッセレーション用のパッチを生成する。テッセレータステージ３０８は、パッチのサンプルのセットを生成する。ドメインシェーダステージ３１０は、パッチのサンプルに対応する頂点の頂点位置を計算する。ハルシェーダステージ３０６及びドメインシェーダステージ３１０は、頂点シェーダステージ３０４と同様に、ドライバ１２２によってコンパイルされる計算ユニット１３２上で実行されるシェーダプログラムとして実装することができる。
【００２２】
ジオメトリシェーダステージ３１２は、プリミティブ毎に頂点操作を実行する。ジオメトリシェーダステージ３１２によって、例えば、ポイントスプライト展開、動的パーティクルシステム操作、ファーフィン（fur-fin）生成、シャドウボリューム生成、キューブマップへのシングルパスレンダリング、プリミティブ毎のマテリアルスワップ、プリミティブ毎のマテリアル設定等の操作を含む、様々な異なるタイプの操作を実行することができる。場合によっては、ドライバ１２２によってコンパイルされ、計算ユニット１３２上で実行されるジオメトリシェーダプログラムは、ジオメトリシェーダステージ３１２の操作を実行する。
【００２３】
ラスタライザステージ３１４は、ラスタライザステージ３１４の上流で生成された単純なプリミティブ（三角形）を受け入れてラスタライズする。ラスタライズは、何れのスクリーンピクセル（又は、サブピクセルのサンプル）が特定のプリミティブによってカバーされるかを決定することから構成されている。ラスタライズは、固定機能のハードウェアによって実行される。
【００２４】
ピクセルシェーダステージ３１６は、上流で生成されたプリミティブ及びラスタライズの結果に基づいて、スクリーンピクセルの出力値を計算する。ピクセルシェーダステージ３１６は、テクスチャメモリからテクスチャを適用してもよい。ピクセルシェーダステージ３１６の操作は、ドライバ１２２によってコンパイルされ、計算ユニット１３２で実行されるピクセルシェーダプログラムによって実行される。
【００２５】
出力マージャステージ３１８は、ピクセルシェーダステージ３１６からの出力を受け入れ、これらの出力をフレームバッファ内に結合（マージ）し、ｚテスト及びアルファブレンディング等の操作を実行することによって、スクリーンピクセルの最終色を決定する。
【００２６】
いくつかのコンピュータシステム１００は、表示用の画像をレンダリングするように協働することができる複数のＡＰＤ１１６を含む。協働の一部には、複数のＡＰＤ１１６間でデータを送信することが含まれる。専用リンク（例えば、ＡＭＤのチップ間グローバルメモリ相互接続（ＸＧＭＩ））は、複数のＡＰＤ１１６間の高速相互通信を提供する。
【００２７】
図４は、一例による、２つのＡＰＤ１１６（ＡＰＤ１１６（１）及びＡＰＤ１１６（２））と、ＡＰＤ相互接続４１０と、を含むシステム１００の構成を示す図である。ＡＰＤ１１６（１）は、相互接続バス４０４（１）を介してプロセッサ１０２に接続されている。ＡＰＤ１１６（２）は、同様に、相互接続バス４０４（２）を介してプロセッサ１０２に接続されている。いくつかの例では、相互接続バスは、ＡＰＤ１１６（１）が、ＡＰＤ１１６（２）とは異なるＰＣＩｅレーンに接続されたＰＣＩｅバスである。相互接続バス４０４（１）は、相互接続バス４０４（２）とは独立してデータを伝える。これは、相互接続バス４０４（１）の帯域幅が、相互接続バス４０４（２）を介したデータ転送によって消費されず、相互接続バス４０４（２）の帯域幅が、相互接続バス４０４（１）を介したデータ転送によって消費されないことを意味する。
【００２８】
本明細書の他の箇所で説明するように、ＡＰＤ相互接続４１０は、ＡＰＤ１１６間のデータ転送リンクを提供する。様々な例では、ＡＰＤ相互接続４１０を使用して、画像をレンダリングするために、又は、三次元グラフィックスレンダリングとは無関係な目的等の他の目的のためにデータを転送する。ＡＰＤ相互接続４１０を介して転送されるデータは、ピクセルデータ、ジオメトリデータ、又は、画像をレンダリングするため若しくは非グラフィックス関連作業等の他の作業を実行するための他のデータ等のデータを含む。いくつかの例では、ＡＰＤ相互接続４１０は、このようなデータの高速転送を可能にするために、相互接続バス４０４よりも広い帯域幅を有する。
【００２９】
各ＡＰＤ１１６は、メモリ４０６と、メモリコントローラ４０８と、を含む。各メモリ４０６は、各ＡＰＤ１１６にとって「ローカル」であり、これにより、当該各ＡＰＤに関連するローカルメモリである。いくつかの実施形態では、ＡＰＤ１１６に関連するメモリ４０６は、当該ＡＰＤ１１６の一般的なデータストアとして機能し、当該ＡＰＤ１１６に特に関連しないメモリ（メモリ１０４等）と比較して有利なアクセスタイミング特性を提供する。このようなメモリ４０６は、通常、計算ユニット１３２、グラフィックス処理パイプライン１３４及び／又はＡＰＤ１１６内の他の要素に関するデータを記憶する。また、各ＡＰＤ１１６は、メモリコントローラ４０８を含む。とりわけ、メモリコントローラ４０８は、ＡＰＤ相互接続４１０と相互接続バス４０４との両方に亘って、メモリ４０６及びＡＰＤ１１６内の他の要素へのメモリアクセスを制御する。
【００３０】
メモリコントローラ４０８が制御するトランザクションの１つのタイプは、関連するＡＰＤ１１６のローカルメモリ４０６にマッピングされたシステムメモリアドレスを指定するメモリアクセスである。システムアドレスがローカルメモリ４０６にマッピングされることは、メモリコントローラ４０８が、システムアドレスに向けられたトランザクションを、ローカルメモリ４０６に関連するデバイスにルーティングすることを意味する。一例では、メモリコントローラ４０８は、ＡＰＤ１１６にマッピングされたシステムメモリアドレス空間の「アパーチャ」又は一部を示すレジスタセットを含み、当該アパーチャ内のシステムメモリアドレスを指定するメモリトランザクションをＡＰＤ１１６にルーティングすることが相互接続バス４０４に「分かる」ようにすることによって、このようなメモリトランザクションを制御する。メモリコントローラ４０８は、システムメモリのアドレスをローカルメモリ４０６のローカルメモリアドレスにマッピングする内部マッピングも含む。
【００３１】
メモリコントローラ４０８は、ＡＰＤ１１６（「第１」ＡＰＤ１１６）にマッピングされたシステムメモリ内のアドレスを、異なるＡＰＤ１１６（「第２」ＡＰＤ１１６）のローカルメモリ４０６にマッピングするように指定することができる。例えば、ＰＣＩｅ構成レジスタは、ＡＰＤ１１６に「属する」システムメモリのアパーチャを指定することができ、同時に、メモリコントローラ４０８は、当該アパーチャ内のアドレスの少なくとも一部の、第２ＡＰＤ１１６のローカルメモリ４０６へのマッピングを含むことができる。この場合、第１ＡＰＤ１１６（例えば、ＡＰＤ１１６（１））が、第２ＡＰＤ１１６（例えば、ＡＰＤ１１６（２））にマッピングされたアドレスに向けたデータを受信したことに応じて、第１ＡＰＤ１１６（例えば、ＡＰＤ１１６（１））は、当該データを第２ＡＰＤ１１６（例えば、ＡＰＤ１１６（２））に転送する。いくつかの実装では、この転送は、ＡＰＤ相互接続４１０を介して行われる。
【００３２】
ＡＰＤ１１６（例えば、ＡＰＤ１１６（１））のメモリコントローラ４０８をプログラムして、ＡＰＤ相互接続４１０を介して他のＡＰＤ１１６（例えば、ＡＰＤ１１６（２））にデータを転送することも可能である。より具体的には、プロセッサ１０２は、所定のメモリアドレスに向けたデータを受信すると転送を実行するようにメモリコントローラ４０８（例えば、メモリコントローラ４０８（１））を構成する構成データ及び／又はコンピュータ命令を送信する。このように構成された場合、ＡＰＤ１１６（例えば、ＡＰＤ１１６（１））が、当該ＡＰＤ１１６（例えば、ＡＰＤ１１６（１））に関連するローカルメモリ４０６（例えば、ローカルメモリ４０６（１））内のかかる所定のメモリアドレスにマッピングされたデータを受信したことに応じて、当該データが、当該ローカルメモリ４０６（例えば、ローカルメモリ４０６（１））に書き込まれる。このＡＰＤ１１６（例えば、ＡＰＤ１１６（１））に関連するメモリコントローラ４０８（例えば、メモリコントローラ４０８（１））は、このローカルメモリ４０６（例えば、ローカルメモリ４０６（１））に書き込まれたデータを、ＡＰＤ相互接続４１０を介して他のＡＰＤ１１６（例えば、ＡＰＤ１１６（２））にコピーする。他のＡＰＤ１１６（例えば、ＡＰＤ１１６（２））は、このデータを、他のＡＰＤ１１６（例えば、ＡＰＤ１１６（２））に関連するローカルメモリ４０６（例えば、ローカルメモリ４０６（２））に書き込む。
【００３３】
なお、上記の動作は逆方向に行われてもよい。換言すれば、ＡＰＤ１１６がプロセッサ１０２にデータを送信することが当然可能である。このような転送は、例えば、プロセッサ１０２へのデータ転送を要求する、ＡＰＤ１１６による書き込み要求に応じて、又は、プロセッサ１０２へのデータ転送を要求する、プロセッサ１０２による読み出し要求に応じて行われる。また、ＡＰＤ１１６からプロセッサ１０２への転送は、１つ以上の他のＡＰＤ１１６を中継として使用することができる。ＡＰＤは、他の方向の転送（プロセッサ１０２による「書き込み」）と同様に、このような転送（プロセッサ１０２による「読み出し」）のための中継として使用されるように構成することができる。より具体的には、ＡＰＤ１１６を、読み出しに応じて、このようなデータをプロセッサ１０２に中継するように構成された中継ＡＰＤ１１６のメモリに書き込むためのデータを転送するように構成することができる。或いは、ＡＰＤ１１６は、中継ＡＰＤ１１６にマッピングされたメモリアドレスに書き込むように構成されており、このような中継ＡＰＤ１１６は、書き込まれたアドレスをプロセッサ１０２のシステムメモリにマッピングするように構成されている。
【００３４】
本明細書で説明するように、ＡＰＤ１１６は、プロセッサ１０２からコマンドを受信し、これらのコマンドを処理する。いくつかの例では、これらのコマンドの一部は、三次元オブジェクトを画像にレンダリングして画面上に表示するためのコマンドを含む。また、プロセッサ１０２は、他のタイプのコマンドをＡＰＤ１１６に送信してもよい。いくつかの動作モードでは、画像をレンダリングして画面に表示するように、２つ以上のＡＰＤ１１６が協働する。画像をレンダリングする作業を分割するための様々なオプション（個々の画像をレンダリングする作業を異なるＡＰＤ１１６間で分割すること、異なるフレーム全体を異なるＡＰＤ１１６に割り当てること、又は、他の技術を含む）が存在する。他の例では、各ＡＰＤ１１６は、別のＡＰＤ１１６によって実行される作業とは無関係の少なくとも一部の作業を実行し、及び／又は、１つ以上のＡＰＤ１１６は、３Ｄグラフィックスとは無関係（すなわち、レンダリング作業とは無関係）な作業を実行する。
【００３５】
コンピュータシステム内に２つ以上のＡＰＤ１１６が存在するにもかかわらず、コンピュータシステム上で実行されるソフトウェアは、複数のＡＰＤ１１６を利用するように設計されていなくてもよい。一例では、アプリケーションは、レンダリングコマンド（及び／又は、計算シェーダを実行するためのコマンド等の他のタイプのコマンド）と処理用のデータとを単一のＡＰＤ１１６に転送するように書き込まれる。開発者がリソースを欠いているか、複数のＡＰＤ１１６を利用するようにアプリケーションを構成するためにリソースを消費することを望まないために、アプリケーションがこのように書き込まれる場合がある。或る量の作業のためにＡＰＤ１１６が使用されている状況においても、システム内に存在する２つ以上のＡＰＤ１１６は、各相互接続バス４０４上で異なる量の帯域幅を消費することができる。例えば、第１ＡＰＤ１１６上の作業が相互接続バス４０４の帯域幅によって制約される一方で、第２ＡＰＤ１１６（及び／又は、第３ＡＰＤ、第４ＡＰＤ等のＡＰＤ１１６）上の作業が相互接続バス４０４の帯域幅によって制約されないことは、第２ＡＰＤ１１６に関連する相互接続バス４０４上に予備の帯域幅が存在することを意味する。
【００３６】
理由にかかわらず、１つのＡＰＤ１１６に接続された相互接続バス４０４の帯域幅が十分に利用されない一方で、別のＡＰＤ１１６に接続された相互接続バス４０４がより利用されるか、十分に利用される可能性がある。このように、１つのＡＰＤ１１６を利用して別のＡＰＤ１１６の能力を向上させるための技術を図５Ａ〜図５Ｃに示す。具体的には、図５Ｂ〜図５Ｃは、「ヘルパー」ＡＰＤ１１６が、高速ＡＰＤ相互接続４１０を利用して「ターゲット」ＡＰＤ１１６へのデータの送信を支援する技術を示している。単一の「ヘルパー」ＡＰＤ１１６が示されているが、本明細書で説明する技術は、「ターゲット」ＡＰＤ１１６の有効帯域幅を増加させるために複数のヘルパーＡＰＤ１１６を使用するシステムに拡張されてもよいことに留意されたい。例示目的として、さらには説明を簡単にするために、図５Ａ〜図５Ｃに示す動作は、大量のデータセット（データ転送１とデータ転送２との累積）が処理用のターゲットＡＰＤに転送され、ＡＰＤ処理が、全てのデータを受信した場合にのみ処理を開始することができる動作である。しかしながら、プロセッサ１０２とＡＰＤ１１６との間の有効帯域幅を増加させるために本明細書で説明する技術は、このようなシナリオに限定されず、ヘルパーＡＰＤが利用可能な（すなわち、予備の帯域幅を有する）任意の時点において使用可能であることを理解されたい。
【００３７】
図５Ａは、ヘルパーＡＰＤ１１６がターゲットＡＰＤ１１６を支援するように使用されないタイミング図５００を示す。より具体的には、タイミング図５００は、タイミング行５１０を示す。タイミング行５１０は、図５ＡにおいてＡＰＤ０とラベル付けされた第１ＡＰＤ１１６によって実行される３つの動作を示している（ヘルパーＡＰＤのタイミング行は、図５Ａに示されていない）。データ転送１とラベル付けされた第１動作は、プロセッサ１０２から第１ＡＰＤ１１６への第１データセットの転送に対応する。この第１データ転送は、帯域幅等の相互接続バス４０４のデータ転送特性やデータ量によって決定される一定の時間を要する。データ転送２とラベル付けされた第２データ転送も行われる。データ転送２は、プロセッサ１０２から第１ＡＰＤ１１６への第２データセットの転送に対応する。データ転送１の間に実質的に全てのデータ伝送リソース（例えば、帯域幅）が消費されるので、データ転送２は、データ転送１が実質的に完了するまで待機してから開始する。一例では、相互接続バス４０４は、ＰＣＩｅ接続の１つ以上のレーンを含み、データ転送１は、相互接続バス４０４に含まれるＰＣＩｅレーンの全てに亘って行われる。したがって、この相互接続バスは、データ転送２に利用することができない。ＡＰＤ処理は、データ転送２の右側に示されている。これは、ＡＰＤ処理がデータ転送２の後に行われることを示す。換言すれば、ＡＰＤ処理は、データ転送２が完了するまで開始されない。その前にＡＰＤ処理を開始することも当然可能である。しかしながら、図５Ａは、データ転送が順次行われ、したがって、データ転送１及びデータ転送２の両方のデータ転送に必要な最小時間が存在することを示す。
【００３８】
図５Ｂは、データが２つのＡＰＤ１１６の各々に転送され、次に、一方のＡＰＤ１１６が、受信したデータを、高速ＡＰＤ相互接続４１０を介して他方のＡＰＤ１１６に転送する例示的な技術のタイミング図５３０である。一方のＡＰＤ１１６は、「ターゲットＡＰＤ」と呼ばれ、「ＡＰＤ０」として示されており、作業（データを必要とするレンダリング作業等）を実行するようにアプリケーションによって指定されたＡＰＤである。他方のＡＰＤ１１６は、「ヘルパーＡＰＤ」と呼ばれ、「ＡＰＤ１」として示されており、作業実行用のターゲットＡＰＤへのデータの転送を支援するように指定されたＡＰＤである。
【００３９】
図５Ｂの技術では、プロセッサ１０２は、重複する期間においてデータをＡＰＤ０及びＡＰＤ１の両方に送信する。より具体的には、アプリケーション１２６は、（例えば、ドライバ１２２によって提供されるアプリケーションプログラミングインタフェースの関数を呼び出すことによって）処理用のターゲットＡＰＤに送信するためのコマンド及びデータをドライバ１２２に提供する。アプリケーション１２６は、コマンド及びデータを処理するために複数のＡＰＤ１１６が使用されることを指定しているわけではない。これに応じて、ドライバ１２２は、データをヘルパーＡＰＤ及びターゲットＡＰＤの両方に転送し、ヘルパーＡＰＤが受信したデータをターゲットＡＰＤに転送するようにヘルパーＡＰＤを構成する。具体的には、ドライバ１２２は、アプリケーション１２６が指定したデータ及びコマンドを２つ（又は、関係しているＡＰＤの数に応じてより多くの）の部分に分割し、一方の部分をターゲットＡＰＤに送信し、他方の部分をヘルパーＡＰＤ（又は、存在する場合には、他の複数の部分を複数のヘルパーＡＰＤ）に送信する。ヘルパーＡＰＤ（又は、複数存在する場合には複数のＡＰＤ）は、その他方の部分を、ＡＰＤ相互接続４１０を介してターゲットＡＰＤに送信する。
【００４０】
図５Ｂでは、本技術は、ヘルパーＡＰＤのローカルメモリ４０６にデータを書き込むことと、次いで、（例えば、メモリコントローラ４０８によって）ヘルパーＡＰＤのローカルメモリからターゲットＡＰＤにデータをコピーすることと、を含む。このコピーを実行するために、ドライバ１２２は、プロセッサ１０２からデータを受信したことに応じて、ヘルパーＡＰＤが当該データをターゲットＡＰＤにコピーするようにヘルパーＡＰＤを構成する。様々な例では、ドライバ１２２は、ヘルパーＡＰＤ内の構成レジスタを構成することによって、ファームウェア命令を送信することによって、又は、任意の他の技術的に実現可能な方法によって、ヘルパーＡＰＤをこのように構成する。
【００４１】
行５４０に示すように、データ転送１は、第１時間中に行われる。データ転送１は、データを、相互接続バス４０４を介してターゲットＡＰＤであるＡＰＤ０に転送することを含む。また、行５５０に示すように、データ転送１が行われる第１時間と重複する期間においてデータ転送２が行われる。第１時間と重複する期間は、データ転送１の少なくとも一部がデータ転送２と同時に行われることを意味する。いくつかの例では、データ転送１の大部分がデータ転送２と時間的に重複する。一例では、ドライバ１２２は、ターゲットＡＰＤに転送するように指定されたデータを略半分に分割する。この場合、２つのＡＰＤの相互接続バス４０４が同様の送信特性（例えば、同様の帯域幅等）を有すると仮定すると、略半分に分割されたデータを送信するための時間は、ほぼ等しい。
【００４２】
２つの異なるＡＰＤ１１６に接続された相互接続バス４０４が独立しているので、１つの相互接続バス４０４上で消費される帯域幅が別の相互接続バス４０４上の帯域幅を全く消費しないという意味で、ターゲットＡＰＤ及びヘルパーＡＰＤの両方に対してデータ転送が独立且つ同時に行われてもよいことに留意されたい。換言すれば、プロセッサ１０２は、プロセッサ１０２が第２データをヘルパーＡＰＤに送信するのと同時に、第１データをターゲットＡＰＤに送信する。したがって、図５Ａに示すデータの直列転送が行われない。当然のことながら、ヘルパーＡＰＤに送信されるデータは、依然としてターゲットＡＰＤに転送されなければならない。しかしながら、これは、ＡＰＤ相互接続４１０を介して行われる。ＡＰＤ相互接続４１０上のデータ転送速度が相互接続バス４０４上のデータ転送速度よりも速い場合、図５Ｂの技術では、ターゲットＡＰＤに転送されるデータとヘルパーＡＰＤに転送されるデータとの両方を転送するのに必要な合計時間は、図５Ａの技術において両方のデータを転送するのに必要な合計時間よりも短い。
【００４３】
図５Ｃは、データが２つのＡＰＤ１１６の各々に転送され、次に、１つのＡＰＤ１１６が、受信したデータを他のＡＰＤ１１６に転送する別の例示的な技術のタイミング図５Ｃである。図５Ｂと同様に、図５Ｃの説明では、プロセッサ１０２からのデータを受信し処理するＡＰＤ１１６が「ターゲットＡＰＤ」と呼ばれ、このＡＰＤは、図５ＣにおいてＡＰＤ０として示されている。また、図５Ｃの説明では、ターゲットＡＰＤへのデータの転送を支援するＡＰＤ１１６が「ヘルパーＡＰＤ」と呼ばれ、図５ＣにおいてＡＰＤ１として示されている。
【００４４】
図５Ｂの技術と同様に、図５Ｃの技術では、アプリケーション１２６は、（例えば、ドライバ１２２によって提供されるアプリケーションプログラミングインタフェースの関数を呼び出すことによって）処理のためにターゲットＡＰＤに送信するために、コマンド及びデータをドライバ１２２に提供する。アプリケーション１２６は、コマンド及びデータを処理するために複数のＡＰＤ１１６が使用されることを指定しない。これに応じて、ドライバ１２２は、データをヘルパーＡＰＤ及びターゲットＡＰＤの両方に転送し、ヘルパーＡＰＤが受信したデータをターゲットＡＰＤに転送するようにヘルパーＡＰＤ１１６を構成する。より具体的には、ドライバ１２２は、アプリケーション１２６が指定したデータ及びコマンドを２つの（又は、関係しているＡＰＤの数に応じてより多くの）部分に分割し、一方の部分をターゲットＡＰＤに送信し、他方の部分をヘルパーＡＰＤに（又は、存在する場合には、他の複数の部分を複数のヘルパーＡＰＤに）送信する。ヘルパーＡＰＤ（又は、複数存在する場合には複数のＡＰＤ）は、他の部分を、ＡＰＤ相互接続４１０を介してターゲットＡＰＤに送信する。
【００４５】
しかしながら、図５Ｂの技術とは異なり、図５Ｃの技術では、ヘルパーＡＰＤのローカルメモリ４０６にデータを書き込む代わりに、ヘルパーＡＰＤのメモリコントローラ４０８は、プロセッサ１０２から受信したデータをターゲットＡＰＤに転送する。この転送を実行するために、ドライバ１２２は、プロセッサ１０２からデータを受信したことに応じて、ヘルパーＡＰＤが当該データをターゲットＡＰＤに転送するようにヘルパーＡＰＤを構成する。より具体的には、ドライバ１２２は、特定のシステムメモリアドレスがターゲットＡＰＤのローカルメモリ４０６内のメモリ位置にマッピングされるようにヘルパーＡＰＤのメモリコントローラ４０８を構成する。このマッピングにより、特定のメモリアドレスに向けたデータをヘルパーＡＰＤ１１６が受信すると、メモリコントローラ４０８は、当該データをヘルパーＡＰＤに転送して、当該データを、特定のメモリアドレスがマッピングされた位置においてターゲットＡＰＤのローカルメモリ４０６に書き込む。様々な例では、ドライバ１２２は、ヘルパーＡＰＤ内の構成レジスタを構成することによって、ファームウェア命令を送信することによって、又は、他の技術的に実現可能な方法で、上述したようにデータを転送するようにヘルパーＡＰＤを構成する。
【００４６】
行５７０に示すように、データ転送１は、第１時間中に行われる。データ転送１は、データを、相互接続バス４０４を介してターゲットＡＰＤであるＡＰＤ０に転送することを含む。また、行５８０に示すように、データ転送２は、データ転送１が行われる第１時間と重複する期間に行われる。「重複する」という用語は、上述した図５Ｂの技術と同様の意味を有する。一例では、ドライバ１２２は、データを略半分に分割し、各半分をヘルパーＡＰＤ及びターゲットＡＰＤの異なるものに送信して、このようなデータがほぼ同時に並列に送信されるようにする。また、行５７０は、データ転送１及びデータ転送２が行われる期間の後に、転送されたデータのＡＰＤ処理が開始されることを示す。図５Ｂの技術と同様に、図５Ｃの技術では、データ１及びデータの直列伝送が行われない。これは、これらの２つのデータブロックが、重複する期間において２つの異なる相互接続バス４０４を介して転送されるためである。
【００４７】
図５Ｂには、「ＸＧＭＩ」セクション（ＡＰＤ１からＡＰＤ０へのデータのコピーを表す）が、ある程度の時間を消費するものとして示されているが、図５Ｃには、対応する時間消費の動作が示されていないことに留意されたい。この相違は、一般に、アドレスをＡＰＤ０のローカルメモリ４０６にマッピングすることによるＡＰＤ１からＡＰＤ０へのデータの転送が、かかる転送動作が図５Ｂのコピー動作よりも著しく少ないオーバーヘッドに関連しているので、消費する時間が短くなり、オーバーヘッドが殆ど又は全くないことを示すことを意図している。より具体的には、図５Ｂのコピー動作は、２つの異なるメモリ動作に関連しており、データが最初にヘルパーＡＰＤのローカルメモリ４０６に記憶され、その後、このようなデータを読み出してターゲットＡＰＤに転送することを必要とする。図５Ｃの転送動作は、転送されたデータをターゲットＡＰＤに送信する前に、当該データをヘルパーＡＰＤのローカルメモリ４０６に記憶することを含まない。
【００４８】
所定のタイミングが図５Ａ〜５Ｃに示されているが、実際の動作では、当該タイミングが必ずしも示されているように見えないことに留意されたい。具体的には、データをパイプライン方式でＡＰＤに「ロール（roll）」してもよい。これは、ＡＰＤ処理及びデータ転送が、重複した期間で行われ得ることを意味する。また、データが、重複した期間においてターゲットＡＰＤ及びヘルパーＡＰＤに転送されることが示されているが、データは、重複した期間において転送されない可能性もある。したがって、図５Ａ〜図５Ｃは、正確なタイミングシーケンスを示すことを意図していない。むしろ、これらの図は、複数の相互接続バス４０４を使用して、１つの相互接続バス４０４のみが使用される場合よりも速い速度でＡＰＤの「クラスタ」又は「集合」にデータを転送することが可能であることを示すことを意図している。さらに、これらの図は、ＡＰＤの「クラスタ」又は「集合」が、ＡＰＤ相互接続４１０を利用して、受信したデータを処理のためにターゲットＡＰＤに送信することができることを示すことを意図している。ＡＰＤ１１６に接続された高速ＡＰＤ相互接続４１０が相互接続バス４０４よりも高速であるため、データの作業を実行するターゲットＡＰＤへのプロセッサ１０２からのデータ転送に必要な合計時間を、複数の相互接続バス４１０に亘る並列転送を利用しない状況と比較して、短縮することができる。
【００４９】
図５Ｂ又は図５Ｃの何れにおいても、一実施例では、相互接続バス４０４の各々は、複数のＰＣＩｅレーンである。データが、別のＡＰＤを使用せずに、これらのＰＣＩｅレーンを介して１つのＡＰＤのみに転送された場合、当該データの転送時間は、ＰＣＩｅレーンの帯域幅によって制限される。両方のＡＰＤにデータを送信することにより、追加のＰＣＩｅ帯域幅がデータ転送に利用される。ヘルパーＡＰＤに転送されるデータは、ターゲットＡＰＤに転送される必要があるが、この転送は、相互接続バス４０４よりも高速なＡＰＤ相互接続４１０（これもまた、ＡＭＤのＸＧＭＩインタフェース又はＡＰＤ１１６間でデータを転送することができる任意の他のインタフェースタイプであってもよい）を介して行われる。したがって、データをターゲットＡＰＤに転送するのに要する合計時間は、ヘルパーＡＰＤを使用しない構成と比較して短縮される。
【００５０】
図６Ａは、一例による、ヘルパーＡＰＤを使用して、データを、処理するためにターゲットＡＰＤに送信する方法６００のフロー図である。図１〜図５Ｃに関して説明したシステムについて説明するが、技術的に実現可能な順序で方法６００のステップを実行するように構成された任意のシステムが、本開示の範囲に含まれることを理解されたい。
【００５１】
図示したように、方法６００は、ステップ６０２で開始する。ここで、（例えば、ドライバ１２２によって指示されるように）プロセッサ１０２は、データをターゲットＡＰＤ１１６に転送する。上述したように、この転送は、ＡＰＤ１１６とプロセッサ１０２との間に接続された相互接続バス４０４を使用して行われる。いくつかの実施形態では、相互接続バス４０４は、１つ以上のＰＣＩｅレーンを含み、相互接続バス４０４を介して転送可能な単位時間当たりのデータ容量を決定する特有の帯域幅を有する。いくつかの実施形態では、ターゲットＡＰＤへのデータ転送は、メモリアドレスをターゲットとして指定することによって実行される。この場合、メモリアドレスは、ターゲットＡＰＤのローカルメモリ４０６のメモリアドレスにマッピングされる。次いで、データフローが、相互接続バス４０４を介してローカルメモリ４０６に送信される。
【００５２】
ステップ６０４において、（先と同様に、例えば、ドライバ１２２の指示で）プロセッサ１０２は、データをヘルパーＡＰＤに転送する。上述したように、この転送は、ステップ６０２の転送と部分的又は完全に同時に行われてもよい。また、この転送も、相互接続バス４０４を介して行われる。ステップ６０４の転送により、データが、ヘルパーＡＰＤのローカルメモリ４０６に記憶される。
【００５３】
ステップ６０６において、ヘルパーＡＰＤは、受信したデータを、高速ＡＰＤ相互接続４１０を介してターゲットＡＰＤにコピーする。ステップ６０８において、ターゲットＡＰＤは、直接的に、及び、ヘルパーＡＰＤを介して間接的にプロセッサ１０２から受信したデータを用いて作業を実行する。
【００５４】
図６Ｂは、別の例による、ヘルパーＡＰＤを使用して、データを、処理するためにターゲットＡＰＤに送信する方法６５０のフロー図である。図１〜図５Ｃに関して説明したシステムについて説明するが、技術的に実現可能な順序で方法６５０のステップを実行するように構成された任意のシステムが、本開示の範囲に含まれることを理解されたい。
【００５５】
図示したように、方法６５０は、ステップ６５２で開始する。ここで、（例えば、ドライバ１２２によって指示されるように）プロセッサ１０２は、データをターゲットＡＰＤ１１６に転送する。上述したように、この転送は、ＡＰＤ１１６とプロセッサ１０２との間に接続された相互接続バス４０４を使用して行われる。いくつかの実施形態では、相互接続バス４０４は、１つ以上のＰＣＩｅレーンを含み、相互接続バス４０４を介して転送可能な単位時間当たりのデータ容量を決定する特有の帯域幅を有する。いくつかの実施形態では、ターゲットＡＰＤへのデータ転送は、メモリアドレスをターゲットとして指定することによって実行される。この場合、メモリアドレスは、ターゲットＡＰＤのローカルメモリ４０６のメモリアドレスにマッピングされる。次いで、データフローが、相互接続バス４０４を介してローカルメモリ４０６に送信される。
【００５６】
ステップ６５４において、（先と同様に、例えば、ドライバ１２２の指示で）プロセッサ１０２は、データをヘルパーＡＰＤに転送する。上述したように、この転送は、ステップ６０２の転送と部分的又は完全に同時に行われてもよい。また、この転送も、相互接続バス４０４を介して行われる。ステップ６０４の伝送では、データが、ヘルパーＡＰＤのローカルメモリ４０６に記憶されない。これは、ヘルパーＡＰＤが、メモリアドレスがターゲットＡＰＤのローカルメモリ４０６にマッピングされるように書き込まれることによって、データをターゲットＡＰＤに転送するように構成されているためである。
【００５７】
ステップ６５６において、ヘルパーＡＰＤは、受信したデータを、高速ＡＰＤ相互接続４１０を介してターゲットＡＰＤに転送する。ステップ６５８において、ターゲットＡＰＤは、直接的に、及び、ヘルパーＡＰＤを介して間接的にプロセッサ１０２から受信したデータを用いて作業を実行する。
【００５８】
いくつかの実施形態では、図５Ｂ及び図５Ｃ（同様に、図６Ａ及び図６Ｂ）の両方の技術の何れか又は両方において、ドライバ１２２は、ヘルパーＡＰＤに接続された相互接続バス４０４の帯域幅使用を監視し、ヘルパーＡＰＤを都合良く使用して、監視に基づいてターゲットＡＰＤにデータを転送する。例えば、ドライバ１２２は、ヘルパーＡＰＤに接続された相互接続バス４０４上で或る帯域幅が利用可能であることを検出したことに応じて、ターゲットＡＰＤへのデータをヘルパーＡＰＤに送信し、その後、ターゲットＡＰＤに送信する（コピートゥワイス技術によるものか、転送技術によるものかを問わない）。帯域幅が利用可能でない場合、ドライバ１２２は、この動作を実行しない。より多くの帯域幅が利用可能になるにつれて、ドライバ１２２は、ターゲットＡＰＤへの送信のために、より多くのデータをヘルパーＡＰＤに送信してもよく、利用可能な帯域幅がより少ないことを検出したことに応じて、ヘルパーＡＰＤに送信されるデータ量を減少させてもよい。ヘルパーＡＰＤの利用可能な帯域幅を都合良く使用して、ターゲットＡＰＤの有効帯域幅を増加させる技術は、読み出し、書き込み又は双方向転送のために使用されてもよい。また、本明細書では、２つのＡＰＤ１１６、すなわちヘルパーＡＰＤ及びターゲットＡＰＤを含むものとして説明されているが、本技術は、３つ以上のＡＰＤ１１６と共に使用することができ、この場合、複数のＡＰＤ１１６は、単一のターゲットＡＰＤに対する「ヘルパー」として機能する。また、いかなる特定のＡＰＤ１１６も、ヘルパーＡＰＤ又はターゲットＡＰＤとして静的に指定される必要はない。一例では、ドライバ１２２は、相互接続バス４０４全体の帯域幅を監視する。一例では、ドライバ１２２が、書き込まれるか読み出されるデータが存在するターゲット／ソースＡＰＤへのＡＰＤ相互接続４１０の接続を有する特定のＡＰＤ１１６との相互接続バス４０４上に予備帯域幅が存在することを検出した場合、ドライバ１２２は、予備帯域幅を有する相互接続バス４０４及び当該相互接続バス４０４に関連するヘルパーＡＰＤを介して、ターゲット／ソースＡＰＤへの当該データの少なくとも一部の書き込み又は読み出しを行う。このように、ドライバ１２２は、予備帯域幅を有する複数のヘルパーＡＰＤを使用して、データを転送することができる。
【００５９】
本明細書で提供される開示では、ソースとしてのプロセッサ（例えば、プロセッサ１０２）から宛先としての「ターゲットＡＰＤ」にデータを転送することについて様々な言及がなされる。したがって、本明細書で説明する技術は、プロセッサからＡＰＤ１１６にデータを書き込むために使用される。本明細書で説明する技術は、ＡＰＤ１１６からデータを読み出すためにも使用することができる。読み出しの場合、上記の技術は逆になる。より具体的には、ＡＰＤ１１６とプロセッサ１０２との間の直接接続以外の経路を使用してＡＰＤ１１６からデータを読み出すために、プロセッサ１０２は、データを読み出す要求をターゲットＡＰＤ１１６に送信する。次に、ターゲットＡＰＤ１１６は、本明細書の他の箇所で説明した技術と一致する方法で、ヘルパーＡＰＤ１１６を介して、要求されたデータの少なくとも一部をプロセッサ１０２に間接的に送信する。より具体的には、ヘルパーＡＰＤ１１６は、受信したデータを、図６Ａに示す技術に類似する方法で、ソースＡＰＤ１１６から、プロセッサ１０２に関連するメモリ（例えば、システムメモリ１０４）にコピーするか、又は、受信したデータを、図６Ｂに示す技術に類似する方法で、ソースＡＰ１１６から、プロセッサに関連するメモリ（例えば、システムメモリ１０４）に転送するように構成されてもよい。上記の方法によるデータの読み出し及び書き込みは、同時に行われてもよいし、非同時に行われてもよい。
【００６０】
また、本明細書で提供される技術は、一例として本明細書で説明するＡＰＤ１１６を使用して実行されるものとして説明されているが、本技術は、ＡＰＤ１１６以外のデバイスによって実行されるように拡張されてもよい。本技術は、本明細書で説明する技術に従ってデータを転送することができる任意のデバイスによって使用されてもよい。
【００６１】
本明細書で説明する技術の何れにおいても、プロセッサ１０２からターゲットＡＰＤ１１６に、又は、ソースＡＰＤ１１６からプロセッサ１０２に転送されるデータは、単一のバッファ又は複数のバッファから生じてもよい。一例では、「単一のバッファ」は、特定の動作又は関連する動作のセットの結果が配置されるメモリの単一の連続する部分を意味する。したがって、複数のバッファは、互いに連続してもよいし、連続しなくてもよく、複数のタイプの動作の結果として生成されたデータを記憶するメモリの複数の異なる部分、又は、単一のタイプの動作によって生成された異なるタイプのデータを記憶するメモリの複数の異なる部分を意味する。異なるＡＰＤに並列にデータを送信する方法を決定する際に、ドライバ１２２は、ターゲットＡＰＤに送信するために異なるバッファから異なるＡＰＤにデータを送信してもよいし、個々のバッファを分割し、分割されたバッファの異なる部分を、異なるＡＰＤを介してターゲットＡＰＤに送信してもよい。ＡＰＤへの送信として説明したが、上記のデータ分割技術は、読み出し動作にも適用される。換言すれば、ドライバ１２２は、ソースＡＰＤを制御して、単一のバッファを、異なる経路を介して（例えば、相互接続バス４０４を介して直接的に、１つ以上のＡＰＤ相互接続４１０を介して間接的に）プロセッサ１０２に送信するために、複数の部分に分割してもよく、及び／又は、各バッファの完全性をソースＡＰＤに維持させ、バッファを分割することなく、異なる経路を介して（先と同様に、例えば、相互接続バス４０４を介して直接的に、１つ以上のＡＰＤ相互接続４１０を介して間接的に）データを異なるバッファからプロセッサ１０２に送信させてもよい。
【００６２】
バッファの分割に関して、ドライバ１２２は、バッファを分割するかどうかを決定するために、及び、分割されたバッファの異なる部分をどのように送信するかを決定するために、様々な要因のうち任意の要因を使用してもよい。具体的には、ドライバ１２２は、バッファの分割に関連するオーバーヘッドが大きすぎてバッファを分割できないと判別してもよく、この場合、バッファを分割しない。先と同様に、上述したように、ドライバ１２２は、様々なバス（例えば、相互接続バス４０４及びＡＰＤ相互接続４１０）上の予備帯域幅を監視して、使用する予備帯域幅を識別し、ＡＰＤとプロセッサとの間の転送のための有効帯域幅を増加させる。
【００６３】
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。機能及び要素は、特定の組み合わせで上述したように説明されているが、各機能又は要素は、他の機能や要素なしに単独で使用されてもよいし、他の機能や要素を伴って若しくは伴わずに様々な組み合わせで使用されてもよい。
【００６４】
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、任意の他のタイプの集積回路（ＩＣ）、及び／又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令、及び、ネットリストを含む他の中間データ（このような命令はコンピュータ可読媒体に記憶され得る）の結果を使用して製造プロセスを構成することによって製造されてもよい。このような処理の結果は、本実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【００６５】
本明細書で提供される方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、ファームウェアにおいて実装されてもよい。非一時的なコンピュータ可読記憶媒体の例には、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、光学媒体（ＣＤ−ＲＯＭディスク等）、デジタル多用途ディスク（ＤＶＤ）等が含まれる。
【図１】
2021507337.tif 000003
【図２】
2021507337.tif 000004
【図３】
2021507337.tif 000005
【図４】
2021507337.tif 000006
【図５】
2021507337.tif 000007
【図６】
2021507337.tif 000008
【国際調査報告】
2021507337.tif 000009
2021507337.tif 000010
2021507337.tif 000011