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

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

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

特表2024-511765マルチアクセラレータ計算ディスパッチ
<>
  • 特表-マルチアクセラレータ計算ディスパッチ 図1
  • 特表-マルチアクセラレータ計算ディスパッチ 図2
  • 特表-マルチアクセラレータ計算ディスパッチ 図3
  • 特表-マルチアクセラレータ計算ディスパッチ 図4
  • 特表-マルチアクセラレータ計算ディスパッチ 図5
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-03-15
(54)【発明の名称】マルチアクセラレータ計算ディスパッチ
(51)【国際特許分類】
   G06F 9/38 20180101AFI20240308BHJP
【FI】
G06F9/38 370C
G06F9/38 370A
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023557715
(86)(22)【出願日】2022-03-08
(85)【翻訳文提出日】2023-10-19
(86)【国際出願番号】 US2022019396
(87)【国際公開番号】W WO2022211993
(87)【国際公開日】2022-10-06
(31)【優先権主張番号】17/218,421
(32)【優先日】2021-03-31
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ミリンド エヌ. ネムレカール
(72)【発明者】
【氏名】マキシム ヴィー. カザコフ
(72)【発明者】
【氏名】プレリット ダック
【テーマコード(参考)】
5B013
【Fターム(参考)】
5B013DD01
5B013DD03
(57)【要約】
複数のチップレットによってコンピューティングワークを実行するための技術が提供される。本技術は、カーネルディスパッチパケットのワークグループをチップレットに割り当てることと、各チップレットが、チップレットに割り当てられたワークグループを実行することと、各チップレットが、チップレットに割り当てられたカーネルディスパッチパケットの全てのワークグループが完了すると、かかる完了を他のチップレットに通知することと、カーネルディスパッチパケットの全てのワークグループが完了すると、かかる完了をクライアントに通知し、後続のカーネルディスパッチパケットのワークグループの処理に進むことと、を含む。
【選択図】図5
【特許請求の範囲】
【請求項1】
複数のチップレットによってコンピューティングワークを実行するための方法であって、
カーネルディスパッチパケットのワークグループを前記複数のチップレットに割り当てることと、
各チップレットが、チップレットに割り当てられたワークグループを実行することと、
各チップレットが、前記カーネルディスパッチパケットのワークグループのうちチップレットに割り当てられた全てのワークグループを完了すると、かかる完了を他のチップレットに通知することと、
前記複数のチップレットのうち何れかのチップレットが、前記カーネルディスパッチパケットの全てのワークグループが完了すると、かかる完了をクライアントに通知し、後続のカーネルディスパッチパケットに進むことと、を含む、
方法。
【請求項2】
各チップレットには、前記カーネルディスパッチパケットのワークグループの異なる相互排他的なセットが割り当てられる、
請求項1の方法。
【請求項3】
各チップレットに割り当てられるワークグループは、予め指定された方法で割り当てられる、
請求項1の方法。
【請求項4】
前記かかる完了を他のチップレットに通知することは、カウンタをブロードキャストすることを含む、
請求項1の方法。
【請求項5】
前記カウンタは、ハードウェアコマンドキューを通過する進捗の指標である、
請求項4の方法。
【請求項6】
前記クライアントに通知することは、通知機能チップレットとして指定された前記複数のチップレットのうち何れかのチップレットによって実行される、
請求項1の方法。
【請求項7】
前記カーネルディスパッチパケット及び前記後続のカーネルディスパッチパケットは、前記複数のチップレットの各々のハードウェアコマンドキューに記憶される、
請求項1の方法。
【請求項8】
前記カーネルディスパッチパケットのワークグループを前記複数のチップレットに割り当てること、及び、前記かかる完了を他のチップレットに通知することは、前記複数のチップレットの各チップレットのコマンドプロセッサによって実行される、
請求項1の方法。
【請求項9】
前記複数のチップレットの各チップレットから通知を受信したと判定することによって、前記カーネルディスパッチパケットの全てのワークグループが完了したと判定することを更に含み、
前記通知は、チップレットが前記カーネルディスパッチパケットの全てのワークグループを完了したことを示す、
請求項1の方法。
【請求項10】
チップレットであって、
ワークグループを実行するように構成された計算ユニットと、
コマンドプロセッサと、を備え、
前記コマンドプロセッサは、
前記チップレットに割り当てられたカーネルディスパッチパケットのワークグループを識別することと、
前記チップレットに割り当てられた前記ワークグループを前記計算ユニットに実行させることと、
前記チップレットに割り当てられた前記カーネルディスパッチパケットの全てのワークグループが完了すると、かかる完了を複数のチップレットのうち他のチップレットに通知することと、
前記複数のチップレットの全てのチップレットに割り当てられた前記カーネルディスパッチパケットの全てのワークグループが完了すると、かかる完了をクライアントに通知し、後続のカーネルディスパッチパケットのワークグループの処理に進むことと、
を行うように構成されている、
チップレット。
【請求項11】
前記複数のチップレットの各チップレットには、前記カーネルディスパッチパケットのワークグループの異なる相互排他的なセットが割り当てられる、
請求項10のチップレット。
【請求項12】
各チップレットに割り当てられるワークグループは、予め指定された方法で割り当てられる、
請求項10のチップレット。
【請求項13】
前記かかる完了を他のチップレットに通知することは、カウンタをブロードキャストすることを含む、
請求項10のチップレット。
【請求項14】
前記カウンタは、ハードウェアコマンドキューを通過する進捗の指標である、
請求項13のチップレット。
【請求項15】
前記カーネルディスパッチパケット及び前記後続のカーネルディスパッチパケットを記憶するように構成されたハードウェアコマンドキューを更に備える、
請求項10のチップレット。
【請求項16】
前記コマンドプロセッサは、前記複数のチップレットの各チップレットから通知を受信したと判定することによって、前記カーネルディスパッチパケットの全てのワークグループが完了したと判定するように更に構成されており、
前記通知は、チップレットが前記カーネルディスパッチパケットの全てのワークグループを完了したことを示す、
請求項10のチップレット。
【請求項17】
デバイスであって、
複数のチップレットを備え、
前記複数のチップレットの各チップレットは、
ワークグループを実行するように構成された計算ユニットと、
コマンドプロセッサと、を含み、
前記コマンドプロセッサは、
前記チップレットに割り当てられたカーネルディスパッチパケットのワークグループを識別することと、
前記チップレットに割り当てられた前記ワークグループを前記計算ユニットに実行させることと、
前記チップレットに割り当てられた前記カーネルディスパッチパケットの全てのワークグループが完了すると、かかる完了を複数のチップレットのうち他のチップレットに通知することと、
を行うように構成されており、
前記複数のチップレットのうち何れかのチップレットは、前記複数のチップレットの全てのチップレットに割り当てられた前記カーネルディスパッチパケットの全てのワークグループが完了すると、かかる完了をクライアントに通知し、後続のカーネルディスパッチパケットのワークグループの処理に進むように構成されている、
デバイス。
【請求項18】
前記複数のチップレットの各チップレットには、前記カーネルディスパッチパケットのワークグループの異なる相互排他的なセットが割り当てられる、
請求項17のデバイス。
【請求項19】
各チップレットに割り当てられるワークグループは、予め指定された方法で割り当てられる、
請求項17のデバイス。
【請求項20】
前記かかる完了を他のチップレットに通知することは、カウンタをブロードキャストすることを含む、
請求項17のデバイス。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本願は、2021年3月31日に出願された「MULTI-ACCELERATOR COMPUTE DISPATCH」と題する係属中の米国特許出願第17/218,421号の利益を主張し、その全体が参照により本明細書に組み込まれる。
【背景技術】
【0002】
汎用計算シェーダは、高度に並列化可能なワークロードを実行するためにますます普及している方法である。汎用計算シェーダに対する改良が絶えず行われている。
【0003】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解を得ることができる。
【図面の簡単な説明】
【0004】
図1】本開示の1つ以上の特徴を実装することができる例示的なデバイスのブロック図である。
図2】追加の詳細を示す図1のデバイスのブロック図である。
図3】一例による、複数のチップレットによるコマンドキューのコマンドの実行を示す加速処理デバイスの態様のブロック図である。
図4】チップレットにわたってカーネルを協調的に実行するための動作の例示的なセットを示すブロック図である。
図5】一例による、複数のチップレットにわたってカーネルを実行する方法のフロー図である。
【発明を実施するための形態】
【0005】
複数のチップレットによってコンピューティングワークを実行するための技術が提供される。本技術は、カーネルディスパッチパケット(kernel dispatch packet)のワークグループをチップレットに割り当てること、各チップレットによって、そのチップレットに割り当てられたワークグループを実行すること、チップレットごとに、カーネルディスパッチパケットの、そのチップレットに割り当てられた全てのワークグループが完了すると、かかる完了を他のチップレットに通知すること、及び、カーネルディスパッチパケットの全てのワークグループが完了すると、かかる完了をクライアントに通知し、後続のカーネルディスパッチパケットのワークグループの処理に進むことを含む。
【0006】
図1は、本開示の1つ以上の特徴を実装することができる例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、又は、タブレットコンピュータを含み得る。デバイス100は、プロセッサ102、メモリ104、記憶装置106、1つ以上の入力デバイス108、及び、1つ以上の出力デバイス110を含む。また、デバイス100は、オプションで、入力ドライバ112及び出力ドライバ114を含み得る。デバイス100は、図1に示されていない追加の構成要素を含むことができることを理解されたい。
【0007】
様々な代替例では、プロセッサ102は、中央処理ユニット(central processing unit、CPU)、グラフィックス処理ユニット(graphics processing unit、GPU)、同じダイ上に位置するCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアは、CPU又はGPUとすることができる。様々な代替例では、メモリ104は、プロセッサ102と同じダイ上に位置するか、又は、プロセッサ102とは別に位置する。メモリ104は、揮発性又は不揮発性メモリ(例えば、ランダムアクセスメモリ(random access memory、RAM)、ダイナミックRAM、キャッシュ)を含む。
【0008】
記憶装置106は、固定又はリムーバブル記憶装置(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク、フラッシュドライブ)を含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、生体認証スキャナ、又は、ネットワーク接続(例えば、無線IEEE802シグナルの送信及び/又は受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上の光、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802シグナルの送信及び/又は受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。
【0009】
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信できるようにする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信できるようにする。入力ドライバ112及び出力ドライバ114は、オプションの構成要素であること、並びに、デバイス100は、入力ドライバ112及び出力ドライバ114が存在しない場合に、同じ方式で動作することに留意されたい。出力ドライバ114は、ディスプレイデバイス118に連結された加速処理デバイス(accelerated processing device、APD)116を含む。APDは、プロセッサ102から計算コマンド、及び、いくつかの実施形態ではグラフィックスレンダリングコマンドを受け入れて、それらのコマンドを処理し、表示のためにピクセル出力をディスプレイデバイス118に提供する。以下で更に詳細に説明するように、APD116は、単一命令複数データ(single-instruction-multiple-data、SIMD)パラダイムに従って計算を行う1つ以上の並列処理ユニットを含む。こうして、様々な機能は、本明細書では、APD116によって又はAPD116と併せて行われるものとして説明されているが、様々な代替例では、APD116によって行われるものとして説明される機能は、追加的又は代替的に、ホストプロセッサ(例えば、プロセッサ102)によってドライブされない同様の能力を有する他のコンピューティングデバイスによって行われ、ディスプレイデバイス118にグラフィック出力を提供する。例えば、SIMDパラダイムに従って処理タスクを行う任意の処理システムが、本明細書に説明される機能を行い得ることが企図される。代替的に、SIMDパラダイムに従って処理タスクを行わないコンピューティングシステムが、本明細書に説明される機能を行うことが企図される。
【0010】
図2は、APD116上の処理タスクの実行に関する追加の詳細を示すデバイス100のブロック図である。プロセッサ102は、システムメモリ104内で、プロセッサ102による実行のための1つ以上の制御論理モジュールを維持する。制御論理モジュールは、オペレーティングシステム120、ドライバ122及びアプリケーション126を含む。これらの制御論理モジュールは、プロセッサ102及びAPD116の動作の様々な特徴を制御する。例えば、オペレーティングシステム120は、ハードウェアと直接通信し、プロセッサ102上で実行される他のソフトウェアのためのハードウェアへのインターフェースを提供する。ドライバ122は、例えば、プロセッサ102上で実行されるソフトウェア(例えば、アプリケーション126)にアプリケーションプログラミングインターフェース(application programming interface、API)を提供して、APD116の様々な機能にアクセスすることによって、APD116の操作を制御する。また、ドライバ122は、APD116の処理構成要素(以下で更に詳細に説明されるSIMDユニット138等)によって実行するためのプログラムをコンパイルするジャストインタイムコンパイラを含む。
【0011】
APD116は、並列処理に適し得るグラフィック動作及び非グラフィック動作等の選択された機能のためのコマンド及びプログラムを実行する。APD116は、プロセッサ102から受信したコマンドに基づいて、ピクセル動作、幾何学計算及びディスプレイデバイス118への画像のレンダリング等のグラフィックスパイプライン動作を実行するために使用することができる。また、APD116は、プロセッサ102から受信したコマンドに基づいて、ビデオ、物理シミュレーション、計算流体力学又は他のタスクに関連する動作等のように、グラフィックス動作に直接関連しない計算処理動作を実行する。
【0012】
APD116は、複数のチップレット201を含む。各チップレット201は、図示されるような処理ハードウェアのインスタンスである。いくつかの実施形態では、APD116は、複数のチップレット201が存在する処理デバイスである。
【0013】
各チップレット201は、プロセッサ102の要求で、SIMDパラダイムに従って並列の方式で動作を行う1つ以上のSIMDユニット138を含む1つ以上の計算ユニット132を含む。SIMDパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有し、したがって同じプログラムを実行するが、そのプログラムを異なるデータで実行することができるものである。一例では、各SIMDユニット138は、16個のレーンを含み、各レーンは、SIMDユニット138内の他のレーンと同時に同じ命令を実行するが、その命令を異なるデータで実行することができる。レーンは、全てのレーンが所定の命令を実行する必要がない場合、予測でオフに切り替えることができる。また、予測は、分岐制御フローを有するプログラムを実行するために使用することができる。より具体的には、制御フローが個々のレーンによって行われる計算に基づいている条件付き分岐又は他の命令を有するプログラムについては、現在実行されていない制御フローパスに対応するレーンの予測及び異なる制御フローパスのシリアル実行が、任意の制御フローを可能にする。
【0014】
計算ユニット132内の実行の基本的単位は、ワークアイテムである。各ワークアイテムは、特定のレーンにおいて並列で実行されるプログラムの単一のインスタンス化を表す。ワークアイテムは、単一のSIMDユニット138上の「ウェーブフロント(wavefront)」として同時に実行することができる。1つ以上のウェーブフロントが「ワークグループ」に含まれ、これは、同じプログラムを実行するように指定されたワークアイテムの集合体を含む。ワークグループは、ワークグループを構成するウェーブフロントの各々を実行することによって実行することができる。代替例では、ウェーブフロントは、単一のSIMDユニット138上で連続して、又は、異なるSIMDユニット138上で部分的に若しくは完全に並列で実行される。ウェーブフロントは、単一のSIMDユニット138上で同時に実行することができるワークアイテムの最大集合体と考えることができる。したがって、プロセッサ102から受信されたコマンドが、特定のプログラムを単一のSIMDユニット138上で同時に実行させることができない程度にプログラムが並列化されることを示す場合、そのプログラムは、2つ以上のSIMDユニット138上に並列化されるか、又は、同じSIMDユニット138上で直列化される(又は必要に応じて並列化及び直列化の両方が行われる)ウェーブフロントに分けられる。コマンドプロセッサ136は、異なる計算ユニット132及びSIMDユニット138上の様々なワークグループのスケジューリングに関連する動作を行う。概して、コマンドプロセッサ136は、プロセッサ102等のエンティティからコマンドを受信し、コマンドは、グラフィックスレンダリング、汎用シェーダの実行等のタスクを実行するようにチップレット201に命令する。
【0015】
計算ユニット132によって与えられる並列処理は、ピクセル値計算、頂点変換及び他のグラフィック動作等のグラフィック関連動作に好適である。したがって、場合によっては、プロセッサ102からのグラフィックス処理コマンドを受け入れるグラフィックス処理パイプライン134は、並列で実行するために計算タスクを計算ユニット132に提供する。
【0016】
また、計算ユニット132は、グラフィックに関連しないか又はグラフィックス処理パイプライン134の「通常の」動作の一部(例えば、グラフィックス処理パイプライン134の動作に対して行われる処理を補足するために行われるカスタム動作)として行われない計算タスクを行うために使用される。プロセッサ102上で実行されるアプリケーション126又は他のソフトウェアは、そのような計算タスクを定義するプログラムを、実行のためにAPD116に送信する。
【0017】
APD116は、グラフィックス動作を実行することができるグラフィックス処理パイプライン134を含むものとして説明されてきたが、本開示は、APD116がグラフィックス処理パイプライン134を含まない実施形態を企図する。そのような実施形態では、APD116は、少なくとも計算ユニット132及びコマンドプロセッサ136を含む。コマンドプロセッサ136は、汎用コンピューティングシェーダプログラムを実行するように計算ユニット132に命令するが、グラフィックス処理パイプラインを通して処理を制御しない。
【0018】
各チップレット201は、プロセッサ102等のホストからのコマンド(「パケット」と呼ばれることもある)を記憶する1つ以上のハードウェアコマンドキュー137を含む。一例において、プロセッサ102は、ソフトウェアコマンドキュー(図示せず)にコマンドを書き込み、これらのコマンドが書き込まれたことをAPD116に示す。この指標に応じて、APD116は、コマンドを1つ以上のハードウェアコマンドキュー137にロードし、それらのコマンドを実行する。
【0019】
いくつかのコマンドは、計算シェーダを実行するための命令を含む。計算シェーダは、1つ以上の計算ユニット132上で実行する汎用シェーダプログラムである。計算シェーダは、本明細書では「カーネル(kernel)」、「計算カーネル(compute kernel)」、又は、「計算シェーダカーネル(compute shader kernel)」と呼ばれることがある。計算シェーダカーネルを実行するためのコマンドは、本明細書では「カーネルパケット(kernel packet)」又は「計算シェーダパケット(compute shader packet)」と呼ばれることがある。カーネルパケットに応じた計算シェーダプログラムの実行は、本明細書では「計算シェーダディスパッチ(compute shader dispatch)」又は「カーネルディスパッチ(kernel dispatch)」と呼ばれることがある。
【0020】
計算シェーダパケットは、カーネルディスパッチの「サイズ」を指定する。サイズは、カーネルディスパッチのワークアイテムの番号を指す。いくつかの例では、計算シェーダパケットは、カーネルディスパッチに対するワークグループの番号を示すが、他の例では、計算シェーダパケット以外の情報は、カーネルディスパッチに対するワークグループの番号を示す。カーネルディスパッチの実行は、カーネルディスパッチに対するワークアイテム(したがってワークグループ)の全てを実行することを含む。
【0021】
APD116は、ハードウェアコマンドキュー137のコマンドを順番に実行する。したがって、APD116は、第1のコマンドを実行し、次いで第2のコマンドを実行し、以下同様である。チップレット201の各々は、特定のソフトウェアコマンドキューの同じコマンドの少なくともいくつかをトラバースする。より具体的には、任意の特定のソフトウェアコマンドキューについて、そのソフトウェアコマンドキューのコマンドを実行するように共に協働するチップレット201の各々は、チップレット201の異なるハードウェアコマンドキュー137にコマンドを配置する。チップレット201は、ハードウェアコマンドキュー137のコマンドを実行するように協働する。より具体的には、チップレット201は、実行のためにカーネルパケットのワークグループを分割する。各チップレット201は、そのチップレット201に割り当てられたワークグループを実行するが、他のチップレット201に割り当てられたワークグループは実行しない。チップレット201は、そのチップレット201に割り当てられたそのパケットに対する全てのワークグループを完了すると、特定のカーネルパケットで「完了」したと見なされる。
【0022】
図3は、一例による、複数のチップレット201によるコマンドキューのコマンドの実行を示すAPD116の態様のブロック図である。ハードウェアコマンドキュー137が示されている。ハードウェアコマンドキュー137は、実行のためにカーネルディスパッチパケット302を記憶する。本明細書の他の箇所で説明されるように、複数のチップレット201は、単一のソフトウェアキューをそれらのそれぞれのハードウェアコマンドキュー137に「ミラーリング」する(同じコンテンツを記憶する)。したがって、これらの異なるチップレット201は、同じカーネルディスパッチパケット302をそれぞれのハードウェアコマンドキュー137に記憶する。
【0023】
チップレット201は、チップレット201間でワークグループを分割することによって、カーネルディスパッチパケット302を実行するように協働する。より具体的には、特定のカーネルディスパッチパケット302が実行されるべきであると判定すると、複数のチップレット201内のコマンドプロセッサ136は、何れのワークグループ306が実行のために異なるチップレット201に割り当てられるべきかを判定する。次いで、異なるチップレット201は、それらのチップレットに割り当てられたワークグループ306を実行する。任意の特定のチップレット201について、カーネルディスパッチは、そのカーネルディスパッチからそのチップレット201に割り当てられた全てのワークグループ306がそのチップレット201によって完了された場合に完了する。APD116の場合、カーネルディスパッチは、そのカーネルディスパッチに対する全てのワークグループ306が完了した場合に完了し、これは、ワークグループ306が割り当てられた全てのチップレット201が、それらの割り当てられたワークグループの実行を完了した場合でもある。
【0024】
このようにして、カーネルディスパッチのワークを異なるチップレット201に分割することにより、プログラマ(プロセッサ102上で実行するためのソフトウェアを書き込むプログラマ等)がこのスケーリングについて知ること、又は、このスケーリングに対処することを必要とせずに、ワークグループの実行に充てられる処理リソースを容易にスケーリングすることが可能になる。より具体的には、本明細書の他の場所で説明されるように、プロセッサ102(又は別のプロセッサ)上で実行するソフトウェアは、カーネルディスパッチパケット302をソフトウェアキューに入れ、そのようなカーネルディスパッチパケット302が実行の準備ができていることをAPD116に(例えば、ドライバ122を通して)通知する。チップレット201自体が各カーネルディスパッチパケット302のワークグループを分割するので、ソフトウェアは、単一のアクタのみ、すなわち、APD116がソフトウェアコマンドキューのカーネルディスパッチパケット302を処理しているかのように書き込むことができる。
【0025】
チップレット201は、任意の技術的に妥当な様式でワークグループ306を分割することができる。一例では、チップレット201の各々は、特定のワークグループ番号を実行するように事前に構成されている。別の例では、チップレット201は、ラウンドロビン様式でワークグループを割り当てるように構成されている。別の例では、チップレット201は、ワークグループ番号によって隣接する複数のワークグループのセット内のワークグループを割り当てるように構成されている。カーネルディスパッチのワークグループ306は、本明細書でワークグループ番号とも呼ばれるワークグループ識別子を有することを理解されたい。他の例では、ワークグループ306をチップレット201間で分割するための任意の他の技術的に実現可能な様式が可能である。
【0026】
図3に示す例では、カーネルディスパッチ303(カーネルディスパッチパケット302の実行を表す)は、いくつかのワークグループ306を含む。ワークグループ306がチップレット201間で分割されるこれらの様式は、ワークグループセット304と共に示される。3つのそのようなワークグループセット304がある。ワークグループセット1 304(1)は、ワークグループ306(1)~306(N)を含む。ワークグループセット2 304(2)は、ワークグループ306(N+1)~306(2N)を含む。ワークグループセット3 304(3)は、ワークグループ306(2N+1)~306(3N)を含む。ワークグループセット1 304(1)は、チップレット1 201(1)に割り当てられる。ワークグループセット2 304(2)は、チップレット2 201(2)に割り当てられる。ワークグループセット3 304(3)は、チップレット3 201(3)に割り当てられる。特定の方法で(例えば、チップレット201間で等しく)分割されて示されているが、カーネルディスパッチ302のワークグループ306を分割する任意の様式が本開示の範囲内にあることを理解されたい。
【0027】
説明したように、APD116のチップレット201は、カーネルディスパッチパケット302の複数のワークグループ306を実行するように協働する。カーネルディスパッチパケット302が完了すると、APD116は、カーネルディスパッチパケット302の実行を要求したエンティティ(「クライアント」、例えば、プロセッサ102)に対して、カーネルディスパッチパケット302が実行を完了したことを通知する。いくつかの例では、この通知を実行するために、単一のチップレット201がクライアント通知機能201として指定される。各チップレット201は、そのチップレットに割り当てられたワークグループ306がいつ完了したかをクライアント通知機能チップレットに通知する。クライアント通知機能チップレット201が、全てのワークグループ306が実行を完了したと判定した場合、クライアント通知機能チップレット201は、カーネルディスパッチパケット302が完了したことをクライアントに通知する。
【0028】
いくつかの例では、チップレット201は、ハードウェアコマンドキュー137内のカーネルディスパッチパケット302の実行を同期させる。一例では、この同期は以下のように行われる。チップレット201がカーネルディスパッチパケット302に対する全てのワークグループ306の実行を完了すると、チップレット201は、同期に参加している他の全てのチップレット201にこの完了を通知する。いくつかの例では、同期に参加している全てのチップレットが、同期に参加している他の全てのチップレットから、そのような全てのチップレット201が現在のカーネルディスパッチパケット302に対するワークグループ306の実行を完了したという指標を受信するまで、後続のカーネルディスパッチパケット302に進むチップレット201が存在しない。いくつかの実施形態において、いくつかのチップレット201は、他のチップレット201のワークグループ306が完了したという通知を他のチップレット201から受信することなく、「現在の」カーネルディスパッチパケット302を過ぎて進むことが許可される。いくつかのそのような実施形態では、少なくともいくつかのチップレット201は、後続のカーネルディスパッチパケット302に進む前に、他の全てのチップレット201が特定のカーネルディスパッチパケット302の全てのワークグループ306を完了するのを待機する。
【0029】
いくつかの例では、上述した同期は、カウンタ機構を用いて行われる。カウンタ機構によれば、各チップレット201はカウンタを維持する。チップレット201のグループが新しいソフトウェアコマンドキューの処理を開始すると、チップレット201のグループはこのカウンタをリセットする。チップレット201がカーネルディスパッチパケット302の処理を完了する毎に、チップレット201は、それ自体のカウンタをインクリメントし、新しい値を他の各チップレット201にブロードキャストする。動作を同期させるために、チップレットがカーネルディスパッチパケット302の処理を完了すると、チップレット201は、他の全てのチップレット201から受信したカウンタ値がそのチップレット201のカウンタ値に少なくとも等しくなるまで待機する。これが行われると、チップレット201は、後続のカーネルディスパッチパケット302に進む。
【0030】
カウンタが使用される実施形態では、通知機能チップレット201は、カーネルディスパッチパケット302の処理に参加している他の全てのチップレット201からカーネルディスパッチパケット302に対応するカウンタ値を受信すると、カーネルディスパッチパケット302の完了をクライアントに通知する。
【0031】
単一のAPD116が、異なるクライアント又は異なるソフトウェアコマンドキューにサービスを提供するために複数のグループにグループ化されるいくつかのチップレット201を含むことが可能である。そのようなチップレット201の各グループは、クライアントには単一のAPD116として「見える」。言い換えれば、チップレット201のそのような各グループは、本明細書の他の箇所で説明される、ワークグループを異なるチップレット201間で分配する技術を使用して、ソフトウェアコマンドキューのコンテンツを実行するように共に調整する。したがって、複数のチップレット201を含む単一のデバイスは、多くの異なるクライアントにサービスを提供することができる。加えて、各々が1つ以上のチップレット201を含む複数のデバイスを組み合わせて、本明細書で説明される技術を利用して1つ以上のソフトウェアコマンドキューのコンテンツを実行することが可能である。したがって、そのようなダイの組み合わせは、それらのダイのチップレット201を任意の組み合わせでグループ化することによって、1つ以上の異なるクライアントにサービスを提供することができる。様々な例において、オペレーティングシステム又はハイパーバイザ等の任意の技術的に実現可能なエンティティは、チップレット201をグループに割り当て、グループをクライアントに割り当てるエンティティである。
【0032】
いくつかの例では、各チップレット201は、複数のハードウェアコマンドキュー137を有する。各ハードウェアコマンドキュー137は、識別番号によって識別される。いくつかのそのような例では、グループの一部である各チップレット201は、所定のソフトウェアコマンドキューを、同じ識別番号を有するハードウェアコマンドキュー137に割り当てる。これにより、同期に関する通信に必要なデータが簡略化される。より具体的には、本明細書の他の場所で説明されるように、同期は、特定のカーネルディスパッチパケット302の実行を完了すると通信するグループの一部であるチップレット201を伴う。ソフトウェアコマンドキューを同じハードウェアコマンドキュー番号に割り当てることによって、通信は、かかる完了に関して通信する場合にソフトウェアコマンドキュー識別子を明示的に示す必要がない。ハードウェアコマンドキューの指標は、同期通信が何れのソフトウェアコマンドキューに対するものであるかを暗示的に示す。したがって、いくつかの実施形態では、チップレット201は、カーネルディスパッチパケット302の完了の指標と共にハードウェアコマンドキュー137の番号を通信する。
【0033】
図4は、チップレット201にわたってカーネルを協調的に実行するための動作の例示的なセットを示すブロック図である。動作は、カーネルディスパッチパケット302(1)~302(N)を有するハードウェアコマンドキュー137から始まる。このハードウェアコマンドキュー137は、異なるチップレット201(すなわち、チップレット201(1)、201(2)、201(3))のハードウェアコマンドキューのコンテンツを表すことを理解されたい。しかしながら、異なるチップレット201が、任意の所定の時点において必ずしも同一のコンテンツを記憶していない可能性があることも理解されたい。例えば、異なるチップレット201が異なるサイズのハードウェアコマンドキュー137を有すること、又は、任意の所定の時点でハードウェアコマンドキュー137を「バック」するソフトウェアコマンドキューの異なる部分を記憶することが可能である。しかしながら、図4は、同じソフトウェアコマンドキューのコンテンツを実行するための協働を示すことを理解されたい。
【0034】
図4に示された動作は、ハードウェアコマンドキュー137が図示したようにカーネルディスパッチパケット302を記憶することから始まる。プロセッサ102は、これらのカーネルディスパッチパケット302を対応するソフトウェアコマンドキューに既に書き込んでおり、これにより、チップレット201は、図示されたカーネルディスパッチパケット302をそれらのそれぞれのハードウェアコマンドキュー137にロードしていることを理解されたい。図示されたハードウェアコマンドキュー137は、チップレット201の各々のハードウェアコマンドキュー137のコンテンツを表すことも理解されたいが、動作中、異なるそのようなハードウェアコマンドキュー137のコンテンツは異なってもよいことを理解されたい。加えて、図4は、一連の時点を示す。これらの時点は、ワークの漸進的な処理を示す。
【0035】
カーネルディスパッチパケット302(1)は、ワークグループ1~9を含む。これらのワークグループ306は、以下のようにチップレット201に割り当てられる。チップレット201(1)にワークグループ1~3が割り当てられ、チップレット201(2)にワークグループ4~6が割り当てられ、チップレット201(3)にワークグループ7~9が割り当てられる。時間1の前に、チップレット201は、カーネルディスパッチパケット302(1)のワークグループを処理する。時間1において、チップレット1 201(1)は、ワークグループ306(1)及び306(2)を処理しており、チップレット201(2)は、何れのワークグループも処理しておらず、チップレット201(3)は、ワークグループ7 306(7)を処理している。この時点で、カーネルディスパッチパケット302(1)からのワークグループ306の割り当て全体を完了したチップレット201は存在しない。
【0036】
時間2において、チップレット201(2)は、ワークグループ4 306(4)、ワークグループ5 306(5)及びワークグループ6 306(6)の処理を完了する。この時点で、チップレット201(2)は、カーネルディスパッチパケット302(1)に対する全ての割り当てられたワークグループ306の処理を完了している。したがって、チップレット201(2)は、カーネルディスパッチパケット302(1)のチップレット201(2)による完了をチップレット201(1)に通知し、いくつかの実施形態では、チップレット201(3)に通知する。図4の例では、チップレット201(1)は、カーネルディスパッチパケット302の完了をプロセッサ102に通知するチップレット201である。
【0037】
時間3において、チップレット201(3)は、カーネルディスパッチパケット302(1)の全てのワークグループ306を完了し、かかる完了をチップレット201(1)に通知し、いくつかの実施形態では、チップレット201(2)に通知する。時間4において、チップレット201(1)は、カーネルディスパッチパケット302(1)の全てのワークグループ306を完了する。チップレット201(1)は、全てのチップレット201がカーネルディスパッチパケット302(1)に対する全てのワークグループ306を完了したという指標を、全ての他のチップレット201に送信する。加えて、全てのチップレット201に対する全てのワークグループ306がカーネルディスパッチパケット302(1)に対して完了するので、通知機能チップレットであるチップレット201(1)は、カーネルディスパッチパケット302(1)が完了したことをクライアント(プロセッサ102)に通知する。時間5において、カーネルディスパッチパケット302(1)が完了しているので、チップレット201は、カーネルディスパッチパケット302(2)の処理を開始する。時間5において、各チップレット201は、カーネルディスパッチパケット302(1)が完了したという知識を有することに留意されたい。いくつかの実施形態では、チップレット201がカーネルディスパッチパケット302で完了した場合に、各チップレット201が他の各チップレット201にブロードキャストするので、チップレット201は、この知識を得る。したがって、第1のチップレット201が、チップレット201がカーネルディスパッチパケット302の処理を完了したという指標を他の各チップレット201から受信した場合に、第1のチップレット201は、後続のカーネルディスパッチパケット302に進むことを知っている。
【0038】
図5は、複数のチップレットにわたってカーネルを実行する方法500のフロー図である。図1図4のシステムに関して説明したが、当業者であれば、任意のシステムが、任意の技術的に実現可能な順序で図5のステップを実行するように構成されていることを理解するであろう。
【0039】
ステップ502において、チップレット201のグループは、カーネルディスパッチパケットのワークグループをチップレット201の間で分配する。様々な例では、各チップレット201は、チップレット201がカーネルディスパッチパケット302を実行しているソフトウェアコマンドキューにカーネルディスパッチパケット302が追加されたという指標をプロセッサ102等のクライアントから受信するコマンドプロセッサ136を有する。これに続いて、チップレット201は、追加されたカーネルディスパッチパケット302を、ソフトウェアコマンドキューに関連付けられているチップレット201のハードウェアコマンドキュー137にロードする。チップレット201は、それぞれのハードウェアコマンドキュー137から実行のためのカーネルディスパッチパケット302を選択する。チップレット201は、これらのカーネルディスパッチパケット302のワークグループを技術的に実現可能な様式で分配する。一例では、各チップレット201のコマンドプロセッサ136は、カーネルディスパッチパケット302に対する全てのワークグループのリストを繰り返し、そのチップレット201に割り当てられていないワークグループ番号を無視する。様々な例では、ワークグループのチップレット201への分配は、「ワークグループチャンクサイズ」と呼ばれる番号に基づいており、この番号は、特定のチップレット201に割り当てるために連続して番号付けされたワークグループの番号、及び、特定のチップレット201のチップレットID201を示す。一例では、チップレット201の各々は、これらのワークグループの予め指定された異なる番号のセットである。一例では、ワークグループは、ワークグループ識別子によってラウンドロビン様式で異なるチップレット201に割り当てられる。例えば、3つのチップレット201が存在する場合、次いで、第1のチップレット201は、ワークグループ番号1、4、7等を取得し、第2のチップレット201は、ワークグループ番号2、5、8等を取得し、第3のチップレット201は、ワークグループ番号3、6、9等を取得する。他の例では、チップレット201は、ランタイム中に通信して、何れのワークグループ306が何れのチップレット201に割り当てられるかを判定する。ここでも、ワークグループ306を細分するための任意の技術的に実行可能な方法が可能である。ステップ502の「分配」は、任意の所定のチップレット201に対して、何れのワークグループを実行すべきかを識別する動作を指す。
【0040】
ステップ504において、チップレット201は、所定のカーネルディスパッチパケット302に対してそのチップレット201に割り当てられたワークグループの実行を完了し、かかる完了を1つ以上の他のチップレットに通知する。一例では、そのような通知は、完了したカーネルディスパッチパケット302の番号をカウントするカウンタのブロードキャストを含む。言い換えれば、チップレット201が、所定のカーネルディスパッチパケット302に対してそのチップレット201に割り当てられた全てのワークグループを完了する毎に、チップレット201はカウンタをインクリメントし、そのカウンタを他のチップレット201にブロードキャストする。このカウンタは、チップレット201があるハードウェアコマンドキュー137内の場所を識別する。このカウンタ値のブロードキャストは、ブロードキャストするチップレット201がカーネルディスパッチパケット302を完了したことの他のチップレット201への通知として機能する。
【0041】
ステップ506において、カーネルディスパッチパケット201の全てのチップレット201による全てのワークグループが完了すると、通知機能チップレット201は、かかる完了をクライアント(例えば、プロセッサ102)に通知する。いくつかの例では、ソフトウェアコマンドキューのコンテンツを実行するように協働するチップレット201のグループのうち単一のチップレット201が、通知機能チップレット201として指定される。通知機能チップレット201が、全てのチップレット201が所定のカーネルディスパッチパケット302のワークグループを完了したと判定すると、通知機能チップレット201は、かかる完了をクライアントに通知する。いくつかの例では、この判定は、通知機能チップレット201が、所定のカーネルディスパッチパケット302に対応するカウンタ値を、そのカーネルディスパッチパケット302の実行に参加している他の各チップレット201から受信したと判定する通知機能チップレットによって行われる。加えて、各チップレット201は、他の各参加チップレット201がカーネルディスパッチパケット302を完了したと判定すると、次のカーネルディスパッチパケット201に進む。この場合も、この判定は、いくつかの例では、チップレット201が、発行中のカーネルディスパッチパケット302に対応するカウンタ値を受信したと判定することによって行われる。
【0042】
様々な例では、カーネルディスパッチパケット302の実行に参加している各チップレット201は、コマンドプロセッサ136を有し、このコマンドプロセッサは、各チップレット201について方法500のステップを実行する。
【0043】
本明細書の開示に基づいて、多くの変形が可能であることを理解されたい。特徴及び要素が特定の組み合わせで上述されているが、各特徴又は要素は、他の特徴及び要素を用いずに単独で、又は、他の特徴及び要素を用いて若しくは用いずに様々な組み合わせで使用することができる。
【0044】
各図に示され及び/又は本明細書に記載された様々な機能ユニット(プロセッサ102、入力ドライバ112、入力デバイス108、出力ドライバ114、出力デバイス110、加速処理デバイス116、コマンドプロセッサ136、グラフィックス処理パイプライン134、計算ユニット132、SIMDユニット138、ハードウェアコマンドキュー137を含むが、これらに限定されない)は、汎用コンピュータ、プロセッサ若しくはプロセッサコアとして、又は、汎用コンピュータ、プロセッサ若しくはプロセッサコアによって実行可能な非一時的なコンピュータ可読記憶媒体若しくは別の記憶媒体に記憶されているプログラム、ソフトウェア若しくはファームウェアとして実装することができる。提供される方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実装することができる。好適なプロセッサとしては、例として、汎用プロセッサ、専用プロセッサ、従来型プロセッサ、デジタルシグナルプロセッサ(digital signal processor、DSP)、複数のマイクロプロセッサ、DSPコアと関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)、フィールドプログラマブルゲートアレイ(Field Programmable Gate Array、FPGA)回路、任意の他のタイプの集積回路(integrated circuit、IC)、及び/又は、状態マシンが挙げられる。そのようなプロセッサは、処理されたハードウェア記述言語(hardware description language、HDL)命令及びネットリストを含む他の中間データ(コンピュータ可読媒体に記憶させることが可能な命令)の結果を使用して製造プロセスを構成することによって製造することができる。そのような処理の結果はマスクワークとすることができ、このマスクワークをその後の半導体製造プロセスにおいて使用して、本開示の特徴を実装するプロセッサを製造する。
【0045】
本明細書に提供される方法又はフロー図は、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれるコンピュータプログラム、ソフトウェア又はファームウェアにおいて実装することができる。非一時的なコンピュータ可読記憶媒体の例としては、読み取り専用メモリ(read only memory、ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、磁気光学媒体、並びに、CD-ROMディスク及びデジタル多用途ディスク(digital versatile disk、DVD)等の光学媒体が挙げられる。
図1
図2
図3
図4
図5
【国際調査報告】