JP2024501454A - 高スループット及び低オーバーヘッドカーネルローンチのための圧縮されたコマンドパケット - Google Patents

高スループット及び低オーバーヘッドカーネルローンチのための圧縮されたコマンドパケット Download PDF

Info

Publication number
JP2024501454A
JP2024501454A JP2023535344A JP2023535344A JP2024501454A JP 2024501454 A JP2024501454 A JP 2024501454A JP 2023535344 A JP2023535344 A JP 2023535344A JP 2023535344 A JP2023535344 A JP 2023535344A JP 2024501454 A JP2024501454 A JP 2024501454A
Authority
JP
Japan
Prior art keywords
kernel
dispatch
information
packet
agent
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2023535344A
Other languages
English (en)
Inventor
プソール スラージ
エム. ベックマン ブラッドフォード
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2024501454A publication Critical patent/JP2024501454A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/545Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space

Abstract

計算カーネルをローンチするための方法、デバイス及びシステムが開示される。参照カーネルディスパッチパケットは、カーネルエージェントによって受信される。参照カーネルディスパッチパケットは、カーネルエージェントによって処理され、カーネルディスパッチ情報を決定する。カーネルディスパッチ情報は、カーネルエージェントによって記憶される。カーネルは、カーネルディスパッチ情報に基づいて、カーネルエージェントによってディスパッチされる。いくつかの実施形態では、圧縮されたカーネルディスパッチパケットは、カーネルエージェントによって受信され、圧縮されたカーネルディスパッチパケットは、カーネルエージェントによって処理され、記憶されたカーネルディスパッチ情報を取り出し、カーネルは、取り出されたカーネルディスパッチ情報に基づいて、カーネルエージェントによってディスパッチされる。【選択図】図6

Description

