IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドの特許一覧

特許7606517システムダイレクトメモリアクセスエンジンのオフロード
<>
  • 特許-システムダイレクトメモリアクセスエンジンのオフロード 図1
  • 特許-システムダイレクトメモリアクセスエンジンのオフロード 図2
  • 特許-システムダイレクトメモリアクセスエンジンのオフロード 図3
  • 特許-システムダイレクトメモリアクセスエンジンのオフロード 図4
  • 特許-システムダイレクトメモリアクセスエンジンのオフロード 図5
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-12-17
(45)【発行日】2024-12-25
(54)【発明の名称】システムダイレクトメモリアクセスエンジンのオフロード
(51)【国際特許分類】
   G06F 13/28 20060101AFI20241218BHJP
   G06F 12/02 20060101ALI20241218BHJP
   G06F 12/06 20060101ALI20241218BHJP
   G06F 12/0817 20160101ALI20241218BHJP
【FI】
G06F13/28 310J
G06F12/02 570M
G06F12/06 515H
G06F12/0817
【請求項の数】 20
(21)【出願番号】P 2022535068
(86)(22)【出願日】2020-11-19
(65)【公表番号】
(43)【公表日】2023-02-22
(86)【国際出願番号】 US2020061358
(87)【国際公開番号】W WO2021126460
(87)【国際公開日】2021-06-24
【審査請求日】2023-11-13
(31)【優先権主張番号】16/723,709
(32)【優先日】2019-12-20
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ヴィドヒャナサン カリヤナスンダラム
(72)【発明者】
【氏名】ナレンドラ カマット
【審査官】後藤 彰
(56)【参考文献】
【文献】国際公開第2019/133084(WO,A1)
【文献】国際公開第2015/162745(WO,A1)
【文献】特開平3-1260(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 13/28
G06F 12/00 - 12/06
G06F 12/0817
(57)【特許請求の範囲】
【請求項1】
ダイレクトメモリアクセス用に構成されたコンピューティングシステムであって、
プロセッサダイ上に配置され、ソースバッファの物理アドレス、宛先バッファの物理アドレス、及び、前記ソースバッファから前記宛先バッファへのデータ転送のサイズを含むメッセージをデータファブリックデバイスに送信するように構成されたシステムダイレクトメモリアクセス(SDMA)デバイスと、
前記ソースバッファの物理アドレス、前記宛先バッファの物理アドレス、及び、前記データ転送のサイズを含む少なくとも1つの命令を、第1の複数のエージェントデバイスに送信するように構成されたデータファブリックデバイスと、
第1の複数のエージェントデバイスであって、各々が、前記ソースバッファの物理アドレスにあるメモリデバイスから前記ソースバッファの一部を読み取ることと、前記ソースバッファの一部を第2の複数のエージェントデバイスのうち何れかに送信することと、を実行するように構成された第1の複数のエージェントデバイスと、
第2の複数のエージェントデバイスであって、各々が、メモリコントローラを動作して、前記ソースバッファの一部を前記宛先バッファに書き込むように構成された第2の複数のエージェントデバイスと、を備える、
システム。
【請求項2】
前記SDMAデバイスは、
前記ソースバッファの仮想アドレス及び前記宛先バッファの仮想アドレスを示す少なくとも1つの命令を前記プロセッサダイのプロセッサから受信することと、
前記ソースバッファの仮想アドレスを前記ソースバッファの物理アドレスに変換することと、
前記宛先バッファの仮想アドレスを前記宛先バッファの物理アドレスに変換することと、
を実行するようにさらに構成されている、
請求項1のシステム。
【請求項3】
前記データファブリックデバイスは、データファブリックのMISC(miscellaneous)機能ブロックを含む、
請求項1のシステム。
【請求項4】
前記エージェントデバイスは、データファブリックのコヒーレントスレーブデバイスを含む、
請求項1のシステム。
【請求項5】
前記第1の複数のエージェントデバイスは、前記プロセッサダイ上に配置されており、
前記第2の複数のエージェントデバイスは、リモートプロセッサダイ上に配置されている、
請求項1のシステム。
【請求項6】
前記第2の複数のエージェントデバイスは、前記プロセッサダイ上に配置されており、
前記第1の複数のエージェントデバイスは、リモートプロセッサダイ上に配置されている、
請求項1のシステム。
【請求項7】
前記第1の複数のエージェントデバイスの各々は、前記ソースバッファの一部を前記第2の複数のエージェントデバイスのうち何れかに送信する前に、前記ソースバッファの一部をローカルバッファに格納するようにさらに構成されている、
請求項1のシステム。
【請求項8】
前記プロセッサダイとリモートプロセッサダイとの間にコヒーレントリンクをさらに備え、
前記第1の複数のエージェントデバイスは、前記コヒーレントリンクを介して前記第2の複数のエージェントデバイスと通信するようにさらに構成されている、
請求項1のシステム。
【請求項9】
前記第1の複数のエージェントデバイスの各々は、メモリコントローラを動作して、前記ソースバッファの物理アドレスにある前記メモリデバイスから前記ソースバッファの一部を読み取るようにさらに構成されている、
請求項1のシステム。
【請求項10】
前記データファブリックデバイスは、前記少なくとも1つの命令を前記第1の複数のエージェントデバイスにブロードキャストするようにさらに構成されている、
請求項1のシステム。
【請求項11】
ダイレクトメモリアクセスのための方法であって、
ソースバッファの物理アドレス、宛先バッファの物理アドレス、及び、前記ソースバッファから前記宛先バッファへのデータ転送のサイズを含むメッセージを、プロセッサダイ上に配置されたシステムダイレクトメモリアクセス(SDMA)デバイスからデータファブリックデバイスに送信することと、
前記データファブリックデバイスが、前記ソースバッファの物理アドレス、前記宛先バッファの物理アドレス、及び、前記データ転送のサイズを含む少なくとも1つの命令を、第1の複数のエージェントデバイスに送信することと、
前記第1の複数のエージェントデバイスの各々が、前記ソースバッファの物理アドレスのメモリデバイスから前記ソースバッファの一部を読み取ることと、
前記第1の複数のエージェントデバイスの各々が、前記ソースバッファの一部を第2の複数のエージェントデバイスのうち何れかに送信することと、
前記第2の複数のエージェントデバイスの各々が、前記ソースバッファの一部を前記宛先バッファに書き込むことと、を含む、
方法。
【請求項12】
前記SDMAデバイスが、前記ソースバッファの仮想アドレス及び前記宛先バッファの仮想アドレスを示す少なくとも1つの命令を前記プロセッサダイのプロセッサから受信することと、
前記SDMAデバイスが、前記ソースバッファの仮想アドレスを前記ソースバッファの物理アドレスに変換することと、
前記SDMAデバイスが、前記宛先バッファの仮想アドレスを前記宛先バッファの物理アドレスに変換することと、をさらに含む、
請求項11の方法。
【請求項13】
前記データファブリックデバイスは、データファブリックのMISC(miscellaneous)機能ブロックを含む、
請求項11の方法。
【請求項14】
前記エージェントデバイスは、データファブリックのコヒーレントスレーブデバイスを含む、
請求項11の方法。
【請求項15】
前記第1の複数のエージェントデバイスは、前記プロセッサダイ上に配置されており、
前記第2の複数のエージェントデバイスは、リモートプロセッサダイ上に配置されている、
請求項11の方法。
【請求項16】
前記第2の複数のエージェントデバイスは、前記プロセッサダイ上に配置されており、
前記第1の複数のエージェントデバイスは、リモートプロセッサダイ上に配置されている、
請求項11の方法。
【請求項17】
前記第1の複数のエージェントデバイスの各々が、前記ソースバッファの一部を前記第2の複数のエージェントデバイスのうち何れかに送信する前に、前記ソースバッファの一部をローカルバッファに格納することをさらに含む、
請求項11の方法。
【請求項18】
前記第1の複数のエージェントデバイスが、前記プロセッサダイとリモートプロセッサダイとの間のコヒーレントリンクを介して前記第2の複数のエージェントデバイスと通信することをさらに含む、
請求項11の方法。
【請求項19】
前記第1の複数のエージェントデバイスの各々が、メモリコントローラを動作して、前記ソースバッファの物理アドレスにあるメモリデバイスから前記ソースバッファの一部を読み取ることをさらに含む、
請求項11の方法。
【請求項20】
前記データファブリックデバイスが、前記少なくとも1つの命令を前記第1の複数のエージェントデバイスにブロードキャストすることをさらに含む、
請求項11の方法。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本願は、2019年12月20日出願の米国特許出願第16/723,709号の利益を主張し、その内容は、参照することによって本明細書に組み込まれる。
【背景技術】
【0002】
システムダイレクトメモリアクセス(SDMA)エンジンは、デバイスとメモリ間、又は、コンピュータシステム内のメモリ内の異なる位置間でのデータのダイレクトメモリアクセス(DMA)転送を調整するデバイスである。SDMAエンジンは、通常、グラフィックプロセッサ(GPU)等のプロセッサ上に位置し、プロセッサ上で実行されているアプリケーションからコマンドを受信する。コマンドに基づいて、SDMAエンジンは、SDMAソース(例えば、メインメモリ内に定義された第1のメモリバッファ)からデータを読み取り、SDMA宛先(例えば、メインメモリ内に定義された第2のバッファ)にデータを書き込む。
【0003】
SDMAソースとSDMA宛先(destination)とは、場合によっては、物理的に異なるデバイスに位置する。マルチプロセッサシステムでは、SDMAソースとSDMA宛先とは、場合によっては、異なるプロセッサに関連付けられた異なるデバイスに位置する。このような場合、SDMAエンジンは、仮想アドレスを解決して物理アドレスを取得し、リモート読み取り及び/又は書き込みコマンドを発行してDMA転送を実行する。
【0004】
添付の図面と併せて例として与えられる以下の説明から、より詳細な理解を得ることができる。
【図面の簡単な説明】
【0005】
図1】本開示の1つ以上の特徴を実装することができる例示的なデバイスのブロック図である。
図2】例示的なコンピューティングシステムの一部を示すブロック図である。
図3】例示的なマルチプロセッサコンピューティングシステムの一部を示すブロック図である。
図4】例示的なダイレクトメモリアクセスメッセージングを示すメッセージシーケンスチャートである。
図5】ダイレクトメモリアクセスの例示的な方法を示すフローチャートである。
【発明を実施するための形態】
【0006】
いくつかの実施形態では、ダイレクトメモリアクセス用に構成されたコンピューティングシステムが提供される。システムは、プロセッサダイ上のSDMAデバイスを含む。SDMAデバイスは、データファブリックデバイスにメッセージを送信する。メッセージには、ソースバッファの物理アドレス、宛先バッファの物理アドレス、及び、ソースバッファから宛先バッファへのデータ転送のサイズが含まれる。データファブリックデバイスは、1つ以上の命令を第1のエージェントデバイスに送信する。命令には、ソースバッファの物理アドレス、宛先バッファの物理アドレス、及び、データ転送のサイズが含まれる。第1のエージェントデバイスの各々は、ソースバッファの物理アドレスにあるメモリデバイスからソースバッファの一部を読み取る。また、第1のエージェントデバイスの各々は、ソースバッファの一部を1つの第2のエージェントデバイスに送信する。第2のエージェントデバイスの各々は、メモリコントローラを動作して、ソースバッファの一部を宛先バッファに書き込む。
【0007】
いくつかの実施形態では、SDMAデバイスは、プロセッサダイ上のプロセッサから1つ以上の命令を受信する。1つ以上の命令は、ソースバッファの仮想アドレス及び宛先バッファの仮想アドレスを示す。SDMAデバイスは、ソースバッファの仮想アドレスをソースバッファの物理アドレスに変換する。SDMAデバイスは、宛先バッファの仮想アドレスを宛先バッファの物理アドレスに変換する。いくつかの実施形態では、データファブリックデバイスは、データファブリックのMISC(miscellaneous)機能ブロックを含む。いくつかの実施形態では、エージェントデバイスは、データファブリックのコヒーレントスレーブデバイスを含む。いくつかの実施形態では、第1のエージェントデバイスがプロセッサダイ上にあり、第2のエージェントデバイスがリモートプロセッサダイ上にある。いくつかの実施形態では、第2のエージェントデバイスがプロセッサダイ上にあり、第1のエージェントデバイスがリモートプロセッサダイ上にある。いくつかの実施形態では、第1のエージェントデバイスの各々は、ソースバッファの一部を1つの第2のエージェントデバイスに送信する前に、ソースバッファの一部をローカルバッファに格納する。いくつかの実施形態では、プロセッサダイとリモートプロセッサダイとの間にコヒーレントリンクを含み、第1のエージェントデバイスは、コヒーレントリンク上で第2のエージェントデバイスと通信する。いくつかの実施形態では、第1のエージェントデバイスの各々は、メモリコントローラを動作して、ソースバッファの物理アドレスにあるメモリデバイスからソースバッファの一部を読み取る。いくつかの実施形態では、データファブリックデバイスは、1つ以上の命令を第1のエージェントデバイスにブロードキャスト(一斉送信)する。
【0008】
いくつかの実施形態は、ダイレクトメモリアクセスのための方法を提供する。方法は、プロセッサダイ上に配置されたシステムダイレクトメモリアクセス(SDMA)デバイスからデータファブリックデバイスにメッセージを送信することを含む。メッセージには、ソースバッファの物理アドレス、宛先バッファの物理アドレス、及び、ソースバッファから宛先バッファへのデータ転送のサイズが含まれる。また、方法は、1つ以上の命令をデータファブリックデバイスにより第1のエージェントデバイスに送信することを含む。1つ以上の命令には、ソースバッファの物理アドレス、宛先バッファの物理アドレス、及び、データ転送のサイズが含まれる。また、方法は、ソースバッファの物理アドレスにあるメモリデバイスからソースバッファの一部を読み取る第1のエージェントデバイスの各々を含む。また、方法は、ソースバッファの一部を1つの第2のエージェントデバイスに送信する第1のエージェントデバイスの各々を含む。また、方法は、ソースバッファの一部を宛先バッファに書き込む第2のエージェントデバイスの各々を含む。
【0009】
いくつかの実施形態は、プロセッサダイのプロセッサから1つ以上の命令を受信するSDMAデバイスを含む。命令は、ソースバッファの仮想アドレス及び宛先バッファの仮想アドレスを示す。いくつかの実施形態では、ソースバッファの仮想アドレスをソースバッファの物理アドレスに変換するSDMAデバイスを含む。いくつかの実施形態では、宛先バッファの仮想アドレスを宛先バッファの物理アドレスに変換するSDMAデバイスを含む。いくつかの実施形態では、データファブリックデバイスは、データファブリックのMISC(miscellaneous)機能ブロックを含む。いくつかの実施形態では、エージェントデバイスは、データファブリックのコヒーレントスレーブデバイスを含む。いくつかの実施形態では、第1のエージェントデバイスがプロセッサダイ上にあり、第2のエージェントデバイスがリモートプロセッサダイ上にある。いくつかの実施形態では、第2のエージェントデバイスがプロセッサダイ上にあり、第1のエージェントデバイスがリモートプロセッサダイ上にある。いくつかの実施形態では、ソースバッファの一部を1つの第2のエージェントデバイスに送信する前に、ソースバッファの一部をローカルバッファに格納する第1のエージェントデバイスの各々を含む。いくつかの実施形態は、プロセッサダイとリモートプロセッサダイとの間のコヒーレントリンク上で第2のエージェントデバイスと通信する第1のエージェントデバイスを含む。いくつかの実施形態では、メモリコントローラを動作して、ソースバッファの物理アドレスにあるメモリデバイスからソースバッファの一部を読み取る第1のエージェントデバイスの各々を含む。いくつかの実施形態では、1つ以上の命令を第1のエージェントデバイスにブロードキャストするデータファブリックデバイスを含む。
【0010】
図1は、開示の1つ以上の特徴を実装することができる例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲーミングデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、又は、タブレットコンピュータを含み得る。デバイス100は、プロセッサ102と、メモリ104と、ストレージ106と、1つ以上の入力デバイス108と、1つ以上の出力デバイス110と、を含む。また、デバイス100は、オプションで、入力ドライバ112及び出力ドライバ114を含み得る。デバイス100は、図1に示されていない追加の構成要素を含むことができることを理解されたい。
【0011】
様々な代替例では、プロセッサ102は、中央処理装置(CPU)、グラフィックスプロセシングユニット(GPU)、同一のダイ上に位置するCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアはCPU又はGPUであってもよい。様々な代替例では、メモリ104は、プロセッサ102と同一のダイ上に位置してもよいし、プロセッサ102とは別に位置してもよい。メモリ104は、揮発性又は不揮発性のメモリ(例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM、キャッシュ)を含む。
【0012】
ストレージ106は、固定式ストレージ又はリムーバブルストレージ(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク、フラッシュドライブ)を含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックススキャナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上のライト、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。
【0013】
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信することを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信することを可能にする。入力ドライバ112及び出力ドライバ114がオプションのコンポーネントであることと、入力ドライバ112及び出力ドライバ114が存在しない場合にはデバイス100が同様に動作することと、に留意されたい。出力ドライバ114は、表示デバイス118に結合されたアクセラレーテッド処理デバイス(APD)116を含む。APDは、プロセッサ102から計算コマンド及びグラフィックスレンダリングコマンドを受け入れ、それらの計算コマンド及びグラフィックスレンダリングコマンドを処理し、表示のために表示デバイス118にピクセル出力を提供する。以下にさらに詳細に説明するように、APD116は、単一命令複数データ(SIMD)パラダイムに従って計算を実行する1つ以上の並列処理ユニットを含む。次のように、本明細書では、様々な機能がAPD116によって又はAPD116と協働して実行されるものとして説明しているが、様々な代替形態では、このAPD116によって実行されるものとして説明する機能が、ホストプロセッサ(例えば、プロセッサ102)によって駆動されない、表示デバイス118にグラフィック出力を提供する同様の性能を有する他のコンピューティングデバイスによって追加的又は代替的に実行される。例えば、SIMDパラダイムに従って処理タスクを実行する任意の処理システムが、本明細書で説明する機能を実行し得ることが企図されている。代替として、SIMDパラダイムに従って処理タスクを行わないコンピューティングシステムが本明細書で説明する機能を行うことが想到される。
【0014】
図2は、例示的なコンピューティングシステム200の一部を示すブロック図である。いくつかの例では、コンピューティングシステム200は、図1に関して示され、説明されるように、デバイス100の一部又は全部を使用して実装される。コンピューティングシステム200は、第1の半導体ダイ205を含む。半導体ダイ205は、1つ以上のプロセッサ210A~210Nと、入力/出力(I/O)インターフェース220と、相互接続230と、メモリコントローラ(複数可)240と、ネットワークインターフェース250と、を含む。他の例では、コンピューティングシステム200は、さらなる構成要素、異なる構成要素を含み、及び/又は、異なる方法で構成される。
【0015】
いくつかの実施形態では、プロセッサ210A~210Nの各々は、1つ以上の処理デバイスを含む。この例では、プロセッサ210A~210Nのうち少なくとも1つは、CPU等の1つ以上の汎用処理デバイスを含む。いくつかの実施形態では、そのような処理デバイスは、図1に関して示され、説明されるようにプロセッサ102を使用して実装される。この例では、プロセッサ210A~210Nのうち少なくとも1つは、1つ以上のデータ並列プロセッサを含む。データ並列プロセッサの例として、GPU、デジタルシグナルプロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)等が挙げられる。いくつかの実施形態では、そのような処理デバイスは、図1に関して示され、説明されるように、APD116を使用して実装される。
【0016】
いくつかの実施形態では、各プロセッサは、1つ以上のレベルのキャッシュを備えたキャッシュサブシステムを含む。いくつかの実施形態では、各コアコンプレックス210A~210Nは、複数のプロセッサコア間で共有されるキャッシュ(例えば、レベル3(L3)キャッシュ)を含む。
【0017】
メモリコントローラ240は、例えば、相互接続230を介して、コア複合体210A~210Nによってアクセス可能な少なくとも1つのメモリコントローラを含む。メモリコントローラ240は、任意の適切なタイプのメモリコントローラのうち1つ以上を含む。メモリコントローラの各々は、任意の数及びタイプのメモリデバイス(図示省略)に結合され(又は他の方法で通信して)、アクセスを制御する。いくつかの実施形態では、こうしたメモリデバイスには、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、NANDフラッシュメモリ、NORフラッシュメモリ、強誘電体ランダムアクセスメモリ(FeRAM)、及び/又は、他の適切なメモリデバイスが挙げられる。相互接続230は、バス、データファブリック等のように、図2に示すデバイス間の通信に適した任意のコンピュータ通信媒体を含む。
【0018】
I/Oインターフェース220は、1つ以上のI/Oインターフェース(例えば、ペリフェラルコンポーネントインターコネクト(PCI)バス、PCIエクステンデッド(PCI-X)、PCIE(PCI Express)バス、ギガビットイーサネット(登録商標)(GBE)バス、ユニバーサルシリアルバス(USB)等)を含む。いくつかの実施形態では、I/Oインターフェース220は、図1に関して示され、説明されるように、入力ドライバ112及び/又は出力ドライバ114を使用して実装される。様々なタイプの周辺機器は、I/Oインターフェース220に結合され得る。そのような周辺デバイスには、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック又は他のタイプのゲームコントローラ、メディア記録デバイス、外部ストレージデバイス、ネットワークインターフェースカード等が含まれる(ただし、これらに限定されない)。いくつかの実施形態では、こうした周辺デバイスは、図1に関して示され、説明されるように、入力デバイス108及び/又は出力デバイス110を使用して実装される。
【0019】
図3は、例示的なマルチプロセッサコンピューティングシステム300の一部を示すブロック図である。システム300又はその一部は、半導体ダイ205(図2に関して示され、説明されるように)及び/又はデバイス100(図1及び2に関して示され、説明されるように)の一部又は全部を使用して実装可能である。
【0020】
システム300は、相互接続330を介して(例えば、他の構成要素を介して)プロセッサ310A~310Nと通信する1つ以上のプロセッサ310A~310N及び1つ以上のメモリコントローラ340A~340Nを含む。いくつかの例では、プロセッサ310A~310Nは、コヒーレントマスター315A~315Nを介して相互接続330に結合され、メモリコントローラ340A~340Nは、コヒーレントスレーブ345A~345Nを介して相互接続330に結合される。相互接続330、コヒーレントマスター315A~315N及びコヒーレントスレーブ345A~345Nは、システム300の構成要素間の通信を容易にするデータファブリックの一部を形成する。
【0021】
システム300は、この例では半導体ダイ0及び半導体ダイ1を含み、コヒーレントリンク350は、相互接続330及びI/Oインターフェース360A~360B(これもデータファブリックの一部を形成する)を介して両方のダイにわたってデータファブリックを拡張する。相互接続330は、バス、データファブリック等のように、図3に示すデバイス間の通信に適した任意のコンピュータ通信媒体を含む。プロセッサ310A~310Nの各々は、1つ以上のプロセッサコア(例えば、図2に関して説明したように、CPU及び/又はGPU)を含む。プロセッサ310A~310Nの各々は、対応するSDMAエンジン370A~370Nも含む。
【0022】
各プロセッサ310A~310Nは、対応するコヒーレントマスター315A~315Nと通信する。いくつかの実施形態では、コヒーレントマスターは、相互接続(例えば、相互接続330)上を流れるトラフィックを処理し、接続されたCPU又はコアコンプレックスのコヒーレンシを管理するエージェントである。いくつかの実施形態では、コヒーレンシを管理するために、コヒーレントマスターは、コヒーレンシ関連のメッセージ及びプローブを受信及び処理し、コヒーレンシ関連の要求及びプローブを生成及び送信する。
【0023】
各プロセッサ310A~310Nは、対応するコヒーレントマスター315A~315Nを介して、及び、相互接続330を介して、1つ以上のコヒーレントスレーブ345A~345Nと通信する。コヒーレントスレーブは、メモリコントローラ(例えば、コヒーレントスレーブに接続されたメモリコントローラ)のコヒーレンシを管理するエージェントデバイスである。いくつかの実施形態では、コヒーレンシを管理するために、コヒーレントスレーブは、対応するメモリコントローラを対象とする要求及びプローブを受信及び処理する。
【0024】
プロセッサ310Aは、図3の例では、コヒーレントマスター315A及び相互接続330を介してコヒーレントスレーブ345Aと通信する。コヒーレントスレーブ(CS)345Aは、メモリデバイス(例えば、メインメモリDRAMデバイス)を制御するメモリコントローラ(MC)340Aと通信する。いくつかの実施形態では、各プロセッサ310A~310Nは、対応するコヒーレントマスター315A~315N及び対応するコヒーレントスレーブ340A~340Nを介して、任意の適切な数のメモリコントローラ340A~340Nと通信する。
【0025】
プローブには、コヒーレンシポイント(例えば、コヒーレントスレーブ)からコンピュータシステム内の1つ以上のキャッシュに渡されるメッセージが含まれ、キャッシュにデータブロックのコピーがあるかどうかを示す応答を要求し、いくつかの実施形態では、キャッシュがデータのブロックを配置するキャッシュ状態を示す。いくつかの実施形態では、コヒーレントスレーブがその対応するメモリコントローラを対象とするメモリ要求を受信する場合(例えば、コヒーレントスレーブがコヒーレンシを管理するメモリコントローラによって制御されるメモリ内のアドレス又はアドレスの領域に格納されたデータに対するメモリ要求)、コヒーレントスレーブは、その対応するキャッシュディレクトリへのルックアップ(例えば、タグベースのルックアップ)を実行して、要求が何れかのキャッシュサブシステムの少なくとも1つのキャッシュラインにキャッシュされたメモリアドレス又は領域をターゲットにするかどうかを判断する。
【0026】
SDMAエンジン370A~370Nは、システム300内のデバイスとメモリ間、又は、メモリ内の異なる位置間のデータのDMA転送を調整する。SDMAエンジン370A~370Nは、それらの対応するプロセッサ310A~310Nから命令を受信することができる。受信した命令に基づいて、場合によっては、SDMAエンジン370A~370Nは、データファブリックを介して任意のメモリからデータを読み取り及びバッファリングし、データファブリックを介して任意のメモリにバッファリングされたデータを書き込む。いくつかの実施形態では、受信した命令に基づいて、SDMAエンジン370A~370Nは、DMAを実行するための命令とともに、データファブリックのMISC(miscellaneous)ブロック等のデータファブリックデバイスにメッセージを送信する。
【0027】
MISCブロック380A~380Bは、他の機能を処理するデータファブリックデバイスである。場合によっては、MISCブロック380A~380Bは、電力管理をホストし、機能を中断する。場合によっては、MISCブロック380A~380Bは、本明細書で説明するようにSDMA機能をホストする。例えば、MISCブロック380Aは、物理アドレスのソースバッファから物理アドレスの宛先バッファに指定されたサイズのDMA転送を実行するための命令を伴うメッセージをSDMAエンジン370Aから(例えば、コヒーレントマスター315A等のエージェントデバイスを介して)受信する。この例では、MISCブロック380Aは、例えば本明細書でさらに説明するように、DMA転送を実行するために、同じダイ上のエージェントデバイス(例えば、コヒーレントスレーブ345A~345D)に対応するコマンドをブロードキャストする。
【0028】
いくつかの実施形態では、相互接続330は、説明を容易にするために図3に示されていない他の構成要素に接続されており、及び/又は、他の構成要素と通信する。例えば、いくつかの実施形態では、相互接続330は、図2に関して示され、説明されるように、1つ以上のネットワークインターフェース250への接続を含む。
【0029】
図4は、例えば、図3に関して示され、説明されるように、システム300のデバイス間で実装可能な例示的なダイレクトメモリアクセスメッセージング400を示すメッセージシーケンスチャートである。
【0030】
SDMA370Aは、プロセッサ310Aのローカルメモリに物理的に配置された(すなわち、オンダイメモリコントローラ340A~440Bを介してアクセス可能な)ソースメモリバッファから、プロセッサ310Nのローカルメモリに物理的に配置された(すなわち、オンダイメモリコントローラ340E~340Nを介してアクセス可能な)宛先バッファにDMAを調整する。これは、本明細書では「ローカル読み取り、リモート書き込み」DMAと呼ばれる。対応する「リモート読み取り、ローカル書き込み」動作は、それに応じてメッセージングを再配置することによって実行される。同様に、対応する「ローカル読み取り、ローカル書き込み」又は「リモート読み取り、リモート書き込み」動作は、それに応じてメッセージングを再配置することによって実行される。
【0031】
プロセッサ310Aは、ソースバッファの仮想アドレス、宛先バッファの仮想アドレス、及び、データ転送のサイズを含むSDMAコマンドを、命令405でSDMA370Aに送信する。命令405は、いくつかの実施形態では、複数の命令及び/又はメッセージを含むことに留意されたい。
【0032】
SDMA370Aは、ステップ410で、ソースバッファ及び宛先バッファの仮想アドレスから物理アドレスへの変換を実施して、ソースバッファの物理アドレスと宛先バッファの物理アドレスの各々を取得する。
【0033】
SDMA370Aは、ソースバッファの物理アドレス、宛先バッファの物理アドレス、及び、SDMAメッセージ415内のデータ転送のサイズをMISCブロック380Aに送信する。
【0034】
MISCブロック380Aは、ソースバッファの物理アドレス、宛先バッファの物理アドレス、及び、データ転送のサイズを含むSDMAコマンドブロードキャスト420を、ダイ0上の全てのコヒーレントスレーブデバイスに送信する。この例では、CS345A~Dはダイ0にある。
【0035】
CS345A~345Dの各々は、関連するローカルMC340A~340Dに読み取りコマンド425を送信する。各MC340A~340Dは、ステップ430でソースバッファの対応する部分を読み取り、ステップ435でソースバッファデータをCS340A~340Dに返す。各CS340A~340Dは、送信のために(及び/又は必要に応じて)ローカルバッファ440にソースバッファデータをバッファリングする。
【0036】
CS345A~345Dの各々は、リモート書き込みコマンド445をリモートCS345E~345Nに送信し、リモートCS345E~345Nの各々は、書き込みコマンド450を関連するMC340E~340Nに送信する。各MC340E~340Nは、ステップ455で宛先バッファの対応する部分を書き込み、確認応答460をCS345E~345Nの各々に返す。いくつかの実施形態では、確認応答は、最後の転送(すなわち、最後の書き込みコマンド450)に対してのみ要求され、したがって、全ての書き込みコマンド450に対して1つの確認応答460のみが返される。
【0037】
宛先バッファが完全に書き込まれた後、すなわち、最終的なMC340E~340NがCS345E~345Nの各々に確認応答を返した後、最終的な確認応答(又は最後の書き込みコマンド450に対してのみ確認応答が要求される場合の唯一の確認応答)を受信するCS445E~445Nは、CS445A~445Dへの累積確認応答465を返す。累積確認応答465を受信した後、各CS345A~345Dは、MISCブロック380Aにコマンド470を発行して、転送の完了を示す。いくつかの実施形態では、コマンド470は、転送の識別(例えば、転送ID)を含む。コマンド470に基づいて、MISCブロック380Aは、転送の完了を示す指標475をSDMA370Aに送信する。
【0038】
図5は、ダイレクトメモリアクセスの例示的な方法を示すフローチャートである。方法500は、例えば、システム300(図3に関して示され、説明されている)に実装可能であり、及び/又は、いくつかの例では、シグナリング400(図4に関して示され、説明されている)を使用して実装可能である。
【0039】
ブロック505で、SDMA370Aは、プロセッサ310Aから命令を受信する。命令は、例えば、命令405のように(図4に関して示され、説明されるように)ソースバッファの仮想アドレス、宛先バッファの仮想アドレス、及び、データ転送のサイズを含むSDMAコマンドであってもよい。
【0040】
ブロック510で、SDMA370Aは、ソースバッファの仮想アドレス及び宛先バッファの仮想アドレスから物理アドレスへの変換を実施して、ソースバッファの物理アドレス及び宛先バッファの物理アドレスの各々を取得する(例えば、図4に関して示され、説明される410に関して示され、説明されるように)。
【0041】
ブロック515で、SDMA370Aは、ソースバッファの物理アドレス、宛先バッファの物理アドレス、及び、データ転送のサイズをブロック515内のMISCブロック380Aに送信する(例えば、図4に関して示され、説明されるメッセージ415)。
【0042】
ブロック520で、MISCブロック380Aは、メッセージを受信し、ブロック525で、ソースバッファの物理アドレス、宛先バッファの物理アドレス、及び、データ転送のサイズを含むSDMAコマンドブロードキャスト(例えば、図4に関して示され、説明されるブロードキャスト420)をダイ0上の全てのコヒーレントスレーブデバイスに送信する。この例では、CS345A~345Dはダイ0にある。いくつかの実施形態では、ブロードキャスト420には、転送ジョブを識別するため転送の識別(例えば、転送ID)が含まれる。
【0043】
ソースバッファがローカルで宛先バッファがリモートであるという条件530で、ブロック535では、ローカルCS345A345~Dの各々は、各MC340A~340Dが、ソースバッファの対応する部分(存在する場合)を読み取り、ソースバッファデータをCS340A~340Dに返すように、関連するMC340A~340Dに読み取りコマンド(例えば、図4に関して示され、説明されるコマンド425)を送信する。各CS340A~340Dは、送信のために(及び/又は必要に応じて)ローカルバッファにソースバッファデータをバッファリングする。
【0044】
ブロック540で、ローカルCS345A~345Dの各々は、リモート書き込みコマンドをリモートCS345E~345Nに送信して、バッファをリモートメモリに書き込む。ブロック545で、リモートCS345E~345Nの各々は、各MC340E~340Nが、ソースバッファデータの対応する部分を、関連するメモリ内の宛先バッファに書き込むように関連するMC340E~340Nに書き込みコマンドを送信する。宛先バッファの対応する部分を書き込んだ後、各MC340E~340Nは、確認応答をCS345E~345Nの各々に返す。
【0045】
ブロック550で、宛先バッファが完全に書き込まれた後、すなわち、最終的なMC340E~340NがCS345E~345Nの各々に確認応答を返した後、最終的な確認応答を受信するCS345E~345Nは、ローカルCS345A~345Dに累積確認応答465を返す。累積確認応答465を受信した後、各CS345A~345Dは、MISCブロック380Aにコマンドを発行して、転送の完了を示す。いくつかの実施形態では、コマンドは、転送の識別(例えば、転送ID)を含む。コマンドに基づいて、MISCブロック380Aは、転送の完了を示す指標をSDMA370Aに送信する。
【0046】
ソースバッファがリモートであり、宛先バッファがローカルであるという条件530で、ローカルCS345A~345Dの各々は、ブロック555でリモートCS345E~345Nにリモート読み取りコマンドを送信する。リモート読み取りコマンドに基づいて、リモートCS345E~345Nの各々は、MC340E~340NがソースバッファデータをCS345E~345Nに返すように、ブロック560で関連するMC340E~340Nに読み取りコマンドを送信する。CS345E~345Nは、送信のために(及び/又は必要に応じて)ローカルバッファにソースバッファデータをバッファリングする。
【0047】
リモートCS345E~345Nは、バッファリングされたデータを、ブロック565でコヒーレントリンクを介してローカルCS345A~Dに送信する。ローカルCS345A~345Dは、ブロック570において関連するMC340A~340Dを介して、物理メモリアドレスの宛先バッファにデータを書き込む。宛先バッファが完全に書き込まれた後、すなわち、最終MC340A~340DがCS345A~345Dの各々に確認応答を返した後、最終確認応答を受信するCS345A~345Dは、転送の完了を示すために、ブロック575においてMISCブロック380Aにコマンドを発行する。いくつかの実施形態では、コマンドは、転送の識別(例えば、転送ID)を含む。コマンドに基づいて、MISCブロック380Aは、転送の完了を示す指標をSDMA370Aに送信する。
【0048】
本明細書の開示に基づいて、多くの変形形態が可能であることを理解されたい。特徴及び要素が特定の組み合わせで上述されたが、各特徴又は要素は、他の特徴及び要素無しに単独で、又は、他の特徴及び要素を有する若しく有しない様々な組み合わせで使用することができる。
【0049】
図に示す及び/又は本明細書で説明する様々な機能ユニット(限定するものではないが、プロセッサ102、入力ドライバ112、入力デバイス108、出力ドライバ114、出力デバイス110、アクセラレーテッド処理デバイス116を含む)は、汎用コンピュータ、プロセッサ若しくはプロセッサコアとして、又は、プログラム、ソフトウェア若しくはファームウェアとして実装され、非一時的なコンピュータ可読記憶媒体又は別の媒体に記憶され、汎用コンピュータ、プロセッサ又はプロセッサコアによって実行可能であり得る。提供される方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施することができる。適切なプロセッサは、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタルシグナルプロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、他のタイプの集積回路(IC)、及び/又は、状態機械を含む。このようなプロセッサは、ハードウェア記述言語(HDL)命令の結果や、(コンピュータ可読媒体に格納することができる命令のような)ネットリストを含む他の中間のデータを処理した結果を用いて製造プロセスを構成することによって製造することができる。このような処理の結果は、本開示の特徴を実装するプロセッサを製造する半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【0050】
本明細書に提供される方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア又はファームウェアで実施することができる。非一時的なコンピュータ可読記憶媒体の例は、リードオンリーメモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバルディスク等の磁気媒体、光磁気媒体、並びに、CD-ROMディスク及びデジタル多用途ディスク(DVD)等の光学媒体を含む。
図1
図2
図3
図4
図5