JP2023527322A - ワークロード処理のためのタスクグラフスケジューリング - Google Patents

ワークロード処理のためのタスクグラフスケジューリング Download PDF

Info

Publication number
JP2023527322A
JP2023527322A JP2022571760A JP2022571760A JP2023527322A JP 2023527322 A JP2023527322 A JP 2023527322A JP 2022571760 A JP2022571760 A JP 2022571760A JP 2022571760 A JP2022571760 A JP 2022571760A JP 2023527322 A JP2023527322 A JP 2023527322A
Authority
JP
Japan
Prior art keywords
paths
task graph
processing device
scheduling
resources
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
JP2022571760A
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.)
ATI Technologies ULC
Advanced Micro Devices Inc
Original Assignee
ATI Technologies ULC
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 ATI Technologies ULC, Advanced Micro Devices Inc filed Critical ATI Technologies ULC
Publication of JP2023527322A publication Critical patent/JP2023527322A/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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/522Barrier synchronisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/486Scheduler internals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/501Performance criteria
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Graphics (AREA)
  • Image Generation (AREA)

Abstract

処理デバイス上のタスクグラフの動作をスケジューリングするための技術が提供される。技術は、1つ以上のパスと、1つ以上のリソースと、パスとリソースとの間の1つ以上の有向エッジと、を指定するタスクグラフを受信することと、タスクグラフの独立したパス及び依存的なパスを識別することと、処理デバイスの性能基準に基づいて、パスを実行するためのコマンドをスケジューリングすることと、スケジューリング通りに実行するために、スケジューリングされたコマンドを処理デバイスに送信することと、を含む。【選択図】図5

Description

