ここで、添付の図を参照して、1つ又は複数の実施形態又は実施態様について説明する。特定の構成及び配置について議論するが、これは説明のみを目的として行われることを理解する必要がある。関連技術の当業者は、詳細な説明の精神及び範囲から逸脱することなく、他の構成及び配置を使用できることを認識するだろう。本明細書で説明する技術及び/又は配置(構成)は、本明細書で説明するもの以外の様々な他のシステム及びアプリケーションにも使用できることが、関連技術分野の当業者には明らかだろう。
以下の説明は、例えば、システムオンチップ(SoC)アーキテクチャ等のアーキテクチャに現れ得る様々な実施態様を示しているが、本明細書で説明する技術及び/又は配置の実施態様は、特定のアーキテクチャ及び/又はコンピュータシステムに限定されず、同様の目的で任意のアーキテクチャ及び/又はコンピューティングシステムによって実装され得る。例えば、例えば複数の集積回路(IC)チップ及び/又はパッケージ、様々なコンピューティング装置、及び/又はセットトップボックス、スマートフォン等の家庭用電化製品(CE)装置を使用する様々なアーキテクチャは、本明細書で説明する技術及び/又は配置を実施することができる。さらに、以下の説明は、論理実装、システムコンポーネントのタイプ及び相互関係、論理パーティション分割/統合の選択等の多くの特定の詳細を記載し得るが、特許請求の範囲に記載された主題は、そのような特定の詳細なしで実施し得る。他の例では、例えば、制御構造及び完全なソフトウェア命令シーケンス等のいくつかの資料は、本明細書に開示する資料を曖昧にしないために、詳細に示さない場合がある。
本明細書に開示する資料は、ハードウェア、ファームウェア、ソフトウェア、又はそれらの任意の組合せで実装され得る。本明細書に開示する資料は、機械可読媒体に格納された命令としても実装され得、この命令は、1つ又は複数のプロセッサによって読み取られ、実行され得る。機械可読媒体は、機械(例えば、コンピューティング装置)によって可読可能な形式で情報を格納又は送信するための任意の媒体及び/又はメカニズムを含み得る。例えば、機械可読媒体には、読取り専用メモリ(ROM);ランダムアクセスメモリ(RAM);磁気ディスク記憶媒体;光記憶媒体;フラッシュメモリ装置;電気的、光学的、音響的、又は他の形態の伝搬信号(例えば、搬送波、赤外線信号、デジタル信号等)、及び他のものが含まれ得る。
明細書における「実施態様」、「例」、「実施形態」等への言及は、説明する実施態様、例、又は実施形態が、特定の特徴、構造、特性、又は同様のものを含み得るが、全ての実施態様、例、又は実施形態が、必ずしも特定の特徴、構造、又は特性を含むとは限らないことを示す。さらに、そのような句は、必ずしも同じ実施態様、例、又は実施形態を指しているわけではない。さらに、特定の特徴、構造、又は特性を実施態様、例、又は実施形態に関連して説明する場合に、それは、そのような特徴、構造、又は特性に、本明細書で明示的に説明したかどうかにかかわらず、他の実施態様、例、又は実施形態にて関連して影響を与えることは当業者の知識の範囲内であることを申し述べておく。
異種プラットフォームの各ハードウェアユニットでメディアタスクを処理するための推定期間を決定すること、メディアタスクの割当て及び管理に推定期間を使用することを含む異種プラットフォームでのハードウェアアクセラレーションによるメディアタスクをスケジューリング及び負荷分散するための送信及び同期技術に関連する方法、装置、機器、コンピューティングプラットフォーム、及び記事を本明細書で説明する。
上で説明したように、メディアタスクは、異種プラットフォーム内の異種ハードウェアユニットのいずれかによって処理され得る。本明細書で使用する異種ハードウェアユニットという用語は、異なるアーキテクチャ、動作周波数、使用可能なメモリ、電力使用量等に関して異なる特性を有するハードウェアユニットを示す。異種プラットフォームという用語は、そのような異種ハードウェアユニットがメディアタスクの処理に利用できるプラットフォームを示す。そのような異種ハードウェアユニットは、例えば、システムオンチップユニット、グラフィック処理装置、固定機能ブロック、実行ユニット等を含み得る。特に、異種ハードウェアユニットは、異なるアーキテクチャ、コア処理装置等を有し得、メディアタスクを処理のために異種ハードウェアユニットのいずれかに送信できるような異種システムアーキテクチャに実装され得る。そのようなハードウェアユニットは、機能ブロック、機能ユニット、動作ブロック、動作ユニット、エンジン等としても特徴付けられ得る。いくつかの実施形態では、各ハードウェアユニットは、別個のモノリシック集積回路である。本明細書で使用する場合に、モノリシック集積回路という用語は、共有基板上に統合された複数の回路を示す。そのようなモノリシック集積回路は、それぞれマザーボードに取り付けられ、及び/又は相互接続され得る。本明細書で使用する場合に、メディアタスクという用語は、ビデオ又は画像を含むメディアコンテンツの処理に関連する任意のタスク又はサブタスクを示す。例示的なメディアタスクには、ビデオ符号化タスク、ビデオ復号化タスク、フレーム又は画像サイズ変更タスク等が含まれる。
いくつかの実施形態では、受信したメディアタスクを処理するための推定期間は、異種ハードウェアユニットのそれぞれで決定される。推定期間は、異種ハードウェアユニットのそれぞれに固有の事前情報(priori information:先験的情報)(例えば、参照データ、モデル実験、シミュレーション、エミュレーション等)に基づき得る。さらに又は代替として、推定期間は、同じ又は同じタイプのハードウェアユニット上の同じタイプのメディアタスクの期間が記録及び使用され、推定期間を決定又は調整するように、以前のメディアタスク期間にも基づき得る。推定時間に加えて、推定メモリ使用量、推定電力使用量等、各異種ハードウェアユニットでの処理の他の特性を決定することができる。さらに、ハードウェアを選択するときに、ハードウェアユニットを変更するコストを考慮することができる。例えば、メディアタスクのためのハードウェアユニットを選択するときに、メディアタスクに関する情報をコピーする期間及び/又はメモリトランザクションコストを考慮に入れることができる。
推定期間及び/又は他の特性を使用して、どの異種ハードウェアユニットをメディアタスクに選択するかを決定する。いくつかの実施形態では、最短の期間を有する異種ハードウェアユニットが選択される。他の実施形態では、推定メモリ使用量及び推定電力使用量等の他の要因が、推定期間に加えて又は推定期間の代わりに使用される。例えば、メモリ使用量又は電力使用量が最も少ないハードウェアユニット、又は期間、メモリ使用量、及び電力使用量の線形結合が最も少ないハードウェアユニットが選択され得る。選択後に、メディアタスクは選択したハードウェアユニットに送信されて処理され、送信時間が記録される。送信時間及び推定期間を使用して(例えば、推定期間を送信時間に追加することにより)、タスクの推定完了時間が生成される。その後、推定完了時間が経過するまで、メディアタスクのステータスは(例えば、ポーリング技術を使用して)確認されず、(例えば、ブロッキング呼出しを使用して)ハードウェアユニットによる応答もスケジュールされない。さらに、メディアタスクは、推定完了時間がトリガーされたことに応答してのみ(例えば、トリガー直後又は短い遅延の後に)確認される。
このような技術を使用すると、ポーリング動作及びブロッキング呼出し動作が有利に回避される。例えば、ブロッキング呼出しを使用するには、送信した各メディアタスクを管理するために単一のスレッドを使用する必要があり、これにより、スレッドが多くなり過ぎる。ブロッキング呼出しでは、メディアタスクの完了時にハードウェアユニットに出力させる命令がハードウェアユニットに提供される。ブロッキング呼出し毎に、ハードウェアユニットの出力を監視するために個別のスレッドが必要である。特に、各スレッドはCPUによって管理され、スレッドの使用率が高いと、他のユーザ又はアプリケーションタスクに有利に割り当てられ得るCPU帯域幅が消費される。特に、スレッドは、オペレーティングシステムのスケジューラで管理できるプログラムした命令の最小シーケンスである。ポーリング動作では、CPUは、メディアタスク処理が完了したことをハードウェアユニットが示すまで、所定の間隔でハードウェアユニットのステータスをポーリングし、これは、CPU使用率を非効率的にさせる。
メディアタスクの推定期間中にブロッキング呼出し動作及びポーリング動作を回避することにより、スレッド数を最適化し、且つ不要なポーリング動作を排除することで、より効率的なCPU使用率が提供される。例えば、一時的に分離された複数のメディアタスクが同じスレッドに割り当てられ得るため、スレッドの数を減らすことができる。特に、スレッドは、ブロッキング呼出しのために1つのハードウェアユニット専用にする必要がないため、異種のハードウェアユニット同士の間で複数のメディアタスクを管理することができる。さらに、ポーリング動作が排除されるか、大幅に排除されるため、CPUが解放されて他の重要なタスクを実行できるようになる。
開示する技術は、メディアタスクをハードウェア(例えば、GPU上のメディア固定機能ブロック、個別のGPU、フィールドプログラマブルゲートアレイ等)に送信して、CPUスケジューリングを最適化し、CPUスレッドの最適数を動的に見つけ、改善した負荷分散を提供するアプローチを提供する。いくつかの実施形態では、スケジューラ(例えば、ミドルウェア)は、低レベルのソフトウェア(例えば、ハードウェアドライバ)に問い合わせて、メディアタスクの推定期間及び/又は他の特性を決定する。この情報に基づいて、ミドルウェアは、選択したハードウェアユニットへのタスクの送信について決定を下す。メディアタスクは選択したハードウェアユニットに送信され、CPUは、例えば、予想完了時間を決定し、予想完了時間が経過した後にメディアタスクのステータスのみを確認することによって、予想タスク期間を使用して結果(例えば、メディアタスク出力データ)を非同期的に取得する。例えば、システムタイマーは、予想完了時間に設定され得、ステータスの確認は、予想完了時間にシステムタイマーによってトリガーされ得る。
そのような技術は、改善したタイミング、電力消費、及びメモリ消費、並びにタスク記述を使用するそのようなタイミング、電力消費、及びメモリ消費の改善した予測(例えば、復号化又はビデオ処理又は符号化等のワークロードのタイプは何か、解像度等の特性)、及び本明細書でさらに議論するハードウェアユニットでのそのようなワークロードの期間に関する事前情報を含む利点を提供する。開示する技術は、CPU負荷に関して動作するスレッドの数の最小化、CPUスタック層に関連する遅延の減少、及び多くのメディアハードウェアユニットを含む異種システムでの効率的な負荷分散を可能にする。
図1は、本開示の少なくともいくつかの実施態様に従って配置された、異種環境でメディアタスクを処理するための例示的なシステム100を示している。図1に示されるように、システム100は、第1のセッション107、任意の数の追加セッション、及びN番目のセッション108等の任意の数のセッション107、108を実施することができる。さらに、各セッションにおいて、入力メディアコンテンツを受信し処理して、出力メディアコンテンツが生成される。システム100は、例えば、サーバ、クラウドコンピューティングリソース、パーソナルコンピュータ、ラップトップコンピュータ、タブレット、ファブレット、スマートフォン、デジタルカメラ、ゲームコンソール、ウェアラブル装置、ディスプレイ装置、オールインワン装置等、或いはサーバプラットフォーム又はモバイルプラットフォーム等のプラットフォーム等の任意の適切な装置又は装置のグループを介して実現され得る。例えば、本明細書で使用する場合に、システム、装置、コンピュータ、又はコンピューティング装置は、そのような任意の装置又はプラットフォームを含み得る。
例えば、第1のセッション107において、符号化ビットストリーム等の入力メディアコンテンツ101が受信及び処理されて、符号化ビットストリーム(異なる解像度のビデオ及び/又は別フォーマットのビットストリームのビットストリームを表す)等の出力メディアコンテンツ102、及び符号化ビットストリーム(さらに異なる解像度のビデオ及び/又は別フォーマットのビットストリームを表す)等の出力メディアコンテンツ103が生成される。さらに、N番目のセッション108では、符号化ビットストリーム等の入力メディアコンテンツ104が受信及び処理されて、符号化ビットストリーム(異なる解像度のビデオ及び/又は別フォーマットのビットストリームを表す)等の出力メディアコンテンツ105、及び符号化ビットストリーム(さらに異なる解像度のビデオ及び/又は別フォーマットのビットストリームを表す)等の出力メディアコンテンツ106が生成される。ビデオサイズ変更の文脈でのトランスコーディングに関して示されるが、セッション107、108は、ビデオ符号化、ビデオ復号化等の任意のメディアコンテンツ処理を実行することができる。
また、示されるように、セッション107、108のそれぞれにおいて、高レベル操作又はソフトウェアコンポーネントは、異種のハードウェアユニットによって実行されるメディアタスク又はプロセスに分割され得る。例えば、第1のセッション107は、復号化動作又はプロセスを複数の復号化タスク112に分割する復号化コンポーネント111、サイズ変更動作又はプロセスを複数のサイズ変更タスク114に分割するサイズ変更コンポーネント113、符号化動作又はプロセスを複数の符号化タスク116に分割する符号化コンポーネント115、サイズ変更動作又はプロセスを複数のサイズ変更タスク118に分割するサイズ変更コンポーネント117、及び符号化動作又はプロセスを複数の符号化タスク120に分割する符号化コンポーネント119を含み得る。そのようなメディアタスク112、114、116、118、120は、フレーム符号化、フレーム復号化、動きベクトル検索、色変換、ノイズ除去、色調整、フレームサイズ変更、ビットストリーム解析、順方向量子化、順方向変換、逆量子化、逆変換、動き補償、イントラ予測、サブサンプリング、フレーム補間、動き推定、適応フィルタ処理等の高レベルのタスク又は動作に適した任意のサブタスクであり得る。本明細書で使用する場合に、メディアタスクという用語は、そのような任意のサブタスクを示す。例えば、各サブタスクは、ビデオのフレーム、ビデオのスライス、ビデオの最大のコーディングユニット等で動作し、サブタスクに少なくとも部分的に特化したハードウェアユニットを使用してアクセラレーションの恩恵を受けることができる。
同様に、N番目のセッション108は、復号化動作又はプロセスを複数の復号化タスク122に分割する復号化コンポーネント121、サイズ変更動作又はプロセスを複数のサイズ変更タスク124に分割するサイズ変更コンポーネント123、符号化動作又はプロセスを複数の符号化タスク126に分割する符号化コンポーネント125、サイズ変更動作又はプロセスを複数のサイズ変更タスク128に分割するサイズ変更コンポーネント127、及び符号化動作又はプロセスを複数の符号化タスク130に分割する符号化コンポーネント129を含み得る。このようなメディアタスク122、124、126、128、130は、第1のセッション107に関して議論したように、より高いレベルのタスク又は動作に適した任意のサブタスクであり得る。議論したように、システム100は、少なくとも部分的に並行して任意の数のセッション107、108を実行することができる。
例えば、システム100は、複数のセッション107、108で動作するオーバーザトップ(OTT)メディアサービスを実施することができる。セッション107、108のそれぞれは、任意の数の同時メディアコンポーネント(復号化、符号化、ビデオ処理等)が、数百のメディアタスクに到達し得る1つ又は複数のプロセスに取り組んでいる状態の適応ビットレート(ABR)モードで動作することができる。例えば、コンポーネント111、113、115、117、119、121、123、125、127、129のそれぞれは、それぞれがソフトウェア機能を提供するソフトウェアコンポーネントとして特徴付けることができる。各コンポーネントは、タスク(ビデオフレーム、ビデオスライス等)をハードウェアユニット(例えば、GPU、FPGA、任意の他のメディアアーキテクチャ)に送信する。典型的に、ビデオアプリケーションは最小の遅延で毎秒60フレームを必要とし、これは、CPUスレッドによって処理される各ビデオフレームに関連付けられた数千のタスクに対応する。有利なことに、議論する技術は、全体的なCPU負荷を最小限に抑えて、CPUリソースを必要とするエンドユーザプリケーションがCPUを使用できるようにする。さらに、議論するように、異種プラットフォームには、メディアタスクを実行するための様々なハードウェアユニットがあるため、CPUによるそのようなメディアタスクのスケジューリング及び管理は重要な考慮事項である。
図2は、本開示の少なくともいくつかの実施態様に従って配置された、メディアタスク及び対応するハードウェアユニットの特性を使用してメディアタスクを処理するための例示的なシステム200を示す。図2に示されるように、システム200は、アプリケーション201(又はアプリケーション層)及びミドルウェア202を実装するCPU241と、異種ハードウェアユニット231とを含む。CPU241は、任意の数及びタイプの中央処理装置又はコントローラを含み得る。異種ハードウェアユニット231は、グラフィック処理装置(GPU)、GPUの一部(例えば、GPUの機能ブロック)、実行ユニット(EU)、固定機能(FF)ブロック、画像プロセッサ、ビデオプロセッサ等の任意の数及びタイプのメディアハードウェアユニットを含み得る。CPU241及び異種ハードウェアユニット231は、全体的又は部分的に同じハウジング内及び/又は同じマザーボード上に実装され得るか、又はCPU241及び異種ハードウェアユニット231は、異なる装置に亘って実装され得る。いくつかの実施形態では、CPU241及び異種ハードウェアユニット231は、同じ又は異なるサーバラック又はモジュールのサーバ環境に実装される。さらに、CPU241及び異種ハードウェアユニット231は、任意の適切な1つ又は複数の技術を使用して通信することができる。システム100と同様に、システム200は、システム100に関してリストされたもの等の任意の適切な装置又は装置のグループを介して実装され得る。
示されるように、アプリケーション201は、出力データ(出力メディアコンテンツ)を生成するために処理されるメディアデータ221、222(入力メディアコンテンツ)を受信又は生成する。例えば、アプリケーション201は、コンポーネント221(例えば、復号化のためのビデオデータのビットストリーム)、コンポーネント222(例えば、符号化又はサイズ変更のためのビデオフレーム)等の処理対象の(for processing)メディアソフトウェアコンポーネントを受信又は生成することができる。図1に関して議論したように、アプリケーション201は、ソフトウェアコンポーネントとして特徴付けられ得るコンポーネント221、222をメディアタスク223にセグメント化することができる。メディアタスク223は、処理のためにミドルウェア202に提供される。特に、アプリケーション201は、入力メディアデータを含むメディアタスク223を送信し、出力メディアデータ(図示せず)を受信する。メディアタスク223は、処理すべきメディアデータと、メディアデータをどのように処理すべきかを示す記述データ又は命令データとを含む。例えば、メディアデータは、ビットストリーム、ビデオシーケンス等(例えば、ペイロード)であり、記述データは、実行すべきタスク(例えば、復号化、符号化等)と、実行すべきタスクの仕様及び/又はタスクの性能に関するメディアデータの仕様とを示す。
アプリケーション201からの各メディアタスク223について、ミドルウェア202は、推定期間及び/又は他の特性を決定する。例えば、アプリケーション201からミドルウェア202に送信されたN個のメディアタスク223のうちのメディアタスク1及びメディアタスク2に関して示されるように、各タスクは、対応するタスク記述子を有し得る。例えば、メディアタスク1は、メディアタスク1を特徴付けるタスク情報、記述子、インジケータ等を含むタスク記述子211を有する。そのような情報又は記述子は、タスク記述子211に関して示されるように、タスクタイプ記述子(例えば、符号化)、タスク規格記述子(例えば、HEVC(High Efficiency Video Coding))、タスク解像度記述子(例えば、1080p)、タスク色空間記述子(例えば、NV12)、タスクビットレートタイプ記述子(例えば、定数ビットレート(CBR)、メモリタイプ記述子(例えば、ビデオメモリ)、フレームタイプ記述子(例えば、Iフレーム)、及びコーディング品質記述子(高品質、High_Q等)を含み得る。同様に、メディアタスク2には、タスクタイプ記述子(例えば、復号化)、タスク規格記述子(例えば、AVC(Advanced Video Coding))、メモリタイプ記述子(例えば、システムメモリ)、タスク解像度記述子(例えば、720p)、及びタスク色空間記述子(例えば、NV12)を含む対応するタスクがある。図示の実施形態では、タスク記述子211は、メディアタスク1が、HEVCコーデックに基づいて、定数ビットレート及び高品質を使用して、NV12色空間で1080pビデオのIフレームを符号化することを示す。そのような情報は、処理中にハードウェアユニットによって使用される符号化プロファイル又は他の設定を示し得る。同様に、タスク記述子212は、NV12色空間で720pビデオ(例えば、ビデオのスライス、フレーム、又はシーケンス)を生成するためのAVC準拠ビットストリームの復号化を示す。
本明細書で使用する場合に、メディアタスク記述子は、議論するように、タスクタイプ記述子、タスク規格記述子、タスク解像度記述子、タスク色空間記述子、タスクビットレートタイプ記述子、メモリタイプ記述子、フレームタイプ記述子、コーディング品質記述子等を含む、メディアタスクを実行するために使用されるプロセスを示す任意のデータ構造を含む。特に、メディアタスク記述子は、メディアタスクの実行に必要な任意の情報(処理すべきデータ以外)であり得る。
ミドルウェア202は、タスク記述子211に基づいて、GPUエンジン206、207、208のいずれかについての、第1のハードウェアユニットの対応するタスク応答213、FPGA204、及び第2のハードウェアユニットの対応するタスク応答213を決定する。すなわち、メディアタスクについてタスク記述子に基づいて、ミドルウェア202は、ハードウェアユニットのタスク応答を決定する。図2の例では、2つのハードウェアユニットタイプ、FPGA204及びGPUエンジン206、207、208の合計4つの利用可能なハードウェアユニットが示される。しかしながら、システム200は、任意の数及びタイプのハードウェアユニットを有してもよい。各ハードウェアユニット(又は同じタイプの複数のハードウェアユニットが使用される場合はタイプ)に対して、対応するタスク応答が生成される。
従って、図示の例の文脈では、メディアタスク1及びタスク記述子211は、2つのタスク応答213、217の決定を生じさせ、タスク応答213は、処理のためにメディアタスク1をFPGA204に送信した場合の予想応答に対応し、タスク応答217は、処理のためにメディアタスク1をGPUエンジン206、207、208のいずれかに送信した場合の予想応答に対応する。同様に、メディアタスク2及びタスク記述子212は、2つのタスク応答214、218の決定を生じさせ、タスク応答210は、処理のためにメディアタスク1をFPGA204に送信した場合の予想応答に対応し、タスク応答218は、処理のためにメディアタスク1をGPUエンジン206、207、208のいずれかに送信した場合の予想応答に対応する。議論したように、メディアタスク223のそれぞれについて、利用可能なタイプのハードウェアリソースの数に等しい数のタスク応答が生成される。
タスク応答213、214、217、218は、ハードウェアユニットでのメディアタスクの実施中に予想されるリソース使用量を示す任意のデータ又はデータ構造を含み得る。図示の実施形態では、タスク応答213、214、217、218のそれぞれは、メディアタスクの予想期間(例えば、それぞれ2ミリ秒、20ミリ秒、5ミリ秒、及び10ミリ秒)、及びメディアタスクの予想されるメモリ割当て(例えば、それぞれ3MB、15MB、5MB、及び12MB)を示す。いくつかの実施形態では、タスク応答213、214、217、218は、予想される電力使用量を含む。
ミドルウェア202は、任意の適切な1つ又は複数の技術を使用して、タスク応答213、214、217、218を決定することができる。いくつかの実施形態では、図示されるように、ミドルウェア202は、異種ハードウェアユニット231のそれぞれの低レベルソフトウェア又はファームウェアにアクセスして、タスク応答213、214、217、218を決定する。例えば、ミドルウェア202は、FPGAソフトウェアスタック203にアクセスすることができ、これは、FPGA204とインターフェイスしてこれを実行しタスク応答213、214を決定し、及び/又はミドルウェア202は、GPUソフトウェアスタック205にアクセスすることができ、これは、GPUエンジン206、207、208とインターフェイスしてこれを実行してタスク応答217、218を決定する。例えば、アプリケーション201からのメディアタスク223について、ミドルウェア202は、FPGAソフトウェアスタック203及びGPUソフトウェアスタック205等の低レベル機能を使用してタスク応答213、214、217、218を決定することができる。
いくつかの実施形態では、ミドルウェア202は、例えば、モデル実験、シミュレーション、エミュレーション等からの参照データを含む、各メディアタスク及び異種ハードウェアユニット231のそれぞれに関する事前情報又はデータを有し得る。例えば、ミドルウェア202は、タスク記述子をパラメータ化し、ルックアップテーブルを介してタスク応答にアクセスし、近似関数からタスク応答を決定等することができる。さらに又は代替として、ミドルウェア202は、以前のタスク応答を格納し、それら以前のタスク応答を使用して現在のタスク応答を決定することができる。例えば、特定のタスク記述子について、任意の数の以前の期間、メモリ使用量、又は電力使用量を格納することができ、平均、中央値、移動平均、又は他の代表的な値をタスク応答に提供することができる。いくつかの実施形態では、そのような以前のタスク応答データを使用して、事前情報を修正し現在のタスク応答を決定することができる。例えば、事前情報及び以前の実際のタスク応答を平均化するか、そうでなければ組み合わせて、現在のタスク応答を決定してもよい。本明細書で以下でさらに議論するように、先読み解析等の他の技術も使用することができる。
ミドルウェア202は、タスク応答213、214、217、218を使用して、どの異種ハードウェアユニット231がメディアタスク223を実装するかを決定する。ミドルウェア202は、任意の適切な1つ又は複数の技術を使用して、どの異種ハードウェアユニット231がメディアタスク223を実装するかを決定することができる。一実施形態では、ミドルウェア202は、異種ハードウェアユニット231のうちの対応する最小期間を有するハードウェアユニットを選択する。一実施形態では、メディアタスク1は、GPUエンジン206、207、208(5ミリ秒)よりもFPGA204での予想期間(2ミリ秒)が短いメディアタスク1に応答してFPGA204に割り当てられる。同様に、メディアタスク2は、FPGA204(20ミリ秒)よりもGPUエンジン206、207、208のうちの1つで予想期間(10ミリ秒)が短いメディアタスク2に応答して、(GPUソフトウェアスタック205によって管理される)GPUエンジン206、207、208のうちの1つに割り当てられ得る。
他の実施形態では、異種ハードウェアユニット231のうちの1つは、メモリ使用量又は電力消費量の対応する最小値に基づいて選択され得る。一実施形態では、異種ハードウェアユニット231のうちの1つは、予想期間、メモリ使用量、及び電力消費のいずれかの線形結合の対応する最小値に基づいて選択され得る。例えば、スコアは、第1の因子に予想期間(DUR)を掛け、第2の因子にメモリ使用量(MEM)を掛け、第3の因子に電力消費(POW)を掛けたものの合計として、異種ハードウェアユニット231のそれぞれについて生成され得(例えば、スコア=x1*DUR+x2*MEM+x3*POW)、最小スコアに対応するハードウェアユニットが選択される。
いくつかの実施形態では、ハードウェアユニットを変更するコストは、コストが議論する特性(期間、メモリ、電力)又は追加の特性の一部となるようにハードウェアユニットを選択するときに考慮され得る。例えば、以前のメディアタスクからのデータに依存するメディアタスクに関するデータを転送するときのメディアタスクに関する情報をコピーする期間、メモリ使用量、及び/又は電力消費を考慮に入れることができる。例えば、復号化又は符号化の文脈では、以前のタスク(例えば、参照データ)からの依存関係があり、それによって、処理対象のハードウェアユニットを選択するときに、以前のメディアタスクを実行したハードウェアユニットを選択する期間、メモリ使用量、及び/又は消費電力(例えば、コスト)は、別のハードウェアユニットを選択する期間、メモリ使用量、及び/又は消費電力未満となり得る(ただし、第2のハードウェアユニットが、そのようなデータ転送を必要とせずに、期間、メモリ使用量、及び/又は電力消費量が少なくなる場合がある)。例えば、メディアタスクの符号化の文脈において、GPUエンジン(例えば、第1のハードウェアユニット)は、ビデオシーケンスのI及びPフレームの符号化のために選択され得る。その後、アプリケーションは、シーケンス内のBフレームの符号化を要求でき、これは、参照データ(例えば、フレーム、併置した動きベクトル等)をコピーして転送する必要がない場合に、FPGA(例えば、第2のハードウェアユニット)を使用してコストを最も下げることができる。しかしながら、参照データのコピー及び転送のコストを考慮に入れると、GPUエンジン(例えば、第1のハードウェアユニット)のコストが、低くなり得、Bフレームメディアタスクの符号化のために選択され得る。いくつかの実施形態では、議論する期間、メモリ使用量、電力消費、及び他のタスク応答は、参照データのそのようなコピー及び転送のコストを含み得る。いくつかの実施形態では、参照データのコピー及び転送のコストは、本明細書で議論するように、期間、メモリ使用量、電力消費量、及び他のタスク応答に追加される。
メディアタスクの処理のために異種ハードウェアユニット231のうちの1つを選択した後に、メディアタスクは、選択したハードウェアユニットに送信され処理される。さらに、送信時間及び予想期間が格納され得る。図2の例では、メディアタスク1は、最初にFPGA204に送信され得、メディアタスク2は、その後、GPUエンジン206、207、208のうちの1つに送信され得る。送信時間及び予想期間に基づいて、各メディアタスクの推定完了時間が生成される。一実施形態では、推定完了時間は、送信時間に予想期間を加えたものである。さらに、送信した各メディアタスク223は、完了を待機しているとしてマーク又はフラグが立てられ、予想完了時間の順序でタスクキュー224に格納される。タスクキュー224は、例えば、任意の適切なメモリ構造を介して実装され得る。
示されるように、メディアタスク223のそれぞれは、タスクキュー224に格納されるときに、対応するインプロセス(in process:処理中)記述子215を有し、それによって、メディアタスク1は対応するインプロセス記述子215を有し、メディアタスク2は対応するインプロセス記述子216を有する。インプロセス記述子215,216は、メディアタスクの予想完了時間の指標を示す任意の適切なデータ構造を有し得る。図2の実施形態では、インプロセス記述子215は、タスクタイプ記述子(例えば、符号化)、完了時間(例えば、0.01)、及び処理のためにメディアタスク1を送信した選択されるハードウェアユニットを示すハードウェアユニット記述子(例えば、FPGA)を含む。同様に、インプロセス記述子216は、タスクタイプ記述子(例えば、復号化)、完了時間(例えば、0.07)、及び処理のためにメディアタスク2を送信した選択されるハードウェアユニットを示すハードウェアユニット記述子(例えば、GPUエンジン1)を含む。
メディアタスク223のそれぞれは、CPU241によって実装されるスレッド(図示せず)にも割り当てられる。メディアタスク223のそれぞれは、既存のスレッドに割り当てられ得るか、又は新しいスレッドがメディアタスクのために生成され得る。議論したように、メディアタスクのブロッキング呼出しを実装しないため、CPU241によって実装されるスレッドの数が大幅に減少し得る。例えば、ブロッキング呼出しを実装するには、メディアタスクに単一のスレッドを使用する必要がある。対照的に、議論する技術を使用すると、複数のメディアタスクを同じスレッドで処理することができる。いくつかの実施形態では、隣接するメディアタスクの完了時間が評価される。いくつかの実施形態では、現在のメディアタスク(例えば、メディアタスク2)が以前のメディアタスク(例えば、メディアタスク1)と同じ完了時間を有する場合に、メディアタスクを同じスレッドに提供できないように制限が適用される。同じスレッドを使用してもよいことに留意されたい(例えば、メディアタスクを同じスレッドに割り当てることができるが、遅延の増加及び/又はパイプラインストールが発生する可能性がある)。いくつかの実施形態では、現在のメディアタスクが以前のメディアタスクと同じ完了時間を有することに応答して第2のスレッドが生成される。いくつかの実施形態では、別のスレッドが利用できない場合にのみ、現在のメディアタスクが以前のメディアタスクと同じ完了時間を有することに応答して第2のスレッドが生成される。いくつかの実施形態では、N個のメディアタスクが同じ完了時間を有する場合に、N個の対応するスレッドが作成される。完了時間の一致に関して議論しているが、いくつかの実施形態では、完了時間は、一致する必要はない場合があるが、新しいスレッドを生成するために互いのしきい値(例えば、0.01ミリ秒)以内にある必要がある。
さらに又は代替として、処理されるメディアタスクの遅延時間がしきい値を超えて増加するとき、又は遅延時間が増加するときに、現在のメディアタスク(例えば、メディアタスク2)のために新しいスレッドが生成され得る。例えば、遅延は、出力メディアデータを要求元のアプリケーションに提供又は報告する時間と推定完了時間との間の時間差に対応する。いくつかの実施形態では、各遅延時間はしきい値と比較され、いずれかの遅延時間がしきい値を超えると、新しいスレッドが生成される。他の実施形態では、平均遅延時間、中央値遅延時間、移動平均遅延時間、時間的にフィルタ処理した中央値遅延時間等が、単一の遅延時間の代わりに使用され得る。さらに、いくつかの実施形態では、遅延時間が増加した場合に新しいスレッドが追加されるように、遅延時間の経時変化が監視される。例えば、第1のインスタンスに続く第2のインスタンスでの遅延時間の測定値(1つの遅延時間、複数の遅延時間の平均等)の差がしきい値(遅延の増加を示す)よりも大きい場合に、スレッドが追加され得る。いくつかの実施形態では、遅延時間の測定値の変化率がしきい値と比較され、しきい値を超える場合に、スレッドが追加される。
議論したように、現在のメディアタスク(例えば、メディアタスク2)は、メディアタスクの管理のためにスレッド(既存のスレッド又は新しく生成されたスレッド)に割り当てられる。送信時間と推定完了時間との間に、スレッドは、割り当てられたハードウェアユニット(又は割り当てられたハードウェアユニットを管理するために使用される任意の介在ソフトウェア)とはいかなる方法でも通信しない。例えば、図2を参照すると、メディアタスク2は、GPUエンジン206に割り当てられ得る。送信時間と推定完了時間との間に、ミドルウェアは、GPUソフトウェアスタック205、GPUエンジン206、207、208、又は異種ハードウェアユニット231のいずれかに対応する任意の他のソフトウェア、ファームウェア、又はハードウェアのいずれかと通信しない。
一実施形態では、ミドルウェア202で動作するスレッド管理メディアタスク2は、システムタイマーを開始して、プロセス記述子216によって示される完了時間にトリガーを提供する。システムタイマーからのトリガーの前に、ミドルウェア202によって実装されるスレッドは、メディアタスク2のステータスを照会又は確認しない。トリガーの後でトリガーに応答してのみ、メディアタスク2を管理するためにミドルウェア202によって実装されるスレッドは、GPUソフトウェアスタック205(又はGPUエンジン206、207、208のうちの1つに直接)にステータスの確認を提供し、メディアタスク2のステータスを確認する。一実施形態では、ミドルウェア202によって実装されるスレッドは、メディアタスク2を処理するハードウェアユニットに対応する低レベルのソフトウェア又はファームウェアドライバにステータス呼出しを行う。提示を明確にするために、メディアタスク2に関して議論するが、そのような処理は、メディアタスク1~Nのいずれかに関して実行され得る。
ステータスの確認に応答して、関連するハードウェアユニット或いはハードウェアユニットのソフトウェア又はファームウェアドライバは、結果として得られる出力メディアデータ又はメディアタスクが完了していないことを示すインジケータのいずれかで応答する。特に、推定期間の精度により、ステータスの確認の割合が高い(又は略100%)と、ステータスの確認に応答して出力メディアデータが提供される。その場合に、出力メディアデータ(例えば、符号化ビットストリーム、ビデオスライス、フレーム、シーケンス等)は、ミドルウェア202によってアプリケーション201に提供される。
そうでない場合に、ミドルウェア202は、メディアタスクのためにポーリング又はブロッキング呼出しを使用し得る。ポーリングにおいて、ミドルウェア202は、特定の時間間隔(例えば、0.05ミリ秒又は0.1ミリ秒毎等)でステータスの確認を提供する。ブロッキング呼出しを使用するために、ミドルウェア202は、ハードウェアユニットの低レベルドライバに命令呼出しを提供して、低レベルドライバ(例えば、GPUソフトウェアスタック205)に、メディアタスクがいつ完了するかについての指標を提供するように指示する。
議論した処理の後に、動作(タスク記述子を含むメディアタスクの受信、タスク応答の決定、ハードウェアユニットへのメディアタスクの割当て及び送信、推定完了時間の決定及びタスクキューへのメディアタスクの送信、以前の又は新しいスレッドへのメディアタスクの割当て、推定完了時間までハードウェアユニットとの先行するスレッド通信、及び結果として得られる出力メディアデータの出力)は、受信したメディアタスクの数に応じて繰り返される。
次に、議論を、メディアタスクの先読み解析をして、選択されるハードウェアユニット及び/又は推定完了時間を決定することに移す。
図3は、本開示の少なくともいくつかの実施態様に従って配置された、メディアタスクを処理する際に使用するための先読み解析300の例を示している。示されるように、先読み解析300は、フレーム310、302、303をそれぞれ処理するためのタスク記述子311、312、313に対応する一連のタスク応答321、322、323を決定することを含み得る。特に、タスク応答321、322、323はそれぞれ、FPGA204におけるタスク記述子311、312、313に対応するメディアタスク(図示せず)を実行することに対応し得る。同様に、タスク応答331、332、333は、それぞれがGPUエンジン206(又はGPUエンジン206、207、208のいずれか)におけるタスク記述子311、312、313に対応するメディアタスク(図示せず)を実行することに対応するように生成される。FPGA204及びGPUエンジン206に関して示されるが、タスク記述子311、312、313は、本明細書で議論するように、任意の数及びタイプの異種ハードウェアユニットに対して生成され得る。
例えば、タスク記述子311は、NV12色空間で定数ビットレート及び高品質を使用して1080p解像度IフレームのHEVCを使用して符号化することを示し、タスク記述子312は、NV12色空間で定数ビットレート及び高品質を使用して1080p解像度PフレームのHEVCを使用して符号化することを示し、タスク記述子313は、NV12色空間で定数ビットレート及び高品質を使用して1080p解像度BフレームのHEVCを使用して符号化することを示す。示されるように、FPGA204は、タスク応答321、322、323によって示されるように、4ミリ秒のタスク記述子311に対応するメディアタスクの推定期間、6ミリ秒のタスク記述子312に対応するメディアタスクの推定期間、及び8ミリ秒のタスク記述子313に対応するメディアタスクの推定期間を有する。示されるように、推定期間を合計して、FPGA204に関して18ミリ秒の総推定期間310を生成し得る。同様に、GPUエンジン206に関して7ミリ秒、3ミリ秒、及び6ミリ秒のメディアタスクの推定期間を合計して、GPUエンジン206に関して16ミリ秒の総推定期間320を生成する。
特に、いくつかの実施形態では、ミドルウェア202は、異種ハードウェアユニット231の全てのハードウェアユニットに関して最小の総推定期間を有するハードウェアユニットに基づいて、タスク記述子311、312、313に対応するメディアタスクを、異種ハードウェアユニット231の同じハードウェアユニットに割り当てることができる。例えば、いくつかのメディアタスクがグループ化され得、グループの総推定期間が、異種ハードウェアユニット231のそれぞれについて決定され得る。次に、最小の総推定期間に対応するハードウェアユニットが、グループのメディアタスクのそれぞれについて選択される。最小の総推定期間について議論したが、最小の総メモリ使用量、最小の総電力消費、又はそれらの組合せにも使用され得る。
他の実施形態では、符号化タスク等のメディアタスクは、情報及び/又は統計を後続の完全なタスクに提供する先読み解析タスクを含む。例えば、先読み解析には、非常に低解像度のビデオに対して同じタスクを実行すること(例えば、低解像度の動きベクトル検索)、完全な符号化又は他の処理の前にビデオフレームに関する情報又は統計(例えば、空間的計算量(complexity:複雑さ)、時間的計算量等)を取得するためのタスクを実行することが含まれ得る。符号化の文脈では、そのような情報を使用して、符号化の特定の態様を有効又は無効にして(例えば、イントラモードを制限する、コーディング又は変換パーティショニングを制限する、デブロッキングフィルタ処理を有効又は無効にする等)、コーディング構造を提供等する(例えば、フレームのフレームタイプを決定する)ことができる。本明細書で議論する推定期間の文脈において、そのような情報は、事前の推定期間を修正するために使用され得る。例えば、先読み処理は、1つ又は複数の先読み処理パラメータを生成するために、メディアタスクに対して実行され得る。議論したように、先読み処理は、同じタイプであるが、異なる特性(例えば、低解像度での動き検索)を有し、メディアタスクとは異なり、又はメディア(例えば、フレーム)に関する情報を収集するためのものであり得る。いずれの場合も、メディアタスクの推定期間は、先読み処理パラメータ又は応答に基づき得る。
例えば、ビデオフレーム符号化の場合に、空間的計算量が高いことを示す先読み処理パラメータを使用して、推定期間を長くすることができる。同様に、時間的計算量が高いことを示す先読み処理パラメータを使用して、推定期間を長くすることができる。いくつかの実施形態では、先読み解析の完了期間を使用して、メディアタスクの推定期間を調整する。例えば、先読み解析の完了期間を予想期間で除算し、結果として得られた因子にメディアタスクの推定期間を乗算して、メディアタスクの最終的な推定期間を決定することができる。
ここで、議論をCPU241によるスレッド管理に移す。議論するように、いくつかの実施形態では、現在のメディアタスクに応答して新しいスレッドが生成され得る。
図4は、本開示の少なくともいくつかの実施態様に従って配置された、送信したメディアタスクを管理する際に使用するための例示的なスレッド管理400を示す。示されるように、インプロセス記述子411(例えば、本明細書で議論するようにタスクキュー224に送信されたメディアタスク421の記述子)に対応するメディアタスク421は、メディアタスク421の管理のために複数のスレッド405のうちの第1のスレッド401に割り当てられる。図示の例では、メディアタスク421は、予想完了時間(例えば、completion_time_stamp)が0.01の復号化である。いくつかの実施形態では、複数のスレッドが開始され、各スレッドが最初に利用可能なメディアタスクを待って、起動段階での潜在的な遅延を減らすことができる。次に、スレッドの数は、本明細書で議論するように、経時的に管理することができる。
さらに、タスクキュー224内のメディアタスク421の直後のメディアタスク422は、インプロセス記述子412に対応し、タスクキュー224内のメディアタスク421の直後のメディアタスク423は、インプロセス記述子413に対応し、タスクキュー224内のメディアタスク423の直後のメディアタスク424は、インプロセス記述子414に対応する。図示の例では、メディアタスク422は、予想完了時間が0.01の符号化タスクであり、メディアタスク423は、予想完了時間が0.03の復号化タスクであり、メディアタスク424は、予定完了時間が0.045であるサイズ変更タスクである。
特に、メディアタスク421及びメディアタスク422は、0.01の同じ予想完了時間を有する。メディアタスク421及びメディアタスク422が同じ予想完了時間を有することに応答して、第2のスレッド402が、メディアタスク422を管理するために生成される。例えば、第1のスレッド401は、対応するハードウェアユニットを同時に呼び出す必要があること、及び/又は第1のスレッド401がメディアタスク421を確認するときにメディアタスク421の準備ができていない場合に、第1のスレッド401がブロッキング呼出しを入力する必要があり得る(従って1つのスレッドしか処理できない)ことを期待するため、メディアタスク421とメディアタスク422との両方を管理できない場合がある。図示の実施形態では、第2のスレッド402は、メディアタスク421、422の完了時間が同じであることに応答して生成される。いくつかの実施形態では、第2のスレッド402は、メディアタスク421、422の完了時間が0.01ミリ秒又は0.005ミリ秒等の互いのしきい値内にあることに応答して生成される。本明細書で使用する場合に、互いにしきい値内にあるという用語は、値同士の間の差(又は差の絶対値)がしきい値未満であるか、又はしきい値以下であることを示す。
また、示されるように、メディアタスク423の完了時間は、メディアタスク422の完了時間と等しくなく、メディアタスク422の0.01ミリ秒等の完了時間のしきい値内にない。従って、メディアタスク423のために新しいスレッドは必要ない。さらに、メディアタスク423は、第1のスレッド401に割り当てられる。例えば、新しいスレッドが必要とされない場合に、メディアタスクは、利用可能なスレッド全体に順次割り当てられ得る。同様に、メディアタスク424の完了時間は、メディアタスク423の完了時間と等しくなく、メディアタスク422の0.01ミリ秒等の完了時間のしきい値内にない。従って、メディアタスク424に新しいスレッドは必要なく、メディアタスク424は第2のスレッド402に割り当てられる。
いくつかの実施形態では、議論するように予想完了時間を比較することに加えて又はその代わりに、ミドルウェア202によって使用されるスレッド405の数は、メディアタスクの遅延に基づいて調整され得る。例えば、メディアタスク421、422、423、424のそれぞれ又はいずれかの割当て時に、メディアタスク421、422、423、424のそれぞれ又はいずれかの完了時に、一定の間隔で又はさらに散発的に、以前のメディアタスクの遅延が評価され得る。例えば、メディアタスクに関して本明細書で使用する場合に、遅延という用語は、推定完了時間と実際の完了時間との間の差を示す(アプリケーション201に提供される対応するメディア出力データによって示される)。1つ又は複数のそのような遅延に基づいて、スレッド405の数を管理することができる。例えば、単一の遅延、遅延の平均、遅延の中央値、移動平均等に等しい遅延時間の測定値を、しきい値と比較することができる。遅延時間の測定値がしきい値を超えると、スレッド405の数が増える。同様に、遅延時間の測定値がしきい値又は別のしきい値(第1のしきい値未満)を下回っている場合に、スレッドを削除してスレッドの数を減らすことができる。他の実施形態では、経時的な遅延の変化が解析され、遅延の変化又は変化率がしきい値を超える場合に、新しいスレッドが追加される。
議論したように、スレッドを増やすだけでは、CPUをより多く消費するという不利な犠牲が伴い、スレッド数のバランスを見つける必要がある。例えば、ミドルウェア202は、メディアタスクのcompletion_time_stamp(推定完了時間)と、対応する出力メディアデータをアプリケーション201に提供するときに測定されるようにタスクが実行された時間との間の時間差として決定されるデルタ又は遅延を確認することによって、作業スレッド405の数を調整することができる。安定した(変化しない)デルタ又は遅延は、スレッド405の数が最適であることを示す。デルタ又は遅延が増大している場合に(しきい値を超える異なる時間でのデルタ又は遅延の差、或いはしきい値を超えるデルタ又は遅延の変化率によって測定される)、議論するように、スレッド405の数は増える。特に、このような技術では、全体的なパフォーマンスの低下の問題(例えば、ハードウェアユニットが必要な速度でメディアタスクを処理できない場合)と、CPUの枯渇(例えば、ミドルウェアが十分なスレッドを作成して実行しない場合、又はタスクを処理するのに十分な計算時間を与えない場合)とを区別する。
図5は、本開示の少なくともいくつかの実施態様に従って配置された、推定処理特性に基づいてメディアタスクをスケジューリングするための例示的なプロセス500を示すフロー図である。プロセス500は、図5に示されるように、1つ又は複数の動作501~512を含み得る。プロセス500又はその一部は、本明細書で議論する任意の装置又はシステムによって実行され得る。例えば、プロセス500は、CPU上で実行されているミドルウェアによって等、CPUによって実施され得る。プロセス500又はその一部は、任意の数のメディアタスク、メディア処理セッション等のために繰り返され得る。
示されるように、プロセス500は、処理のためにアプリケーションからメディアタスクを受信する動作501で開始する。メディアタスクは、本明細書で議論する任意のメディアタスクであり得、メディア出力又はスタンドアロンメディアタスクを生成するために必要とされる一組のメディアタスクの一部であり得る。さらに、メディアタスクは、処理のためにメディアタスクを特徴付けるタスク情報、記述子、インジケータ等を含むタスク記述子を含むか、又はその記述子に結合され得る。
処理は動作502で続行され、そこでは、任意の数の異種ハードウェアユニットのそれぞれのメディアタスクに対して処理特性が決定される。例えば、システムがN個の異種ハードウェアユニット又はN個のタイプの異種ハードウェアユニット(N個のタイプの一部に冗長性がある)を含む場合に、メディアタスクに対してN個の処理特性が生成される。処理特性は、推定処理期間、推定メモリ使用量、推定電力消費等、本明細書で議論する任意のデータを含み得る。メディアタスクの処理特性を決定するための技術は、図6に関して本明細書でさらに議論する。
処理は動作503で続行され、そこでは、N個の異種ハードウェアユニット又はN個のタイプの異種ハードウェアユニットのうちの一方が、メディアタスクを処理するために選択される。例えば、異種ハードウェアユニットのうちの特定の1つを選択してもよく、又は特定のタイプの異種ハードウェアユニットを選択してもよく、タイプが選択される場合に、コントローラをそのタイプの特定のハードウェアユニットに使用することができ、又は特定のハードウェアユニットは、順次又は可用性に基づいて選択され得る。いくつかの実施形態では、ハードウェアユニット又はタイプは、最小予想期間に対応するハードウェアユニット又はタイプに基づいて選択される。いくつかの実施形態では、ハードウェアユニット又はタイプは、因子の加重和及び予想期間、予想メモリ使用量、及び予想電力消費量等のメディアタスクのスコアの最小値に対応するハードウェアユニット又はタイプに基づいて選択される。
処理は動作504で続行され、そこでは、メディアタスクは、動作503で選択したハードウェアユニットに送信される。メディアタスクは、任意の適切な1つ又は複数の技術を使用して送信され得る。一実施形態では、動作501~504は、CPU上で動作するミドルウェアによって実行され、動作504は、選択したハードウェアユニットの低レベルドライバ(例えば、ソフトウェア又はファームウェア)へのインターフェイスを使用して、メディアタスクを選択したハードウェアユニットに送信するCPU上で動作するミドルウェアを含む。さらに、動作504において、メディアタスクの開始時間が決定される。例えば、メディアタスクの処理の開始を示すために、ハードウェアユニットの低レベルドライバから開始時間が報告され得る。いくつかの実施形態では、開始時間は、ハードウェアユニットの低レベルドライバによってメディアタスクに提供されるタイムスタンプの一部であるか、又はタイムスタンプを使用して決定される。
処理は動作505で続行され、そこでは、メディアタスクがタスクキュー(例えば、ミドルウェアに対してローカル)に配置され、推定完了時間がメディアタスクについて決定される。一実施形態では、推定完了時間は、動作504で決定した開始時間に動作502で決定した予想期間を加えたものである。いくつかの実施形態では、推定完了時間は、インプロセス記述子又はタスクキューに格納したメディアタスクメディアタスクのレコードの一部として格納される。
処理は動作506で続行され、そこでは、メディアタスクは、CPU上で実行され且つメディアタスクを管理するスレッドに割り当てられる。いくつかの実施形態では、メディアタスクは既存のスレッドに割り当てられる。いくつかの実施形態では、新しいスレッドが生成され、メディアタスクが新しいスレッドに割り当てられる。メディアタスクをCPUのスレッドに割り当てるための技術は、本明細書において、図7に関してさらに議論する。
処理は動作507で続行され、そこでは、システムタイマーがメディアタスクに設定され、推定完了時間が経過するまで、スレッドは、選択したハードウェアユニットによって処理されたメディアタスクのステータスを確認しない。例えば、メディアタスクを管理するスレッドは、推定完了時間の経過を示すためにシステムタイマーを設定することができる。システムタイマーの設定に関して議論したが、スレッドは、任意の適切な1つ又は複数の技術を使用して推定完了時間を追跡することができる。推定完了時間を通じて(及びハードウェアユニットへのメディアタスクの送信後)、スレッドは、ハードウェアユニットへの(例えば、ハードウェアユニットの低レベルドライバに、ハードウェアユニットに直接等)通信を提供しない。例えば、スレッドがハードウェアユニットのステータスをポーリング又は確認せず、スレッドがブロッキング呼出しを発行していないため(そのため、ハードウェアユニットはメディアタスクの完了に応答しない)、スレッド及びハードウェアユニットは、その間に通信的に切断されていると見なされ得る。特に、その間に、スレッド(CPU等)とハードウェアユニットとの間でデータ又はインジケータは通信されない。さらに、議論したように、推定完了時間の経過後にステータスの確認が行われる。ブロッキング呼出しの場合に、そのようなステータスの確認は行われないことに留意されたい。このような通信切断には、CPUを解放して他のタスクを実行できるようにし(メディアタスクの処理中にポーリングを実行しないため)、スレッドを手元のメディアタスク専用にする必要がない等、本明細書で説明する利点がある。例えば、ブロッキング呼出しを発行しないため、メディアタスクの処理中に別のメディアタスクをスレッドに割り当てることができる。
処理は動作508で続行され、そこでは、動作505で決定した推定完了時間後に、その経過に応答してのみ、メディアタスクのステータスが確認される。一実施形態では、推定完了時間後に、その経過に応答して、スレッド(CPUのミドルウェアによって実装される)は、ハードウェアユニットの低レベルドライバ又はハードウェアユニット自体にステータスの確認を発行する。ステータスの確認は、ポーリング動作で使用されるもの、メディアタスクの結果データを要求する1つ又は複数のインジケータ等、ステータスを確認するための任意の適切なデータ構造を含み得る。
処理は動作509で続行され、そこでは、メディアタスクがハードウェアユニットで処理を完了したかどうかに関して決定が行われる。例えば、ステータスの確認に応答して、ハードウェアユニットは、メディアタスクの結果データ(使用可能な場合)、又は利用可能であれば、メディアタスクが完了していないことを示すインジケータで応答し得る。タスクが完了すると、処理は動作510で続行され、そこでは、議論したように、メディアタスクの結果データがハードウェアユニットから取得される。そうでない場合に、処理は動作511で続行され、そこでは、スレッドはポーリング(例えば、ハードウェアユニットのステータスを断続的に確認する)又はブロッキング呼出しを適用して、メディアタスクの結果データを取得する。議論したように、動作511の実施態様は、推定完了時間の正確さのためにまれであり得る。いずれの場合も、処理は(動作510又は511から)動作512で続行され、そこでは、メディアタスクの結果データ(例えば、出力データ)は、任意の適切な1つ又は複数の技術を使用してアプリケーションに提供される。
プロセス500は、改善したスケジューリング、改善したCPU及びハードウェアユニットの使用効率、及び改善したスレッド管理のために、受信したメディアタスク毎に繰り返され得る。
図6は、本開示の少なくともいくつかの実施態様に従って配置された、メディアタスクの処理特性を決定するための例示的なプロセス600を示すフロー図である。プロセス600は、図6に示されるように、1つ又は複数の動作601~604を含み得る。プロセス600又はその一部は、本明細書で議論する任意の装置又はシステムによって実行され得る。例えば、プロセス600は、プロセス500の動作502で実施され得る。プロセス600又はその一部は、任意の数のメディアタスク、メディア処理セッション等のために繰り返され得る。
示されるように、プロセス600は動作601で開始し、そこでは、特定のハードウェアユニット又はハードウェアユニットのタイプ及び受信したメディアタスクの事前情報が受信される。事前情報は、特定のハードウェアユニット又はハードウェアユニットのタイプに関して処理される特定のメディアタスクの処理特性を示す。例えば、特定のハードウェアユニット又はハードウェアユニットのタイプの設計、アーキテクチャ、及び特性に基づいて、予想処理特性(例えば、期間、メモリ使用量、消費電力等)は、任意の適切な1つ又は複数の技術を使用して決定することができる。このような技術には、動作周波数、グラフィックプロセッサ、エンジンタイプ等のハードウェア及び/又はプラットフォーム固有の特性に応じて調整され得る事前実験(例えば、Cモデル実験)、モデリング、及びエミュレーションが含まれ得る。そのような事前情報は、ルックアップテーブル、モデリング関数等を含む任意の適切な技術及びデータ構造を使用して格納及びアクセスすることができる。
プロセス600は動作602で続行され、そこでは、同じ又は同じタイプのハードウェアユニットにおける現在のメディアタスクと同じタイプのメディアタスクを処理するための以前の結果が取得され得る。例えば、CPUで実行されているミドルウェアは、同じ又は同じタイプのハードウェアユニットおける現在のメディアタスクと同じタイプのメディアタスクを実行することで、以前の処理特性のサンプリングを取得して格納することができる。そのような処理特性は、期間(例えば、同じ又は同じタイプのハードウェアユニットにおける開始時間と完了時間との間の差)を含む、本明細書で議論する任意の処理特性を含み得る。例えば、メディアタスクはパラメータ化され得(例えば、議論するようにメディアタスクのタイプを示す提供されたパラメータ)、各パラメータ化及びハードウェアユニット(又はハードウェアユニットタイプ)のペアリングについて、結果として得られる処理特性の1つ又は複数のレコードが格納され得る。いくつかの実施形態では、処理特性結果の単一のインスタンスが格納される一方、他の実施形態では、複数のインスタンスが格納され得るか、又はそのような複数のインスタンスの平均が維持され得る。
プロセス600は動作603で続行され、そこでは、先読み処理結果が取得され得る。例えば、いくつかのメディアタスクには、メディアタスクの処理を通知するために使用される対応する先読み動作がある。例えば、フレーム統計又は先読み符号化をビデオフレームの符号化の前に実行して、フレームのフレームタイプを識別し、フレームのモードを有効又は無効にし、又はそうでなければ結果として得られる符号化を通知し得る。このような先読みの結果は、メディアタスクの処理特性を修正又は調整するために活用することができる。例えば、フレーム符号化(又はスライス符号化又は動きベクトル検索等)の場合に、時間的計算量が高いことを示す先読み解析(例えば、しきい値を超えるフレームの時間歪み)を使用して、予想期間を増やす等、1つ又は複数の処理特性を増やすことができる。同様に、空間的計算量が高いことを示すインジケータは、予想期間を増やす等、1つ又は複数の処理特性を増やすことができる。
プロセス600は動作604で続行され、そこでは、メディアタスクの最終的な処理特性は、1つ又は複数の事前情報、以前の結果、及び先読み解析結果を使用して決定される。一実施形態では、処理特性がメディアタスク特性に基づいて検索又は決定され得るように、事前情報のみが使用される。いくつかの実施形態では、処理特性が格納した以前の処理特性結果から決定されるように、以前の結果のみが使用される。
いくつかの実施形態では、事前情報の処理特性及び以前の結果の処理特性をブレンドして、最終的な処理特性を決定することができる。例えば、事前情報及び以前の結果を平均化してもよい。一実施形態では、事前情報は、最終処理特性が、事前情報と、以前の結果及び0から1の間であるスケーリング係数の積との合計であるように、以前の結果に基づいて調整され得る(例えば、Final_PC = a_priori_PC + SF * previous_PC)。さらに、事前情報の処理特性及び以前の結果の処理特性を使用して生成された処理特性は、動作604に関して議論したように、先読み解析情報に基づいて調整することができる。
プロセス600は、受信した各メディアタスク及び各異種ハードウェアユニット又は異種ハードウェアユニットのタイプに対して繰り返されて、選択した異種ハードウェアユニット又は選択したタイプの異種ハードウェアユニットにメディアタスクを割り当てる際に使用するための、及び割り当てられたメディアタスクをスレッドを介して管理するためのメディアタスクの各異種ハードウェアユニット又は異種ハードウェアユニットのタイプについて、正確な処理特性、特に正確な推定処理期間を取得することができる。
図7は、本開示の少なくともいくつかの実施態様に従って配置された、メディアタスクをスレッドに割り当てるための例示的なプロセス700を示すフロー図である。図7に示されるように、プロセス700は、1つ又は複数の動作701~711を含み得る。プロセス700又はその一部は、本明細書で議論する任意の装置又はシステムによって実行され得る。例えば、プロセス600は、プロセス500の動作506で実施され得る。プロセス700又はその一部は、任意の数のメディアタスク、メディア処理セッション等に関して繰り返され得る。
示されるように、プロセス700は動作701で開始し、そこでは、現在のメディアタスクについて、メディアタスクの推定完了時間は、タスクキュー内の以前のメディアタスクの推定完了時間と比較される。以前のメディアタスクは、任意の以前のメディアタスクであり得る。スレッドが1つだけ使用されている例では、以前のメディアタスクはキュー内の直前のメディアタスクであり得る。複数のスレッドが使用されている例では、以前のメディアタスクは、現在のメディアタスクが割り当てられるスレッドのタスクであり得る。
処理は決定動作702で続行され、そこでは、現在のメディアタスクの完了時間と以前のメディアタスクの完了時間とが一致するか、又は互いのしきい値内にあるかどうかに関して判定が行われる。いくつかの実施形態では、判定は、(システムによって提供される精度又は粒度のレベルに)正確に一致する完了時間に基づいて行われ、処理は、一致した場合にのみ動作703で続行される。他の実施形態では、判定は、完了時間が互いのしきい値内にあることに基づいて行われる。例えば、完了時間には差があり得、差又は差の絶対値がしきい値未満である場合に、処理は動作703で続行される。
完了時間が一致するか、又は互いのしきい値内にある場合に、処理は動作703で続行され、そこでは、新しいスレッドがメディアタスクのために生成され得、メディアタスクが新しいスレッドに割り当てられる。議論したように、いくつかの実施形態では、メディアタスクを既存のスレッドに割り当てることができるが、遅延及び/又はスループットが影響を受ける可能性がある。例えば、一致する時間又は非常に近い完了時間の指標は、スレッドを増やす必要性がある又はその必要性を示し得る。スレッドの数を増やすことにより、現在のメディアタスクを議論したように適切に管理することができ、将来のメディアタスクは、スレッドに以前に割り当てられた以前のメディアタスクと一致するか、完了時間が近くなる可能性が低くなる。スレッドの数は、示されるように、単一のスレッド等、任意の数だけ増やすことができる。
完了時間が一致しないか、又は互いのしきい値内にない場合に、処理は動作704で続行され、そこでは、以前のメディアタスクの遅延が監視され得る。本明細書で使用する場合に、遅延という用語は、メディアタスクの推定完了時間と、結果として得られる出力データのアプリケーションへの報告(例えば、実行時間)との間の時間を示す。従って、遅延には、選択した異種ハードウェアユニットでの処理の任意の遅延又は推定完了時間の不正確さだけでなく、CPUによるメディアタスクの管理の遅延も含まれ得、これは、使用するスレッドの数を増やす必要があることを示し得る。示されるように、以前のメディアタスクの処理を監視して、そのような処理遅延を決定することができる。
処理は決定動作705で続行され、そこでは、遅延の測定値がしきい値を超えるかどうか、又は遅延の測定値が時間の経過とともに増加しているかどうかに関して判定が行われる。遅延の測定には、単一の遅延又は遅延の任意の適切な組合せが含まれ得る。例えば、以前の遅延の全て又はサンプリングを平均化してもよく、又は中央値(又は移動平均又はフィルタ処理した中央値等の他の測定値)を使用して、評価のための遅延の測定値を生成することができる。いくつかの実施形態では、遅延の測定値は遅延しきい値と比較され、遅延の測定値が遅延しきい値を超える場合に、処理は動作706で続行される。さらに又は代替として、遅延の測定値を経時的に監視して、時間の経過に伴う遅延の測定値の増加(例えば、遅延の測定値の変化率)を検出してもよい。変化率は、任意の適切な1つ又は複数の技術を使用して決定することができる。例えば、第1の時間インスタンスでの第1の遅延の測定値及び第2の時間インスタンスでの第2の遅延の測定値は、第2の時間インスタンスが第1の時間インスタンスに続くように決定され得る。次に、遅延時間の変化率は、遅延の測定値の差を時間の差で割ったものとして決定できる(例えば、Rate =(LM2 - LM1)/(T2 - T1))。変化率が別のしきい値を超える場合、処理は動作706で続行される。
示されるように、決定動作705が遅延及び/又は遅延の変化率がしきい値を超えると判定する場合、及び/又は1つ又は複数の新しいスレッドの作成を必要とする場合に、プロセス700は動作706で続行され、そこでは、新しいスレッドがメディアタスクのために生成され、メディアタスクが新しいスレッドに割り当てられる。動作703、706で新しいスレッドが生成されなかった場合に、処理は動作707で続行され、そこでは、メディアタスクが既存のスレッドに割り当てられ、1つ又は複数の新しいスレッドが生成されない。議論したように、メディアタスクは、動作中の全てのスレッドの次のスレッドを順番に選択することにより、新しいスレッドに割り当てることができる。
処理は、動作703、706、又は707のいずれかから動作708で続行される。動作708で、メディアタスクの完了後に、メディアタスクの遅延が再び監視され得る。このような監視は、タスクの完了後に表示されるが、任意の適切な数のタスクが完了した後、任意の期間の後等に実行され得る。動作704に関して議論したように、完了したばかりのメディアタスクのメディアタスクの遅延及び/又は任意の以前のメディアタスクの遅延を監視することができる。本明細書で使用する場合に、遅延という用語は、メディアタスクの推定完了時間と、結果として得られる出力データのアプリケーションへの報告(例えば、実行時間)との間の時間を示す。
処理は決定動作709で続行され、そこでは、遅延の測定値がしきい値未満であるかどうか、又は遅延の測定値が時間の経過とともに減少しているかどうかに関して判定が行われる。そのような判定は、決定動作705に関して議論したものと同様に行うことができる。例えば、遅延の測定値は、完了したばかりのメディアタスクに対応する単一の遅延、又は平均、中央値、移動平均、フィルタ処理した中央値を含む遅延の任意の適切な組合せを含み得る。示されるように、遅延の測定値は、遅延しきい値と比較され、遅延の測定値が遅延しきい値未満である場合に、処理は動作710で続行される。さらに又は代替として、上で議論したように、遅延の変化率が決定され得、変化率が別のしきい値未満である場合に、処理は動作710で続行される。
動作710において、決定動作709でなされた判定に応答して1つ又は複数のスレッドが削除され得る。いくつかの実施形態では、削除されるスレッドは、スレッドに割り当てられた任意の他のメディアタスクの直後又は完了後のいずれかで処理されたばかりのメディアタスクのスレッドである。
スレッドが削除されない場合に、処理は動作711で続行され、そこでは、スレッドの数が維持され、次のメディアタスクが処理される。プロセス700は、受信したメディアタスク毎に及び/又はスレッド管理のために様々な間隔で繰り返され得る。特に、プロセス700は、スレッド数のバランスを維持して、メディアタスクの効率的な処理及び他のタスクのCPU可用性を可能にする。
図8は、本開示の少なくともいくつかの実施態様に従って配置された、メディアタスクをスケジューリングするための例示的なプロセス800を示すフロー図である。プロセス800は、図8に示されるように、1つ又は複数の動作801~805を含み得る。プロセス800は、メディアタスクスケジューリングプロセスの少なくとも一部を形成し得る。非限定的な例として、プロセス800は、本明細書で議論するように、任意の装置又はシステムによって実行されるようなメディアタスクスケジューリングプロセスの少なくとも一部を形成し得る。さらに、プロセス800は、図9のシステム900を参照して本明細書で説明する。
図9は、本開示の少なくともいくつかの実施態様に従って配置された、メディアタスクをスケジューリングするための例示的なシステム900の例示的な図である。図9に示されるように、システム900は、中央処理装置901、任意の数の異種ハードウェアユニット231、メモリ903、ディスプレイ904、及び送信機905を含み得る。さらに示されるように、中央処理装置901は、異種ハードウェアユニット231とインターフェイスするためのアプリケーション201、ミドルウェア202、ハードウェアドライバ911を含む又はこれらを実装し得る。さらに、異種ハードウェアユニット231は、(サイズ変更、符号化、復号化、フィルタ処理、又は他の任意のメディアタスクのための)メディアタスクプロセッサ921、エンコーダ922、デコーダ923、及び本明細書で議論する他の任意のコンポーネント又はプロセスを実装し得る。システム900の例では、メモリ903は、メディアタスクデータ、又はビデオフレーム、ビットストリームデータ、タスク記述子データ、タスク応答、インプロセス記述子、及び/又は本明細書で議論する他の任意のデータ等の関連コンテンツを格納することができる。
示されるように、いくつかの例では、アプリケーション201、ミドルウェア202、及びハードウェアドライバ911は、中央処理装置901を介して実装され得る。他の例では、アプリケーション201、ミドルウェア202、及びハードウェアドライバ911の1つ又は複数又は部分は、別の中央処理装置又はコントローラを介して実装され得る。さらに、示されるように、いくつかの例では、メディアタスクプロセッサ921、エンコーダ922、デコーダ923は、異種ハードウェアユニット231を介して実装され得る。他の例では、メディアタスクプロセッサ921、エンコーダ922、デコーダ923、又はその一部は、専用ハードウェア等の別の処理装置を介して実装され得る。
異種ハードウェアユニット231は、1つ又は複数のグラフィックプロセッサを含み得、これは、本明細書で議論するような動作を提供し得る任意の数及びタイプのグラフィック処理装置を含み得る。このような動作は、ソフトウェア又はハードウェア、或いはそれらの組合せを介して実施され得る。例えば、グラフィックプロセッサは、メモリ903から取得したビデオフレーム、ビデオデータ、画像データ、ビットストリームデータ等を操作するための専用の回路を含み得る。中央処理装置901は、制御及び他の高レベル機能をシステム900に提供し得る及び/又は本明細書で議論するような任意の動作を提供し得る任意の数及びタイプの処理装置又はモジュールを含み得る。メモリ903は、揮発性メモリ(例えば、スタティックランダムアクセスメモリ(SRAM)、ダイナミックランダムアクセスメモリ(DRAM)等)、又は不揮発性メモリ(例えば、フラッシュメモリ等)等の任意のタイプのメモリであり得る。非限定的な例では、メモリ903は、キャッシュメモリによって実装され得る。
一実施形態では、異種ハードウェアユニット231は、グラフィックプロセッサ又は他のプロセッサの実行ユニット(EU)を含み得る。EUは、例えば、ワイドアレイのプログラム可能な論理機能を提供し得る1つ又は複数の論理コア等のプログラム可能な論理又は回路を含み得る。一実施形態では、異種ハードウェアユニット231は、固定機能回路等の専用ハードウェアを含み得る。固定機能回路は、専用の論理又は回路を含み得、固定された目的又は機能のために専用の論理にマッピングされ得る一組の固定機能エントリポイントを提供し得る。
図8の議論に戻る。プロセス800は動作801で開始し、そこでは、複数の異種ハードウェアユニットのそれぞれで受信したメディアタスクを処理するための推定期間が決定される。例えば、ハードウェアユニット毎に、推定期間が決定される。推定期間に加えて、推定メモリ使用量及び推定電力消費量等の他のタスク応答特性が決定され得る。いくつかの実施形態では、メディアタスクは、フレーム符号化、フレーム復号化、動きベクトル検索、色変換、ノイズ除去、色調整、又はフレームサイズ変更のうちの1つである。いくつかの実施形態では、異種ハードウェアユニットは、グラフィック処理装置、固定機能ハードウェアブロック、実行ユニット、及びシステムオンチップのそれぞれを含む。
いくつかの実施形態では、推定期間を決定することは、メディアタスクに対応するタスク記述、及び複数の異種ハードウェアユニットのそれぞれについて、タスク記述に対応する事前参照データに基づいている。いくつかの実施形態では、推定期間を決定することは、異種ハードウェアユニットのうちの選択した1つでメディアタスクと同じタイプを有する第2のメディアタスクを処理するための以前の実行時間を決定し、以前の実行時間に少なくとも部分的に基づいて、異種ハードウェアユニットのうちの選択した1つに推定期間を設定することを含む。いくつかの実施形態では、推定期間を決定することは、先読み処理が1つ又は複数の異なる処理特性を伴うメディアタスクと同じタスクを実行するように、メディアタスクに対して先読み処理を実行してメディアタスクの1つ又は複数の先読み処理パラメータを生成し、先読み処理パラメータに少なくとも部分的に基づいて推定期間の設定することを含む。
処理は動作802で続行することができ、そこでは、メディアタスクは、推定期間に基づいて、処理するために異種ハードウェアユニットのうちの選択した1つに送信される。議論したように、いくつかの実施形態では、異種ハードウェアユニットのうちの選択した1つは、最小推定期間を有するハードウェアユニットに対応する。いくつかの実施形態では、異種ハードウェアユニットのうちの選択した1つは、推定期間と、メモリ使用量及び電力消費等の1つ又は複数の他のタスク応答特性との加重和として生成される最小スコアを有するハードウェアユニットに対応する。いくつかの実施形態では、処理対象のメディアタスクを異種ハードウェアユニットのうちの選択した1つに送信することは、異種ハードウェアユニットのうちの選択した1つが複数の推定期間のうちの最小推定期間を有することに応答して、異種ハードウェアユニットのうちの選択した1つを選択することを含む。
処理は動作803で続行することができ、そこでは、メディアタスクの推定完了時間は、異種ハードウェアユニットのうちの選択した1つに対応する推定期間をメディアタスク送信に対応する開始時間に追加することに基づいて決定される。以下で議論するように、推定完了時間を使用して、メディアタスクと、複数のメディアタスクの管理のために動作するスレッドの数とを管理することができる。
処理は動作804で続行することができ、そこでは、メディアタスクは、メディアタスクの管理のためにスレッドに割り当てられる。いくつかの実施形態では、メディアタスクをスレッドに割り当てることは、メディアタスクの推定完了時間が第2のスレッドに割り当てられた第2のメディアタスクの第2の推定完了時間のしきい値内にあると判定し、推定完了時間が第2の推定完了時間のしきい値内にあることに応答してスレッドを作成することを含む。いくつかの実施形態では、メディアタスクをスレッドに割り当てることは、メディアタスクの推定完了時間が第2のメディアタスクの第2の推定完了時間と一致し、第2のスレッドに割り当てられ、推定完了時間が第2の推定完了時間のしきい値内にあることに応答してスレッドを作成することを含む。いくつかの実施形態では、プロセス800は、第3のメディアタスクの第3の推定完了時間が推定完了時間の後にあり、第4のメディアタスクの第4の推定完了時間が第3の推定完了時間の後にあることを判定することであって、第3のメディアタスクはタスクキュー内のメディアタスクの直後にあり、第4のメディアタスクはタスクキュー内の第3のメディアタスクの直後にある、判定すること;第3のメディアタスクがタスクキュー内のメディアタスクの直後にあり、且つ第3の推定完了時間が推定完了時間の後にあり、推定完了時間のしきい値外にあることに応答して、第3のメディアタスクを第2のスレッドに割り当てること;及び第4のメディアタスクがタスクキュー内のメディアタスクの直後にあり、第4の推定完了時間が第3の推定完了時間の後にあり、且つ第3の推定完了時間のしきい値外にあることに応答して、第4のメディアタスクをスレッドに割り当てること;をさらに含む。
いくつかの実施形態では、メディアタスクをスレッドに割り当てることは、メディアタスクを受信する前に、処理するために送信した1つ又は複数の第2のメディアタスクの完了に対応する遅延時間の測定値がしきい値を超えているという指標を受信し、遅延時間の測定値がしきい値を超えていることに応答してスレッドを作成することを含む。いくつかの実施形態では、遅延時間の測定値は、出力メディアデータのアプリケーションへの報告時間と、1つ又は複数の第2のメディアタスクのそれぞれについての推定完了時間との間の差を含む。
処理は動作805で続行することができ、そこでは、割り当てられたスレッドから、異種ハードウェアユニットのうちの選択した1つでのメディアタスクのステータスが、推定完了時間後に、その経過に応答してのみ確認される。本明細書で議論するように、推定完了時間が経過する前に、ポーリングは実行されず、ブロッキングは発行されない。従って、選択したハードウェアユニット及びスレッドは、ステータスの確認が行われるまで通信結合されない。特に、選択したハードウェアユニットは、推定完了時間が経過し、スレッドによるステータスの確認に応答するまで、結果の出力データを提供しない場合がある。ステータスの確認に応答して、スレッドは、メディアタスクの出力データ、又はメディアタスクが不完全であることを示すデータを受信し得る。出力データを受信すると、スレッドは、出力データをメディアタスクに対応するアプリケーションに渡す。メディアタスクが不完全であるという指標の場合に、プロセス800は、メディアタスクが不完全であるという指標に応答して、ポーリング照会又はブロッキング呼出しコマンドのうちの1つを異種ハードウェアユニットのうちの選択した1つに提供することをさらに含み得る。例えば、ポーリングは、出力データを受信するまで実行され得るか、又はメディアタスクの完了時に出力データを提供するために選択したハードウェアユニットに対してブロッキング呼出しが発行され得る。
プロセス800は、任意の数のメディアタスクに対して、直列又は並列のいずれかで、任意の回数繰り返すことができる。議論したように、プロセス800は、任意の適切なメディア処理コンテキストのためのメディアタスクのスケジューリングを提供することができる。例えば、メディアタスクをスケジューリングするための議論した技術は、計算効率が高く、低電力のメディアコンテンツ処理を提供し得る。
本明細書で説明するシステムの様々なコンポーネントは、ソフトウェア、ファームウェア、及び/又はハードウェア、及び/又はそれらの任意の組合せで実装され得る。例えば、本明細書で議論するシステム又は装置の様々なコンポーネントは、少なくとも部分的に、例えば、スマートフォン等のコンピュータシステムに見受けられ得るようなコンピュータシステムオンチップ(SoC)のハードウェアによって提供され得る。当業者は、本明細書で説明するシステムが、対応する図に描かれていない追加のコンポーネントを含み得ることを認識し得る。他の例では、本明細書で議論するシステム又は装置の様々なコンポーネントは、サーバ、コンピュータ、クラウドコンピューティングリソース等に見受けられるようなプラットフォームで提供され得る。
本明細書で議論する例示的なプロセスの実施態様は、図示の順序で示される全ての動作の実施を含み得るが、本開示は、この点に関して限定されず、様々な例において、本明細書の例示的なプロセスの実施態様は、示される動作のサブセットのみ、示されるのとは異なる順序で実行される動作、又は追加の動作を含み得る。
さらに、本明細書で議論する動作のいずれか1つ又は複数は、1つ又は複数のコンピュータプログラム製品によって提供される命令に応答して開始することができる。そのようなプログラム製品は、命令を提供する信号伝達媒体を含み得、例えば、命令がプロセッサによって実行されると、プロセッサは、本明細書で説明する機能を提供し得る。コンピュータプログラム製品は、1つ又は複数の機械可読媒体の任意の形態で提供することができる。こうして、例えば、1つ又は複数のグラフィック処理装置又はプロセッサコアを含むプロセッサは、1つ又は複数の機械可読媒体によってプロセッサに伝達されるプログラムコード及び/又は命令又は命令セットに応答して、本明細書の例示的なプロセスの1つ又は複数のブロックを開始することができる。一般に、機械可読媒体は、プログラムコード及び/又は命令又は命令セットの形式でソフトウェアを伝達することができ、これにより、本明細書で説明する装置及び/又はシステムのいずれかが、本明細書で議論するプロセス又は任意の動作の少なくとも一部を実施することができる。
本明細書で説明する任意の実施形態において使用される場合に、「モジュール」という用語は、本明細書で説明する機能を提供するように構成されたソフトウェアロジック、ファームウェアロジック、ハードウェアロジック、及び/又は回路の任意の組合せを指す。ソフトウェアは、ソフトウェアパッケージ、コード及び/又は命令セット又は命令として具体化することができ、本明細書で説明する任意の実施態様で使用される「ハードウェア」は、例えば、単独で又は任意の組合せで、有線回路、プログラム可能な回路、ステートマシン回路、固定機能回路、実行ユニット回路、及び/又はプログラム可能な回路によって実行される命令を格納するファームウェアを含み得る。モジュールは、集合的又は個別に、より大きなシステムの一部を形成する回路として具体化することができ、例えば、集積回路(IC)、システムオンチップ(SoC)等である。
図10は、本開示の少なくともいくつかの実施態様に従って配置された、例示的なシステム1000の例示的な図である。様々な実施態様において、システム1000は、モバイル装置又はサーバ装置であり得るが、システム1000は、この文脈に限定されない。例えば、システム1000は、サーバシステム、クラウドコンピューティングリソース、パーソナルコンピュータ(PC)、ラップトップコンピュータ、ウルトララップトップコンピュータ、タブレット、タッチパッド、ポータブルコンピュータ、ハンドヘルドコンピュータ、パームトップコンピュータ、携帯情報端末(PDA)、携帯電話、携帯電話/PDAの組合せ、テレビ、スマート装置(スマートフォン、スマートタブレット、スマートテレビ等)、モバイルインターネット装置(MID)、メッセージング装置、データ通信装置、カメラ等に組み込まれ得る。
様々な実施態様において、システム1000は、ディスプレイ1020に結合されたプラットフォーム1002を含む。プラットフォーム1002は、コンテンツサービス装置1030又はコンテンツ配信装置1040又は他の同様のコンテンツソース等のコンテンツ装置からコンテンツを受信することができる。1つ又は複数のナビゲーション機能を含むナビゲーションコントローラ1050を使用して、例えば、プラットフォーム1002及び/又はディスプレイ1020と相互作用することができる。これらのコンポーネントのそれぞれについて、以下でより詳細に説明する。
様々な実施態様において、プラットフォーム1002は、チップセット1005、プロセッサ1010、メモリ1012、アンテナ1013、ストレージ1014、グラフィックサブシステム1015、アプリケーション1016、及び/又は無線1018の任意の組合せを含み得る。チップセット1005は、プロセッサ1010、メモリ1012、ストレージ1014、グラフィックサブシステム1015、アプリケーション1016、及び/又は無線1018の間の相互通信を提供し得る。例えば、チップセット1005は、ストレージ1014との相互通信を提供することができるストレージアダプタ(図示せず)を含み得る。
プロセッサ1010は、複合命令セットコンピュータ(CISC)又は縮小命令セットコンピュータ(RISC)プロセッサ、x86命令セット互換プロセッサ、マルチコア、又は他の任意のマイクロプロセッサ又は中央処理装置(CPU)として実装され得る。様々な実施態様において、プロセッサ1010は、デュアルコアプロセッサ、デュアルコアモバイルプロセッサ等であり得る。
メモリ1012は、ランダムアクセスメモリ(RAM)、ダイナミックランダムアクセスメモリ(DRAM)、又はスタティックRAM(SRAM)等の揮発性メモリ装置として実装することができるが、これらに限定されない。
ストレージ1014は、磁気ディスクドライブ、光ディスクドライブ、テープドライブ、内部ストレージ装置、接続されたストレージ装置、フラッシュメモリ、バッテリバックアップSDRAM(同期DRAM)、及び/又はネットワークアクセス可能なストレージ装置等の不揮発性ストレージ装置として実装することができるが、これらに限定されない。様々な実施態様において、ストレージ1014は、例えば、複数のハードドライブを含む場合に、貴重なデジタルメディアのストレージ性能を強化した保護を向上させる技術を含み得る。
グラフィックサブシステム1015は、表示のための静止画又はビデオ等の画像の処理を実行することができる。グラフィックサブシステム1015は、例えば、グラフィック処理装置(GPU)又はビジュアル処理装置(VPU)であり得る。アナログ又はデジタルインターフェイスを使用して、グラフィックサブシステム1015及びディスプレイ1020を通信可能に結合することができる。例えば、インターフェイスは、高精細マルチメディアインターフェイス、ディスプレイポート、ワイヤレスHDMI、及び/又はワイヤレスHD準拠技術のいずれかであり得る。グラフィックサブシステム1015は、プロセッサ1010又はチップセット1005に統合され得る。いくつかの実施態様において、グラフィックサブシステム1015は、チップセット1005に通信可能に結合されたスタンドアロン装置であり得る。
本明細書で説明するグラフィック及び/又はビデオ処理技術は、様々なハードウェアアーキテクチャで実装され得る。例えば、グラフィック及び/又はビデオ機能は、チップセット内に統合され得る。あるいはまた、個別のグラフィック及び/又はビデオプロセッサを使用してもよい。さらに別の実施態様として、グラフィック及び/又はビデオ機能は、マルチコアプロセッサを含む汎用プロセッサによって提供され得る。更なる実施形態では、機能は、家庭用電化製品装置に実装され得る。
無線機1018は、様々な適切な無線通信技術を使用して信号を送受信することができる1つ又は複数の無線機を含み得る。そのような技術は、1つ又は複数の無線ネットワークを介した通信を含み得る。ワイヤレスネットワークの例には、ワイヤレスローカルエリアネットワーク(WLAN)、ワイヤレスパーソナルエリアネットワーク(WPAN)、ワイヤレスメトロポリタンエリアネットワーク(WMAN)、セルラーネットワーク、及び衛星ネットワークが含まれる(ただしこれらに限定されない)。そのようなネットワークを介して通信する際に、無線機1018は、任意のバージョンの1つ又は複数の適用可能な規格に従って動作することができる。
様々な実施態様において、ディスプレイ1020は、任意のテレビタイプのモニタ又はディスプレイを含み得る。ディスプレイ1020は、例えば、コンピュータディスプレイスクリーン、タッチスクリーンディスプレイ、ビデオモニタ、テレビのような装置、及び/又はテレビを含み得る。ディスプレイ1020は、デジタル及び/又はアナログであってもよい。様々な実施態様において、ディスプレイ1020はホログラフィックディスプレイであり得る。また、ディスプレイ1020は、視覚的投影を受けることができる透明な表面であり得る。このような投影は、様々な形式の情報、画像、及び/又はオブジェクトを伝達し得る。例えば、そのような投影は、モバイル拡張現実(MAR)アプリケーションの視覚的なオーバーレイであり得る。1つ又は複数のソフトウェアアプリケーション1016の制御下で、プラットフォーム1002は、ユーザインターフェイス1022をディスプレイ1020上に表示することができる。
様々な実施態様において、コンテンツサービス装置1030は、任意の国内、国際、及び/又は独立したサービスによってホストされ得、こうして、例えば、インターネットを介してプラットフォーム1002にアクセス可能である。コンテンツサービス装置1030は、プラットフォーム1002及び/又はディスプレイ1020に結合され得る。プラットフォーム1002及び/又はコンテンツサービス装置1030をネットワーク1060に結合して、ネットワーク1060との間でメディア情報を通信(例えば、送信及び/又は受信)することができる。コンテンツ配信装置1040も、プラットフォーム1002及び/又はディスプレイ1020に結合され得る。
様々な実施態様において、コンテンツサービス装置1030は、ケーブルテレビボックス、パーソナルコンピュータ、ネットワーク、電話、デジタル情報及び/又はコンテンツを配信することができるインターネット対応装置又は電気製品、及びネットワーク1060を介して又は直接、コンテンツプロバイダとプラットフォーム1002及び/又はディスプレイ1020との間で一方向に又は双方向にコンテンツを通信するできる他の任意の同様の装置を含み得る。コンテンツは、システム1000内のコンポーネントのいずれか1つ及びネットワーク1060を介したコンテンツプロバイダとの間で一方向及び/又は双方向に通信され得る。コンテンツの例は、例えば、ビデオ、音楽、医療及びゲーム情報等を含む任意のメディア情報を含み得る。
コンテンツサービス装置1030は、メディア情報、デジタル情報、及び/又は他のコンテンツを含むケーブルテレビ番組等のコンテンツを受信することができる。コンテンツプロバイダの例には、任意のケーブルテレビ、衛星テレビ、ラジオ、インターネットのコンテンツプロバイダが含まれ得る。提供する例は、いかなる方法でも本開示による実施態様を制限することを意図するものではない。
様々な実施態様において、プラットフォーム1002は、1つ又は複数のナビゲーション機能を有するナビゲーションコントローラ1050から制御信号を受信することができる。コントローラ1050のナビゲーション機能は、例えば、ユーザインターフェイス1022と対話するために使用され得る。様々な実施形態では、ナビゲーションコントローラ1050はポインティング装置であり得、このポインティング装置は、ユーザが空間(例えば、連続的且つ多次元)データをコンピュータに入力するのを可能にするコンピュータハードウェアコンポーネント(具体的には、ヒューマンインターフェイス装置)であり得る。グラフィカルユーザインターフェイス(GUI)、テレビ、モニタ等の多くのシステムでは、ユーザは物理的なジェスチャーを使用してデータを制御しコンピュータ又はテレビに提供することができる。
コントローラ1050のナビゲーション機能の動きは、ディスプレイ上に表示されるポインタ、カーソル、フォーカスリング、又は他の視覚的インジケータの動きによって、ディスプレイ(例えば、ディスプレイ1020)上で複製され得る。例えば、ソフトウェアアプリケーション1016の制御下で、ナビゲーションコントローラ1050上に位置するナビゲーション機能は、例えば、ユーザインターフェイス1022上に表示される仮想ナビゲーション機能にマッピングされ得る。様々な実施形態では、コントローラ1050は、別個のコンポーネントではなく、プラットフォーム1002及び/又はディスプレイ1020に統合され得る。しかしながら、本開示は、本明細書に示される又は説明する要素又は文脈に限定されない。
様々な実施態様において、ドライバ(図示せず)は、例えば、有効にされたときに、ユーザが最初の起動後にボタンに触れるとテレビのようなプラットフォーム1002を即座にオン及びオフにできるようにする技術を含み得る。プログラムロジックによって、プラットフォームが「オフ」になっている場合でも、プラットフォーム1002がコンテンツをメディアアダプタ又は他のコンテンツサービス装置1030又はコンテンツ配信装置1040にストリーミングするのを可能にし得る。さらに、チップセット1005は、例えば、5.1サラウンドサウンドオーディオ及び/又は高精細7.1サラウンドサウンドオーディオのためのハードウェア及び/又はソフトウェアのサポートを含み得る。ドライバには、統合グラフィックプラットフォームのためのグラフィックドライバが含まれ得る。様々な実施態様では、グラフィックドライバは、周辺コンポーネント相互接続(PCI)エクスプレスグラフィックスカードを含み得る。
様々な実施態様において、システム1000に示される任意の1つ又は複数のコンポーネントを統合することができる。例えば、プラットフォーム1002及びコンテンツサービス装置1030を統合してもよく、又はプラットフォーム1002及びコンテンツ配信装置1040を統合してもよく、又は例えば、プラットフォーム1002、コンテンツサービス装置1030、及びコンテンツ配信装置1040を統合してもよい。様々な実施態様では、プラットフォーム1002及びディスプレイ1020は、統合ユニットであり得る。例えば、ディスプレイ1020及びコンテンツサービス装置1030を統合してもよく、又はディスプレイ1020及びコンテンツ配信装置1040を統合してもよい。これらの例は、本開示を限定することを意図するものではない。
様々な実施形態では、システム1000は、無線システム、有線システム、又は両方の組合せとして実装することができる。無線システムとして実装される場合に、システム1000は、1つ又は複数のアンテナ、送信機、受信機、送受信機、増幅器、フィルタ、制御ロジック等の無線共有媒体を介して通信するのに適したコンポーネント及びインターフェイスを含み得る。無線共有媒体の例は、RFスペクトル等のような無線スペクトルの一部を含み得る。有線システムとして実装される場合に、システム1000は、入出力(I/O)アダプタ、I/Oアダプタを対応する有線通信媒体に接続するための物理コネクタ、ネットワークインターフェイスカード(NIC)、ディスクコントローラ、ビデオコントローラ、オーディオコントローラ等のような有線通信媒体を介した通信に適したコンポーネント及びインターフェイスを含み得る。有線通信媒体の例には、ワイヤ、ケーブル、金属リード線、プリント回路基板(PCB)、バックプレーン、スイッチファブリック、半導体材料、ツイストペア線、同軸ケーブル、光ファイバー等が含まれ得る。
プラットフォーム1002は、情報を通信するために1つ又は複数の論理的又は物理的チャネルを確立することができる。情報には、メディア情報及び制御情報が含まれ得る。メディア情報は、ユーザ向けのコンテンツを表す任意のデータを指し得る。コンテンツの例には、例えば、音声会話、ビデオ会議、ストリーミングビデオ、電子メール(「eメール」)メッセージ、ボイスメールメッセージ、英数字記号、グラフィック、画像、ビデオ、テキスト等からのデータが含まれ得る。音声会話からのデータは、例えば、音声情報、沈黙期間、背景ノイズ、コンフォートノイズ、トーン等であり得る。制御情報は、自動システム向けのコマンド、命令、又は制御ワードを表す任意のデータを指し得る。例えば、制御情報は、システムを介してメディア情報をルーティングするために、又は所定の方法でメディア情報を処理するようにノードに指示するために使用され得る。しかしながら、実施形態は、図10に示される又は記載される要素又は文脈に限定されない。
上で説明したように、システム1000は、様々な物理的スタイル又はフォームファクタで具体化することができる。図11は、本開示の少なくともいくつかの実施態様に従って配置された、例示的なフォームファクタの小さい装置1100を示している。いくつかの例では、システム1000は、装置1100を介して実装され得る。他の例では、システム100又は本明細書で議論する他の任意のシステム、装置、又は動作は、装置1100を介して実装され得る。様々な実施形態では、例えば、装置1100は、ワイヤレス機能を有するモバイルコンピューティング装置として実装され得る。モバイルコンピューティング装置は、例えば、処理システムと、1つ又は複数のバッテリ等のモバイル電源又は供給源とを有する任意の装置を指し得る。
モバイルコンピューティング装置の例には、パーソナルコンピュータ(PC)、ラップトップコンピュータ、ウルトララップトップコンピュータ、タブレット、タッチパッド、ポータブルコンピュータ、ハンドヘルドコンピュータ、パームトップコンピュータ、携帯情報端末(PDA)、携帯電話、携帯電話/PDAの組合せ、スマート装置(例えば、スマートフォン、スマートタブレット、スマートモバイルテレビ)、モバイルインターネット装置(MID)、メッセージング装置、データ通信装置、カメラ等が含まれ得る。
モバイルコンピューティング装置の例には、手首装着型コンピュータ、指装着型コンピュータ、リング型コンピュータ、眼鏡装着型コンピュータ、ベルトクリップ型コンピュータ、アームバンド型コンピュータ、靴装着型コンピュータ、衣類型コンピュータ、及び他のウェアラブルコンピュータ等、人が着用するように構成されたコンピュータも含まれ得る。様々な実施形態において、例えば、モバイルコンピューティング装置は、コンピュータアプリケーション、並びに音声通信及び/又はデータ通信を実行することができるスマートフォンとして実装され得る。いくつかの実施形態について、例としてスマートフォンとして実装されたモバイルコンピューティング装置を用いて説明し得るが、他の実施形態は、他のワイヤレスモバイルコンピューティング装置も同様に使用して実装され得ることが理解され得る。この文脈において、実施形態は限定されない。
図11に示されるように、装置1100は、前面1101及び背面1102を有するハウジングを含み得る。装置1100は、ディスプレイ1104、入力/出力(I/O)装置1106、及び統合アンテナ1108を含む。装置1100は、ナビゲーション機能1112も含み得る。I/O装置1106は、情報をモバイルコンピューティング装置に入力するための任意の適切なI/O装置を含み得る。I/O装置1106の例には、英数字キーボード、テンキー、タッチパッド、入力キー、ボタン、スイッチ、マイク、スピーカ、音声認識装置及びソフトウェア等が含まれ得る。情報はまた、マイク(図示せず)を介して装置1100に入力され得るか、又は音声認識装置によってデジタル化され得る。示されるように、装置1100は、カメラ1105(例えば、レンズ、アパーチャ、及び撮像センサを含む)と、装置1100の背面1102(又は他の場所)に統合されたフラッシュ1110とを含み得る。他の例では、カメラ1105及びフラッシュ1110は、装置1100の前面1101に統合され得るか、又は前面カメラと背面カメラとの両方が設けられ得る。カメラ1105及びフラッシュ1110は、例えば、ディスプレイ1104に出力される及び/又はアンテナ1108を介して装置1100から遠隔通信されるストリーミングビデオに処理される画像データを発信するカメラモジュールのコンポーネントであり得る。
様々な実施形態は、ハードウェア要素、ソフトウェア要素、又は両方の組合せを使用して実装され得る。ハードウェア要素の例には、プロセッサ、マイクロプロセッサ、回路、回路素子(例えば、トランジスタ、抵抗、コンデンサ、インダクタ等)、集積回路、特定用途向け集積回路(ASIC)、プログラマブル論理装置(PLD)、デジタル信号プロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、論理ゲート、レジスタ、半導体装置、チップ、マイクロチップ、チップセット等が含まれ得る。ソフトウェアの例には、ソフトウェアコンポーネント、プログラム、アプリケーション、コンピュータプログラム、アプリケーションプログラム、システムプログラム、マシンプログラム、オペレーティングシステムソフトウェア、ミドルウェア、ファームウェア、ソフトウェアモジュール、ルーチン、サブルーチン、関数、メソッド、プロシージャ、ソフトウェアインターフェイス、アプリケーションプログラムインターフェイス(API)、命令セット、コンピューティングコード、コンピュータコード、コードセグメント、コンピュータコードセグメント、ワード、値、シンボル、又はそれらの任意の組合せが含まれ得る。実施形態がハードウェア要素及び/又はソフトウェア要素を使用して実装されるかどうかの決定は、所望の計算速度、電力レベル、耐熱性、処理サイクルバジェット、入力データ速度、出力データ速度、メモリリソース、データバス速度、及び他の設計又はパフォーマンスの制約等の任意の数の要因に従って変化し得る。
少なくとも1つの実施形態の1つ又は複数の態様は、プロセッサ内の様々な論理を表す機械可読媒体に格納された代表的な命令によって実装され得、命令が機械によって読み取られると、機械に論理を作成させて、本明細書で説明する技術を実行させる。IPコアとして知られるこのような表現は、有形の機械可読媒体に格納され、様々な顧客又は製造施設に供給されて、実際にロジック又はプロセッサを作成する製造機械にロードされる。
本明細書で説明する特定の特徴について、様々な実施態様を参照して説明してきたが、この説明は、限定的な意味で解釈されることを意図するものではない。従って、本明細書で説明する実施態様の様々な修正、並びに本開示が関係する当業者に明らかである他の実施態様は、本開示の精神及び範囲内にあると見なされる。
1つ又は複数の第1の実施形態では、メディアタスクをスケジュールするための方法は、複数の異種ハードウェアユニットのそれぞれで受け取ったメディアタスクを処理するための推定期間を決定するステップと;推定期間に基づいて、処理対象のメディアタスクを異種ハードウェアユニットのうちの選択した1つに送信するステップと;異種ハードウェアユニットのうちの選択した1つに対応する推定期間をメディアタスクの送信に対応する開始時間に追加することに基づいて、メディアタスクの推定完了時間を決定するステップと;メディアタスクを、メディアタスクの管理のためのスレッドに割り当てるステップと;割り当てられたスレッドから、推定完了時間後に及びその経過に応答してのみ、異種ハードウェアユニットのうちの選択した1つでのメディアタスクのステータスを確認するステップと;を含む。
1つ又は複数の第2の実施形態では、第1の実施形態に加えて、メディアタスクをスレッドに割り当てるステップは、メディアタスクの推定完了時間が第2のスレッドに割り当てられた第2のメディアタスクの第2の推定完了時間のしきい値内にあると判定するステップと;推定完了時間が第2の推定完了時間のしきい値内にあることに応答してスレッドを作成するステップと;を含む。
1つ又は複数の第3の実施形態では、第1又は第2の実施形態に加えて、メディアタスクをスレッドに割り当てるステップは、メディアタスクの推定完了時間が第2のメディアタスクの第2の推定完了時間と一致し、第2のスレッドに割り当てられると判定するステップと;推定完了時間が第2の推定完了時間のしきい値内にあることに応答してスレッドを作成するステップと;を含む。
1つ又は複数の第4の実施形態では、第1~第3の実施形態のいずれかに加えて、この方法は、第3のメディアタスクの第3の推定完了時間が推定完了時間の後にあり、第4のメディアタスクの第4の推定完了時間が第3の推定完了時間の後にあると判定するステップであって、第3のメディアタスクはタスクキュー内のメディアタスクの直後にあり、第4のメディアタスクはタスクキュー内の第3のメディアタスクの直後にある、判定するステップと;第3のメディアタスクがタスクキュー内のメディアタスクの直後にあり、第3の推定完了時間が推定完了時間の後にあり且つ推定完了時間のしきい値外にあることに応答して、第3のメディアタスクを第2のスレッドに割り当てるステップと;第4のメディアタスクがタスクキュー内の第3のメディアタスクの直後にあり、第4の推定完了時間が第3の推定完了時間の後にあり且つ第3の推定完了時間のしきい値外にあることに応答して、第4のメディアタスクをスレッドに割り当てるステップと;をさらに含む。
1つ又は複数の第5の実施形態では、第1~第4の実施形態のいずれかに加えて、メディアタスクをスレッドに割り当てるステップは、メディアタスクを受信する前に処理のために1つ又は複数の第2のメディアタスクの送信完了に対応する遅延時間の測定値がしきい値を超えることを示す指標を受信するステップと;遅延時間の測定値がしきい値を超えることに応答してスレッドを作成するステップと;を含む。
1つ又は複数の第6の実施形態では、第1~第5の実施形態のいずれかに加えて、遅延時間の測定値は、出力メディアデータのアプリケーションへの報告時間と、1つ又は複数の第2のメディアタスクのそれぞれの推定完了時間との間の差を含む。
1つ又は複数の第7の実施形態では、第1~第6の実施形態のいずれかに加えて、推定期間の決定は、メディアタスクに対応するタスク記述、及び複数の異種ハードウェアユニットのそれぞれについて、タスク記述に対応する事前参照データに基づく。
1つ又は複数の第8の実施形態では、第1~第7の実施形態のいずれかに加えて、推定期間を決定するステップは、異種ハードウェアユニットのうちの選択した1つでメディアタスクと同じタイプを有する第2のメディアタスクを処理するための以前の実行時間を決定するステップと;以前の実行時間に少なくとも部分的に基づいて、異種ハードウェアユニットのうちの選択した1つのユニットに推定期間を設定するステップと;を含む。
1つ又は複数の第9の実施形態では、第1~第8の実施形態のいずれかに加えて、推定期間を決定するステップは、メディアタスクに対して先読み処理を実行して、メディアタスクの1つ又は複数の先読み処理パラメータを生成するステップであって、先読み処理は、1つ又は複数の異なる処理特性を有するメディアタスクと同じタスクを実行する、生成するステップと;先読み処理パラメータに少なくとも部分的に基づいて推定期間を設定するステップと;を含む。
1つ又は複数の第10の実施形態では、第1~第9の実施形態のいずれかに加えて、この方法は、割り当てられたスレッドからのステータスの確認に応答して、メディアタスクが不完全であるという指標を受信するステップと;メディアタスクが不完全であるという指標に応答して、ポーリング照会又はブロッキング呼出しコマンドのうちの1つを異種ハードウェアユニットのうちの選択した1つに提供するステップと;をさらに含む。
1つ又は複数の第11の実施形態では、第1~第10の実施形態のいずれかに加えて、処理対象のメディアタスクを異種ハードウェアユニットのうちの選択した1つに送信するステップは、異種ハードウェアユニットのうちの選択した1つのユニットが推定期間の最小推定期間を有することに応答して、異種ハードウェアユニットのうちの選択される1つを選択するステップと;を含む。
1つ又は複数の第12の実施形態では、第1~第11の実施形態のいずれかに加えて、メディアタスクは、フレーム符号化、フレーム復号化、動きベクトル検索、色変換、ノイズ除去、色調整、又はフレームサイズ変更のうちの1つを含み、及び異種ハードウェアユニットは、グラフィック処理装置、固定機能ハードウェアブロック、実行ユニット、及びシステムオンチップのそれぞれを含む。
1つ又は複数の第13の実施形態では、装置又はシステムは、メモリ及び1つ又は複数のプロセッサを含み、プロセッサは、上記の実施形態のいずれか1つによる方法を実行する。
1つ又は複数の第14の実施形態では、少なくとも1つの非一時的な機械可読媒体は、複数の命令を含み、命令がコンピューティング装置で実行されることに応答して、コンピューティング装置に上記の実施形態のいずれか1つによる方法を実行させる。
1つ又は複数の第15の実施形態において、機器は、上記の実施形態のいずれか1つによる方法を実施するための手段を含み得る。
実施形態は、そのように説明した実施形態に限定されないが、添付の特許請求の範囲から逸脱することなく、修正及び変更を伴って実施することができることが認識されよう。例えば、上記の実施形態は、特徴の特定の組合せを含み得る。しかしながら、上記の実施形態は、この点に関して限定されず、様々な実施態様において、上記の実施形態は、そのような特徴のサブセットのみを行うこと、そのような特徴の異なる順序を行うこと、そのような特徴の異なる組合せを行うこと、及び/又は明示的にリストされている特徴以外の追加特徴を行うことを含み得る。従って、実施形態の範囲は、そのような特許請求の範囲に権利が与えられる均等物の全範囲とともに、添付の特許請求の範囲を参照して決定すべきである。