(57)【特許請求の範囲】
【請求項１】
複数のプログラム可能なワークロードを実行するためのコンピューティングデバイスであって、
ダイレクトメモリアクセスパケットを生成する中央処理装置であって、前記ダイレクトメモリアクセスパケットは、前記複数のプログラム可能なワークロードの各々について別個のディスパッチ命令を含む、中央処理装置と、
前記複数のプログラム可能なワークロードの処理を並列実行可能な複数の実行ユニットを有するグラフィック処理ユニットであって、前記複数のプログラム可能なワークロードの各々は、ユーザ空間アプリケーションから要求されたグラフィック処理ユニットタスクを実行する複数のグラフィック処理ユニット命令のセットを含み、前記ダイレクトメモリアクセスパケットの複数の前記別個のディスパッチ命令の各々は、前記複数のプログラム可能なワークロードの１つの前記グラフィック処理ユニットによる処理を開始する、グラフィック処理ユニットと、
前記中央処理装置によってアクセス可能なメモリから前記グラフィック処理ユニットによってアクセス可能なメモリに、前記ダイレクトメモリアクセスパケットの通信を行わせるダイレクトメモリアクセスサブシステムと、
を備える、コンピューティングデバイス。
【請求項２】
前記中央処理装置は、人間可読コンピュータコードで具現された複数のディスパッチコマンドを含むコマンドバッファを生成し、前記ダイレクトメモリアクセスパケットの複数の前記ディスパッチ命令は、前記コマンドバッファの前記複数のディスパッチコマンドに対応する、請求項１に記載のコンピューティングデバイス。
【請求項３】
前記中央処理装置は、前記コマンドバッファを生成するユーザ空間ドライバを実行し、前記中央処理装置は、前記ダイレクトメモリアクセスパケットを生成するデバイスドライバを実行する、請求項２に記載のコンピューティングデバイス。
【請求項４】
前記中央処理装置は、依存関係を有する複数のプログラム可能なワークロードについて第１のタイプのダイレクトメモリアクセスパケットと、依存関係を有さない複数のプログラム可能なワークロードについて第２のタイプのダイレクトメモリアクセスパケットとを生成し、前記第１のタイプのダイレクトメモリアクセスパケットは、前記第２のタイプのダイレクトメモリアクセスパケットと異なる、請求項１から３のいずれか１項に記載のコンピューティングデバイス。
【請求項５】
前記第１のタイプのダイレクトメモリアクセスパケットは、複数の前記ディスパッチ命令の２つの間に同期命令を含み、前記第２のタイプのダイレクトメモリアクセスパケットは、複数の前記ディスパッチ命令の間に同期命令を１つも含まない、請求項４に記載のコンピューティングデバイス。
【請求項６】
前記ダイレクトメモリアクセスパケットの複数の前記ディスパッチ命令の各々は、前記複数の実行ユニットのうちの対応する１つの実行ユニットによって、前記複数のプログラム可能なワークロードの１つの処理を開始する、請求項１から３のいずれか１項に記載のコンピューティングデバイス。
【請求項７】
前記ダイレクトメモリアクセスパケットは、前記グラフィック処理ユニットによる前記複数のプログラム可能なワークロードの１つの実行が、前記グラフィック処理ユニットが前記複数のプログラム可能なワークロードの他のものの実行を開始する前に終了することを保証する同期命令を含む、請求項１から３のいずれか１項に記載のコンピューティングデバイス。
【請求項８】
前記ユーザ空間アプリケーションは、知覚コンピューティングアプリケーションを含む、請求項１から３のいずれか一項に記載のコンピューティングデバイス。
【請求項９】
前記グラフィック処理ユニットタスクは、デジタルビデオのフレーム処理を含む、請求項１から３のいずれか一項に記載のコンピューティングデバイス。
【請求項１０】
複数のプログラム可能なワークロードをグラフィック処理ユニットにサブミットするためのコンピューティングデバイスであって、前記複数のプログラム可能なワークロードの各々は、ユーザ空間アプリケーションから要求されたグラフィック処理ユニットタスクを実行する複数のグラフィック処理ユニット命令のセットを含み、前記コンピューティングデバイスは、
ユーザ空間アプリケーションと前記グラフィック処理ユニットとの間における通信を補助するグラフィックサブシステムと、
前記複数のプログラム可能なワークロードの各々について別個の複数のディスパッチコマンドを含む単一のコマンドバッファを生成するバッチサブミットメカニズムと、
を備え、
前記コマンドバッファの前記別個の複数のディスパッチコマンドの各々は、前記複数のプログラム可能なワークロードの１つの前記グラフィック処理ユニットによる処理を別個に開始し、
前記グラフィック処理ユニットは、前記複数のプログラム可能なワークロードの処理を並列実行可能な複数の実行ユニットを有する、コンピューティングデバイス。
【請求項１１】
ダイレクトメモリアクセスパケットを生成するデバイスドライバを備え、前記ダイレクトメモリアクセスパケットは、前記コマンドバッファの前記複数のディスパッチコマンドに対応する複数のグラフィック処理ユニット命令を含む、請求項１０に記載のコンピューティングデバイス。
【請求項１２】
前記複数のディスパッチコマンドは、前記グラフィック処理ユニットに、前記複数のプログラム可能なワークロードの全てを並列に実行させる、請求項１０又は請求項１１に記載のコンピューティングデバイス。
【請求項１３】
前記グラフィック処理ユニットに、プログラム可能なワークロードの実行を、他のプログラム可能なワークロードの前記実行を開始する前に完了させる同期コマンドを、前記コマンドバッファに挿入する同期メカニズムを備える、請求項１０又は請求項１１に記載のコンピューティングデバイス。
【請求項１４】
前記同期メカニズムは、前記バッチサブミットメカニズムのコンポーネントとして具現される、請求項１３に記載のコンピューティングデバイス。
【請求項１５】
前記バッチサブミットメカニズムは、前記グラフィックサブシステムのコンポーネントとして具現される、請求項１０から１２のいずれか１項に記載のコンピューティングデバイス。
【請求項１６】
前記グラフィックサブシステムは、アプリケーションプログラミングインタフェース、複数のアプリケーションプログラミングインタフェース、及びランタイムライブラリの１つ又は複数として具現される、請求項１５に記載のコンピューティングデバイス。
【請求項１７】
複数のプログラム可能なワークロードをグラフィック処理ユニットにサブミットするための方法であって、前記複数のプログラム可能なワークロードの各々は、ユーザ空間アプリケーションから要求されたグラフィック処理ユニットタスクを実行する複数のグラフィック処理ユニット命令のセットを含み、
コンピューティングデバイスにより、
コマンドバッファを生成する段階と、
複数のディスパッチコマンドを前記コマンドバッファに追加する段階であって、前記複数のディスパッチコマンドの各々は、前記コンピューティングデバイスのグラフィック処理ユニットによる前記複数のプログラム可能なワークロードの１つの実行を開始する、段階と、
前記コマンドバッファの前記複数のディスパッチコマンドに対応する、前記複数のプログラム可能なワークロードの各々に対する前記複数のグラフィック処理ユニット命令を含むダイレクトメモリアクセスパケットを生成する段階と、
を備え、
前記グラフィック処理ユニットは、前記複数のプログラム可能なワークロードの処理を並列実行可能な複数の実行ユニットを有する、方法。
【請求項１８】
前記グラフィック処理ユニットによってアクセス可能なメモリへの、前記ダイレクトメモリアクセスパケットの通信を行わせる段階を備える、請求項１７に記載の方法。
【請求項１９】
前記コマンドバッファの前記複数のディスパッチコマンドの２つの間に同期コマンドを挿入する段階を備え、前記同期コマンドは、前記グラフィック処理ユニットが前記複数のプログラム可能なワークロードの他のものの処理を開始する前に、前記グラフィック処理ユニットが前記複数のプログラム可能なワークロードの１つの前記処理を完了することを保証する、請求項１７に記載の方法。
【請求項２０】
前記複数のディスパッチコマンドの各々を定式化し、前記複数のプログラム可能なワークロードの１つについて、複数の引数のセットを生成する段階を備える、請求項１７に記載の方法。
【請求項２１】
前記複数のディスパッチコマンドの各々を定式化し、前記複数のプログラム可能なワークロードの１つについて、スレッド空間を生成する段階を備える、請求項１７に記載の方法。
【請求項２２】
前記コンピューティングデバイスのダイレクトメモリアクセスサブシステムによって、前記ダイレクトメモリアクセスパケットを、中央処理装置によってアクセス可能なメモリから前記グラフィック処理ユニットによってアクセス可能なメモリに転送する段階を備える、請求項１７に記載の方法。
【請求項２３】
中央処理装置と、前記グラフィック処理ユニットと、複数の命令が格納されたメモリと、を備え、前記複数の命令は、前記中央処理装置によって実行された場合に、前記コンピューティングデバイスに、請求項１７から２２のいずれか１項に記載の方法を実行させる、コンピューティングデバイス。
【請求項２４】
実行されたことに応答して、コンピューティングデバイスに請求項１７から２２のいずれか１項に記載の方法を実行させる、プログラム。
【請求項２５】
請求項２４に記載のプログラムを格納する機械可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
コンピューティングデバイスにおいて、グラフィック処理ユニット（ＧＰＵ）は、多くの場合、演算オペレーションを高速で実行可能な電子回路を提供することによって、中央処理装置（ＣＰＵ）を補う。これを実行すべく、ＧＰＵは、メモリ要求及びコンピューティングのレイテンシを克服すべく、広範な並列処理及び多くの並行スレッドを利用する。ＧＰＵの機能は、高性能グラフィック処理及び並列コンピューティングタスクを加速するために、これらを活用する。例えば、ＧＰＵは、メディア又は３Ｄアプリケーションの表面に現れる２次元（２Ｄ）又は３次元（３Ｄ）画像の処理を加速することができる。
【０００２】
コンピュータプログラムは、特にＧＰＵのために書かれることができる。ＧＰＵアプリケーションの例は、ビデオエンコード／デコード、３次元ゲーム及び他の汎用コンピューティングアプリケーションを含む。ＧＰＵのプログラミングインタフェースは、２つの部分から構成される。１つは、開発者がプログラムをＧＰＵ上で動作するように書き込むことを可能にする高水準プログラミング言語であり、ＧＰＵプログラムのためにＧＰＵ固有の命令（例えばバイナリコード）をコンパイル及び生成する対応コンパイラソフトウェアを含む。ＧＰＵによって実行されるプログラムを構成する複数のＧＰＵ固有の命令のセットは、プログラム可能なワークロード又は「カーネル」と称されることがある。ホストプログラミングインタフェースの他の部分は、ホストランタイムライブラリであり、ＣＰＵ側で動作し、ユーザがＧＰＵに対してＧＰＵプログラムを実行のために起動することを可能にするＡＰＩのセットを提供する。２つのコンポーネントは、ＧＰＵプログラミングフレームワークとして共に機能する。このようなフレームワークの例は、例えば、Ｏｐｅｎ  Ｃｏｍｐｕｔｉｎｇ  Ｌａｎｇｕａｇｅ（ＯｐｅｎＣＬ）、マイクロソフトによるＤｉｒｅｃｔＸ、及びＮＶＩＤＩＡによるＣＵＤＡを含む。用途に応じて、複数のＧＰＵワークロードは、画像処理のような単一のＧＰＵタスクを完了することを必要とされることがある。ＣＰＵランタイムは、ＧＰＵコマンドバッファを構成し、それをダイレクトメモリアクセス（ＤＭＡ）メカニズムによってＧＰＵに渡すことにより、各ワークロードをＧＰＵに１つずつサブミットする。ＧＰＵコマンドバッファは、「ＤＭＡパケット」又は「ＤＭＡバッファ」と称されることがある。ＧＰＵがそのＤＭＡパケット処理を完了する度に、ＧＰＵは、割り込みをＣＰＵに発行する。ＣＰＵは、割り込みサービスルーチン（ＩＳＲ）によって割り込みを処理し、対応する遅延プロシージャ呼び出し（ＤＰＣ）をスケジューリングする。ＯｐｅｎＣＬを含む既存のランタイムは、各ワークロードを別個のＤＭＡパケットとしてＧＰＵにサブミットする。従って、既存の技術によれば、ＩＳＲ及びＤＰＣは、少なくとも各ワークロードに関連付けられる。
【図面の簡単な説明】
【０００３】
本明細書で説明された複数の概念は、例として示されるものであり、添付の複数の図において限定として示されるものではない。例示の簡略化及び明瞭化のため、複数の図に示される複数の要素は、必ずしも縮尺通りに表されていない。適切とみなされる場合に、複数の参照符号は、複数の対応する又は類似の要素を示すために、複数の図の中で繰り返し用いられている。
【０００４】
【図１】本明細書に開示されるワークロードバッチサブミットメカニズムを含むコンピューティングデバイスの少なくとも１つの実施形態の簡略化されたブロック図である。
【０００５】
【図２】図１のコンピューティングデバイスの環境の少なくとも１つの実施形態の簡略化されたブロック図である。
【０００６】
【図３】図１のコンピューティングデバイスによって実行可能な、ＧＰＵによるバッチサブミット処理方法の少なくとも１つの実施形態の簡略化されたフロー図である。
【０００７】
【図４】図１のコンピューティングデバイスによって実行可能な、複数のワークロードのバッチサブミット生成方法の少なくとも１つの実施形態の簡略化されたフロー図である。
【発明を実施するための形態】
【０００８】
本開示の複数の概念は、様々な変更及び代替的な形態の対象たり得るが、それらの複数の具体的実施形態は、図面において例として示され、本明細書において詳細に説明される。しかしながら、本開示の複数の概念を開示された特定の複数の形式に限定する意図はなく、反対に、本開示及び添付された特許請求の範囲に整合する全ての変更、均等物、及び代替物を包含することを意図するものであることを理解すべきである。
【０００９】
本明細書における「一実施形態」、「実施形態」、「例示的な実施形態」等の記載は、説明される実施形態が特定の機能、構造、又は特性を含んでよいことを示すが、各実施形態は、当該特定の機能、構造、又は特性を含んでよく、又は、必ずしも含まなくてよい。さらに、このような複数の語句は、必ずしも同じ実施形態を参照するものではない。 さらに、特定の機能、構造、又は特性が、ある実施形態に関して説明される場合、明示的に説明されているか否かに関わらず、このような機能、構造、又は特性を他の複数の実施形態に関して達成することは、当業者の知識の範囲内にあるとされる。さらに、「少なくとも１つのＡ、Ｂ、及びＣ」という形のリストに含まれる項目は、（Ａ）、（Ｂ）、（Ｃ）、（Ａ及びＢ）、（Ｂ及びＣ）、（Ａ及びＣ）、又は（Ａ、Ｂ、及びＣ）を意味し得ることを理解されたい。同様に、「Ａ、Ｂ、又はＣの少なくとも１つ」という形で列挙された項目は、（Ａ）、（Ｂ）、（Ｃ）、（Ａ及びＢ）、（Ｂ及びＣ）、（Ａ及びＣ）、又は（Ａ、Ｂ、及びＣ）を意味し得る。
【００１０】
複数の開示される実施形態は、場合によっては、ハードウェア、ファームウェア、ソフトウェア、又は、それらの任意の組み合わせで実装されてよい。複数の開示される実施形態は、１つ又は複数のプロセッサによる読み出し及び実行が可能な一時的又は非一時的機械可読（例えば、コンピュータ可読）記憶媒体によって伝達され、またはこれに格納される複数の命令としてさらに実装されてもよい。機械可読記憶媒体は、任意のストレージデバイス、メカニズム、又は、機械（例えば、揮発性もしくは不揮発性メモリ、メディアディスク、又は他のメディアデバイス）によって可読な形で情報を格納もしくは送信する他の物理構造として具現されてよい。
【００１１】
図面において、いくつかの構造又は方法上の特徴は、複数の特定の構成及び／又は順序で示されることがある。しかしながら、このような特定の構成及び／又は順序が必要とされないことがあることを理解されたい。むしろ、いくつかの実施形態において、このような特徴は、例示的な複数の図に示されるものと異なる態様及び／又は順序で構成されてよい。さらに、構造又は方法上の特徴を特定の図に含むことは、このような特徴が全ての実施形態において必要とされると暗示することを意図するものではなく、いくつかの実施形態においては、含まれなくてよく、又は他の複数の機能と組み合わせられてよい。
【００１２】
図１をここで参照すると、一実施形態において、コンピューティングデバイス１００は、中央処理装置（ＣＰＵ）１２０と、グラフィック処理ユニット１６０とを含む。ＣＰＵ１２０は、バッチサブミットメカニズム１５０を用いて、複数のワークロードをＧＰＵ１６０にサブミットすることが可能である。いくつかの実施形態において、バッチサブミットメカニズム１５０は、同期メカニズム１５２を含む。オペレーションにおいて、後述されるように、コンピューティングデバイス１００は、複数のワークロードを単一のワークロードにマージする（例えば、アプリケーション開発者によって手動で組み合わせる）ことなく、複数のＧＰＵワークロードを単一のＤＭＡパケットに組み合わせる。換言すると、バッチサブミットメカニズム１５０により、コンピューティングデバイス１００は、複数の別個のＧＰＵワークロードを含む単一のＤＭＡパケットを生成することができる。特に、開示される複数の技術は、ＧＰＵ処理時間の量、ＣＰＵ利用量、及び／又は、例えばビデオフレーム処理中のグラフィック割り込み数を減少させることができる。結果として、ＧＰＵタスク完了のためにコンピューティングデバイス１００に必要とされる合計時間を減少させることができる。開示される複数の技術は、特に知覚コンピューティングアプリケーションにおいて、フレーム処理時間を改善し、電力消費を減少させることができる。知覚コンピューティングアプリケーションは、手指ジェスチャ認識、音声認識、顔認識及びトラッキング、拡張現実、及び／又は、タブレットコンピュータ、スマートフォン、及び／又は他のコンピューティングデバイスによる他のヒューマンジェスチャインタラクトを含む。
【００１３】
コンピューティングデバイス１００は、本明細書で説明される複数の機能を実行するための任意のタイプのデバイスとして具現されてよい。例えば、コンピューティングデバイス１００は、限定的ではないが、スマートフォン、タブレットコンピュータ、ウェアラブルコンピューティングデバイス、ラップトップコンピュータ、ノートブックコンピュータ、モバイルコンピューティングデバイス、携帯電話、ハンドセット、メッセージングデバイス、車両テレマティックスデバイス、サーバコンピュータ、ワークステーション、分散コンピューティングシステム、マルチプロセッサシステム、消費者向け電子デバイス、及び／又は本明細書で説明される複数の機能を実行するように構成される任意の他のコンピューティングデバイスとして具現されてよい。図１に示されるように、例示的なコンピューティングデバイス１００は、ＣＰＵ１２０と、入出力サブシステム１２２と、ダイレクトメモリアクセス（ＤＭＡ）サブシステム１２４と、ＣＰＵメモリ１２６と、データストレージデバイス１２８と、ディスプレイ１３０と、通信回路１３４と、ユーザインタフェースサブシステム１３６とを含む。コンピューティングデバイス１００は、ＧＰＵ１６０とＧＰＵメモリ１６４とをさらに含む。勿論、複数の他の実施形態において、コンピューティングデバイス１００は、モバイル及び／又は固定型コンピュータにおいて一般に見られるもののような他の又は追加的なコンポーネント（例えば、様々なセンサ及び入出力デバイス）を含んでよい。さらに、いくつかの実施形態において、例示的な複数のコンポーネントの１つ又は複数は、他のコンポーネントに組み込まれ、又はその一部を形成してよい。例えば、いくつかの実施形態において、ＣＰＵメモリ１２６又はその一部は、ＣＰＵ１２０に組み込まれてよく、及び／又はＧＰＵメモリ１６４は、ＧＰＵ１６０に組み込まれてよい。
【００１４】
ＣＰＵ１２０は、本明細書で説明される複数の機能を実行可能な任意のタイプのプロセッサとして具現されてよい。例えば、ＣＰＵ１２０は、シングルもしくはマルチコアプロセッサ、デジタルシグナルプロセッサ、マイクロコントローラ、又は他のプロセッサもしくは処理／制御回路として具現されてよい。ＧＰＵ１６０は、本明細書で説明される複数の機能を実行可能な任意のタイプのグラフィック処理ユニットとして具現される。例えば、ＧＰＵ１６０は、シングルもしくはマルチコアプロセッサ、デジタルシグナルプロセッサ、マイクロコントローラ、浮動小数点アクセラレータ、コプロセッサ、又はメモリのデータを高速で操作及び変更するように設計される他のプロセッサもしくは処理／制御回路として具現されてよい。ＧＰＵ１６０は、多数の実行ユニット１６２を含む。複数の実行ユニット１６２は、多数の並列スレッドを実行可能な複数のプロセッサコア又は並列プロセッサのアレイとして具現されてよい。コンピューティングデバイス１００の様々な実施形態において、ＧＰＵ１６０は、（例えば、別個のグラフィックカード上の）周辺デバイスとして具現されてよく、又はＣＰＵマザーボード上もしくはＣＰＵダイ上に配置されてよい。
【００１５】
ＣＰＵメモリ１２６及びＧＰＵメモリ１６４は、各々、任意のタイプの揮発性もしくは不揮発性メモリ又は本明細書で説明される複数の機能を実行可能なデータストレージとして具現されてよい。オペレーションにおいて、メモリ１２６、１６４は、オペレーティングシステム、アプリケーション、プログラム、ライブラリ、及びドライバのような、コンピューティングデバイス１００のオペレーション中に用いられる様々なデータ及びソフトウェアを格納してよい。例えば、ＣＰＵメモリ１２６の一部は、本明細書に開示されるようにＣＰＵ１２０によって生成される複数のコマンドバッファ及びＤＭＡパケットを少なくとも一時的に格納し、ＧＰＵメモリ１６４の一部は、ＣＰＵ１２０により、ダイレクトメモリアクセスサブシステム１２４を用いてＧＰＵメモリ１６４に転送される複数のＤＭＡパケットを、少なくとも一時的に格納する。
【００１６】
ＣＰＵメモリ１２６は、例えば、Ｉ／Ｏサブシステム１２２を介してＣＰＵ１２０と通信可能に結合され、同様にＧＰＵメモリ１６４は、ＧＰＵ１６０と通信可能に結合される。Ｉ／Ｏサブシステム１２２は、ＣＰＵ１２０、ＣＰＵメモリ１２６、ＧＰＵ１６０（及び／又は実行ユニット１６２）、ＧＰＵメモリ１６４、及びコンピューティングデバイス１００の複数の他のコンポーネントによる入出力オペレーションを補助する回路及び／又はコンポーネントとして具現されてよい。例えば、Ｉ／Ｏサブシステム１２２は、メモリコントローラハブ、入出力制御ハブ、ファームウェアデバイス、通信リンク（すなわち、ポイントツーポイントリンク、バスリンク、ワイヤ、ケーブル、光ガイド、プリント回路基板配線等）及び／又は入出力オペレーションを補助する他のコンポーネント及びサブシステムとして具現されてよく、又はこれらを含んでよい。いくつかの実施形態において、Ｉ／Ｏサブシステム１２２は、システムオンチップ（ＳｏＣ）の一部を形成してよく、ＣＰＵ１２０、ＣＰＵメモリ１２６、ＧＰＵ１６０、ＧＰＵメモリ１６４、及び／又はコンピューティングデバイス１００の複数の他のコンポーネントと共に、単一の集積回路チップ上に組み込まれてよい。
【００１７】
例示的なＩ／Ｏサブシステム１２２は、ダイレクトメモリアクセス（ＤＭＡ）サブシステム１２４を含み、これは、ＣＰＵメモリ１２６とＧＰＵメモリ１６４との間のデータ転送を補助する。いくつかの実施形態において、Ｉ／Ｏサブシステム１２２（例えばＤＭＡサブシステム１２４）は、ＧＰＵ１６０がＣＰＵメモリ１２６に直接アクセスすることを可能とし、ＣＰＵ１２０がＧＰＵメモリ１６４に直接アクセスすることを可能とする。ＤＭＡサブシステム１２４は、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）デバイス、ペリフェラルコンポーネントインターコネクトエクスプレス（ＰＣＩ−Ｅｘｐｒｅｓｓ）デバイス、Ｉ／Ｏアクセラレーション技術（Ｉ／Ｏ  ＡＴ）デバイス、及び／又はその他のようなＤＭＡコントローラ又はＤＭＡ「エンジン」として具現されてよい。
【００１８】
データストレージデバイス１２８は、例えば、メモリデバイス及び回路、メモリカード、ハードディスクドライブ、ソリッドステートドライブ、又は複数の他のデータストレージデバイスのような、データの短期もしくは長期ストレージ用に構成される任意のタイプのデバイス又は複数のデバイスとして具現されてよい。データストレージデバイス１２８は、コンピューティングデバイス１００用のデータ及びファームウェアコードを格納するシステムパーティションを含んでよい。データストレージデバイス１２８は、コンピューティングデバイス１００のオペレーティングシステム１４０用の複数のデータファイル及び実行ファイルを格納するオペレーティングシステムパーティションをさらに含んでよい。
【００１９】
ディスプレイ１３０は、液晶ディスプレイ（ＬＣＤ）、発光ダイオード（ＬＥＤ）、プラズマディスプレイ、陰極線管（ＣＲＴ）、又は他のタイプのディスプレイデバイスのような、デジタル情報を表示可能な任意のタイプのディスプレイとして具現されてよい。いくつかの実施形態において、ディスプレイ１３０は、コンピューティングデバイス１００とのユーザインタラクトを可能にすべく、タッチスクリーン又は他のユーザ入力デバイスに結合されてよい。ディスプレイ１３０は、ユーザインタフェースサブシステム１３６の一部であってよい。ユーザインタフェースサブシステム１３６は、コンピューティングデバイス１００とのユーザインタラクトを補助すべく、物理的又は仮想的な制御ボタン又はキー、マイクロフォン、スピーカ、単方向もしくは双方向のスチル及び／又はビデオカメラ、及び／又はその他を含む、多数の追加的なデバイスを含んでよい。ユーザインタフェースサブシステム１３６は、モーションセンサ、近接センサ、アイトラッキングデバイスのようなデバイスをさらに含んでよく、これらは、コンピューティングデバイス１００を含む様々な他の形のヒューマンインタラクトを検出、キャプチャ、及び処理するように構成されてよい。
【００２０】
コンピューティングデバイス１００は、通信回路１３４をさらに含み、これは、コンピューティングデバイス１００と他の複数の電子デバイスとの間における通信を可能にし得る任意の通信回路、デバイス、又はそれらの集合体として具現されてよい。通信回路１３４は、このような通信を達成すべく、任意の１つ又は複数の通信技術（例えば、無線又は有線通信）及び関連プロトコル（例えば、Ｅｔｈｅｒｎｅｔ（登録商標）、Ｂｌｕｅｔｏｏｔｈ（登録商標）、Ｗｉ−Ｆｉ（登録商標）、ＷｉＭＡＸ（登録商標）、３Ｇ／ＬＴＥ等）を用いるように構成されてよい。通信回路１３４は、無線ネットワークアダプタを含むネットワークアダプタとして具現されてよい。
【００２１】
例示的なコンピューティングデバイス１００は、デバイスドライバ１３２、オペレーティングシステム１４０、ユーザ空間ドライバ１４２、及びグラフィックサブシステム１４４のような多数のコンピュータプログラムコンポーネントをさらに含む。特に、オペレーティングシステム１４０は、ＧＰＵアプリケーション２１０（図２）のような複数のユーザ空間アプリケーションと、コンピューティングデバイス１００の複数のハードウェアコンポーネントとの間における通信を補助する。オペレーティングシステム１４０は、マイクロソフトコーポレーションによるＷＩＮＤＯＷＳ（登録商標）のあるバージョン、グーグルインコーポレーテッドによるアンドロイド、及び／又はその他のような、本明細書で説明される複数の機能を実行可能な任意のオペレーティングシステムとして具現されてよい。本明細書で用いられる「ユーザ空間」は、特に、エンドユーザがコンピューティングデバイス１００とインタラクト可能なコンピューティングデバイス１００の動作環境を指してよく、「システム空間」は、特に、プログラミングコードがコンピューティングデバイス１００の複数のハードウェアコンポーネントと直接インタラクト可能なコンピューティングデバイス１００の動作環境を指してよい。例えば、複数のユーザ空間アプリケーションは、複数のエンドユーザ及びそれら自体の割り当てられたメモリと直接インタラクトしてよいが、当該ユーザ空間アプリケーションに割り当てられていないハードウェアコンポーネント又はメモリとは直接インタラクトしなくてよい。一方、複数のシステム空間アプリケーションは、複数のハードウェアコンポーネント、それら自体の割り当てられたメモリ、及び現在動作中のユーザ空間アプリケーションに割り当てられたメモリと直接インタラクトしてよいが、エンドユーザとは直接インタラクトしなくてよい。従って、コンピューティングデバイス１００の複数のシステム空間コンポーネントは、コンピューティングデバイス１００の複数のユーザ空間コンポーネントより高い特権を有してよい。
【００２２】
例示的な実施形態において、ユーザ空間ドライバ１４２及びデバイスドライバ１３２は、「ドライバペア」として連携し、ＧＰＵアプリケーション２１０（図２）のような複数のユーザ空間アプリケーションと、ディスプレイ１３０のような複数のハードウェアコンポーネントとの間における通信を処理する。いくつかの実施形態において、ユーザ空間ドライバ１４２は、例えば、様々な異なるハードウェアコンポーネント（例えば、異なるタイプのディスプレイ）に対して、デバイスに依存しない複数のグラフィックレンダリングタスクの通信が可能な「汎用」ドライバであってよく、デバイスドライバ１３２は、デバイスに依存しない複数のタスクを、特定のハードウェアコンポーネントが要求されたタスクを実現すべく実行可能な複数のコマンドに変換する。複数の他の実施形態において、ユーザ空間ドライバ１４２及びデバイスドライバ１３２の一部は、組み合わせられて単一のドライバコンポーネントにされてよい。ユーザ空間ドライバ１４２及び／又はデバイスドライバ１３２の一部は、いくつかの実施形態において、オペレーティングシステム１４０に含まれてよい。ドライバ１３２、１４２は、例示的にはディスプレイドライバである。しかしながら、開示されたバッチサブミットメカニズム１５０の複数の態様は、他の複数の用途、例えば、（例えば、ＧＰＵ１６０が汎用ＧＰＵ又はＧＰＧＰＵとして構成される場合に）ＧＰＵ１６０にオフロード可能なあらゆる種類のタスクに適用可能である。
【００２３】
グラフィックサブシステム１４４は、ユーザ空間ドライバ１４２、デバイスドライバ１３２、及び複数のＧＰＵアプリケーション２１０のような１つ又は複数のユーザ空間アプリケーションの間における通信を補助する。グラフィックサブシステム１４４は、アプリケーションプログラミングインタフェース（ＡＰＩ）もしくはＡＰＩスイート、複数のＡＰＩ及びランタイムライブラリの組み合わせ、及び／又は他の複数のコンピュータプログラムコンポーネントのような、本明細書で説明される複数の機能を実行可能な任意のタイプのコンピュータプログラムサブシステムとして具現されてよい。グラフィックサブシステムの例は、インテルコーポレーションによるメディアデベロップメントフレームワーク（ＭＤＦ）ランタイムライブラリ、ＯｐｅｎＣＬランタイムライブラリ、ＤｉｒｅｃｔＸグラフィックカーネルサブシステム及びマイクロソフトコーポレーションによるＷＩＮＤＯＷＳ（登録商標）ディスプレイドライバモデルを含む。
【００２４】
例示的なグラフィックサブシステム１４４は、ＧＰＵスケジューラ１４６、割り込みハンドラ１４８、及びバッチサブミットサブシステム１５０のような多数のコンピュータプログラムコンポーネントを含む。ＧＰＵスケジューラ１４６は、動作キュー２１２（図２）における複数のＤＭＡパケットのＧＰＵ１６０に対するサブミットを制御すべく、デバイスドライバ１３２と通信を行う。動作キュー２１２は、例えば、任意のタイプのファーストインファーストアウトデータ構造、又は、複数のＧＰＵタスクに関するデータを少なくとも一時的に格納可能な他のタイプのデータ構造として具現されてよい。複数の例示的な実施形態において、ＧＰＵ１６０は、ＧＰＵ１６０がＤＭＡパケットの処理を終了する度に割り込みを生成し、このような割り込みは、割り込みハンドラ１４８によって受信される。複数の割り込みが、ＧＰＵ１６０によって（エラー及び例外のような）他の理由のために発行され得るので、いくつかの実施形態において、ＧＰＵスケジューラ１４６は、動作キュー２１２の次のタスクをスケジューリングする前にタスクが完了したことの確認を、グラフィックサブシステム１４４がデバイスドライバ１３２から受信するまで待機する。バッチサブミットメカニズム１５０及び選択的な同期メカニズム１５２が、以下、より詳細に説明される。
【００２５】
図２をここで参照すると、いくつかの実施形態において、コンピューティングデバイス１００は、オペレーション中に環境２００を確立する。例示的な環境２００は、上述されたように、ユーザ空間とシステム空間とを含む。環境２００の様々なモジュールは、ハードウェア、ファームウェア、ソフトウェア、又はそれらの組み合わせとして具現されてよい。さらに、いくつかの実施形態において、環境２００のモジュールのいくつか又は全ては、他の複数のモジュール又はソフトウェア／ファームウェア構造と統合されてよく、又はこれらの一部を形成してよい。ユーザ空間において、グラフィックサブシステム１４４は、複数のＧＰＵタスクを１つ又は複数のユーザ空間ＧＰＵアプリケーション２１０から受信する。ＧＰＵアプリケーション２１０は、例えば、ビデオプレイヤ、ゲーム、メッセージングアプリケーション、ウェブブラウザ、及びソーシャルメディアアプリケーションを含んでよい。ＧＰＵタスクは、フレーム処理を含んでよく、例えば、コンピューティングデバイス１００のフレームバッファに格納されたビデオ画像の個別のフレームは、コンピューティングデバイス１００によって（例えば、ディスプレイ１３０によって）表示されるべく、ＧＰＵ１６０によって処理される。本明細書で用いられる用語「フレーム」は、特に、単一の２次元又は３次元のスチルデジタル画像を指してよく、（複数のフレームを含む）デジタルビデオの１フレームであってよい。各ＧＰＵタスクについて、グラフィックサブシステム１４４は、ＧＰＵ１６０によって実行されるべき１つ又は複数のワークロードを生成する。複数のワークロードをＧＰＵ１６０にサブミットすべく、ユーザ空間ドライバ１４２は、バッチサブミットメカニズム１５０を用いてコマンドバッファを生成する。ユーザ空間ドライバ１４２によってバッチサブミットメカニズム１５０を用いて生成されたコマンドバッファは、複数の個別のワークロードが単一のＤＭＡパケット内でＧＰＵ１６０によって処理されるためにディスパッチされる動作モードを確立するために必要な、複数のＧＰＵコマンドを表す高水準プログラムコードを含む。システム空間において、グラフィックサブシステム１４４と通信を行うデバイスドライバ１３２は、コマンドバッファを、ＧＰＵ１６０によって実行可能な複数のＧＰＵ固有のコマンドを含むＤＭＡパケットに変換し、バッチサブミットを実行する。
【００２６】
バッチサブミットメカニズム１５０は、本明細書に開示されるコマンドバッファの生成を可能とするプログラムコードを含む。コマンドバッファを生成するバッチサブミットメカニズム１５０のプログラムコードによって実装されてよい方法４００の例は、後述される図４に示される。同期メカニズム１５２は、バッチサブミットメカニズム１５０によって確立される動作モードが、同期を含むことを可能とする。すなわち、同期メカニズム１５２によって、バッチサブミットメカニズム１５０は、多数の選択的な動作モード（例えば、同期あり又は同期なし）から動作モードが選択されることを可能とする。例示的なバッチサブミットメカニズム１５０は、２つの動作モードの選択肢を可能とする。１つは、同期ありの動作モードで、１つは同期なしの動作モードである。同期は、１つのワークロードが他のワークロードによって消費される出力を生成する状況において、必要とされることがある。複数のワークロードの間に依存性がない場合には、同期なしの動作モードが用いられてよい。非同期動作モードにおいて、バッチサブミットメカニズム１５０は、複数のワークロードの各々をＧＰＵに対して並列に（同じコマンドバッファにおいて）別個にディスパッチするコマンドバッファを生成し、これにより、全てのワークロードは、複数の実行ユニット１６２において同時に実行可能となる。これを実行すべく、バッチサブミットメカニズム１５０は、１つのディスパッチコマンドを、各ワークロードについて、コマンドバッファに挿入する。同期なしの複数のワークロードについて、バッチサブミットメカニズム１５０によって生成可能なコマンドバッファの疑似コードの例は、以下のコード例１に示される。
【数１】
0006390021.tif 000002
【００２７】
コード例１において、セットアップコマンドは、ＧＰＵ１６０が複数の実行ユニット１６２において複数のワークロードを実行するために必要な情報を準備する複数のＧＰＵコマンドを含んでよい。このようなコマンドは、例えば、キャッシュ構成コマンド、表面状態セットアップコマンド、メディア状態セットアップコマンド、パイプ制御コマンド、及び／又はその他を含んでよい。メディアオブジェクトウォーカーコマンドは、ＧＰＵ１６０に、実行ユニット１６２上で動作する複数のスレッドを、コマンドにおいてパラメータと特定されたワークロードに対してディスパッチさせる。パイプ制御コマンドは、ＧＰＵがコマンドバッファの実行を終了する前に、全ての先行コマンドが実行を終了することを保証する。従って、ＧＰＵ１６０は、コマンドバッファに含まれる個別にディスパッチされた全てのワークロードの処理を完了した時点で、１つの割り込み（ＩＳＲ）のみを生成する。これと引き換えに、ＣＰＵ１２０は、１つの遅延プロシージャ呼び出し（ＤＰＣ）のみを生成する。このように、１つのコマンドバッファに含まれる複数のワークロードは、１つのＩＳＲ及び１つのＤＰＣのみを生成する。
【００２８】
対比目的のために、同期なしの複数のワークロードに対して、（ＯｐｅｎＣＬの現行バージョンのような）既存の技術によって生成可能なコマンドバッファの疑似コードの例は、以下、コード例２に示される。
【数２】
0006390021.tif 000003
【００２９】
コード例２において、複数のセットアップコマンドは、上述されたものと同様であってよい。しかしながら、複数のワークロードは、開発者（例えばＧＰＵプログラマ）によって手動で単一のワークロードに組み合わせられ、これは次に、単一のメディアオブジェクトウォーカーコマンドによってＧＰＵ１６０にディスパッチされる。単一のＤＭＡパケットがコード例２から生成され、１つのＩＰＣ及びＤＰＣをもたらすが、マージされたワークロードは、個別に扱われた別個の複数のワークロードよりはるかに大きい。このような大きいワークロードは、ＧＰＵ１６０のハードウェアリソース（例えば、ＧＰＵ命令キャッシュ及び／又はレジスタ）を酷使することがある。 上述されたように、複数のワークロードを手動でマージする公知の代替例は、各ワークロードについて複数の別個のＤＭＡパケットを生成するものである。しかしながら、複数の別個のＤＭＡパケットは、本明細書に開示される複数のワークロードを含む単一のＤＭＡパケットよりはるかに多くのＩＰＣ及びＤＰＣをもたらす。
【００３０】
ワークロード同期動作モードにおいて、バッチサブミットメカニズム１５０は、同じコマンドバッファにおいて複数のワークロードの各々をＧＰＵ１６０に別個にディスパッチするコマンドバッファを生成し、同期メカニズム１５２は、複数のワークロードディスパッチコマンドの間に同期コマンドを挿入し、複数のワークロード依存条件が満たされることを保証する。これを実行すべく、バッチサブミットメカニズム１５０は、各ワークロードについて１つのディスパッチコマンドをコマンドバッファに挿入し、同期メカニズム１５２は、必要に応じて、各ディスパッチコマンドの後に適切なパイプ制御コマンドを挿入する。同期ありの複数のワークロードについて、バッチサブミットメカニズム１５０（同期メカニズム１５２を含む）によって生成可能なコマンドバッファの疑似コードの例は、以下のコード例３に示される。
【数３】
0006390021.tif 000004
【００３１】
コード例３において、複数のセットアップコマンド及びメディアオブジェクトウォーカーコマンドは、コード例１を参照して上述されたものと同様である。パイプ制御（ｓｙｎｃ）コマンドは、依存条件を有する複数のワークロードをパイプ制御コマンドに対して特定する複数のパラメータを含む。例えば、パイプ制御（ｓｙｎｃ２，１）コマンドは、ＧＰＵ１６０がメディアオブジェクトウォーカー（ワークロード２）コマンドの実行を開始する前に、メディアオブジェクトウォーカー（ワークロード１）コマンドの実行を終了することを保証する。同様に、パイプ制御（ｓｙｎｃ３，２）コマンドは、ＧＰＵ１６０がメディアオブジェクトウォーカー（ワークロード３）コマンドの実行を開始する前に、メディアオブジェクトウォーカー（ワークロード２）コマンドの実行を終了することを保証する。
【００３２】
図３をここで参照すると、ＧＰＵタスクを処理するための方法３００の例が示される。方法３００の一部は、コンピューティングデバイス１００によって、例えば、ＣＰＵ１２０及びＧＰＵ１６０によって実行されてよい。例示的に、ブロック３１０、３１２、３１４は、ユーザ空間において（例えば、バッチサブミットメカニズム１５０及び／又はユーザ空間ドライバ１４２によって）実行され、ブロック３１６、３１８、３２４、３２６は、システム空間において（例えば、グラフィックスケジューラ１４６、割り込みハンドラ１４８、及び／又はデバイスドライバ１３２によって）実行され、ブロック３２０、３２２は、ＧＰＵ１６０によって（例えば、実行ユニット１６２によって）実行される。ブロック３１０において、コンピューティングデバイス１００（例えばＣＰＵ１２０）は、多数のＧＰＵワークロードを生成する。複数のワークロードは、例えば、ユーザ空間ＧＰＵアプリケーション２１０に要求されたＧＰＵタスクに応答して、グラフィックサブシステム１４４によって生成されてよい。上述されたように、（フレーム処理のような）単一のＧＰＵタスクは、複数のワークロードを必要としてよい。ブロック３１２において、コンピューティングデバイス１００（例えばＣＰＵ１２０）は、例えば、上述されたバッチサブミットメカニズム１５０によって、ＧＰＵタスクのコマンドバッファを生成する。これを実行すべく、コンピューティングデバイス１００は、各ワークロードについて別個のディスパッチコマンドをコマンドバッファに含まれるように生成する。ディスパッチコマンド及びコマンドバッファの複数の他のコマンドは、いくつかの実施形態において、人間可読プログラムコードとして具現される。ブロック３１４において、コンピューティングデバイス１００は（例えば、ＣＰＵ１２０はユーザ空間ドライバ１４２によって）、ＧＰＵ１６０による実行のために、コマンドバッファをグラフィックサブシステム１４４にサブミットする。
【００３３】
ブロック３１６において、コンピューティングデバイス１００（例えばＣＰＵ１２０）は、コマンドバッファから、複数のバッチされたワークロードを含むＤＭＡパケットを準備する。これを実行すべく、例示的なデバイスドライバ１３２は、コマンドバッファを認証し、ＤＭＡパケットをデバイス固有のフォーマットで書き込む。コマンドバッファが人間可読プログラムコードとして具現される複数の実施形態において、コンピューティングデバイス１００は、コマンドバッファの複数の人間可読コマンドを、ＧＰＵ１６０によって実行可能な複数の機械可読命令に変換する。従って、ＤＭＡパケットは、コマンドバッファに含まれる複数の人間可読コマンドに対応し得る複数の機械可読命令を含む。ブロック３１８において、コンピューティングデバイス１００（例えばＣＰＵ１２０）は、ＤＭＡパケットを、実行のためにＧＰＵ１６０にサブミットする。これを実行すべく、コンピューティングデバイスは（例えば、ＣＰＵ１２０はデバイスドライバ１３２と連携するＧＰＵスケジューラ１４６によって）、複数のメモリアドレスをＤＭＡパケットの複数のリソースに割り当て、固有の識別子をＤＭＡパケットに割り当て（例えばバッファフェンスＩＤ）、ＤＭＡパケットをＧＰＵ１６０（例えば実行ユニット１６２）へのキューに入れる。
【００３４】
ブロック３２０において、コンピューティングデバイス１００（例えばＧＰＵ１６０）は、複数のバッチされたワークロードを伴うＤＭＡパケットを処理する。例えば、ＧＰＵ１６０は、複数のスレッドを用いて、各ワークロードを異なる実行ユニット１６２において処理してよい。ＧＰＵ１６０が（ＤＭＡパケットに含まれ得る任意の同期コマンドの対象である）ＤＭＡパケットの処理を終了した場合には、ＧＰＵ１６０は、ブロック３２２において割り込みを生成する。割り込みは、ＣＰＵ１２０によって（例えば、割り込みハンドラ１４８によって）受信される。ブロック３２４において、コンピューティングデバイス１００（例えばＣＰＵ１２０）は、ＧＰＵ１６０によるＤＭＡパケットの処理が完了したか否かを決定する。これを実行すべく、デバイスドライバ１３２は、完了したばかりのＤＭＡパケットの識別子（例えばバッファフェンスＩＤ）を含む割り込み情報を評価する。デバイスドライバ１３２が、ＧＰＵ１６０によるＤＭＡパケットの処理が終了したと結論づけた場合には、デバイスドライバ１３２は、ＤＭＡパケット処理が完了したことをグラフィックサブシステム１４４（例えばＧＰＵスケジューラ１４６）に通知し、遅延プロシージャ呼び出し（ＤＰＣ）をキューに入れる。ブロック３２６において、コンピューティングデバイス１００（例えばＣＰＵ１２０）は、ＤＰＣが完了したことをＧＰＵスケジューラ１４６に通知する。これを実行すべく、ＤＰＣは、ＧＰＵスケジューラ１４６によって提供されるコールバック機能を呼び出してよい。ＤＰＣが完了したという通知に応答して、コンピューティングデバイスは（例えば、ＣＰＵ１２０はＧＰＵスケジューラ１４６によって）、ＧＰＵ１６０による処理のために、動作キュー２１２において次のＧＰＵタスクをスケジューリングする。
【００３５】
図４をここで参照すると、複数のバッチされたワークロードを含むコマンドバッファを生成するための方法４００の例が示される。方法４００の一部は、コンピューティングデバイス１００によって、例えばＣＰＵ１２０によって実行されてよい。ブロック４１０において、コンピューティングデバイス１００は、ＧＰＵタスクの処理を（例えば、ユーザ空間ソフトウェアアプリケーションからの要求に応答して）、コマンドバッファを生成することによって開始する。開示される複数の方法及びデバイスの態様は、例えば、ＬｏａｄＰｒｏｇｒａｍ、ＣｒｅａｔｅＫｅｒｎｅｌ、ＣｒｅａｔｅＴａｓｋ、ＡｄｄＫｅｒｎｅｌ、及びＡｄｄＳｙｎｃメディアデベロップメントフレームワーク（ＭＤＦ）ランタイムＡＰＩ及び／又はその他を用いて実装されてよい。例えば、メディアデベロップメントフレームワーク（ＭＤＦ）ランタイムＡＰＩにより、ｐＣｍＤｅｖ−＞ＬｏａｄＰｒｏｇｒａｍ（ｐＣＩＳＡ，ｕＣＩＳＡＳｉｚｅ，ｐＣｍＰｒｏｇｒａｍ）コマンドは、プログラムを永続的に格納されるファイルからメモリにロードするために用いられてよく、ｅｎｑｕｅｕｅ（）ＡＰＩは、コマンドバッファを生成し、コマンドバッファを動作キュー２１２にサブミットするために用いられてよい。ブロック３１２において、コンピューティングデバイス１００は、要求されたＧＰＵタスクを実行するために必要なワークロードの数を決定する。これを実行すべく、コンピューティングデバイス１００は、（例えば、プログラミングコードを介して）所与のタスクに対するワークロードの最大数を定義してよい。ワークロードの最大数は、例えば、（コマンドバッファのサイズ、又はグラフィックメモリにおいて割り当てられたグローバルステートヒープのような）ＣＰＵ１２０及び／又はＧＰＵ１６０において割り当てられたリソースに基づいて決定されてよい。必要とされるワークロードの数は、例えば、要求されたＧＰＵタスクの性質及び／又は発行するアプリケーションのタイプに応じて変化してよい。例えば、知覚コンピューティングアプリケーションにおいて、複数の個別のフレームは、フレーム処理のために多数のワークロード（例えば、場合によっては３３のワークロード）を必要とすることがある。ブロック４１４において、コンピューティングデバイス１００は、各ワークロードについて、複数の引数及びスレッド空間をセットアップする。これを実行すべく、コンピューティングデバイス１００は、各ワークロードについて「ワークロード生成」コマンドを実行する。例えば、メディアデベロップメントフレームワークランタイムＡＰＩにより、ｐＣｍＤｅｖ−＞ＣｒｅａｔｅＫｅｒｎｅｌ（ｐＣｍＰｒｏｇｒａｍ，ｐＣｍＫｅｒｎｅｌＮ）が用いられてよい。ブロック４１６において、コンピューティングデバイス１００は、コマンドバッファを生成し、第１のワークロードをコマンドバッファに追加する。例えば、メディアデベロップメントフレームワークランタイムＡＰＩにより、ＣｒｅａｔｅＴａｓｋ（ｐＣｍＴａｓｋ）コマンドは、コマンドバッファを生成するために用いられてよく、ＡｄｄＫｅｒｎｅｌ（ＫｅｒｎｅｌＮ）コマンドは、ワークロードをコマンドバッファに追加するために用いられてよい。
【００３６】
ブロック４２０において、コンピューティングデバイス１００は、ワークロード同期が必要とされるか否かを決定する。これを実行すべく、コンピューティングデバイス１００は、第１のワークロードの出力が他の任意の複数のワークロードに対する入力として用いられるか否かを（例えば、複数のワークロード生成コマンドのパラメータ又は引数を検討することによって）決定する。同期が必要な場合、コンピューティングデバイスは、コマンドバッファに対して、ワークロード生成コマンドの後に同期コマンドを挿入する。例えば、メディアデベロップメントフレームワークランタイムＡＰＩにより、ｐＣｍＴａｓｋ−＞ＡｄｄＳｙｎｃ（）ＡＰＩが用いられてよい。ブロック４２４において、コンピューティングデバイス１００は、コマンドバッファに追加されるべき他のワークロードがあるか否かを決定する。コマンドバッファに追加されるべき他のワークロードがある場合、コンピューティングデバイス１００は、ブロック４１８に戻り、当該ワークロードをコマンドバッファに追加する。コマンドバッファに追加されるべきワークロードがこれ以上ない場合、コンピューティングデバイス１００は、ＤＭＡパケットを生成し、ＤＭＡパケットを動作キュー２１２にサブミットする。ＧＰＵ１６０がＤＭＡパケット処理のために現在利用可能な場合には、ＧＰＵスケジューラ１４６は、ブロック４２６において、ＤＭＡパケットをＧＰＵ１６０にサブミットする。ブロック４２８において、コンピューティングデバイス１００（例えばＣＰＵ１２０）は、ＧＰＵ１６０がＤＭＡパケットの実行を完了したというＧＰＵ１６０からの通知を待ち、方法４００は終了する。ブロック４２８の後、コンピューティングデバイス１００は、上述されたように、他のコマンドバッファの生成を開始してよい。
【００３７】
以下の表１は、開示されたバッチサブミットメカニズムを、同期ありの知覚コンピューティングアプリケーションに適用した後で取得された複数の実験結果を示す。
【表１】
0006390021.tif 000005
【００３８】
表１に示されるように、本明細書に開示されるバッチサブミットメカニズムを、知覚コンピューティングアプリケーションの１つのＤＭＡパケットにおける複数の同期されたＧＰＵワークロードの処理に適用した後で、性能向上が実現された。これらの結果は、開示されたバッチサブミットメカニズムが用いられた場合に、ＧＰＵ１６０がＣＰＵ１２０によってより良好に活用されていることを示唆しており、これはシステム電力消費の減少をもたらすであろう。これらの結果は、特に、ＩＰＣ及びＤＰＣの呼び出し数の減少、ならびにスケジューリングされるべきＤＭＡパケットの必要数がより小さくなったことに起因し得る。
【実施例】
【００３９】
本明細書に開示される複数の技術の説明例が、以下、提供される。複数の技術の実施形態は、後述される複数の例の任意の１つ又は複数、及びこれらの任意の組み合わせを含んでよい。
【００４０】
例１は、複数のプログラム可能なワークロードを実行するためのコンピューティングデバイスを含み、コンピューティングデバイスは、ダイレクトメモリアクセスパケットを生成する中央処理装置であって、ダイレクトメモリアクセスパケットは、複数のプログラム可能なワークロードの各々について別個のディスパッチ命令を含む、中央処理装置と、複数のプログラム可能なワークロードを実行するグラフィック処理ユニットであって、複数のプログラム可能なワークロードの各々は、複数のグラフィック処理ユニット命令のセットを含み、ダイレクトメモリアクセスパケットの複数の別個のディスパッチ命令の各々は、複数のプログラム可能なワークロードの１つのグラフィック処理ユニットによる処理を開始する、グラフィック処理ユニットと、中央処理装置によってアクセス可能なメモリからグラフィック処理ユニットによってアクセス可能なメモリに、ダイレクトメモリアクセスパケットの通信を行わせるダイレクトメモリアクセスサブシステムと、を備える。
【００４１】
例２は、例１の主題を含み、中央処理装置は、人間可読コンピュータコードで具現された複数のディスパッチコマンドを含むコマンドバッファを生成し、ダイレクトメモリアクセスパケットの複数のディスパッチ命令は、コマンドバッファの複数のディスパッチコマンドに対応する。
【００４２】
例３は、例２の主題を含み、中央処理装置は、コマンドバッファを生成するユーザ空間ドライバを実行し、中央処理装置は、ダイレクトメモリアクセスパケットを生成するデバイスドライバを実行する。
【００４３】
例４は、例１−３のいずれかの主題を含み、中央処理装置は、依存関係を有する複数のプログラム可能なワークロードについて第１のタイプのダイレクトメモリアクセスパケットと、依存関係を有さない複数のプログラム可能なワークロードについて第２のタイプのダイレクトメモリアクセスパケットとを生成し、第１のタイプのダイレクトメモリアクセスパケットは、第２のタイプのダイレクトメモリアクセスパケットと異なる。
【００４４】
例５は、例４の主題を含み、第１のタイプのダイレクトメモリアクセスパケットは、複数のディスパッチ命令の２つの間に同期命令を含み、第２のタイプのダイレクトメモリアクセスパケットは、複数のディスパッチ命令の間に同期命令を１つも含まない。
【００４５】
例６は、例１−３のいずれかの主題を含み、ダイレクトメモリアクセスパケットの複数のディスパッチ命令の各々は、グラフィック処理ユニットの実行ユニットによって、複数のプログラム可能なワークロードの１つの処理を開始する。
【００４６】
例７は、例１−３のいずれかの主題を含み、ダイレクトメモリアクセスパケットは、グラフィック処理ユニットによる複数のプログラム可能なワークロードの１つの実行が、グラフィック処理ユニットが複数のプログラム可能なワークロードの他のものの実行を開始する前に終了することを保証する同期命令を含む。
【００４７】
例８は、例１−３のいずれかの主題を含み、複数のプログラム可能なワークロードの各々は、ユーザ空間アプリケーションに要求されたグラフィック処理ユニットタスクを実行する複数の命令を含む。
【００４８】
例９は、例８の主題を含み、ユーザ空間アプリケーションは、知覚コンピューティングアプリケーションを含む。
【００４９】
例１０は、例８の主題を含み、グラフィック処理ユニットタスクは、デジタルビデオのフレーム処理を含む。
【００５０】
例１１は、複数のプログラム可能なワークロードをグラフィック処理ユニットにサブミットするためのコンピューティングデバイスを含み、複数のプログラム可能なワークロードの各々は、複数のグラフィック処理ユニット命令のセットを含み、コンピューティングデバイスは、ユーザ空間アプリケーションとグラフィック処理ユニットとの間における通信を補助するグラフィックサブシステムと、複数のプログラム可能なワークロードの各々について別個の複数のディスパッチコマンドを含む単一のコマンドバッファを生成するバッチサブミットメカニズムと、を含み、ダイレクトメモリアクセスパケットの複数の別個のコマンドの各々は、複数のプログラム可能なワークロードの１つのグラフィック処理ユニットによる処理を別個に開始する。
【００５１】
例１２は、例１１の主題を含み、ダイレクトメモリアクセスパケットを生成するデバイスドライバを備え、ダイレクトメモリアクセスパケットは、コマンドバッファの複数のディスパッチコマンドに対応する複数のグラフィック処理ユニット命令を含む。
【００５２】
例１３は、例１１又は例１２の主題を含み、複数のディスパッチコマンドは、グラフィック処理ユニットに、複数のプログラム可能なワークロードの全てを並列に実行させる。
【００５３】
例１４は、例１１又は例１２の主題を含み、他のプログラム可能なワークロードの実行を開始する前に、グラフィック処理ユニットにプログラム可能なワークロードの実行を完了させる同期コマンドを、コマンドバッファに挿入する同期メカニズムを備える。
【００５４】
例１５は、例１４の主題を含み、同期メカニズムは、バッチサブミットメカニズムのコンポーネントとして具現される。
【００５５】
例１６は、例１１−１３のいずれかの主題を含み、バッチサブミットメカニズムは、グラフィックサブシステムのコンポーネントとして具現される。
【００５６】
例１７は、例１６の主題を含み、グラフィックサブシステムは、アプリケーションプログラミングインタフェース、複数のアプリケーションプログラミングインタフェース、及びランタイムライブラリの１つ又は複数として具現される。
【００５７】
例１８は、複数のプログラム可能なワークロードをグラフィック処理ユニットにサブミットするための方法を含み、方法は、コンピューティングデバイスにより、コマンドバッファを生成する段階と、複数のディスパッチコマンドをコマンドバッファに追加する段階であって、複数のディスパッチコマンドの各々は、コンピューティングデバイスのグラフィック処理ユニットによる複数のプログラム可能なワークロードの１つの実行を開始する、段階と、コマンドバッファの複数のディスパッチコマンドに対応する複数のグラフィック処理ユニット命令を含むダイレクトメモリアクセスパケットを生成する段階と、を備える。
【００５８】
例１９は、例１８の主題を含み、グラフィック処理ユニットによってアクセス可能なメモリへの、ダイレクトメモリアクセスパケットの通信を行わせる段階を備える。
【００５９】
例２０は、例１８の主題を含み、コマンドバッファの複数のディスパッチコマンドの２つの間に同期コマンドを挿入する段階を備え、同期コマンドは、グラフィック処理ユニットが複数のプログラム可能なワークロードの他のものの処理を開始する前に、グラフィック処理ユニットが複数のプログラム可能なワークロードの１つの処理を完了することを保証する。
【００６０】
例２１は、例１８の主題を含み、複数のディスパッチコマンドの各々を定式化し、複数のプログラム可能なワークロードの１つについて、複数の引数のセットを生成する段階を備える。
【００６１】
例２２は、例１８の主題を含み、複数のディスパッチコマンドの各々を定式化し、複数のプログラム可能なワークロードの１つについて、スレッド空間を生成する段階を備える。
【００６２】
例２３は、例１８−２３のいずれかの主題を含み、コンピューティングデバイスのダイレクトメモリアクセスサブシステムによって、ダイレクトメモリアクセスパケットを、中央処理装置によってアクセス可能なメモリからグラフィック処理ユニットによってアクセス可能なメモリに転送する段階を備える。
【００６３】
例２４は、中央処理装置と、グラフィック処理ユニットと、複数の命令が格納されたメモリと、を備えるコンピューティングデバイスを含み、複数の命令は、中央処理装置によって実行された場合に、コンピューティングデバイスに、例１８−２３のいずれかの方法を実行させる。
【００６４】
例２５は、格納された複数の命令を含む１つ又は複数の機械可読記憶媒体を含み、複数の命令は、実行されたことに応答して、コンピューティングデバイスに例１８−２３のいずれかの方法を実行させる。
【００６５】
例２６は、例１８−２３のいずれかの方法を実行するための手段を備えるコンピューティングデバイスを含む。
【００６６】
例２７は、複数のプログラム可能なワークロードを実行するための方法を含み、方法は、コンピューティングデバイスにより、コンピューティングデバイスの中央処理装置によってダイレクトメモリアクセスパケットを生成する段階であって、ダイレクトメモリアクセスパケットは、複数のプログラム可能なワークロードの各々について別個のディスパッチ命令を含む、段階と、コンピューティングデバイスのグラフィック処理ユニットによって、複数のプログラム可能なワークロードを実行する段階であって、複数のプログラム可能なワークロードの各々は、複数のグラフィック処理ユニット命令のセットを含み、ダイレクトメモリアクセスパケットの複数の別個のディスパッチ命令の各々は、プログラム可能なワークロードの１つのグラフィック処理ユニットによる処理を開始する、段階と、コンピューティングデバイスのダイレクトメモリアクセスサブシステムによって、中央処理装置によってアクセス可能なメモリからグラフィック処理ユニットによってアクセス可能なメモリへの、ダイレクトメモリアクセスパケットの通信を行う段階と、を備える。
【００６７】
例２８は、例２７の主題を含み、中央処理装置によって、人間可読コンピュータコードで具現された複数のディスパッチコマンドを含むコマンドバッファを生成する段階を備え、ダイレクトメモリアクセスパケットの複数のディスパッチ命令は、コマンドバッファの複数のディスパッチコマンドに対応する。
【００６８】
例２９は、例２８の主題を含み、中央処理装置によって、コマンドバッファを生成するユーザ空間ドライバを実行する段階を備え、中央処理装置は、ダイレクトメモリアクセスパケットを生成するデバイスドライバを実行する。
【００６９】
例３０は、例２７−２９のいずれかの主題を含み、中央処理装置によって、依存関係を有する複数のプログラム可能なワークロードについて第１のタイプのダイレクトメモリアクセスパケットを生成し、依存関係を有さない複数のプログラム可能なワークロードについて第２のタイプのダイレクトメモリアクセスパケットを生成する段階を備え、第１のタイプのダイレクトメモリアクセスパケットは、第２のタイプのダイレクトメモリアクセスパケットと異なる。
【００７０】
例３１は、例３０の主題を含み、第１のタイプのダイレクトメモリアクセスパケットは、複数のディスパッチ命令の２つの間に同期命令を含み、第２のタイプのダイレクトメモリアクセスパケットは、複数のディスパッチ命令の間に同期命令を１つも含まない。
【００７１】
例３２は、例２７−２９のいずれかの主題を含み、ダイレクトメモリアクセスパケットの複数のディスパッチ命令の各々によって、グラフィック処理ユニットの実行ユニットによる複数のプログラム可能なワークロードの１つの処理を開始する段階を備える。
【００７２】
例３３は、例２７−２９のいずれかの主題を含み、ダイレクトメモリアクセスパケットの同期命令によって、グラフィック処理ユニットによる複数のプログラム可能なワークロードの１つの実行が、グラフィック処理ユニットが複数のプログラム可能なワークロードの他のものの実行を開始する前に終了することを保証する段階を備える。
【００７３】
例３４は、例２７−２９のいずれかの主題を含み、複数のプログラム可能なワークロードの各々によって、ユーザ空間アプリケーションに要求されたグラフィック処理ユニットタスクを実行する段階を備える。
【００７４】
例３５は、例３４の主題を含み、ユーザ空間アプリケーションは、知覚コンピューティングアプリケーションを含む。
【００７５】
例３６は、例３４の主題を含み、グラフィック処理ユニットタスクは、デジタルビデオのフレーム処理を含む。
【００７６】
例３７は、中央処理装置と、グラフィック処理ユニットと、ダイレクトメモリアクセスサブシステムと、複数の命令が格納されたメモリと、を備えるコンピューティングデバイスを含み、複数の命令は、中央処理装置によって実行された場合に、コンピューティングデバイスに、例２７−３６のいずれかの方法を実行させる。
【００７７】
例３８は、格納された複数の命令を含む１つ又は複数の機械可読記憶媒体を含み、複数の命令は、実行されたことに応答して、コンピューティングデバイスに例２７−３６のいずれかの方法を実行させる。
【００７８】
例３９は、例２７−３６のいずれかの方法を実行するための手段を備えるコンピューティングデバイスを含む。
【００７９】
例４０は、複数のプログラム可能なワークロードをコンピューティングデバイスのグラフィック処理ユニットにサブミットするための方法を含み、複数のプログラム可能なワークロードの各々は、複数のグラフィック処理ユニット命令のセットを含み、方法は、コンピューティングデバイスのグラフィックサブシステムによって、ユーザ空間アプリケーションとグラフィック処理ユニットとの間における通信を補助する段階と、コンピューティングデバイスのバッチサブミットメカニズムによって、複数のプログラム可能なワークロードの各々について別個の複数のディスパッチコマンドを含む単一のコマンドバッファを生成する段階と、を備え、ダイレクトメモリアクセスパケットの複数の別個のコマンドの各々は、複数のプログラム可能なワークロードの１つのグラフィック処理ユニットによる処理を別個に開始する。
【００８０】
例４１は、例４０の主題を含み、コンピューティングデバイスのデバイスドライバによって、ダイレクトメモリアクセスパケットを生成する段階を備え、ダイレクトメモリアクセスパケットは、コマンドバッファの複数のディスパッチコマンドに対応する複数のグラフィック処理ユニット命令を含む。
【００８１】
例４２は、例４０又は例４１の主題を含み、複数のディスパッチコマンドによって、グラフィック処理ユニットに全てのプログラム可能なワークロードを並列に実行させる段階を備える。
【００８２】
例４３は、例４０又は例４１の主題を含み、コンピューティングデバイスの同期メカニズムによって、同期コマンドをコマンドバッファに挿入し、グラフィック処理ユニットが他のプログラム可能なワークロードの実行を開始する前に、グラフィック処理ユニットにプログラム可能なワークロードの実行を完了させる段階を備える。
【００８３】
例４４は、例４３の主題を含み、同期メカニズムは、バッチサブミットメカニズムのコンポーネントとして具現される。
【００８４】
例４５は、例４０−４４のいずれかの主題を含み、バッチサブミットメカニズムは、グラフィックサブシステムのコンポーネントとして具現される。
【００８５】
例４６は、例４０−４４のいずれかの主題を含み、グラフィックサブシステムは、アプリケーションプログラミングインタフェース、複数のアプリケーションプログラミングインタフェース、及びランタイムライブラリの１つ又は複数として具現される。
【００８６】
例４７は、中央処理装置と、グラフィック処理ユニットと、ダイレクトメモリアクセスサブシステムと、複数の命令が格納されたメモリと、を備えるコンピューティングデバイスを含み、複数の命令は、中央処理装置によって実行された場合に、コンピューティングデバイスに、例４０−４６のいずれかの方法を実行させる。
【００８７】
例４８は、格納された複数の命令を含む１つ又は複数の機械可読記憶媒体を含み、複数の命令は、実行されたことに応答して、コンピューティングデバイスに例４０−４６のいずれかの方法を実行させる。
【００８８】
例４９は、例４０−４６のいずれかの方法を実行するための手段を備えるコンピューティングデバイスを含む。
【図１】
0006390021.tif 000006
【図２】
0006390021.tif 000007
【図３】
0006390021.tif 000008
【図４】
0006390021.tif 000009