(関連出願の相互参照)
本願は、2020年5月29日に出願された米国特許出願第16/888,540号の利益を主張し、本明細書に完全に記載されているように参照により組み込まれる。
三次元(three-dimensional、「3D」)グラフィックス処理パイプラインは、入力ジオメトリを画面上に表示するための二次元(two-dimensional、「2D」)画像に変換するために一連のステップを実行する。いくつかの例では、これらのステップは、アプリケーションを実行する中央処理ユニット等のホストによってコマンドとして指定される。多くのレンダリングワークロードは、大きなコマンドシーケンスを必要とし、したがって、これらのシーケンスを生成及び処理することは、複雑なタスクである。
添付の図面と共に例として与えられる以下の説明から、より詳細な理解を得ることができる。
本開示の1つ以上の特徴が実装され得る例示的なデバイスのブロック図である。 一例による、図1のデバイスの詳細を示す図である。 図2に示すグラフィックス処理パイプラインの追加の詳細を示すブロック図である。 タスクグラフ指定プロセッサ402及び図2の加速処理デバイス等の処理デバイス上のタスクグラフ及びスケジューリングワークロードを生成するためのコマンドスケジューラ404の構成を示す図である。 タスクグラフ指定プロセッサ402及び図2の加速処理デバイス等の処理デバイス上のタスクグラフ及びスケジューリングワークロードを生成するためのコマンドスケジューラ404の構成を示す図である。 タスクグラフ指定プロセッサ402及び図2の加速処理デバイス等の処理デバイス上のタスクグラフ及びスケジューリングワークロードを生成するためのコマンドスケジューラ404の構成を示す図でる。 例示的なタスクグラフを示す図である。 例示的な技術による、タスクグラフ指定プログラムからのタスクグラフの生成を示す図である。 例示的な技術による、タスクグラフ指定プログラムからのタスクグラフの生成を示す図である。 別の例示的な技術による、タスクグラフ指定プログラムからのタスクグラフの生成を示す図である。 別の例示的な技術による、タスクグラフ指定プログラムからのタスクグラフの生成を示す図である。 タスクグラフによる、処理デバイス上でタスクをスケジューリングすることを示す図である。 タスクグラフによる、処理デバイス上でタスクをスケジューリングすることを示す図である。 タスクグラフ指定プログラムからタスクグラフを生成する方法のフロー図である。 タスクグラフによる、処理デバイス上でタスクをスケジューリングする方法のフロー図である。
処理デバイス上のタスクグラフの動作をスケジューリングするための技術が提供される。技術は、1つ以上のパス、1つ以上のリソース、及び、パスとリソースとの間の1つ以上の有向エッジを指定するタスクグラフを受信することと、タスクグラフの独立したパス及び依存的なパスを識別することと、処理デバイスの性能基準に基づいて、パスを実行するためのコマンドをスケジューリングすることと、スケジューリングされたような実行のために、スケジューリングされたコマンドを処理デバイスに送信することと、を含む。
図1は、本開示の1つ以上の特徴を実装することができる例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、タブレットコンピュータ、又は、他のコンピューティングデバイスのうち何れかであり得るが、これらに限定されない。デバイス100は、プロセッサ102と、メモリ104と、記憶装置106と、1つ以上の入力デバイス108と、1つ以上の出力デバイス110と、を含む。また、デバイス100は、1つ以上の入力ドライバ112及び1つ以上の出力ドライバ114を含む。入力ドライバ112の何れも、ハードウェア、ハードウェアとソフトウェアとの組み合わせ、又は、ソフトウェアとして具体化され、入力デバイス108を制御する(例えば、動作を制御し、入力ドライバ112からの入力を受信し、入力ドライバ112にデータを提供する)役割を果たす。同様に、出力ドライバ114の何れも、ハードウェア、ハードウェアとソフトウェアとの組み合わせ、又は、ソフトウェアとして具体化され、出力デバイス110を制御する(例えば、動作を制御し、出力ドライバ114からの入力を受信し、出力ドライバ114にデータを提供する)役割を果たす。デバイス100は、図1に示されていない追加の構成要素を含むことができることを理解されたい。
様々な代替例では、プロセッサ102は、中央処理ユニット(central processing unit、CPU)、グラフィック処理ユニット(graphics processing unit、GPU)、同じダイ上に位置するCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアは、CPU又はGPUであってもよい。様々な代替例では、メモリ104は、プロセッサ102と同じダイ上に位置してもよいし、プロセッサ102と別に位置してもよい。メモリ104は、揮発性又は不揮発性メモリ(例えば、ランダムアクセスメモリ(random access memory、RAM)、ダイナミックRAM、キャッシュ)を含む。
記憶装置106は、固定又はリムーバブル記憶装置(例えば、限定するものではないが、ハードディスクドライブ、ソリッドステートドライブ、光ディスク、フラッシュドライブ)を含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、生体認証スキャナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/又は受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上の光、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/又は受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。
入力ドライバ112及び出力ドライバ114は、それぞれ、入力デバイス108及び出力デバイス110とインターフェースし、それらをドライブするように構成された1つ以上のハードウェア、ソフトウェア、及び/又は、ファームウェア構成要素を含む。入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信することを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信することを可能にする。出力ドライバ114は、表示デバイス118に結合された加速処理デバイス(「accelerated processing device、APD」)116を含み、これは、いくつかの例では、物理表示デバイス又はリモートディスプレイプロトコルを使用して出力を示す模擬デバイスである。APD116は、プロセッサ102から計算コマンド及びグラフィックスレンダリングコマンドを受け入れて、それらの計算及びグラフィックスレンダリングコマンドを処理し、表示のために表示デバイス118にピクセル出力を提供するように構成されている。以下で更に詳細に説明するように、APD116は、単一命令複数データ(「single-instruction-multiple-data、SIMD」)パラダイムに従って計算を行うように構成された1つ以上の並列処理ユニットを含む。こうして、様々な機能は、本明細書では、APD116によって、又は、APD116と併せて行われるものとして説明されているが、様々な代替例では、APD116によって行われるものとして説明される機能は、ホストプロセッサ(例えば、プロセッサ102)によってドライブされず、表示デバイス118にグラフィック出力を提供するように構成された同様の能力を有する他のコンピューティングデバイスによって追加的又は代替的に行われる。例えば、SIMDパラダイムに従って処理タスクを行う任意の処理システムが、本明細書に説明される機能を行うように構成されてもよいことが企図される。代替的に、SIMDパラダイムに従って処理タスクを行わないコンピューティングシステムが、本明細書に説明される機能を行うことが企図される。
図2は、一例による、デバイス100及びAPD116の詳細を示す図である。プロセッサ102(図1)は、オペレーティングシステム120、ドライバ122及びアプリケーション126を実行し、また、代替的又は追加的に他のソフトウェアを実行してもよい。オペレーティングシステム120は、ハードウェアリソースを管理すること、サービス要求を処理すること、プロセス実行をスケジュールし、制御すること、及び、他の動作を行うこと等のように、デバイス100の様々な態様を制御する。APDドライバ122は、APD116の動作を制御し、グラフィックスレンダリングタスク又は他のワーク等のタスクを処理のためにAPD116に送信する。また、APDドライバ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上で同時に(又は擬似同時に)実行することができるワークアイテムの最大集合体と考えることができる。「擬似同時」実行は、SIMDユニット138内のレーンの数よりも大きいウェーブフロントの場合に生じる。そのような状況では、ウェーブフロントは、複数のサイクルにわたって実行され、ワークアイテムの異なる集合体が、異なるサイクルで実行される。APDスケジューラ136は、計算ユニット132及びSIMDユニット138上の様々なワークグループ及びウェーブフロントのスケジューリングに関連する動作を行うように構成されている。
計算ユニット132によって与えられる並列処理は、ピクセル値計算、頂点変換及び他のグラフィック動作等のグラフィック関連動作に好適である。したがって、場合によっては、プロセッサ102からのグラフィック処理コマンドを受け入れるグラフィックス処理パイプライン134は、並列で実行するために計算タスクを計算ユニット132に提供する。
また、計算ユニット132は、グラフィックに関連しないか、又は、グラフィックス処理パイプライン134の「通常の」動作の一部(例えば、グラフィックス処理パイプライン134の動作に対して行われる処理を補足するために行われるカスタム動作)として行われない計算タスクを行うために使用される。プロセッサ102上で実行されるアプリケーション126又は他のソフトウェアは、そのような計算タスクを定義するプログラムを、実行のためにAPD116に送信する。
図3は、図2に示すグラフィックス処理パイプライン134の追加の詳細を示すブロック図である。グラフィックス処理パイプライン134は、各々がグラフィックス処理パイプライン134の特定の機能を実行する段階(ステージ)を含む。各段階は、プログラマブル計算ユニット132内で実行されるシェーダプログラムとして部分的若しくは完全に、又は、計算ユニット132の外部の固定機能非プログラマブルハードウェアとして部分的若しくは完全に実装される。
入力アセンブラ段階302は、ユーザが満たしたバッファ(例えば、アプリケーション126等のプロセッサ102によって実行されるソフトウェアの要求で満たされたバッファ)を読み取り、そのデータを、パイプラインの残りの部分によって使用されるプリミティブに組み立てる(アセンブルする)。入力アセンブラ段階302は、ユーザが満たしたバッファに含まれるプリミティブデータに基づいて、異なるタイプのプリミティブを生成することができる。入力アセンブラ段階302は、パイプラインの残りの部分によって使用するための組み立てられた(アセンブルされた)プリミティブをフォーマットする。
頂点シェーダ段階304は、入力アセンブラ段階302によって組み立てられたプリミティブの頂点を処理する。頂点シェーダ段階304は、変換、スキニング、モーフィング、及び、各々の頂点照明等の様々な頂点毎の動作を実行する。変換動作は、頂点の座標を変換するための様々な動作を含む。これらの動作は、モデリング変換、表示変換、投影変換、視点分割、頂点座標を修正するビューポート変換、及び、非座標属性を修正する他の動作のうち1つ以上を含む。
頂点シェーダ段階304は、1つ以上の計算ユニット132上で実行される頂点シェーダプログラムとして部分的又は完全に実装される。頂点シェーダプログラムは、プロセッサ102によって提供され、コンピュータプログラマによって事前に書き込まれたプログラムに基づいている。ドライバ122は、そのようなコンピュータプログラムをコンパイルして、計算ユニット132内での実行に適した形式を有する頂点シェーダプログラムを生成する。
ハルシェーダ段階306、モザイク化器段階308及びドメインシェーダ段階310は、モザイク化(テッセレーション)を実装するために共に動作し、モザイク化(テッセレーション)は、プリミティブを細分することによって、単純なプリミティブをより複雑なプリミティブに変換する。ハルシェーダ段階306は、入力プリミティブに基づいて、モザイク化のためのパッチを生成する。モザイク化器(テッセレータ)段階308は、パッチのためのサンプルセットを生成する。ドメインシェーダ段階310は、パッチのサンプルに対応する頂点の頂点位置を計算する。ハルシェーダ段階306及びドメインシェーダ段階310は、頂点シェーダ段階304と共にドライバ122によってコンパイルされる計算ユニット132上で実行されるシェーダプログラムとして実装することができる。
ジオメトリシェーダ段階312は、プリミティブ基準で頂点動作を実行する。ポイントスプライト拡張(point sprite expansion)、動的粒子システム操作(dynamic particle system operations)、ファーフィン生成(fur-fin generation)、シャドウボリューム生成(shadow volume generation)、シングルパスレンダリング-キューブマップ(single pass render-to-cubemap)、プリミティブ毎の材料交換(per-primitive material swapping)、及び、プリミティブ毎の材料設定(per-primitive material setup)等の動作を含む様々な異なるタイプの動作が、ジオメトリシェーダ段階312によって実行され得る。場合によっては、ドライバ122によってコンパイルされ、計算ユニット132上で実行されるジオメトリシェーダプログラムは、ジオメトリシェーダ段階312の動作を実行する。
ラスタライザ段階314は、ラスタライザ段階314から上流に生成された単純なプリミティブ(三角形)を受け入れて、ラスタリングする。ラスタライズは、何れのスクリーンピクセル(又はサブピクセルサンプル)が特定のプリミティブによってカバーされることを決定することからなる。ラスタライズは、固定機能ハードウェアによって行われる。
ピクセルシェーダ段階316は、上流に生成されたプリミティブ及びラスタライズの結果に基づいて、スクリーンピクセルの出力値を計算する。ピクセルシェーダ段階316は、テクスチャメモリからテクスチャを適用することができる。ピクセルシェーダ段階316の動作は、ドライバ122によってコンパイルされ、計算ユニット132上で実行されるピクセルシェーダプログラムによって実行される。
出力マージ段階318は、ピクセルシェーダ段階316からの出力を受け入れ、それらの出力をフレームバッファ内にマージし、z試験及びアルファブレンド等の動作を実行して、スクリーンピクセルの最終色を決定する。
多くの場合、APD116上の処理ワークロードは、複数の「パス」を実行することを伴う。「パス」は、いくつかの入力(例えば、別のパスから、又は、処理ワークロード全体への入力として)を受け入れる処理の単位であり、入力を処理し、出力を生成する。いくつかの出力は、他のパスへの出力を含み、他の出力は、画面上に表示するための画像等の処理ワークロードの最終出力を含む。したがって、特定のパス順序、それらのパスが使用する入力、及び、それらのパスが生成する出力は、処理ワークロード全体を指定する。
パスの一例は、特定の方法で構成されたグラフィックス処理パイプライン134を介したデータの処理である(例えば、特定の段階が有効又は無効にされ、特定のプログラマブル段階は、実行のために特定の選択されたシェーダプログラムを有する)。グラフィックス処理パイプライン134を通る任意の特定のパスのための入力又は出力は、グラフィックス処理パイプライン134の指定された動作に基づいて構成可能である。例示的なグラフィックス処理パスは、メッシュをレンダリングターゲットのセット及び深度バッファに描画するジオメトリパス、並びに、頂点及びピクセルシェーダプログラムを有するスクリーン空間四重線(screen space quad)を描画する後処理パスを含む。パスの別の例は、特定の計算シェーダプログラムを実行する計算ワークロードである。計算シェーダプログラムは、計算ユニット132上で実行されるが、グラフィックス処理パイプライン134の一部として実行されないシェーダプログラムである。計算ワークロードは、入力データの特定のセットのための計算シェーダプログラムの実行であり、出力データの特定のセットを生成する。
処理ワークロードのパスの個々のコマンドの各々を「手動で」指定することが可能である。より具体的には、アプリケーション126(又はドライバ122等の他のエンティティ)が、ドライバ122及び/又は加速処理デバイス116にコマンドを発行して、アドホック様式でパスを実行することが可能である。しかしながら、本開示は、マルチパス処理ワークロードを指定するためのより自動化された方法の技術を提示する。
具体的には、本開示は、タスクグループとして処理ワークロードをプログラム可能に指定するための技術を提示する。図4Aは、タスクグラフ指定プログラムを実行してタスクグラフを生成し、生成されたタスクグラフに基づいて、APD116上で実行するための動作をスケジューリングするように構成された、図2のAPDスケジューラ136を示す。
APDスケジューラ136は、タスクグラフ指定プロセッサ402及びコマンドスケジューラ404を含む。タスクグラフ指定プロセッサ402は、タスクグラフ指定プログラムを入力として受け入れる。タスクグラフ指定プログラムは、プログラム可能に、処理ワークロードを説明するタスクグラフを生成する方法を指定する。処理ワークロードは、本明細書で更に説明される(例えば、図5に関して)タスク及びリソースのグラフを含む。タスクグラフ指定プロセッサ402は、タスクグラフ指定プログラムを実行し、これは、実行されると、タスクグラフとして処理ロードを指定するタスクグラフを生成する。
コマンドスケジューラ404は、タスクグラフを入力として受け入れ、タスクグラフによって指定された処理ワークロードを実行する動作のスケジューリングを実行し、それらの動作を実行するようにAPD116に指示する。いくつかの実装形態では、コマンドスケジューラ404は、APDフィードバック情報を受け入れ、そのフィードバック情報を使用して、APD116上の動作をスケジューリングする。APDフィードバック情報は、性能メトリック、占有メトリック、リソース利用及び他のタイプの情報等のように、APD116の状態に関する様々な情報を含む。APD116の状態に関する情報のいくつかの例示的なアイテムは、ワークが、グラフィックス処理パイプライン134、SIMDユニット138のハードウェア性能カウンタ、そのような様々なハードウェアユニットがビジーである時間パーセンテージ、及び、メモリバンド幅利用を入力し、それらによって完了されたときのタイムスタンプを含む。コマンドスケジューラ404は、タイムスタンプを利用して、タスクのスケジューリングの全体的な有効性を評価する。加えて、タイムスタンプは、パスの全体的な持続時間502を示す。したがって、いくつかの実装形態では、コマンドスケジューラ404は、スケジューリング時により長いパスを優先する。ハードウェアブロック利用カウンタは、より良好な全体的な利用を達成するために、異なるハードウェアブロックでボトルネックされているグループパスを補助するために使用される。いくつかの例では、コマンドスケジューラ404は、APD116の一部であり、プロセッサ102、アプリケーション、ドライバ又はオペレーティングシステムによる介入なしに、APDの他の構成要素からそのような性能メトリックを直接取得することができる。
図4Aの例では、タスクグラフ指定プロセッサ402及びコマンドスケジューラ404の何れか又は両方は、プロセッサ上で実行されるソフトウェア、本明細書に記載の動作を実行するように構成されたハードウェア回路、又は、それらの組み合わせとして実装される。2つの別のユニットとして記載されているが、タスクグラフ指定プロセッサ402及びコマンドスケジューラ404は、いくつかの実装形態では、同じユニットである。図4Aは、タスクグラフ指定プロセッサ402及びコマンドスケジューラ404がAPD116内にある例を示す。図4Bは、タスクグラフ指定プロセッサ402がプロセッサ102上で実行されるソフトウェアであり、コマンドスケジューラ404が図4Aに関して説明されるようにAPD116内に実装される例を示している。図4Cは、タスクグラフ指定プロセッサ402及びコマンドスケジューラ404がプロセッサ102上で実行されるプログラムである例を示す。
コマンドスケジューラ404は、APD116上での実行のためのコマンドを出力するように説明されているが、本明細書に記載される技術は、中央処理ユニット(例えば、プロセッサ102)又は別のユニット等のAPD116以外のプロセッサ上での実行のためのコマンドを生成するために適用され得ることを理解されたい。
図5は、例示的なタスクグラフ500を示す。タスクグラフ500は、パス502及びバッファ504の有向非巡回グラフとして処理ワークロードを指定する。パス502は、上述したように、特定の様式で構成されたグラフィックス処理パイプライン134を介した特定のデータの処理等の特定の作業単位、又は、計算シェーダプログラムを含む。バッファ504は、パス502の入力として及び/又はパス502の出力として使用されるデータを含む。バッファ504は、1つのパス502への入力及び別のパスへの出力であり得るか、又は、(単一のタスクグラフに対応する)処理ワークロード全体に対する入力若しくは出力であり得る。バッファのいくつかの例は、グラフィックス処理パイプライン134を介して特定のパス502によって生成された画像、計算シェーダプログラムによって生成されたデータ、又は、グラフィックス処理パイプライン134を介してパス502によって生成された画像以外のデータを含む。
タスクグラフ500は、パス502とバッファ504との間の矢印を含む。バッファ504からパス502への矢印は、パス502が、そのバッファ504内のデータを入力として受け入れることを意味する。パス502からバッファ504への矢印は、パス502が、バッファ504内のデータを出力として生成することを意味する。したがって、タスクグラフ500は、パス502間の依存関係を指定する。より具体的には、入力として別のパス502によって生成されたバッファ504を受け入れるパス502は、バッファ504が実際に生成されるまで実行を待機する必要がある。したがって、バッファ504を入力として受け入れるパス502は、それらのバッファ504を出力として生成する他のパス502に依存する。第3のパス502が第2のパス502に依存し、第1のパス502が第3のパス502に依存する場合、第1のパス502も第2のパス502に依存して考慮される。言い換えれば、依存関係は、タスクグラフ500の矢印を通って伝播する。2つのパス502は、他方に依存しない場合に独立している。
上述したように、タスクグラフ指定プログラムは、タスクグラフ500を構築する方法を指定するプログラムである。したがって、タスクグラフ指定プログラムは、何れのパス502が発生するかを示し、バッファ504は、パス502の入力及び出力である。タスクグラフ指定プログラムは、特定のパス502及び/又はバッファ504をタスクグラフ500内に含むかどうか、並びに、パス502がバッファ504をどのように消費及び/又は生成するかに関する決定を行う際に、ユーザ定義のランタイムデータ、APD116によって生成されたデータ又は他のデータ等のランタイムデータを考慮することができる。したがって、タスクグラフ指定プログラムは、タスクグラフ指定プロセッサ402によって評価されるタスクグラフ500の静的な説明だけではない。代わりに、タスクグラフ指定プログラムは、ランタイムパラメータに基づいて、タスクグラフ500を可変的に構築することができる。
図6A及び図6Bは、例示的なタスクグラフ指定プログラム形式を示し、図7A及び図7Bは、代替タスクグラフ指定プログラム形式を示す。図6Aでは、タスクグラフ指定プログラムは、パス定義605、パス呼び出し606及びプログラム制御フロー命令604を含む。パス定義605は、APD116上のパスの実行に関与する動作及び方法を定義する。パス呼び出し606は、タスクグラフ指定プロセッサ402への命令を表し、出力されるタスクグラフ500のパス502を生成する。制御フロー命令604は、パス呼び出し606がいつ、どのように生成されるかを制御するための命令である。上述したように、タスクグラフ指定プロセッサ402は、制御フロー命令604及びパス呼び出し606を実行して、コマンドスケジューラ404によってスケジューリングし、APD116による実行のためのタスクグラフ500を構築する。
いくつかの実装形態では、パス定義605は、リソースインポート/エクスポート命令608、状態命令610及びパスコマンド612を含む。いくつかの実装形態では、パス定義605は、状態命令610を省略する。リソースインポート/エクスポート命令608は、APD116上で実行される場合に、パス定義605によってインポート(読み取り)及び/又はエクスポート(書き込み)される1つ以上のリソースを指定する。「リソース」という用語は、「バッファ」という用語(すなわち、図5のバッファ504)と同じ意味を有する。いくつかの実装形態では、状態命令610は、APD116上で実行される場合、一方又は両方のシェーダがグラフィックスのために使用されるか、若しくはパスの動作を計算するか、又は、APD116上で実行される場合、何れのパイプライン状態がパスのために使用され、他の状態が同様に考えられるか、を示す。パスコマンド612は、パス606に対して実行される実際の作業である。1つ以上のインポートされたリソースから入力されたパスコマンド612は、それらの1つ以上のインポートされたリソースを処理し、1つ以上のエクスポートされたリソースに出力する。いくつかの実装形態では、パスコマンド612は、(例えば、特定の構成のグラフィックス処理パイプライン134を介してジオメトリを送信することによって、ジオメトリを描画するための)描画コマンド、(実行のための汎用計算ワークロードをディスパッチするための)ディスパッチコマンド、(メモリの1つ以上の部分を1つ以上の他の場所にコピーするための)コピーコマンド、(メモリの1つ以上の部分をクリアするための)クリアコマンド、(1つ以上のリソースのレイアウトを修正するための)リソースレイアウト遷移、(キャッシュデータをフラッシュ又はプリフェッチするための)キャッシュアクション、(APD116ハードウェアブロック又はイベント間の同期等、例えば、描画コマンド及びディスパッチコマンドは、記憶帯域幅について競合することができる、したがって、これらのアイテムが並行して論理的に実行できるという事実にもかかわらず、プログラマは、時には、他方の完了後にのみ一方の開始を強制する明示的な同期コマンドを挿入する)同期動作、又は、APD116によって実行可能な他のコマンドを含む。キャッシュアクション及び同期動作の場合、コマンドスケジューラ404は、そのようなアクション/動作を自動的に生成することができ、時にはそのようなアクション/動作を生成する。しかしながら、プログラマは、これらのアクションを明示的に指定してもよい。
制御フロー命令604は、タスクグラフ指定プロセッサ402による実行中に、タスクグラフ指定プログラム600のプログラムフローを制御する。制御フロー命令604は、条件付き記述(例えば、if記述)、ループ等の制御フロー命令を含む。制御フロー命令604は、タスクグラフ指定プログラム600がランタイムで、ランタイムパラメータに基づいて、タスクグラフ500を構築することを可能にする。ループは、各々が異なるパラメータ(インポート/エクスポートデータ、及びシェーダ/パイプライン構成)を有する単一のパス定義605からの複数のパス502の生成を可能にする。条件付きは、特定のノード定義605が、ノードとして実際にインスタンス化されているかどうかを指定することができる。
いくつかの状況では、パス呼び出し606は、リソースインポート/エクスポート命令608又は状態命令610のうち1つ以上についての引数を指定する。そのような状況では、引数は、パス呼び出し606の結果として生成された特定のパスについて使用するための何れの状態(例えば、シェーダプログラム、グラフィックス処理パイプライン134構成)のうち1つ以上、パス呼び出し606の結果として生成されたパスにインポートするための1つ以上のリソース、又は、パス呼び出し606の結果として生成されたパスからエクスポートするための1つ以上のリソースを指定する。更に、いくつかの状況では、引数は変数として指定され、これは、引数の値が(例えば、タスクグラフ指定プログラム600に利用可能なデータに基づいて、及び/又は、制御フロー命令604の実行からの特定の結果として)ランタイムで決定されることを意味する。要するに、引数、したがって状態、インポートデータ及びエクスポートデータは、ランタイムで特定可能な要素である(すなわち、タスクグラフ指定プログラム600を実行する時間は、タスクグラフ指定プログラム600を書き込むプログラマがそのような情報をハードコードする必要がないことを意味する)。
図6Bは、図6Aに記載された形式のタスクグラフ指定プログラム600に基づいて生成された例示的なタスクグラフ650を示す。コードに例示される例示的なタスクグラフ指定プログラムが、ここで提供される。
Figure 2023527322000002