(関連出願の相互参照)
本願は、2020年12月23日に出願された「CONDENSED COMMAND PACKET FOR HIGH THROUGHPUT AND LOW OVERHEAD KERNEL LAUNCH」と題する係属中の米国特許出願第17/133,574号の利益を主張し、その全体が参照により本明細書に組み込まれる。
多くの高性能コンピューティング(high-performance computing、HPC)アプリケーション(例えば、クリプキ(Kripke))は、ループ内で複数回ローンチ(launched)されるカーネルのシーケンス(例えば、「タスクグラフ」)を含む。GPU実行時間の改善に伴い、各カーネルをローンチするのに必要な時間は、アプリケーションの全体的な性能における重要な要素になる。別の言い方をすれば、カーネル実行時間に対するカーネルローンチオーバーヘッドの比率が増加するにつれて、ローンチオーバーヘッドは、アプリケーション性能のためのクリティカルパスの増加部分になる。
添付の図面とともに例として与えられる以下の説明から、より詳細な理解を得ることができる。
本開示の1つ以上の特徴を実装することができる例示的なデバイスのブロック図である。 追加の詳細を示す図1のデバイスのブロック図である。 カーネルパケットのローンチ及び実行のための例示的な処理を示すフローチャートである。 例示的アプリケーションにおける実行用の例示的なカーネルを示すタスクグラフである。 図4に関して説明されるカーネルの各々を処理することに関連付けられた例示的な処理時間構成要素及びオーバーヘッド時間構成要素を示すブロック図である。 例示的な圧縮されたカーネルディスパッチパケットを使用するカーネルパケットのローンチ及び実行のための例示的な処理を示すフローチャートである。 図6に関して示され説明される処理に従って、図4に関して説明されるカーネルの各々を処理することに関連付けられた例示的な処理時間構成要素及びオーバーヘッド時間構成要素を示すブロック図である。
いくつかの実施形態は、実行用計算カーネルをディスパッチするように構成されたカーネルエージェントを提供する。カーネルエージェントは、参照カーネルディスパッチパケットを受信するように構成された回路を含む。また、カーネルエージェントは、参照カーネルディスパッチパケットを処理して、カーネルディスパッチ情報を決定するように構成された回路を含む。また、カーネルエージェントは、カーネルディスパッチ情報を記憶するように構成された回路を含む。また、カーネルエージェントは、カーネルディスパッチ情報に基づいてカーネルをディスパッチするように構成された回路を含む。
いくつかの実施形態では、カーネルエージェントは、圧縮されたカーネルディスパッチパケットを受信するように構成された回路と、圧縮されたカーネルディスパッチパケットを処理して、記憶されたカーネルディスパッチ情報を取り出すように構成された回路と、取り出されたカーネルディスパッチ情報に基づいて、カーネルをディスパッチするように構成された回路と、を含む。いくつかの実施形態では、カーネルエージェントは、圧縮されたカーネルディスパッチパケットを受信するように構成された回路と、圧縮されたカーネルディスパッチパケットを処理して、カーネルディスパッチ情報を取り出し、差分情報を決定するように構成された回路と、差分情報に基づいて、取り出されたカーネルディスパッチ情報を変更するように構成された回路と、変更された取り出されたカーネルディスパッチ情報に基づいて、カーネルをディスパッチするように構成された回路と、を含む。
いくつかの実施形態では、カーネルエージェントは、圧縮されたカーネルディスパッチパケットを受信するように構成された回路と、圧縮されたカーネルディスパッチパケットを処理して、記憶されたカーネルディスパッチ情報を取り出し、記憶された第2のカーネルディスパッチ情報を取り出すように構成された回路と、取り出されたカーネルディスパッチ情報に基づいてカーネルをディスパッチし、取り出された第2のカーネル情報に基づいて第2のカーネルをディスパッチするように構成された回路と、を含む。いくつかの実施形態では、カーネルエージェントは、圧縮されたカーネルディスパッチパケットを受信するように構成された回路と、圧縮されたカーネルディスパッチパケットを処理して、記憶されたカーネルディスパッチ情報を取り出し、第1の差分情報を決定し、記憶された第2のカーネルディスパッチ情報を取り出し、第2の差分情報を決定するように構成された回路と、第1の差分情報に基づいて、取り出されたカーネルディスパッチ情報を変更するように構成された回路と、第2の差分情報に基づいて、取り出された第2のカーネルディスパッチ情報を変更するように構成された回路と、変更されたカーネルディスパッチ情報に基づいて第1のカーネルをディスパッチし、変更された第2のカーネルディスパッチ情報に基づいて第2のカーネルをディスパッチするように構成された回路と、を含む。
いくつかの実施形態では、カーネルエージェントは、参照状態バッファを含み、カーネルディスパッチ情報が参照状態バッファに記憶される。いくつかの実施形態では、カーネルエージェントは、スクラッチランダムアクセスメモリ(random access memory、RAM)を含み、カーネルエージェントは、カーネルディスパッチ情報をスクラッチRAMに記憶する。いくつかの実施形態では、カーネルエージェントは、グラフィックス処理ユニット(graphics processing unit、GPU)であるか、又は、それを含む。いくつかの実施形態では、カーネルエージェントは、ホストプロセッサから参照カーネルディスパッチパケットを受信するように構成された回路を含む。いくつかの実施形態では、参照カーネルディスパッチパケットは、アーキテクテッドキューイング言語(architected queuing language、AQL)フィールドを含む。
いくつかの実施形態は、実行用計算カーネルをディスパッチするための方法を提供する。参照カーネルディスパッチパケットがカーネルエージェントによって受信される。参照カーネルディスパッチパケットは、カーネルエージェントによって処理され、カーネルディスパッチ情報を決定する。カーネルディスパッチ情報は、カーネルエージェントによって記憶される。カーネルは、カーネルディスパッチ情報に基づいてカーネルエージェントによってディスパッチされる。
いくつかの実施形態では、圧縮されたカーネルディスパッチパケットは、カーネルエージェントによって受信され、圧縮されたカーネルディスパッチパケットは、カーネルエージェントによって処理され、記憶されたカーネルディスパッチ情報を取り出し、カーネルは、取り出されたカーネルディスパッチ情報に基づいて、カーネルエージェントによってディスパッチされる。いくつかの実施形態では、圧縮されたカーネルディスパッチパケットは、カーネルエージェントによって受信され、圧縮されたカーネルディスパッチパケットは、カーネルエージェントによって処理され、カーネルディスパッチ情報を取り出し、差分情報を決定し、取り出されたカーネルディスパッチ情報は、差分情報に基づいてカーネルエージェントによって変更され、カーネルは、変更された取り出されたカーネルディスパッチ情報に基づいて、カーネルエージェントによってディスパッチされる。
いくつかの実施形態では、圧縮されたカーネルディスパッチパケットは、カーネルエージェントによって受信され、圧縮されたカーネルディスパッチパケットは、カーネルエージェントによって処理され、記憶されたカーネルディスパッチ情報を取り出し、記憶された第2のカーネルディスパッチ情報を取り出し、カーネルは、取り出されたカーネルディスパッチ情報に基づいて、カーネルエージェントによってディスパッチされ、第2のカーネルは、取り出された第2のカーネルディスパッチ情報に基づいて、カーネルエージェントによってディスパッチされる。
いくつかの実施形態では、圧縮されたカーネルディスパッチパケットは、カーネルエージェントによって受信され、圧縮されたカーネルディスパッチパケットは、カーネルエージェントによって処理され、記憶されたカーネルディスパッチ情報を取り出し、第1の差分情報を決定し、記憶された第2のカーネルディスパッチ情報を取り出し、第2の差分情報を決定し、取り出されたカーネルディスパッチ情報は、第1の差分情報に基づいて変更され、取り出された第2のカーネルディスパッチ情報は、第2の差分情報に基づいて変更され、第1のカーネルは、変更されたカーネルディスパッチ情報に基づいてディスパッチされ、第2のカーネルは、変更された第2のカーネルディスパッチ情報に基づいてディスパッチされる。
いくつかの実施形態では、カーネルエージェントは、カーネルディスパッチ情報を参照状態バッファに記憶する。いくつかの実施形態では、カーネルエージェントは、カーネルディスパッチ情報をカーネルエージェント上のスクラッチランダムアクセスメモリ(RAM)に記憶する。いくつかの実施形態では、カーネルエージェントは、グラフィックス処理ユニット(GPU)であるか、又は、それを含む。いくつかの実施形態では、参照カーネルディスパッチパケットは、ホストプロセッサから受信される。いくつかの実施形態では、参照カーネルディスパッチパケットは、アーキテクテッドキューイング言語(AQL)フィールドを含む。
図1は、本開示の1つ以上の特徴を実装することができる例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、又は、タブレットコンピュータを含み得る。デバイス100は、プロセッサ102、メモリ104、記憶装置106、1つ以上の入力デバイス108、及び、1つ以上の出力デバイス110を含む。また、デバイス100は、オプションで、入力ドライバ112及び出力ドライバ114を含み得る。デバイス100は、図1に示されていない追加の構成要素を含むことができることを理解されたい。
様々な代替例では、プロセッサ102は、中央処理ユニット(central processing unit、CPU)、グラフィックス処理ユニット(GPU)、同じダイ上に位置するCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアは、CPU又はGPUであってもよい。様々な代替例では、メモリ104は、プロセッサ102と同じダイ上に位置するか、又は、プロセッサ102とは個別に位置する。メモリ104は、揮発性又は不揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM、キャッシュ)を含む。
記憶装置106は、固定又はリムーバブル記憶装置(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク、フラッシュドライブ)を含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、生体認証スキャナ、又は、ネットワーク接続(例えば、無線IEEE802シグナルの送信及び/又は受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上の光、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802シグナルの送信及び/又は受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。
入力ドライバ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パラダイムに従って処理タスクを行わないコンピューティングシステムが、本明細書に説明される機能を行うことが企図される。
図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等)によって実行するためのプログラムをコンパイルするジャストインタイムコンパイラを含む。
APD116は、並列処理に適し得るグラフィック動作及び非グラフィック動作等の選択された機能のためのコマンド及びプログラムを実行する。APD116は、プロセッサ102から受信したコマンドに基づいて、ピクセル動作、幾何学計算及びディスプレイデバイス118への画像のレンダリング等のグラフィックスパイプライン動作を実行するために使用することができる。また、APD116は、プロセッサ102から受信したコマンドに基づいて、ビデオ、物理シミュレーション、計算流体力学又は他のタスクに関連する動作等のグラフィック動作に直接関連しない計算処理動作を実行する。
APD116は、プロセッサ102の要求で、SIMDパラダイムに従って並列の方式で動作を行う1つ以上のSIMDユニット138を含む計算ユニット132を含む。SIMDパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有し、したがって同じプログラムを実行するが、そのプログラムを異なるデータで実行することができるものである。一例では、各SIMDユニット138は、16個のレーンを含み、各レーンは、SIMDユニット138内の他のレーンと同時に同じ命令を実行するが、その命令を異なるデータで実行することができる。レーンは、全てのレーンが所定の命令を実行する必要がない場合、予測でオフに切り替えることができる。また、予測は、発散制御フローを有するプログラムを実行するために使用することができる。より具体的には、制御フローが個々のレーンによって行われる計算に基づいている条件付き枝又は他の命令を有するプログラムについては、現在実行されていない制御フローパスに対応するレーンの予測及び異なる制御フローパスのシリアル実行が、任意の制御フローを可能にする。
計算ユニット132内の実行の基本的単位は、ワークアイテムである。各ワークアイテムは、特定のレーンにおいて並列で実行されるプログラムの単一のインスタンス化を表す。ワークアイテムは、単一のSIMDユニット138上の「ウェーブフロント(wavefront)」として同時に実行することができる。1つ以上のウェーブフロントが「ワークグループ」に含まれ、これは、同じプログラムを実行するように指定されたワークアイテムの集合体を含む。ワークグループは、ワークグループを構成するウェーブフロントの各々を実行することによって実行することができる。代替例では、ウェーブフロントは、単一のSIMDユニット138上で連続して、又は、異なるSIMDユニット138上で部分的に若しくは完全に並列に実行される。ウェーブフロントは、単一のSIMDユニット138上で同時に実行することができるワークアイテムの最大集合体と考えることができる。したがって、プロセッサ102から受信されたコマンドが、特定のプログラムを単一のSIMDユニット138上で同時に実行させることができない程度にプログラムが並列化されることを示す場合、そのプログラムは、2つ以上のSIMDユニット138上に並列化されるか、又は、同じSIMDユニット138上で直列化される(又は必要に応じて並列化及び直列化の両方が行われる)ウェーブフロントに分けられる。スケジューラ136は、異なる計算ユニット132及びSIMDユニット138上の様々なウェーブフロントのスケジューリングに関連する動作を行う。
計算ユニット132によって与えられる並列処理は、ピクセル値計算、頂点変換及び他のグラフィック動作等のグラフィック関連動作に好適である。したがって、場合によっては、プロセッサ102からのグラフィックス処理コマンドを受け入れるグラフィックス処理パイプライン134は、並列で実行するために計算タスクを計算ユニット132に提供する。
また、計算ユニット132は、グラフィックに関連しないか又はグラフィックス処理パイプライン134の「通常の」動作の一部(例えば、グラフィックス処理パイプライン134の動作に対して行われる処理を補足するために行われるカスタム動作)として行われない計算タスクを行うために使用される。プロセッサ102上で実行されるアプリケーション126又は他のソフトウェアは、そのような計算タスクを定義するプログラムを、実行のためにAPD116に送信する。
いくつかのHPC及び他のアプリケーションでは、ホストプロセッサ(例えば、CPU)は、GPU又は他のプロセッサ上での実行用の1つ以上のプロセッサカーネルをローンチする。カーネル(例えば、GPUの場合、GPUカーネル)を実行するGPU又は他のプロセッサは、いくつかのコンテキストにおいてカーネルエージェントと称される。
典型的には、ホストプロセッサは、カーネルエージェントによる処理のために特定のタイプのコマンドパケットをエンキューすることによって、カーネルエージェント上での実行用カーネルをローンチする。このタイプのコマンドパケットは、カーネルディスパッチパケットと称され得る。例えば、ヘテロジニアスシステムアーキテクチャ(heterogeneous system architecture、HSA)規格は、この目的のために、アーキテクテッドキューイング言語(AQL)カーネルディスパッチパケット(hsa_kernel_dispatch_packetと称される)を指定する。表1は、hsa_kernel_dispatch_packetの例を示す。
Figure 2024501454000002
この例示的なカーネルディスパッチパケットのフォーマット及びフィールドは例示的なものである。他の実施形態は、他のフォーマット及び/若しくはフィールドを使用し、並びに/又は、AQLに固有ではないことに留意されたい。場合によっては、ホストは、カーネルエージェントに対して指定された特定のキューにカーネルディスパッチパケットをエンキューする。カーネルエージェントのパケットプロセッサは、カーネルディスパッチパケットを処理して、カーネル実行情報(例えば、ディスパッチ及び「クリーンアップ」情報)を決定する。
いくつかの実施形態では、ディスパッチ情報は、カーネルエージェント(この例ではGPU)上での実行用カーネルをディスパッチするための情報を含む。表1のhsa_kernel_dispatch_packetの例では、同期スコープ(synch_scopes)、セットアップ、ワークグループサイズ、グリッドサイズ、プライベートセグメントサイズ、グループセグメントサイズ、カーネルオブジェクト及びkernargアドレスが、ディスパッチ情報の一部である。これらのフィールドは、GPU上で作業をローンチする前に実行される取得動作の範囲(synch_scopesフィールド)、GPUスレッドがそのカーネル内でどのように編成されるかを示すGPUカーネル寸法(setupフィールド)、GPUカーネル内のスレッドの数(ワークグループサイズ及びグリッドサイズフィールド)、このカーネルのGPUスレッドによって消費されるスクラッチメモリ及びオンチップローカルメモリの量(それぞれ、プライベートセグメントサイズ及びグループセグメントサイズ)、GPUカーネルコード自体(code object)、及び、GPUカーネルへの引数(kernarg_address)に関する情報を提供する。これらのフィールドは例であり、いくつかの実施形態では、カーネルディスパッチパケットは、例えばカーネルエージェント実装に応じて、異なるディスパッチ情報(例えば、異なるフィールド又はより多い若しくはより少ない数のフィールド)を含む。
いくつかの実施形態では、クリーンアップ情報は、カーネルエージェント上でのカーネル実行が完了した後にアクションを実行するための情報を含む。表1のhsa_kernel_dispatch_packetの例では、synch_scopes及び完了信号がクリーンアップ情報の一部である。synch_scopesフィールドは、GPU上で作業が完了した後に実行されるリリース動作の範囲に関する情報を提供する。完了信号は、ホスト(例えば、CPU)及び/又はこの完了信号を待っている他のエージェントに、作業の完了を通知するために使用される。
この例では、synch_scopesフィールドがディスパッチ情報とクリーンアップ情報の両方を提供することに留意されたい。例えば、カーネルの実行前の取得メモリフェンスの範囲はディスパッチ情報であり、カーネルの実行後のリリースメモリフェンスの範囲はクリーンアップ情報である。いくつかの実施形態では、ディスパッチ情報及びクリーンアップ情報は、別々のフィールドで提供される。
いくつかの実施形態では、ディスパッチ情報及びクリーンアップ情報は、カーネルディスパッチパケットのフィールドから導出され、フィールドから導出されるディスパッチ情報及びクリーンアップ情報の構造は、実施形態固有である。
カーネルエージェントは、カーネルディスパッチ情報に基づいて実行用カーネルをディスパッチし、カーネル実行が完了した後にクリーンアップ情報に基づいてクリーンアップを実行する。これらのステップは例示的なものであり、他の実施形態では、サブステップ、異なるステップ、より多くのステップ、又は、より少ないステップを含み得る。
典型的には、カーネルディスパッチパケットはエンキューされ処理され、カーネルは実行用にディスパッチされ、アプリケーション内で実行されるカーネルごとにクリーンアップされる。この例示的なカーネル処理手法では、エンキュー動作、パケット処理動作及びクリーンアップ動作は、通常、カーネルエージェントのコマンドプロセッサ又は他の適切なパケット処理ハードウェアによって実行されるが、カーネル実行は、通常、カーネルエージェントの計算ユニット(例えば、SIMDデバイス)又は他の一次処理ユニットによって実行される。何れのハードウェアが各動作を実行するかにかかわらず、エンキュー動作、パケット処理動作及びクリーンアップ動作を実行するのに費やされる時間は、カーネル実行に対するオーバーヘッドとみなされる。
したがって、いくつかのプロセッサカーネルを実行するアプリケーションの場合、アプリケーション実行時間は、各プロセッサカーネルのカーネル実行時間及びカーネルオーバーヘッド時間を含む。更に、多くのアプリケーションは、ループ内で複数回実行されるカーネル(例えば、短時間実行カーネル)のシーケンスを含む。カーネル実行時間が改善する(すなわち、短くなる)につれて、実行用のカーネルをローンチすることに関連するオーバーヘッドは、全体的なカーネル処理時間のより大きな割合になり、アプリケーションの全体的な性能にとってますます重要になる。
図3は、カーネルパケットのローンチ及び実行のための例示的な処理300を示すフローチャートである。
ステップ302において、カーネルディスパッチパケットがカーネルエージェントによる処理のためにエンキューされる。カーネルディスパッチパケットは、hsa_kernel_dispatch_packet、そのようなパケットの変更バージョン(例えば、本明細書で説明されるような)、又は、カーネルのローンチ及び実行をサポートするための任意の他の適切なパケット若しくは情報である。いくつかの実施形態では、カーネルディスパッチパケットは、カーネルエージェントに対応するキューにエンキューされる。いくつかの実施形態では、カーネルディスパッチパケットは、カーネルエージェントによる処理のために、CPU等のホストプロセッサによってエンキューされる。いくつかの実施形態では、カーネルエージェントは、GPU、DSP、CPU又は任意の他の適切な処理デバイスであってもよいし、それらを含んでもよい。
ステップ304において、カーネルエージェントはカーネルディスパッチパケットを処理する。いくつかの実施形態では、カーネルディスパッチエージェントのパケットプロセッサ又は他のパケット処理回路が、カーネルディスパッチパケットを処理する。他の実施形態では、カーネルエージェントの汎用処理回路がパケットを処理する。いくつかの実施形態では、カーネルディスパッチパケットは、処理されて、カーネルエージェント上でカーネルを実行するための情報を決定する。いくつかの実施形態では、情報は、ディスパッチ情報及びクリーンアップ情報を含む。
ステップ306において、カーネルエージェントは、カーネルディスパッチパケットから処理された情報に基づいてカーネルエージェント(例えば、GPU)上での実行用にカーネルをディスパッチし、カーネルは完了するまで実行する。カーネル実行が完了したという条件308で、ステップ310においてクリーンアップ動作が実行される。いくつかの実施形態では、クリーンアップ動作は、カーネルディスパッチパケットから処理された情報に基づいてカーネルエージェントによって実行される。アプリケーションが完了していないという条件312で、処理300は、次のカーネルのためにカーネルディスパッチパケットをエンキューするステップ302から繰り返す。そうでない場合、処理300は終了する。
図3の例から分かるように、カーネルディスパッチパケットのエンキュー及び処理に起因するオーバーヘッド、並びに、クリーンアップ動作に起因するオーバーヘッドは、カーネルがカーネルエージェント上でローンチされるたびに生じる。
図4は、例示的アプリケーションにおける実行用の例示的なカーネルを示すタスクグラフ400である。タスクグラフ400は、例としてクリプキアプリケーションのための典型的なカーネルを示すが、概念は、任意のアプリケーション及びカーネルのセットに一般的である。タスクグラフ400は、Ltimesカーネル410、散乱カーネル420、ソースカーネル430、Lplustimesカーネル440、スイープカーネル450、及び、ポピュレーションカーネル460を含む。説明される特定のカーネルは例示的なものにすぎず、それらの特定の名前及び機能は例にとって重要ではないことに留意されたい。アプリケーションを実行するために、各カーネルは、示された順序でローンチされ、実行される。いくつかの実施形態では、カーネルの全てがローンチされ実行された後、カーネルが再びローンチされ実行される。例えば、クリプキでは、タスクグラフの前の反復によって生成されたデータの収束分析に応じて、場合によってはタスクグラフに示された順序でカーネルが再びローンチされ実行される。
図6は、図3に関して示され説明される処理300に従って、図4に関して示され説明されるカーネル410、420、430、440、450、460の各々を処理することに関連付けられた例示的な処理時間構成要素及びオーバーヘッド時間構成要素を示すブロック図である。示されるように、各カーネルは、カーネルディスパッチパケットをエンキューし、カーネルディスパッチパケットを処理することに起因するオーバーヘッド時間と、カーネルエージェント上でカーネルをディスパッチし、実行するための処理時間と、クリーンアップ動作のためのオーバーヘッド時間と、を含む。示されるブロックは、カーネル410、420、430、440、450、460のためのオーバーヘッド時間、処理時間、ディスパッチ時間、実行時間及びクリーンアップ時間に寄与する動作を示し、一定の縮尺であること、又は、カーネルが必ず並列に実行されることを暗示することを意図するものではないが、いくつか又は全てのカーネルが実際には並列に実行されてもよく、又は、いくつかの実施形態では重複してもよい。
アプリケーションの実行中のカーネルエンキュー、パケット処理、及び/又は、クリーンアップオーバーヘッド等のオーバーヘッド時間を短縮するために、いくつかの実施形態は、ディスパッチ情報、実行情報及び/又はクリーンアップ情報等のカーネルに関連する情報を記憶するように構成されたパケットを含む。そのようなパケットは、本明細書では参照カーネルディスパッチパケットと称される。
いくつかの実施形態では、参照パケットは、参照パケット情報、すなわち参照パケットから処理された情報が、将来のアクセスのためにメモリに記憶されるべきであることを示す情報を含む。いくつかの実施形態では、参照パケットは、情報が記憶されるべき位置へのインデックスを含む。いくつかの実施形態では、参照パケットは、カーネルディスパッチパケットの変更バージョンである。例えば、表2は、例示的な変更されたhsa_kernel_dispatch_packetを示しており、unit16_t reserved0フィールドは、参照番号(uint16_t ref_num)を含むように再利用される。
Figure 2024501454000003
この例示的な参照ディスパッチパケットのフォーマット及びフィールドは例示的なものである。他の実施形態は、他のフォーマット及び/若しくはフィールドを使用し、並びに/又は、AQLに固有ではないことに留意されたい。いくつかの実施形態では、情報は、参照状態バッファ(reference state buffer、RSB)と称されることができるバッファに記憶される。RSBは、カーネルエージェント上のスクラッチram、カーネルエージェントのGPUメモリの領域、又は、任意の他の適切なメモリ位置等のように、任意の適切なバッファである。いくつかの実施形態では、情報は、例えば、参照パケットからの参照番号(例えば、表2の例示的なパケット中のref_num)によってインデックス付けされた、RSBの参照状態テーブル(reference state table、RST)内に記憶される。表3は、参照パケットからの情報を記憶するための8つのエントリを含む例示的なRSTを示す。
Figure 2024501454000004
いくつかの実施形態では、図3に関して示され説明される処理300を使用して図4に関して示され説明されるカーネル410、420、430、440、450、460をローンチするために、通常のカーネルディスパッチパケット(例えば、表1のhsa_kernel_dispatch_packet)ではなく、参照パケット(例えば、表2の変更されたhsa_kernel_dispatch_packet)を使用することによって、各参照カーネルディスパッチパケットから処理された情報が、RFBのRST(例えば、表3の例示的なRST)に記憶される。
RFBに記憶された情報を活用して、アプリケーションの実行中のカーネルオーバーヘッド(例えば、エンキュー、パケット処理のローンチ、及び/又はクリーンアップ時間)を低減するために、いくつかの実施形態は、複数のカーネルをディスパッチするように構成されたパケットを含む。そのようなパケットは、本明細書では圧縮されたカーネルディスパッチパケットと称される。
いくつかの実施形態では、圧縮されたカーネルディスパッチパケットは、ディスパッチのためのカーネルの数を示す情報、カーネルごとの(例えば、RFBに記憶された)参照情報へのインデックス、及び/又は、カーネルごとの差分情報(例えば、差分ベクトル)を含む。
いくつかの実施形態では、ディスパッチのためのカーネルの数は、圧縮されたカーネルディスパッチパケットによって参照される情報に基づいてローンチされるカーネルの数を示す。いくつかの実施形態では、差分情報は、圧縮されたカーネルディスパッチパケットによって参照される情報(例えば、RFBに記憶された情報)が、圧縮されたカーネルディスパッチパケットに従ってカーネルをディスパッチするために変更されるべきである1つ以上の方法(本明細書では差分情報又は「diff」と称される)、又は、圧縮されたカーネルディスパッチパケットによって参照される情報が、圧縮されたカーネルディスパッチパケットに従ってカーネルをディスパッチするために変更されるべきではないことを示す。
例えば、表4は、例示的な圧縮されたカーネルディスパッチパケットフォーマットを示す。
Figure 2024501454000005
ヘッダフィールドは、パケットが圧縮されたディスパッチパケットであること、及び、パケットがディスパッチごとに参照パケットからのdiffを搬送することを指定する。num_kernelsフィールドは、この単一の圧縮されたディスパッチパケットがディスパッチするカーネルの数を指定する。diff_valuesは、それぞれの参照パケットと比較した各カーネルのdiffを指定する。この例示的なカーネル圧縮されたディスパッチパケットのフォーマット及びフィールドは例示的なものである。他の実施形態は、他のフォーマット及び/若しくはフィールドを使用し、並びに/又は、AQLに固有ではないことに留意されたい。
例えば、表5は、RFBに記憶された情報からの差分(例えば、「diff」情報)を表すための例示的なヘッダを示す。
Figure 2024501454000006
diffヘッダは、カーネルのその参照パケットからのdiffを示すプリアンブルである。diffヘッダは、diffに対するプリアンブルであり、何れの参照テーブルエントリがdiffのベースラインとして使用されるか(すなわち、この例ではref_num)、及び、何れのフィールドが異なるか(すなわち、この例ではdiff_vector)を示す。プリアンブルの後、diff自体が送信される。別の言い方をすれば、diffヘッダ内のref_numは、このカーネルをディスパッチするために、何れの一意の参照パケット情報(例えば、それが記憶されるRSTへのインデックス)が変更されるか(すなわち、「diffed」)を指定する。diff_vectorは、対応する参照パケット情報とは異なるこのディスパッチのフィールドを指定する。したがって、この例では、diff_vector内の13ビットは、参照AQLパケット内の13個のフィールドに対応し、diff_vector内のビットセットは、対応するフィールドが参照パケット情報と比較してこのディスパッチについて異なることを示す。diff_vectorにビットが設定されていない場合、これは、このディスパッチが参照パケット情報と同一であることを意味する。他の実施形態では、圧縮されたパケットは、参照テーブルに記憶された参照情報のdiffを直接送信することができることに留意されたい。そのような場合、diff_vectorは、参照AQLパケット中のフィールドではなく、テーブル中の参照情報中のフィールドを指定する。
この例示的なdiffヘッダのフォーマット及びフィールドは例示的なものである。他の実施形態は、他のフォーマット及び/若しくはフィールドを使用し、並びに/又は、AQLに固有ではないことに留意されたい。
例えば、表6は、上記の例による例示的な圧縮されたパケットを示す(参照を容易にするために行番号が加えられている)。
Figure 2024501454000007
この例では、行1は、パケットヘッダをHSA_PACKET_TYPE_CONDENSED_DISPATCHに設定し、これが圧縮されたディスパッチパケットであることを示す。行2は、この圧縮されたディスパッチパケットが2つのカーネルをディスパッチするための情報を含むことを示すnum_kernels=2を設定する。行4は、第1のディスパッチのdiff_headerを生成し、param1とラベル付けする。diffヘッダの第1のフィールドは、値=4(16進表記で0×4)を有し、第1のディスパッチが、そのディスパッチのために参照パケット#4からの情報(例えば、インデックス4によって参照テーブルに記憶されている)を使用していることを示す。diff_vectorであるdiffヘッダの第2のフィールドは、第12のビットセットを有し、これは、参照パケット#4からの第12のフィールドが第1のディスパッチについて変更されるべきであること(すなわち、「diffed」)を示す。第12のフィールドは、完了信号フィールドである。この例示的な圧縮されたディスパッチパケットのフォーマット及びフィールドは例示的なものである。他の実施形態は、他のフォーマット及び/若しくはフィールドを使用し、並びに/又は、AQLに固有ではないことに留意されたい。
別の言い方をしてこの例を説明すると、param1は、第1のディスパッチが、異なる完了信号を使用することを除いて、参照パケット#4と同様であることを示す。同様に、param2は行6で初期化され、第2のディスパッチが第11のフィールド(すなわち、カーネルarg)を除いて参照パケット#6と同様であることを示す。行9は、圧縮されたパケットの第1のdiffフィールド(diff[0])を第1のパケットのdiff_header(すなわち、param1)でポピュレートする。次の4つのdiffフィールド(diff[1]からdiff[4])は、第1のディスパッチの完了信号でポピュレートされる(行11~14)。完了信号は、対応するdiff_headerによって示されるように、対応する参照パケットとはこのディスパッチについて異なる。同様に、第2のディスパッチに対応するdiff_headerがdiff[5]に投入され(行16)、その参照パケットとは異なる第2のディスパッチのカーネルargアドレスがdiff[6]からdiff[9]にポピュレートされる(行18~21)。
図6は、例示的な圧縮されたカーネルディスパッチパケットを使用するカーネルパケットのローンチ、実行及びクリーンアップのための例示的な処理600を示すフローチャートである。
ステップ602において、圧縮されたカーネルディスパッチパケットは、1つ以上のカーネルをディスパッチするためにカーネルエージェントによる処理のためにエンキューされる。1つ以上のカーネルをディスパッチするための情報は、例えばRFB又は他の適切なメモリに既に記憶されていると仮定する。いくつかの実施形態では、情報は、1つ以上のカーネルの各々について参照カーネルディスパッチパケットを処理することによって、RFBに以前に記憶される。
ステップ604において、カーネルエージェントは、圧縮されたカーネルディスパッチパケットを処理する。いくつかの実施形態では、カーネルディスパッチエージェントのパケットプロセッサ又は他のパケット処理回路が、圧縮されたカーネルディスパッチパケットを処理する。他の実施形態では、カーネルエージェントの汎用処理回路が、圧縮されたカーネルディスパッチパケットを処理する。いくつかの実施形態では、圧縮されたカーネルディスパッチパケットは、処理されて、カーネルエージェント上で1つ以上のカーネルを実行するための情報を決定する。いくつかの実施形態では、情報は、ディスパッチ情報及びクリーンアップ情報を含む。いくつかの実施形態では、情報は、RFB又は他の適切なメモリ位置に記憶され、各カーネルの圧縮されたカーネルディスパッチパケット内の参照番号(例えば、ref_num)によってインデックス付けされる。いくつかの実施形態では、情報は、カーネルのうちの1つ以上についての圧縮されたカーネルディスパッチパケット内の差分情報(例えば、diff_vector)に基づいて変更される。
ステップ606において、カーネルエージェントは、カーネルディスパッチパケットから処理された情報(例えば、RFBから取り出されたdiff情報を含む)に基づいて1つ以上のカーネルのうち第1のカーネルをディスパッチし、カーネルは完了するまで実行する。カーネル実行が完了したという条件608では、次のカーネルがあればディスパッチされ、処理された情報(例えば、それに基づいてRFBから取り出されたdiff情報を含む)に基づいて完了まで実行される。全てのカーネルが完了したという条件610では、ステップ612においてクリーンアップ動作が実行される。いくつかの実施形態では、クリーンアップ動作は、カーネルディスパッチパケットから処理された情報に基づいてカーネルエージェントによって実行される。アプリケーションが完了していないという条件614では、処理600は、別のカーネルディスパッチパケットのエンキューするステップ602から繰り返す(又は、異なる処理、例えば、標準カーネルディスパッチパケット又は参照カーネルディスパッチパケットのエンキューする、図3に関して示され説明される処理300に入る)。そうでない場合、処理600は終了する。
図6の例から分かるように、圧縮されたカーネルディスパッチパケットのエンキュー及び処理に起因するオーバーヘッド、並びに、クリーンアップ動作に起因するオーバーヘッドは、圧縮されたカーネルディスパッチパケットによってカーネルエージェント上でローンチされたカーネルの全てに対して1回生じる。
図7は、図6に関して示され説明される処理600に従って、図4に関して示され説明されるカーネル410、420、430、440、450、460の各々を処理することに関連付けられた例示的な処理時間構成要素及びオーバーヘッド時間構成要素を示すブロック図である。
示されるように、第1のカーネル410のみが、カーネルディスパッチパケットをエンキューし、カーネルディスパッチパケットを処理することに起因する処理時間を含むのに対して、カーネル410、420、430、440、450、460の各々は、カーネルエージェント上でカーネルを処理するための処理時間を含む。最終パケット460は、クリーンアップ動作のための処理時間を含む。パケット410、420、430、440、450は、クリーンアップ情報(図中の破線によって示される)に応じて、クリーンアップ動作のための処理時間を含むか又は含まない。したがって、示されたブロックは、圧縮されたカーネルディスパッチパケットに基づくカーネル410、420、430、440、450、460の全てのための全体的な処理時間が、正規又は参照カーネルディスパッチパケット(例えば、図5に関して示され説明されるもの)に基づくカーネル410、420、430、440、450、460の全てのための全体的な処理時間よりも短い(又は少なくとも、より少ない要素を含む)ことを示す。示されているブロックは、カーネル410、420、430、440、450、460の処理時間に寄与する動作を示し、一定の縮尺であること、又はカーネルが必ず並列に実行されることを暗示することを意図するものではないが、いくつか又は全てのカーネルが実際には並列に実行されてもよく、又は、いくつかの実施形態では重複してもよい。
本明細書の開示に基づいて、多くの変形が可能であることを理解されたい。特徴及び要素が特定の組み合わせで上に説明されているが、各特徴又は要素は、他の特徴及び要素を用いずに単独で、又は、他の特徴及び要素を用いて若しくは用いずに様々な組み合わせで使用することができる。
各図に例示され、及び/又は、本明細書に記載された様々な機能ユニット(プロセッサ102、入力ドライバ112、入力デバイス108、出力ドライバ114、出力デバイス110、加速処理デバイス116、スケジューラ136、グラフィックス処理パイプライン134、計算ユニット132、SIMDユニット138を含むが、これらに限定されない)は、汎用コンピュータ、プロセッサ若しくはプロセッサコアとして、又は、汎用コンピュータ、プロセッサ若しくはプロセッサコアによって実行可能な非一時的なコンピュータ可読記憶媒体若しくは別の媒体に記憶されているプログラム、ソフトウェア若しくはファームウェアとして実装することができる。提供される方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実装することができる。好適なプロセッサとしては、例として、汎用プロセッサ、専用プロセッサ、従来型プロセッサ、デジタルシグナルプロセッサ(digital signal processor、DSP)、複数のマイクロプロセッサ、DSPコアと関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)、フィールドプログラマブルゲートアレイ(Field Programmable Gate Array、FPGA)回路、任意の他のタイプの集積回路(integrated circuit、IC)、及び/又は、状態マシンが挙げられる。そのようなプロセッサは、処理されたハードウェア記述言語(hardware description language、HDL)命令及びネットリストを含む他の中間データ(コンピュータ可読媒体に記憶させることが可能な命令)の結果を使用して製造プロセスを構成することによって製造することができる。そのような処理の結果はマスクワークとすることができ、このマスクワークをその後の半導体製造プロセスにおいて使用して、本開示の特徴を実装するプロセッサを製造する。
本明細書に提供される方法又はフロー図は、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれるコンピュータプログラム、ソフトウェア又はファームウェアにおいて実装することができる。非一時的なコンピュータ可読記憶媒体の例としては、読み取り専用メモリ(read only memory、ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、磁気光学媒体、並びに、CD-ROMディスク及びデジタル多用途ディスク(digital versatile disk、DVD)等の光学媒体が挙げられる。

Claims (20)

  1. 実行用の計算カーネルをディスパッチするように構成されたカーネルエージェントであって、
    参照カーネルディスパッチパケットを受信するように構成された回路と、
    前記参照カーネルディスパッチパケットを処理して、カーネルディスパッチ情報を決定するように構成された回路と、
    前記カーネルディスパッチ情報を記憶するように構成された回路と、
    前記カーネルディスパッチ情報に基づいて、カーネルをディスパッチするように構成された回路と、を備える、
    カーネルエージェント。
  2. 圧縮されたカーネルディスパッチパケットを受信するように構成された回路と、
    前記圧縮されたカーネルディスパッチパケットを処理して、記憶されたカーネルディスパッチ情報を取り出すように構成された回路と、
    取り出されたカーネルディスパッチ情報に基づいて、カーネルをディスパッチするように構成された回路と、を更に備える、
    請求項1のカーネルエージェント。
  3. 圧縮されたカーネルディスパッチパケットを受信するように構成された回路と、
    前記圧縮されたカーネルディスパッチパケットを処理して、前記カーネルディスパッチ情報を取り出し、差分情報を決定するように構成された回路と、
    前記差分情報に基づいて、取り出された前記カーネルディスパッチ情報を変更するように構成された回路と、
    変更された前記取り出された前記カーネルディスパッチ情報に基づいて、カーネルをディスパッチするように構成された回路と、を更に備える、
    請求項1のカーネルエージェント。
  4. 圧縮されたカーネルディスパッチパケットを受信するように構成された回路と、
    前記圧縮されたカーネルディスパッチパケットを処理して、記憶されたカーネルディスパッチ情報を取り出し、記憶された第2のカーネルディスパッチ情報を取り出すように構成された回路と、
    取り出された前記カーネル実行情報に基づいてカーネルをディスパッチし、取り出された前記第2のカーネルディスパッチ情報に基づいて第2のカーネルをディスパッチするように構成された回路と、を更に備える、
    請求項1のカーネルエージェント。
  5. 圧縮されたカーネルディスパッチパケットを受信するように構成された回路と、
    前記圧縮されたカーネルディスパッチパケットを処理して、記憶されたカーネルディスパッチ情報を取り出し、第1の差分情報を決定し、記憶された第2のカーネルディスパッチ情報を取り出し、第2の差分情報を決定するように構成された回路と、
    前記第1の差分情報に基づいて、取り出された前記カーネルディスパッチ情報を変更するように構成された回路と、
    前記第2の差分情報に基づいて、取り出された前記第2のカーネルディスパッチ情報を変更するように構成された回路と、
    変更された前記カーネルディスパッチ情報に基づいて第1のカーネルをディスパッチし、変更された前記第2のカーネルディスパッチ情報に基づいて第2のカーネルをディスパッチするように構成された回路と、を更に備える、
    請求項1のカーネルエージェント。
  6. 参照状態バッファを更に備え、
    前記カーネルディスパッチ情報は前記参照状態バッファに記憶される、
    請求項1のカーネルエージェント。
  7. スクラッチランダムアクセスメモリ(RAM)を更に備え、
    前記カーネルエージェントは、前記カーネルディスパッチ情報を前記スクラッチRAMに記憶する、
    請求項1のカーネルエージェント。
  8. 前記カーネルエージェントは、グラフィックス処理ユニット(GPU)を備える、
    請求項1のカーネルエージェント。
  9. ホストプロセッサから前記参照カーネルディスパッチパケットを受信するように構成された回路を更に備える、
    請求項1のカーネルエージェント。
  10. 前記参照カーネルディスパッチパケットは、アーキテクテッドキューイング言語(AQL)フィールドを含む、
    請求項1のカーネルエージェント。
  11. 計算カーネルをローンチするための方法であって、
    カーネルエージェントが、参照カーネルディスパッチパケットを受信することと、
    前記カーネルエージェントが、前記参照カーネルディスパッチパケットを処理して、カーネルディスパッチ情報を決定することと、
    前記カーネルエージェントが、前記カーネルディスパッチ情報を記憶することと、
    前記カーネルディスパッチ情報に基づいて、カーネルをディスパッチすることと、を含む、
    方法。
  12. 前記カーネルエージェントが、圧縮されたカーネルディスパッチパケットを受信することと、
    前記カーネルエージェントが、前記圧縮されたカーネルディスパッチパケットを処理して、記憶されたカーネルディスパッチ情報を取り出すことと、
    取り出されたカーネルディスパッチ情報に基づいて、カーネルをディスパッチすることと、を更に含む、
    請求項11の方法。
  13. 前記カーネルエージェントが、圧縮されたカーネルディスパッチパケットを受信することと、
    前記カーネルエージェントが、前記圧縮されたカーネルディスパッチパケットを処理して、前記カーネルディスパッチ情報を取り出し、差分情報を決定することと、
    前記差分情報に基づいて、取り出された前記カーネルディスパッチ情報を変更することと、
    変更された前記取り出された前記カーネルディスパッチ情報に基づいて、カーネルをディスパッチすることと、を更に含む、
    請求項11の方法。
  14. 前記カーネルエージェントが、圧縮されたカーネルディスパッチパケットを受信することと、
    前記カーネルエージェントが、前記圧縮されたカーネルディスパッチパケットを処理して、記憶されたカーネルディスパッチ情報を取り出し、記憶された第2のカーネルディスパッチ情報を取り出すことと、
    取り出された前記カーネルディスパッチ情報に基づいてカーネルをディスパッチし、取り出された前記第2のカーネルディスパッチ情報に基づいて第2のカーネルをディスパッチすることと、を更に含む、
    請求項11の方法。
  15. 前記カーネルエージェントが、圧縮されたカーネルディスパッチパケットを受信することと、
    前記カーネルエージェントが、前記圧縮されたカーネルディスパッチパケットを処理して、記憶されたカーネルディスパッチ情報を取り出し、第1の差分情報を決定し、記憶された第2のカーネルディスパッチ情報を取り出し、第2の差分情報を決定することと、
    前記第1の差分情報に基づいて、取り出された前記カーネルディスパッチ情報を変更することと、
    前記第2の差分情報に基づいて、取り出された前記第2のカーネルディスパッチ情報を変更することと、
    変更された前記カーネルディスパッチ情報に基づいて第1のカーネルをディスパッチし、変更された前記第2のカーネルディスパッチ情報に基づいて第2のカーネルをディスパッチすることと、を含む、
    請求項11の方法。
  16. 前記カーネルエージェントは、前記カーネルディスパッチ情報を参照状態バッファに記憶する、
    請求項11の方法。
  17. 前記カーネルエージェントは、前記カーネルディスパッチ情報を前記カーネルエージェント上のスクラッチランダムアクセスメモリ(RAM)に記憶する、
    請求項11の方法。
  18. 前記カーネルエージェントは、グラフィックス処理ユニット(GPU)を備える、
    請求項11の方法。
  19. 前記カーネルエージェントは、ホストプロセッサから前記参照カーネルディスパッチパケットを受信する、
    請求項11の方法。
  20. 前記参照カーネルディスパッチパケットは、アーキテクテッドキューイング言語(AQL)フィールドを含む、
    請求項11の方法。
JP2023535344A 2020-12-23 2021-12-03 高スループット及び低オーバーヘッドカーネルローンチのための圧縮されたコマンドパケット Pending JP2024501454A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/133,574 US20220197696A1 (en) 2020-12-23 2020-12-23 Condensed command packet for high throughput and low overhead kernel launch
US17/133,574 2020-12-23
PCT/US2021/061912 WO2022140043A1 (en) 2020-12-23 2021-12-03 Condensed command packet for high throughput and low overhead kernel launch

Publications (1)

Publication Number Publication Date
JP2024501454A true JP2024501454A (ja) 2024-01-12

Family

ID=82023507

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2023535344A Pending JP2024501454A (ja) 2020-12-23 2021-12-03 高スループット及び低オーバーヘッドカーネルローンチのための圧縮されたコマンドパケット

Country Status (6)

Country Link
US (1) US20220197696A1 (ja)
EP (1) EP4268176A1 (ja)
JP (1) JP2024501454A (ja)
KR (1) KR20230124598A (ja)
CN (1) CN116635829A (ja)
WO (1) WO2022140043A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114995882B (zh) * 2022-07-19 2022-11-04 沐曦集成电路(上海)有限公司 一种异构结构系统包处理的方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160142219A1 (en) * 2014-11-13 2016-05-19 Qualcomm Incorporated eMBMS Multicast Routing for Routers
CN105446939B (zh) * 2015-12-04 2019-02-26 上海兆芯集成电路有限公司 由装置端推核心入队列的装置
US20180046474A1 (en) * 2016-08-15 2018-02-15 National Taiwan University Method for executing child kernels invoked on device side utilizing dynamic kernel consolidation and related non-transitory computer readable medium
US10152243B2 (en) * 2016-09-15 2018-12-11 Qualcomm Incorporated Managing data flow in heterogeneous computing
US10620994B2 (en) * 2017-05-30 2020-04-14 Advanced Micro Devices, Inc. Continuation analysis tasks for GPU task scheduling
US11119789B2 (en) * 2018-04-25 2021-09-14 Hewlett Packard Enterprise Development Lp Kernel space measurement
US10963299B2 (en) * 2018-09-18 2021-03-30 Advanced Micro Devices, Inc. Hardware accelerated dynamic work creation on a graphics processing unit
US11573834B2 (en) * 2019-08-22 2023-02-07 Micron Technology, Inc. Computational partition for a multi-threaded, self-scheduling reconfigurable computing fabric

Also Published As

Publication number Publication date
WO2022140043A1 (en) 2022-06-30
EP4268176A1 (en) 2023-11-01
KR20230124598A (ko) 2023-08-25
CN116635829A (zh) 2023-08-22
US20220197696A1 (en) 2022-06-23

Similar Documents

Publication Publication Date Title
US9286119B2 (en) System, method, and computer program product for management of dependency between tasks
US10026145B2 (en) Resource sharing on shader processor of GPU
US9256623B2 (en) System, method, and computer program product for scheduling tasks associated with continuation thread blocks
US20170300361A1 (en) Employing out of order queues for better gpu utilization
US9703603B1 (en) System and method for executing accelerator call
US9471307B2 (en) System and processor that include an implementation of decoupled pipelines
US10255075B2 (en) System, method, and computer program product for managing out-of-order execution of program instructions
CN107315717B (zh) 一种用于执行向量四则运算的装置和方法
US10565670B2 (en) Graphics processor register renaming mechanism
JP2015504226A (ja) マルチスレッドコンピューティング
WO2017039865A1 (en) Facilitating efficient scheduling of graphics workloads at computing devices
KR20160082685A (ko) 멀티코어 프로세서들에서 동시적 함수들의 효율적인 하드웨어 배분, 및 관련 프로세서 시스템들, 방법들, 및 컴퓨터-판독가능 매체들
US8959319B2 (en) Executing first instructions for smaller set of SIMD threads diverging upon conditional branch instruction
JP2009505301A (ja) ベクトル処理用の拡張可能な並列パイプライン浮動小数点数演算ユニット
US9286114B2 (en) System and method for launching data parallel and task parallel application threads and graphics processing unit incorporating the same
US20120180056A1 (en) Heterogeneous Enqueuinig and Dequeuing Mechanism for Task Scheduling
JP2024501454A (ja) 高スループット及び低オーバーヘッドカーネルローンチのための圧縮されたコマンドパケット
TW201235938A (en) Enabling virtual calls in a SIMD environment
US20240045718A1 (en) Fine-grained conditional dispatching
US6785743B1 (en) Template data transfer coprocessor
US20200264921A1 (en) Crypto engine and scheduling method for vector unit
US20200264879A1 (en) Enhanced scalar vector dual pipeline architecture with cross execution
US11113061B2 (en) Register saving for function calling
US7107478B2 (en) Data processing system having a Cartesian Controller
US20200019530A1 (en) Method and system for partial wavefront merger