上記のタスクグラフ指定プログラムは、Draw1()を呼び出すパスAのための1つ、並びに、Draw2()及びDraw3()を呼び出すパスBのための1つの2つのパス定義を指定する。パス呼び出しは、リソースr1を入力し、リソースr2を出力する場合に、グラフ上のパスAをインスタンス化する。特定の条件に基づいて、パス呼び出しは、パスBのゼロ、1つ、又は、2つのインスタンスをインスタンス化し、リソースr2を入力し、r3を出力する。Draw3()は、Draw2()によって生成されたデータを内部で使用するが、このデータは、パスB内で完全に生成及び消費されるデータのためにリソースとして指定されないことに留意されたい。
図6Bは、表1のタスクグラフ指定の2つの異なる実行から生成された2つの異なるタスクグラフ650を示す。第1のタスクグラフ650(1)では、条件A及び条件Bの両方が真である。したがって、生成されたグラフは、リソース1 654(1)から読み取られ、リソース2 654(2)に出力されるパスA 652(1)、並びに、リソース2 654(2)からの読み取り、リソース3 654(3)への出力の両方を行うパスB 652(2)の2つのインスタンスを含む。タスクグラフ650(2)の場合、条件Aのみが真である。したがって、パスB 652(2)の一例のみが生成される。
図7A及び図7Bは、別の形式によるタスクグラフ指定プログラム700、及び、タスクグラフ指定プロセッサ402によるタスクグラフ指定プログラム700の実行の結果として生成されたタスクグラフ750を示す。
タスクグラフ指定プログラム700は、制御フロー命令702、リソースインポート/エクスポート命令704、状態命令706、及び、パスコマンド708を含む。パスコマンド708は、APD116によって実行可能な個々のコマンドである。いくつかの例示的なパスコマンド708は、(例えば、特定の構成のグラフィックス処理パイプライン134を介してジオメトリを送信することによって、ジオメトリを描画するための)Aリソースインポート/エクスポート命令704描画コマンド、(実行のための汎用計算ワークロードをディスパッチするための)ディスパッチコマンド、(メモリの1つ以上の部分を1つ以上の他の場所にコピーするための)コピーコマンド、(メモリの1つ以上の部分をクリアするための)クリアコマンド、(1つ以上のリソースのレイアウトを修正するための)リソースレイアウト遷移、(キャッシュデータをフラッシュ又はプリフェッチするための)キャッシュアクション、(APD116ハードウェアブロック又はイベント間の同期等、例えば、描画コマンド及びディスパッチコマンドは、記憶帯域幅について競合することができる、したがって、これらのアイテムが並行して論理的に実行できるという事実にもかかわらず、プログラマは、時には、他方の完了後にのみ一方の開始を強制する明示的な同期コマンドを挿入する)同期動作、又は、APD116によって実行可能な他のコマンドを含む。キャッシュアクション及び同期動作の場合、コマンドスケジューラ404は、そのようなアクション/動作を自動的に生成することができ、時にはそのようなアクション/動作を生成する。しかしながら、プログラマは、これらのアクションを明示的に指定してもよい。
リソースインポート/エクスポートコマンド704は、パスコマンド708によって読み取られ及び/又は書き込まれるリソースを指定する。状態命令706は、APD116の状態(グラフィックス処理パイプライン134の状態等、何れのシェーダプログラムがグラフィックス処理パイプライン134又は計算シェーダディスパッチ、又は、他の状態に使用されるか)を定義及び/又は修正する命令である。制御フロー命令702は、タスクグラフ指定プロセッサ402がタスクグラフ指定プログラム700を実行する場合に、プログラムフローを制御する。
実行中、タスクグラフ指定プロセッサ402は、タスクグラフ指定プログラム700を横断して、タスクグラフ指定プログラム700が対応するタスクグラフのためのパス502を生成するパスブロック710を識別する。いくつかの例では、パスブロック710は、パスコマンドの1つ(又は指定された数)を含み、パスコマンドで終了し、タスクグラフ指定プロセッサ402による実行のための制御フロー命令を含まない、タスクグラフ指定プログラム700の一部分である。他の例では、パスブロック710は、異なる固定数のパスコマンド708、又は、可変数のパスコマンド708を含む。いくつかの例では、パスブロック710は、パスコマンド708で終了する必要はない。いくつかの例では、タスクグラフ指定プロセッサ402は、少なくとも1つのパスコマンド708を含み、パスコマンド708で終了し、そのような各部分をパスブロック710へのパスコマンド708の場所に基づいて分割する、タスクグラフ指定プログラム700の部分を識別する。より具体的には、部分から、タスクグラフ指定プログラム700は、指定された数のパスコマンド708毎に1つのパスブロック710を生成する。いくつかの例では、そのような各パスブロック710は、前のパスブロック710からパスブロック710内の最後のパスコマンド708までの全ての命令を含むが、制御フロー命令702を含まない。
パスブロック710が識別された状態で、タスクグラフ指定プロセッサ702は、以下のようにタスクグラフ500を生成する。各パスブロック710は、1つ以上のインポートリソース及び1つ以上の出力リソースの定義を含む。これらのリソースは、タスクグラフのバッファ504を構成する。リソース読み取り及び書き込みは、タスクグラフの有向エッジを構成する。バッファ504からパス502に向けられたエッジは、リソース読み取りであり、パス502からバッファ504に向けられたエッジは、リソース書き込みである。
以下の表は、図7Aに記載の形式のタスクグラフ指定プログラムの例示的なコードリスティングを含む。図7Bは、プログラムから生成された例示的なタスクグラフ750を示す。
Figure 2023527322000003

この例では、パスブロックは、1つのパスコマンドのみを含む。パスコマンドは、本明細書の他の箇所に記載されているもの等のように、パスコマンドとして指定されたコマンドのセットのうち1つであるコマンドとして識別される。言い換えれば、タスクグラフ指定プロセッサ402は、パスコマンドと見なされ、リスト内に見出されるプログラムの全てのコマンドをパスコマンドとして識別するコマンドタイプのリストへのアクセスを有する。表2の例示的なタスクグラフ指定プログラムは、3つの異なるパスブロックを含む。第1のパスブロックは、SetState(State1)記述から第1のパスコマンドDraw1()への部分である。第2のパスブロックは、SetState(State2)記述で始まり、Draw2()パスコマンドで終了する、if記述における部分である。第3のパスブロックは、SetResource(read:r5、write:r3)で始まり、Draw3()で終了する、if記述の部分である。
タスクグラフ750(1)として示される、表2のタスクグラフ指定プログラムの実行の一例では、条件Bは真である。したがって、タスクグラフ指定プロセッサ402は、リソース1 754(1)を入力し、リソース2 754(2)を出力するパス1、リソース2 754(2)を入力し、リソース5 754(5)を出力するパス2、及び、リソース5 754(5)を入力し、リソース3 754(3)を出力するパス3を含む、タスクグラフ750(1)においてパスを生成する。
タスクグラフ750(2)として示される、表2のタスクグラフ指定プログラムの実行の別の例では、条件Bは偽である。したがって、タスクグラフ指定プロセッサ402は、リソース1 754(1)を入力し、リソース2 754(2)754(2)を出力するが、パス2又は3を生成しないパス1を生成する。
上述したように、コマンドスケジューラ404は、タスクグラフ指定プロセッサ402によって出力されたタスクグラフに基づいて、APD116上での実行のためのタスクをスケジューリングする。コマンドスケジューラ404は、特定の考慮事項に基づいて、パスの実行順序を決定する。考慮事項の1つは、パス502の依存性を含む。より具体的には、1つ以上の依存性を有するパス502は、互いに対して再順序付けすることができない。例えば、第1のパス502が第2のパス502に依存する場合、コマンドスケジューラ404は、次いで、第2のパス502が完了した後に第1のパス502を実行させる。いくつかの例では、コマンドスケジューラ404は、バリア命令又はプリミティブ等の適切な命令又はマーカを挿入して、パス502間で順序付けを施す。第1のパス502が第2のパス502に依存せず、第2のパスが第1のパス502に依存しない場合、コマンドスケジューラ404は、次いで、任意の技術的に実現可能な方法で、互いに対する第1のパス502及び第2のパス502の実行を自由に順序付けることができ、いくつかの状況では、それを行う。例えば、場合によっては、コマンドスケジューラ404は、独立したパスを次々に実行させ、他の場合によっては、コマンドスケジューラ404は、少なくとも部分的に重複する期間中に独立したパスを実行させる。多くの場合、コマンドスケジューラ404は、メモリ使用、処理ユニットリソース、レジスタ使用等の特定の所望のリソースを最適化するか、又は実行時間を最小限に抑えるために、一緒に実行するためにパス502を選択する。
図8Aは、一例による、タスクグラフ800を示す。第1のパス802(1)は、リソース1 804(1)を読み取り、リソース2 804(2)を出力する。パス2 802(2)は、リソース2 804(2)を入力し、リソース3 804(3)を出力する。パス3 802(3)は、リソース2 804(2)を入力し、リソース4 804(4)を出力する。パス4 802(4)は、リソース2 804(2)を入力し、リソース5 804(5)を出力する。パス5は、802(5)を入力し、リソース6 804(6)を出力する。
パス2 802(2)、パス3 802(3)及びパス4 802(4)は独立しており、パス2 802(1)に依存する。パス5 802(5)は、パス1 802(1)、パス2 804(2)、パス3 802(3)及びパス4 802(4)に依存する。パス2 802(2)、パス3 802(3)及びパス4 802(4)は独立しているため、コマンドスケジューラ404は、これらのパス802の互いに対する実行を再順序付けすることができる。しかしながら、コマンドスケジューラ404は、依存パス間の順序を施し、パス1 402(1)が、パス2 802(2)、パス3 802(3)及びパス4 802(4)の前に実行され、パス2 802(2)、パス3 802(3)及びパス4 802(4)が、パス5 802(5)の前に実行されることを意味する。
図8Bは、コマンドスケジューラ404によってスケジューリングされたように、パス802の例示的な実行順序850を示す。図示したように、時間は右に進む。実施例1 850(1)では、パス1 802(1)は、パス2 802(2)、パス3 802(3)及びパス4 802(4)の前に実行され、パス2 802(2)、パス3 802(3)及びパス4 802(4)は、同時に実行される。実施例2 850(2)では、パス1 802(1)は、パス2 802(2)及びパス3 802(3)の前に実行される。パス4 802(4)は、パス2 802(2)及びパス3 802(3)の後に実行され、パス5 802(5)の前に実行される。実施例3 850(3)では、パス802は順次実行される。
いくつかの実装形態では、図7A及び図7Bの技術、並びに、図6A及び図6Bの制御フロー命令604及びパス呼び出し606のための(しかし、パス定義605のためではない)タスクグラフ指定プログラム全体に、特定のプログラミング言語が使用される。そのような実装形態では、図6A及び図6Bの例では、パス定義605は、コンパイルされる異なるプログラミング言語で書き込まれる。これらのパス定義605は、対応するパスが実行される場合に、APD116によって呼び出される。
独立したパスをスケジューリングする方法802を決定するために、コマンドスケジューラ404は、APD116の状態及びパス802の性能メトリックを考慮する。APD116の「状態」を構成する情報のいくつかの異なるアイテムが存在する。性能メトリックのいくつかの例には、リソース使用及び実行速度が含まれる。リソースは、メモリ、レジスタ及び処理ユニット(SIMDユニット138等)を含む。いくつかの例では、コマンドスケジューラ404は、将来の同じパス802のスケジューリング中の使用のために、実行中にパス802の性能メトリックを記録する。より具体的には、コマンドスケジューラ404は、それらのパスのために事前に知られているリソース使用に基づいて、特定のパスの推定リソース使用データを更新し、そのような更新された推定リソース使用データを利用して、将来のスケジューリング決定を行う。
上述したように、コマンドスケジューラ404は、時には、1つ以上の計算ユニット132上での同時の実行のために独立したパス502をスケジューリングする。コマンドスケジューラ404は、パス502の性質並びにAPD116の能力及び状態に基づいて、異なるパス502を同時にスケジューリングするかどうかを決定する。より具体的には、いくつかの状況では、独立したパス502を同時にスケジューリングし、他の状況では、独立したパス502を同時にスケジューリングすることが有利である。「同時に」という用語は、2つ(又はそれ以上)のパス502が少なくとも部分的に重複する期間で実行することを意味する。
パス502は、メモリ、処理ユニット(例えば、SIMDユニット138)、レジスタ等のようなリソースを消費する。したがって、APD116が特定のリソースに制限され、実行パス502が同時に利用可能なリソースの数を超える状況では、コマンドスケジューラ404は、そのようなパス502を同時にスケジューリングしない。逆に、リソースが同時実行のために利用可能である状況では、コマンドスケジューラ404は、時には、そのようなパス502を同時にスケジューリングする。加えて、動作中、コマンドスケジューラ404は、そのような決定に基づいて、速度又はリソースの使用等の態様を強調し、独立したパス502をスケジューリングするかどうかを決定する。一例では、複数のパス502を同時に実行することは、それらのパス502の総実行時間を同時に低減させるが、任意の所与の時間に総リソース使用を増加させる。複数のパス502を実行することは、合計実行時間を連続的に増加させるが、所定の時間に総リソース使用を低減させる。逆に、複数のパス502を同時に実行することは、合計実行時間を同時に減少させるが、所定の時間に総リソース使用を増加させる。
コマンドスケジューラ404の別の考慮事項は、異なるパス502が異なるリソースを使用するかどうかである。より具体的には、異なるパス502が異なるタイプのリソースを使用する場合、又は、1つのパス502が少量の特定のリソースを使用し、別のパス502が多量のリソースを使用する場合、次いで、それらを一緒にスケジューリングすることが有益であろう。一例では、1つのパス502は、SIMDユニット138の非常に重い使用を有し、一方、別のパス502は、SIMDユニット138の軽い使用を有する。この状況では、場合によっては、コマンドスケジューラ404は、実行のためのこれらの2つのパスを同時にスケジューリングする。
更に、コマンドスケジューラ404は、特定のバッファ504が使用される期間を低減することによって、所定の時間にメモリ使用を低減させることができる。より具体的には、タスクグラフ500を分析することによって、コマンドスケジューラは、任意の特定のバッファ504の寿命を決定することができる。バッファ504の寿命は、バッファ504を生成するパス502と、そのバッファ504を消費する最後のパス502との間の期間である。いくつかの実装形態では、メモリ使用が高い場合等のいくつかの状況では、コマンドスケジューラ404は、完了がその寿命を終了させる傾向があるパス502を同時にスケジューリングすることによって、バッファ504の寿命を最小化する。言い換えれば、バッファ504の寿命を低減させるために、コマンドスケジューラ404は、バッファ504を使用するための可能性のある最後のパス502であるパス502を識別し、コマンドスケジューラ404は、可能な最後のパス502が依存するパス502を識別する。次いで、コマンドスケジューラ404は、可能な場合の同時の実行のために、そのような識別されたパス502をスケジューリングすることを試みる(例えば、独立したパス502は、同時の実行のためにスケジューリングされ得る)。「可能性のある最後のパス」は、バッファ504を使用するための、トポロジーソート順序で最後のパスであるパス、又は、バッファ504を使用するための、トポロジーソート順序で最後のパスであり得る独立したパス502のうち何れかである。この技術を使用して、リソース作業セットを、キャッシュ又は他のメモリ等のメモリ階層の特定の部分に留まるように保つことも可能である。言い換えれば、上記技術を使用して、メモリ利用がメモリ階層の特定の部分内に適合するように、パス502のメモリ利用を制限することが可能である(例えば、全てのレベル0キャッシュ、全てのレベル1キャッシュ等)。
トポロジーソートは、有向非巡回グラフのノードがグラフの有向エッジに基づいて順序付けられる技術である。ソートにおいて、有向エッジの開始時のノードは、常に、それらの有向エッジの終了のノードの前にある。それらの間に有向エッジを有さないノードのための任意の順序は、有効なトポロジーソートを生成する。したがって、複数のパス502がバッファ504を使用するが独立している場合、そのようなパス502は、バッファ504を有効なトポロジーソート順序で使用するための最後のものであってもよく、次いで、そのような各パス502は、可能な最後のパス502である。
いくつかの実装形態では、その寿命中に存在するパス502は、全ての使用バッファ504を含む複数の独立したパス502を含む。早期に実行するためにバッファ504の消費者を積極的にスケジューリングすることにより、バッファ504の寿命が低減される。
追加のスケジューリング技術では、コマンドスケジューラ404は、大きなパスをいくつかのより小さなパスに自動的に分解し、それらを独立してスケジューリングする。
図9は、一例による、スケジューリングのためのタスクグラフを構築する方法900のフロー図である。図1~図8Bのシステムに関して説明したが、当業者であれば、任意の技術的に実現可能な順序で方法900のステップを行うように構成された任意のシステムが本開示の範囲内にあることを認識するであろう。
方法900は、ステップ902で始まり、タスクグラフ指定プロセッサ402は、実行のためにタスクグラフ指定プログラム902を受信する。タスクグラフ指定プログラムは、APD116上でのスケジューリング及び実行のためにタスクグラフを生成する方法をプログラム的に指定する。ステップ904で、タスクグラフ指定プログラム902は、タスクグラフ指定プログラム902において指定されたように、制御フロー命令を実行して、タスクグラフ指定プログラム902を横断する。これらの制御フロー命令には、条件付き命令、ループ等の命令が含まれる。ステップ906~910の前のように、図9内のステップ904の順序は、ステップ904がその順序で1回のみ実行されることを必ずしも意味するものではない。代わりに、ステップ904は、制御フロー命令が、そのプログラム内に見出される何れかの順序で、タスクグラフ指定プログラムによって指定されるように実行されることを示すことを理解されたい。
ステップ906で、タスクグラフ指定プロセッサ402は、タスクグラフ指定プログラムのパス命令に基づいて、(パス502に対応する)ノードを生成する。図6A~図6Bの形式では、パス命令は、パス呼び出し606である。パス呼び出しの各実行は、制御フロー命令によって指定された順序で、タスクグラフのノードを生成する。図7A~図7Bの形式については、パス命令は、パスブロック710である。具体的には、タスクグラフ指定プロセッサ402は、本明細書の他の場所で指定された方法でこれらのパスブロック710を識別し、これらのパスブロック710からノードを生成する。
ステップ908で、タスクグラフ指定プロセッサ402は、タスクグラフが生成される際に、各ノードのリソース利用に基づいて、生成されたノード間のリソース及び有向エッジを生成する。ノードによって読み取られるリソースの場合、タスクグラフ指定プロセッサ402は、そのリソースからノードへの有向エッジを生成する。ノードによって書き込まれるリソースの場合、タスクグラフ指定プロセッサ402は、ノードからそのリソースへの有向エッジを生成する。ステップ910で、タスクグラフ指定プロセッサ402は、タスクグラフを、APD116又は他のデバイス上でスケジューリングするためにコマンドスケジューラ404に出力する。
図10は、一例による、タスクグラフに基づく処理デバイス上の動作をスケジューリングするための方法1000のフロー図である。図1~図8Bのシステムに関して説明したが、当業者であれば、任意の技術的に実現可能な順序で方法1000のステップを行うように構成された任意のシステムが本開示の範囲内にあることを認識するであろう。
方法1000は、ステップ1002で始まり、コマンドスケジューラ404は、タスクグラフを受信する。いくつかの例では、タスクグラフは、タスクグラフ指定プロセッサ402によって生成される。いくつかの例では、コマンドスケジューラ404は、タスクグラフ指定プロセッサ402と同じ処理デバイス、又は、タスクグラフ指定プロセッサ402とは異なる処理デバイス上にある。様々な例示的な構成を図4A~図4Cに示す。
ステップ1004で、コマンドスケジューラ404は、タスクグラフの独立した及び依存的なパスを識別する。そのようなパスを識別するための技術は、本明細書の他の箇所に記載されている。ステップ1006で、コマンドスケジューラ404は、性能基準に基づいて、処理デバイス上での実行のためにどのようにスケジューリングするかを決定する。パスをスケジューリングするためのいくつかの技術及び考慮事項は、図9の説明の前等の本明細書の他の場所で説明され、図8A及び図8Bに関連する説明を含む。スケジューリングステップ1006は、これらの技術のうち何れか1つ以上を実行することを伴う。一般に、コマンドスケジューラ404は、独立したパスをスケジューリングして、特定のリソースの最良の利用(例えば、メモリ、レジスタ、処理時間等)及び/又は処理デバイスの他の要因(例えば、ハードウェアユニット)であると見なされるものを提供する。更に、依存性に起因して連続的に発生しなければならないパスについては、コマンドスケジューラ404は、そのようなパスを連続的に発生させる。いくつかの例では、コマンドスケジューラ404は、依存的なパスが完了を開始する前に1つのパスの全ての動作を完了させるバリアコマンドを介して、そのようなパスを連続的に発生させる。ステップ1008で、コマンドスケジューラ404は、スケジューリングされたコマンドを、スケジューリングされたような実行のために処理デバイスに送信する。
本明細書で提供される本開示では、タスクグラフの実行のためにスケジューリングされたコマンドを最終的に実行するデバイスは、APD116である。しかしながら、実装形態は、具体的に説明されたもの以外の処理デバイスがこれらのコマンドを実行する本明細書によって企図されることを理解されたい。いくつかの例では、APD116と同様であるが、グラフィックス能力がないデバイス(例えば、グラフィックス処理パイプライン134を含まず、計算ワークロードを実行することができる)は、処理デバイスである。他の例では、中央処理ユニットは、処理デバイスである。他の例では、任意の他の処理ユニットは、処理デバイスである。
図3のプロセッサ102、記憶装置106、メモリ104、入力ドライバ112、入力デバイス108、出力ドライバ114、APD116、表示デバイス118、出力デバイス110、ドライバ122、オペレーティングシステム120、アプリケーション126、グラフィックス処理パイプライン134、計算ユニット132、SIMDユニット138、APDスケジューラ136、及び、グラフィックス処理パイプライン134の各段階を含む図のユニットの何れかは、適切な場合、記載された動作を実行するように構成されたハードウェアとして実装可能であり、プロセッサ上で実行させるソフトウェアとして実装可能であり、記載された動作を実行するように構成されているソフトウェア、又は、ハードウェアとソフトウェアとの組み合わせである。
本明細書の開示に基づいて、多くの変形が可能であることを理解されたい。特徴及び要素が特定の組み合わせで上述されているが、各特徴又は要素は、他の特徴及び要素を用いずに単独で、又は、他の特徴及び要素を用いて若しくは用いずに様々な組み合わせで使用することができる。
提供される方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実装することができる。好適なプロセッサとしては、例として、汎用プロセッサ、専用プロセッサ、従来型プロセッサ、デジタル信号プロセッサ(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. 処理デバイス上のタスクグラフの動作をスケジューリングする方法であって、
    1つ以上のパスと、1つ以上のリソースと、パスとリソースとの間の1つ以上の有向エッジと、を指定するタスクグラフを受信することと、
    前記タスクグラフの独立したパス及び依存的なパスを識別することと、
    前記処理デバイスの性能基準に基づいて、前記パスを実行するためのコマンドをスケジューリングすることと、
    スケジュール通りに実行するために、スケジューリングされたコマンドを前記処理デバイスに送信することと、を含む、
    方法。
  2. 独立したパスを識別することは、互いに依存関係がないパスのセットを識別することを含む、
    請求項1の方法。
  3. 前記パスを実行するためのコマンドをスケジューリングすることは、
    前記パスのセットのうち少なくとも2つのパスを少なくとも部分的に同時に実行するようにスケジューリングすることを含む、
    請求項2の方法。
  4. 前記2つのパスを少なくとも部分的に同時にスケジューリングすることは、前記2つのパスのうち一方が前記処理デバイスの少数のリソースを利用し、前記2つのパスのうち他方が前記処理デバイスの多数のリソースを利用することを決定したことに応じて実行される、
    請求項3の方法。
  5. 前記性能基準は、前記処理デバイスのリソースの利用を低減するための要件を含む、
    請求項3の方法。
  6. 前記リソースは、メモリ利用又はレジスタ利用のうち何れかを含む、
    請求項5の方法。
  7. 前記リソースは、前記2つのパスによって読み取られるバッファのメモリ利用を含み、前記2つのパスを少なくとも部分的に同時にスケジューリングすることは、前記バッファの寿命を低減させる、
    請求項5の方法。
  8. 前記1つ以上のパスのうち第2のパスに依存する、前記1つ以上のパスのうち第1のパスを識別することを更に含む、
    請求項1の方法。
  9. 前記第2のパスが完了した後に前記第1のパスを実行させるように、前記処理デバイスにバリアコマンドを送信することを更に含む、
    請求項8の方法。
  10. 前記スケジューリングすることは、オペレーティングシステムによる介入なしに前記処理デバイスから処理メトリックを取得することができる前記処理デバイス内のスケジューラによって実行される、
    請求項1の方法。
  11. 処理デバイス上のタスクグラフの動作をスケジューリングするためのシステムであって、
    コマンドスケジューラを備え、
    前記コマンドスケジューラは、
    1つ以上のパスと、1つ以上のリソースと、パスとリソースとの間の1つ以上の有向エッジと、を指定するタスクグラフを受信することと、
    前記タスクグラフの独立したパス及び依存的なパスを識別することと、
    前記処理デバイスの性能基準に基づいて、前記パスを実行するためのコマンドをスケジューリングすることと、
    スケジューリング通りに実行するために、スケジューリングされたコマンドを前記処理デバイスに送信することと、
    を行うように構成されている、
    システム。
  12. 独立したパスを識別することは、互いに依存関係がないパスのセットを識別することを含む、
    請求項11のシステム。
  13. 前記パスを実行するためのコマンドをスケジューリングすることは、
    前記パスのセットのうち少なくとも2つのパスを少なくとも部分的に同時に実行するようにスケジューリングすることを含む、
    請求項12のシステム。
  14. 前記2つのパスを少なくとも部分的に同時にスケジューリングすることは、前記2つのパスのうち一方が前記処理デバイスの少数のリソースを利用し、前記2つのパスのうち他方が前記処理デバイスの多数のリソースを利用することを決定したことに応じて実行される、
    請求項13のシステム。
  15. 前記性能基準は、前記処理デバイスのリソースの利用を低減するための要件を含む、
    請求項13のシステム。
  16. 前記リソースは、メモリ利用又はレジスタ利用のうち何れかを含む、
    請求項15のシステム。
  17. 前記リソースは、前記2つのパスによって読み取られるバッファのメモリ利用を含み、前記2つのパスを少なくとも部分的に同時にスケジューリングすることは、前記バッファの寿命を低減させる、
    請求項15のシステム。
  18. 前記コマンドスケジューラは、前記1つ以上のパスのうち第2のパスに依存する、前記1つ以上のパスのうち第1のパスを識別するように更に構成されている、
    請求項11のシステム。
  19. 前記コマンドスケジューラは、前記第2のパスが完了した後に前記第1のパスを実行させるように、前記処理デバイスにバリアコマンドを送信するように更に構成されている、
    請求項18のシステム。
  20. 命令を記憶するコンピュータ可読記憶媒体であって、
    前記命令は、プロセッサによって実行されると、
    1つ以上のパスと、1つ以上のリソースと、パスとリソースとの間の1つ以上の有向エッジと、を指定するタスクグラフを受信することと、
    前記タスクグラフの独立したパス及び依存的なパスを識別することと、
    前記処理デバイスの性能基準に基づいて、前記パスを実行するためのコマンドをスケジューリングすることと、
    スケジューリング通りに実行するために、スケジューリングされたコマンドを前記処理デバイスに送信することと、
    によって、処理デバイス上のタスクグラフの動作を前記プロセッサにスケジューリングさせる、
    コンピュータ可読記憶媒体。
JP2022571760A 2020-05-29 2021-05-18 ワークロード処理のためのタスクグラフスケジューリング Pending JP2023527322A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/888,540 US11481256B2 (en) 2020-05-29 2020-05-29 Task graph scheduling for workload processing
US16/888,540 2020-05-29
PCT/US2021/033035 WO2021242577A1 (en) 2020-05-29 2021-05-18 Task graph scheduling for workload processing

Publications (1)

Publication Number Publication Date
JP2023527322A true JP2023527322A (ja) 2023-06-28

Family

ID=78704824

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022571760A Pending JP2023527322A (ja) 2020-05-29 2021-05-18 ワークロード処理のためのタスクグラフスケジューリング

Country Status (6)

Country Link
US (1) US11481256B2 (ja)
EP (1) EP4158584A4 (ja)
JP (1) JP2023527322A (ja)
KR (1) KR20230017212A (ja)
CN (1) CN115699072A (ja)
WO (1) WO2021242577A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11797337B2 (en) * 2020-08-21 2023-10-24 Leica Microsystems Cms Gmbh Data processing management methods for imaging applications
CN115033373A (zh) * 2022-03-08 2022-09-09 西安电子科技大学 一种移动边缘计算网络中逻辑依赖性任务的调度卸载方法

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7496912B2 (en) 2004-02-27 2009-02-24 International Business Machines Corporation Methods and arrangements for ordering changes in computing systems
US8069446B2 (en) * 2009-04-03 2011-11-29 Microsoft Corporation Parallel programming and execution systems and techniques
US8887163B2 (en) * 2010-06-25 2014-11-11 Ebay Inc. Task scheduling based on dependencies and resources
US20130063460A1 (en) * 2011-09-08 2013-03-14 Microsoft Corporation Visual shader designer
US9996394B2 (en) 2012-03-01 2018-06-12 Microsoft Technology Licensing, Llc Scheduling accelerator tasks on accelerators using graphs
US20130332937A1 (en) 2012-05-29 2013-12-12 Advanced Micro Devices, Inc. Heterogeneous Parallel Primitives Programming Model
US9332083B2 (en) 2012-11-21 2016-05-03 International Business Machines Corporation High performance, distributed, shared, data grid for distributed Java virtual machine runtime artifacts
US9424079B2 (en) 2013-06-27 2016-08-23 Microsoft Technology Licensing, Llc Iteration support in a heterogeneous dataflow engine
US9652286B2 (en) 2014-03-21 2017-05-16 Oracle International Corporation Runtime handling of task dependencies using dependence graphs
US9442760B2 (en) * 2014-10-03 2016-09-13 Microsoft Technology Licensing, Llc Job scheduling using expected server performance information
US9984037B1 (en) 2015-04-27 2018-05-29 Synaptic Engines, Llc Scheduler for a fine grained graph processor
US10579341B2 (en) 2015-06-08 2020-03-03 Synopsys, Inc. Generation of workload models from execution traces
US20170109214A1 (en) * 2015-10-16 2017-04-20 Qualcomm Incorporated Accelerating Task Subgraphs By Remapping Synchronization
US10095482B2 (en) 2015-11-18 2018-10-09 Mastercard International Incorporated Systems, methods, and media for graphical task creation
US10331495B2 (en) 2016-02-05 2019-06-25 Sas Institute Inc. Generation of directed acyclic graphs from task routines
US10620994B2 (en) 2017-05-30 2020-04-14 Advanced Micro Devices, Inc. Continuation analysis tasks for GPU task scheduling
GB2569270B (en) * 2017-10-20 2020-02-19 Graphcore Ltd Parallel computing
US10713746B2 (en) 2018-01-29 2020-07-14 Microsoft Technology Licensing, Llc FIFO queue, memory resource, and task management for graphics processing
US10754709B2 (en) 2018-09-26 2020-08-25 Ciena Corporation Scalable task scheduling systems and methods for cyclic interdependent tasks using semantic analysis
US11080101B2 (en) * 2019-03-22 2021-08-03 Apple Inc. Dependency scheduling for control stream in parallel processor
US20200371843A1 (en) 2019-05-25 2020-11-26 Synopsys, Inc. Framework for application driven exploration and optimization of hardware engines
US10861126B1 (en) * 2019-06-21 2020-12-08 Intel Corporation Asynchronous execution mechanism
US11182207B2 (en) * 2019-06-24 2021-11-23 Nvidia Corporation Pre-fetching task descriptors of dependent tasks
US20210149734A1 (en) * 2019-11-15 2021-05-20 Nvidia Corporation Techniques for modifying an executable graph to perform a workload associated with a new task graph
WO2021178666A1 (en) 2020-03-04 2021-09-10 Mythic, Inc. Systems and methods for intelligently buffer tracking for optimized dataflow within an integrated circuit architecture
CN113874906A (zh) * 2020-03-20 2021-12-31 辉达公司 资源受限调度的编程模型

Also Published As

Publication number Publication date
EP4158584A1 (en) 2023-04-05
KR20230017212A (ko) 2023-02-03
US20210373957A1 (en) 2021-12-02
WO2021242577A1 (en) 2021-12-02
US11481256B2 (en) 2022-10-25
EP4158584A4 (en) 2024-04-24
CN115699072A (zh) 2023-02-03

Similar Documents

Publication Publication Date Title
KR102510524B1 (ko) 조합된 월드-공간 파이프라인 셰이더 스테이지
US10102662B2 (en) Primitive culling using automatically compiled compute shaders
KR102346119B1 (ko) 입력 인덱스 스트림 내 프리미티브의 식별
KR102266962B1 (ko) 그래픽 파이프라인의 메모리 사용 감소를 위한 컴파일러 지원 기술
JP2023527322A (ja) ワークロード処理のためのタスクグラフスケジューリング
JP2022541461A (ja) チップレット統合型機械学習アクセラレータ
US11195326B2 (en) Method and system for depth pre-processing and geometry sorting using binning hardware
JP7121019B2 (ja) アウトオブオーダのピクセルシェーダのエクスポート
US11061429B2 (en) Fine-grained speed binning in an accelerated processing device
US11275586B2 (en) Task graph generation for workload processing
GB2574579A (en) System and graphics processing method utilizing predefined render chunks
JP2023527323A (ja) 機械学習アクセラレータのための積層ダイ
US20230205584A1 (en) Control flow invariant resource identification
US11900499B2 (en) Iterative indirect command buffers
US20240070961A1 (en) Vertex index routing for two level primitive batch binning
JP2023532433A (ja) マルチサンプルアンチエイリアシングのためのロード命令
JP2024511764A (ja) ウェーブフロント(wavefront)の選択及び実行
KR20230162023A (ko) 서브패스 인터리빙을 통한 동기화 프리 크로스 패스 비닝

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20240508