様々な図面における同様の参照番号および符号は、同様の要素を示す。
以下の説明は、本開示の革新的な態様を説明する目的で、いくつかの例示的な態様を対象とする。しかしながら、当業者は、本明細書の教示が多数の異なる方法で適用され得ることを容易に認識するであろう。
関連システムは、複数のプロセッサを使用してデータをロードするためのフレームワークを有する。最初の問題として、データは、ランタイムプロセスで消費されるデータの任意のブロックであってよい。例えば、データは、ビデオデータ、メッシュデータ、テクスチャデータ、機械学習訓練データ、テキストデータなどであってもよい。言い換えれば、データは、並列処理から利益を得る可能性がある任意のタイプのデータであってもよい。関連するシステムでは、GPUは、記憶装置からデータをロードし、デコードされた、または解凍されたデータがGPU使用のためにビデオメモリに転送され得る前にGPUが消費し得る形にデータをデコードするようにCPUに要求してよい。しかしながら、このプロセスは、GPUとCPUの交換に起因して、プロセスの速度を落とすCPUのボトルネックを作り出す。さらに、モバイルデバイスではCPUがかなりの量の処理電力を消費するため、モバイルデバイスではCPUのボトルネックが悪化する。
関連するGPU駆動レンダリングパイプラインにおいて、GPUは、記憶装置からビデオデータをロードし、ビデオデータをデコードするようにCPUに要求することによって、レンダリングに必要なデータを受信する。しかしながら、このプロセスは、GPUパイプラインをストールさせ、レンダリングの速度を落とす。グラフィックスをレンダリングするために使用されるデータローディングフレームワークを有する多くの関連システムが存在する。通常、圧縮されたデータはシステムメモリにロードされ、GPUに送信される前にCPUによって解凍され、これによりロード時間が増加する。
一例として、第1の関連システムは、デコーディングの有無にかかわらずファイルをメモリにロードしてよい。他の例として、第2の関連システムでは、ビデオデータは、データをロードするための特別なAPIを提供するKrakenアルゴリズムによって圧縮されなければならない。しかしながら、KrakenアルゴリズムからGPU消耗可能コンテンツにビデオデータをデコードするために専用チップが使用されなければならない。さらに他の例として、第3の関連システムでは、非同期ローディングのみが利用可能であり、エンコーディング部分またはデコーディング部分は存在しない。第3の関連システムはまた、記憶装置をメモリにマッピングするための新しいAPIを有してもよく、これはドライブおよびOSを変更する必要があり、モバイルデバイスでは実用的ではない。
他の第4の関連システムは、非同期入出力(I/O)アプリケーションプログラミングインターフェース(API)を使用してデータをテクスチャにストリーミングし、記憶装置から直接バッファリングするための高速リソースローディングを含む場合がある。さらに他の第5の関連システムは、GPUとデータセンタ内の他のデバイスとの間でデータを転送してもよい。しかしながら、第4の関連システムおよび第5の関連システムは両方とも、複数のプラットフォーム上および複数のハードウェア上で動作することはできない。さらに、上述の関連システムは、一般に、1つの固定された解凍アルゴリズムを有する、または解凍アルゴリズムを全く持たない。これは、関連するフレームワークが、解凍アルゴリズムを異なるシナリオにカスタマイズすることによって、または異なるタイプのデータに対して異なるデコーディングを採用することによって帯域幅を低減することができないことを意味する。現実世界のアプリケーションでは、異なるシナリオがそれらの最良の適切な圧縮技術を有する場合がある。
本開示の態様は、デスクトップ、モバイル、コンソール、サーバなどで使用することができるクロスプラットフォームGPU駆動データローディングフレームワークを利用する。さらに、開示された技術を実施するために、新しいオペレーティングシステム(OS)、新しいアプリケーションプログラミングインターフェース(API)、または新しいハードウェアを修正または使用する必要はない。フレームワークは、典型的にはCPUによって行われるプロセスをGPU上で行われるようにオフロードして、CPUのボトルネックをバイパスすることによって消費電力を低減し、性能を向上させる。データはまた、GPUによって消費される準備が整うまで圧縮された形で保持されてもよく、これはまた、データを転送するときの帯域幅を低減し、電力消費をさらに低減する。
本開示の態様は、特定のアルゴリズムに焦点を合わせる必要がないように順応性のあるフレームワークを利用する。代わりに、GPU駆動データローディングフレームワークは、異なるシナリオに従ってエンコーディングアルゴリズム/デコーディングアルゴリズムをカスタマイズする順応性を提供する。これにより、開発者は、カスタマイズされたデコーディングアルゴリズムを利用して、ゼロから開始するのではなく、WARPベースの並列構築ブロックを作成することが可能になる。ブロック内で動作する関連するGPUプログラムとは異なり、圧縮アルゴリズムまたは解凍アルゴリズムのためのこれらのWARPベースの構築ブロックは、それらのアルゴリズムがGPUによって並列に使用され得るように連続圧縮または連続解凍を修正するためにWARP内で動作するために最適化される。
システム、装置、コンピュータプログラム製品、および方法の様々な態様が、添付の図面を参照して以下により十分に説明される。しかしながら、本開示は、多くの異なる形で具体化されてもよく、本開示を通して提示される特定の構造または特定の機能に限定されると解釈されるべきではない。むしろ、これらの態様は、本開示が徹底的かつ完全であり、本開示の範囲を当業者に完全に伝えるように提供される。本明細書の教示に基づいて、当業者は、本開示の範囲が、本開示の他の態様とは独立に実施されるか、または本開示の他の態様と組み合わせられるかにかかわらず、本明細書に開示されたシステム、装置、コンピュータプログラム製品、および方法の任意の態様を網羅することが意図されていることを理解するはずである。例えば、本明細書に記載の任意の数の態様を使用して、装置が実装されてよい、または方法が実施されてよい。さらに、本開示の範囲は、他の構造、機能を使用して実施される、あるいは本明細書に記載の本開示の様々な態様に加えて、またはそれ以外の他の構造、機能を使用して実施されるそのような装置または方法を網羅することが意図されている。本明細書に開示される任意の態様は、請求項の1つまたは複数の要素によって具体化され得る。
様々な態様が本明細書に記載されているが、これらの態様の多くの変形および置換が本開示の範囲内に含まれる。本開示の態様のいくつかの潜在的な利益および利点が言及されているが、本開示の範囲は、特定の利益、使用、または目的に限定されることを意図するものではない。むしろ、本開示の態様は、異なる無線技術、システム構成、ネットワーク、および伝送プロトコルに広く適用可能であることが意図されており、それらのいくつかは、図面および以下の説明において例として示されている。詳細な説明および図面は、限定ではなく本開示の単なる例示であり、本開示の範囲は、添付の特許請求の範囲およびその均等物によって定義される。
いくつかの態様が、様々な装置および方法を参照して提示される。これらの装置および方法は、以下の詳細な説明に記載され、様々なブロック、構成要素、回路、プロセス、アルゴリズムなど(まとめて「要素」と呼ばれる)によって添付の図面に例示される。これらの要素は、電子ハードウェア、コンピュータソフトウェア、またはそれらの任意の組み合わせを使用して実装されてもよい。そのような要素がハードウェアとして実装されるか、ソフトウェアとして実装されるかは、特定の用途およびシステム全体に課される設計制約に依存する。
例として、要素、または要素の任意の部分、または要素の任意の組み合わせは、1つまたは複数のプロセッサ(処理回路と呼ばれる場合がある)を含む「処理システム」として実装されてよい。処理システム内の1つまたは複数のプロセッサは、ソフトウェアを実行してよい。ソフトウェアは、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはその他と呼ばれるかどうかにかかわらず、命令、命令セット、コード、コードセグメント、プログラムコード、プログラム、サブプログラム、ソフトウェアコンポーネント、アプリケーション、ソフトウェアアプリケーション、ソフトウェアパッケージ、ルーチン、サブルーチン、オブジェクト、実行可能ファイル、実行のスレッド、手順、機能などを意味すると広く解釈することができる。アプリケーションという用語は、ソフトウェアを指してよい。本明細書に記載されるように、1つまたは複数の技術は、1つまたは複数の機能を行うように構成されているアプリケーション、すなわちソフトウェアを指してよい。そのような例では、アプリケーションは、メモリ、例えば、プロセッサのオンチップメモリ、システムメモリ、または任意の他のメモリに記憶されてもよい。プロセッサなどの本明細書に記載のハードウェアは、アプリケーションを実行するように構成されてよい。例えば、アプリケーションは、ハードウェアによって実行されるとき、ハードウェアに本明細書に記載の1つまたは複数の技術を行うようにさせるコードを含むものとして記載されてよい。一例として、ハードウェアは、メモリからコードにアクセスし、メモリからアクセスされたコードを実行して、本明細書に記載の1つまたは複数の技術を行ってよい。いくつかの例では、構成要素は本開示において特定される。そのような例では、構成要素は、ハードウェア、ソフトウェア、またはそれらの組み合わせであってもよい。構成要素は、別個の構成要素または単一の構成要素のサブ構成要素であってもよい。
したがって、本明細書に記載の1つまたは複数の例では、記載の機能は、ハードウェア、ソフトウェア、またはそれらの任意の組み合わせで実装されてもよい。ソフトウェアで実装される場合、機能は、コンピュータ可読媒体上の1つまたは複数の命令またはコードとして記憶またはエンコードされてよい。コンピュータ可読媒体は、コンピュータ記憶媒体を含む。記憶媒体は、コンピュータによってアクセスされ得る任意の利用可能な媒体であり得る。限定ではなく例として、そのようなコンピュータ可読媒体は、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、電気的消去可能プログラマブルROM(EEPROM)、光ディスク記憶装置、磁気ディスク記憶装置、他の磁気記憶装置、前述のタイプのコンピュータ可読媒体の組み合わせ、またはコンピュータによってアクセスされ得る命令もしくはデータ構造の形のコンピュータ実行可能コードを記憶するために使用され得る任意の他の媒体を含むことができる。
最初の問題として、本明細書で使用される「GPU」という用語は、必ずしもグラフィックス処理にのみ使用される処理装置を意味するものではないことに留意されたい。逆に、本明細書で説明されるGPUは並列処理アクセラレータである。CPUは通常、一連の連続処理に最適化されたいくつかのコアからなるが、GPUは典型的には、複数のタスクを同時に処理するように設計された数千のより小さく、より効率的なコンピューティングコアを含み得る大規模並列アーキテクチャを有する。これにより、GPUは、高性能コンピューティング、ディープラーニングおよび人工知能、分析および他の処理アプリケーションを加速することを含む、グラフィック以外の多くの目的に使用することが可能になる。
並列アーキテクチャはまた、GPUが多数の同時計算を行うため、GPUをディープラーニングおよびニューラルネットワークに理想的なものにし、それによって従来のCPU技術を使用してニューラルネットワークを訓練するのにかかる時間を数日から数時間に短縮する。本明細書で説明するように、各GPUは、任意の高度な処理タスクに使用されてよく、大規模並列処理から恩恵を受ける複雑なタスクに特に有用である。
本開示は、最小限のCPU関与でGPU駆動データをロードするためにフレームワークを利用することによるコンピューティングデバイスにおけるデータローディングのための技術を含む。本開示の態様は、典型的にはCPUによって連続して行われるローダプロセスおよびデコーダプロセスを、GPUによって並列に行われるようにオフロードする。このフレームワークにより、GPUは、記憶装置からビデオメモリにデータを直接ロードし、GPU上でそれらをデコードしてよい。加えて、データはGPUによって消費されるまで圧縮された形で保持されるため、転送するための帯域幅が低減され、電力消費がさらに低減される。エンコーディングアルゴリズムおよびデコーディングアルゴリズムはまた、既存のオペレーティングシステム(OS)、API、またはハードウェアを修正する必要なしにカスタマイズ可能であり得る。CPUがバイパスされるため、開示されるデータローディングフレームワークは、より少ない電力消費を必要とし、より速い処理を提供する。他の例の利益は、本開示を通して説明される。
本明細書で使用される場合、「コンテンツ」という用語の例は、「グラフィックコンテンツ」、「画像」を指してよく、その逆も同様である。これは、それらの用語が形容詞、名詞、または他の品詞として使用されているかどうかにかかわらず当てはまる。いくつかの例では、本明細書で使用される場合、「グラフィックコンテンツ」という用語は、グラフィックス処理パイプラインの1つまたは複数のプロセスによって生成されたコンテンツを指す場合がある。いくつかの例では、本明細書で使用される場合、「グラフィックコンテンツ」という用語は、グラフィックス処理を行うように構成された処理装置によって生成されたコンテンツを指す場合がある。いくつかの例では、本明細書で使用される場合、「グラフィックコンテンツ」という用語は、グラフィックス処理装置によって生成されたコンテンツを指す場合がある。
本明細書で使用される場合、「ディスプレイコンテンツ」という用語は、ディスプレイ処理を行うように構成された処理装置によって生成されたコンテンツを指してよい。いくつかの例では、本明細書で使用される場合、「ディスプレイコンテンツ」という用語は、ディスプレイ処理装置によって生成されたコンテンツを指してもよい。グラフィックコンテンツは、ディスプレイコンテンツになるように処理されてもよい。例えば、グラフィックス処理装置は、フレームなどのグラフィックコンテンツをバッファ(フレームバッファと呼ばれることがある)に出力してよい。ディスプレイ処理装置は、バッファから1つまたは複数のフレームなどのグラフィックコンテンツを読み取り、1つまたは複数のディスプレイ処理技術を行ってディスプレイコンテンツを生成してよい。例えば、ディスプレイ処理装置は、フレームを生成するために1つまたは複数のレンダリングされた層に対して合成を行うように構成されてもよい。他の例として、ディスプレイ処理装置は、2つ以上の層を一緒に単一のフレームに構成する、融合する、またはそれ以外の方法で結合するように構成されてもよい。ディスプレイ処理装置は、フレームに対してスケーリングを行う、例えばアップスケーリングまたはダウンスケーリングを行うように構成され得る。いくつかの例では、フレームは層を指す場合がある。他の例では、フレームは、フレームを形成するために既に一緒に融合された2つ以上の層を指す場合があり、すなわち、フレームは2つ以上の層を含み、2つ以上の層を含むフレームはその後に融合されてもよい。
関連するシステムは、CPUおよびGPUの両方によって行われるプロセスを利用するコンピューティングデバイスにおいてデータをロードする。CPUは、最初に、ディスクまたは記憶装置からデータをロードし、デコードし、任意選択で、ロードされたデータをGPUが消費し得る形に解凍し、次いで、デコードまたは解凍されたデータをGPUメモリに送信する。しかしながら、モバイルデバイスでは、CPUはかなりの量の電力を消費し、CPU処理のボトルネックのために速度が遅くなる可能性がある。ロードプロセス全体を最小限のCPU関与でGPUによって直接行うことができる場合、処理パイプラインははるかに高速であり、必要な電力消費が少なくなる。
したがって、本開示の実施形態は、コンピューティングデバイスにおけるデータローディングの方法、およびコンピューティングデバイスにおけるデータローディングのためのフレームワークを実装するための装置を含む。視覚的表現のためにビデオデータをレンダリングすることが一例として使用されているが、本開示の態様は、コンピューティングデバイスによってランタイムプロセスで使用され、並列処理から利益を得ることができる任意のデータをロードィングするために適用することができることに留意されたい。このフレームワークにより、GPUは、記憶装置からビデオメモリにデータをロードし、最小限のCPUの関与でデータをデコードしてよい。本明細書に記載の主題は、1つまたは複数の利益または利点を実現するために実施することができる。例えば、GPUへのロードディングおよびデコーディングなどの、CPUによって行われる従来の役割を移動させることによって、実施形態は、性能を最大化し、帯域幅を最小化し、電力消費を低減することを可能にする。加えて、実施形態は、既存のOSやAPI、ハードウェアを変更することなく実施されてよい。フレームワークはまた、フレームワークが異なるタイプのデータに対して異なるデコーディングを採用し得るように、一般的な圧縮アルゴリズムおよび解凍アルゴリズムを利用する。
図1Aは、本開示の1つまたは複数の技術を実装するように構成されたデータローディングシステム100の一例を示すブロック図である。データローディングシステム100は、例示的な態様に従ってデータをロードするように構成されたCPU128、GPU120、およびシステムメモリ124を含む。CPU128は、ソフトウェアアプリケーション111、OS113、およびグラフィックスドライバ115を実行してよい。さらに、システムメモリ124は、プリミティブをレンダリングするためのコマンドストリーム、ならびにGPU120によって実行されるべき二次コマンドを記憶する間接バッファを含んでよい。GPU120は、ディサイダ機能123、ローダ機能125、およびデコーダ機能127を含むGPU120と「オンボード」であり得るビデオメモリ121を含んでよい。図1Bに関連してより詳細に説明されるように、データローディングシステム100の構成要素は、ビデオデバイス、メディアプレーヤ、セットトップボックス、携帯電話、およびいわゆるスマートフォンなどの無線ハンドセット、携帯情報端末(PDA)、デスクトップコンピュータ、ラップトップコンピュータ、ゲーム機、ビデオ会議ユニット、タブレットコンピューティングデバイスなどを含むが、これらに限定されないデバイスの一部であってもよい。
CPU128は、1つまたは複数のGPUに結合されてもよい。GPU120は、ディスプレイ上に提示するためのグラフィックスデータの生成および出力などのグラフィックス関連機能を行うと共に、GPU120によって提供される処理の並列性を活用する非グラフィックス関連機能を行うように構成された処理装置を含んでよい。GPU120は、グラフィクス処理能力に加えて、汎用処理能力を提供しうるので、GPU120は、汎用GPU(GP-GPU)と呼ばれてもよい。CPU128およびGPU120の例には、デジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルロジックアレイ(FPGA)、あるいは他の同等の集積回路またはディスクリート論理回路が含まれるが、これらに限定されない。いくつかの例では、GPU120は、グラフィックスを処理するための、ならびに非グラフィックス関連アプリケーションを実行するための大規模な並列処理を提供するなど、特定の用途向けに設計されたマイクロプロセッサであってもよい。さらに、CPU128およびGPU120は、別個の構成要素として示されているが、本開示の態様は、そのように限定されず、例えば、共通の集積回路(IC)において実装されてもよい。
CPU128上で実行されるソフトウェアアプリケーション111は、グラフィックスデータをディスプレイ(図1Aには示されていない)にレンダリングさせるようにCPU128に命令する1つまたは複数のグラフィックスレンダリング命令を含んでよい。いくつかの例では、グラフィックスレンダリング命令は、グラフィックスAPIに準拠し得るソフトウェア命令を含んでもよい。グラフィックスレンダリング命令を処理するために、CPU128は、(例えば、グラフィックスドライバ115を介して)GPU120にグラフィックスデータのレンダリングの一部または全部を行うようにさせるために、GPU120に対して1つまたは複数のグラフィックスレンダリングコマンドを発行してもよい。いくつかの例では、レンダリングされるグラフィックスデータは、例えば、点、線、三角形、四辺形、三角形ストリップなどのグラフィックスプリミティブのリストを含んでもよい。
GPU120は、1つまたは複数のグラフィックスプリミティブをディスプレイへレンダリングするためのグラフィックス動作を行うように構成されてよい。したがって、CPU128上で実行されるソフトウェアアプリケーションのうちの1つがグラフィックス処理を必要とするとき、CPU128は、ディスプレイへのレンダリングのためにグラフィックスコマンドおよびグラフィックスデータをGPU120に提供してよい。グラフィックスデータは、例えば、描画コマンド、状態情報、プリミティブ情報、テクスチャ情報などを含む可能性がある。GPU120は、場合によっては、CPU128よりも複雑なグラフィックス関連動作のより効率的な処理を提供する高度に並列な構造で構築されてもよい。例えば、GPU120は、複数の頂点またはピクセルに対して並列に動作するように構成された複数の処理要素を含んでもよい。
GPU120は、ホストメモリまたはシステムメモリの代わりにローカル記憶装置(すなわち、ビデオメモリ121)を使用してデータをローカルに処理してもよい。これは、例えば、大量のバストラフィックに遭遇する可能性がある共有バスを介してGPU120がデータを読み書きする必要性を排除することによって、GPU120が、より効率的なやり方で動作することを可能にする。ビデオメモリ121は、例えば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、および1つまたは複数のレジスタなどの、1つまたは複数の揮発性メモリまたは不揮発性メモリまたは記憶装置を含んでもよい。
ビデオメモリ121はまた、ディサイダ機能123、ローダ機能125、およびデコーダ機能127によって直接使用されてもよい。ディサイダ機能123は、アプリケーションプログラムの実行に基づいて、ロードするデータを特定するように構成されてもよい。ローダ機能125は、GPUを介して、エンコードされた形の特定されたデータのデータチャンクを、データ記憶装置からGPUに関連付けられたビデオメモリ(例えば、ビデオメモリ121)にロードするように構成され得る。デコーダ機能127は、データチャンクをデコードするために複数のGPUスレッドグループを並列に使用することによって、データチャンクを並列にデコードするように構成されてもよい。いくつかの態様では、上述した機能を行うプロセッサは、汎用プロセッサ(例えば、CPU)であってもよい。
CPU128および/またはGPU120は、レンダリングされた画像データをフレームバッファ138に記憶してよく、フレームバッファは、独立したメモリであってもよい、またはシステムメモリ124内に割り当てられてもよい。ディスプレイプロセッサは、フレームバッファ138からレンダリングされた画像データを取り出し、レンダリングされた画像データをディスプレイに表示してよい。
システムメモリ124は、デバイス内のメモリであってもよく、CPU128およびGPU120の外部にあってもよく、すなわち、CPU128に対してオフチップであり、GPU120に対してオフチップであってもよい。システムメモリ124は、CPU128およびGPU120によって実行されるアプリケーションを記憶してよい。さらに、システムメモリ124は、実行されるアプリケーションが動作するデータ、ならびにアプリケーションから生じるデータを記憶してよい。
システムメモリ124は、CPU128による実行のためにアクセス可能なプログラムモジュール、命令、またはその両方、および/またはCPU128上で実行されるプログラムによる使用のためのデータを記憶してよい。例えば、システムメモリ124は、グラフィカルユーザインターフェース(GUI)をディスプレイ上に提示するためにCPU128によって使用されるウィンドウマネージャアプリケーションを記憶してよい。さらに、システムメモリ124は、ユーザアプリケーションおよびアプリケーションに関連付けられたアプリケーション表面データを記憶してもよい。以下で詳細に説明されるように、システムメモリ124は、GPU120のためのデバイスメモリとして作用し、GPU120が動作すべきデータならびにGPU120によって行われる動作から生じるデータを記憶してよい。例えば、システムメモリ124は、テクスチャバッファ、深度バッファ、ステンシルバッファ、頂点バッファ、フレームバッファなどの任意の組み合わせを記憶してよい。
システムメモリ124の例には、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、または電気的消去可能プログラマブル読み出し専用メモリ(EEPROM)、あるいは命令またはデータ構造の形で所望のプログラムコードを搬送または記憶するために使用することができ、コンピュータまたはプロセッサによってアクセスすることができる任意の他の媒体が含まれるが、これらに限定されない。一例として、システムメモリ124は、デバイスから取り外され、他のデバイスに移動されてもよい。他の例として、システムメモリ124と実質的に同様の記憶装置デバイスがデバイスに挿入されてもよい。
図1Bは、本開示の1つまたは複数の技術を実装するように構成されたデータローディングシステム100の一例を示す詳細なブロック図である。図1Bに示されるデータローディングシステム100は、図1Aのデータローディングシステムに対応し得ることに留意されたい。これに関して、図1Bのデータローディングシステム100は、CPU128、GPU120、およびシステムメモリ124を含む。
さらに示されるように、データローディングシステム100は、本開示の1つまたは複数の技術を行うように構成された1つまたは複数の構成要素を含み得るデバイス104を含む。示される例では、デバイス104は、GPU120、コンテンツエンコーダ/デコーダ137、およびシステムメモリ124を含んでよい。いくつかの態様では、デバイス104は、いくつかの追加の構成要素、例えば、通信インターフェース126、トランシーバ132、受信器133、および送信器130、ならびに1つまたは複数のディスプレイ131を含んでよい。ディスプレイ131への言及は、1つまたは複数のディスプレイ131を指してもよい。例えば、ディスプレイ131は、単一のディスプレイまたは複数のディスプレイを含む場合がある。ディスプレイ131は、第1のディスプレイおよび第2のディスプレイを含んでもよい。さらなる例では、グラフィックス処理の結果はデバイスに表示されなくてもよく、例えば、ディスプレイ131は、そこに提示するためのフレームを受信しなくてもよい。代わりに、フレームやグラフィックスの処理結果は、他のデバイスに転送されてもよい。いくつかの態様では、これをハイブリッドレンダリングと呼ぶことができる。
GPU120は、ビデオメモリ121を含む。GPU120は、グラフィックス処理または非グラフィックス処理を行うように構成されてよい。GPU120は、アプリケーションプログラムの実行に基づいて、ロードするデータを特定することと、エンコードされた形の特定されたデータのデータチャンクをデータ記憶ビデオから、GPUに関連付けられたビデオメモリ(例えば、ビデオメモリ121)にロードすることと、データチャンクをデコードするために複数のGPUスレッドグループを並列に使用することによってデータチャンクを並列にデコードすることとを行うように構成されてよい。コンテンツエンコーダ/デコーダ137は、内部メモリ135を含み得る。いくつかの例では、デバイス104は、上述したように、1つまたは複数のディスプレイ131による提示の前にGPU120によって生成された1つまたは複数のフレームに対して1つまたは複数のディスプレイ処理技術を行うために、CPU128などのディスプレイプロセッサを含んでもよい。CPU128は、ディスプレイ処理を行うように構成されてもよい。1つまたは複数のディスプレイ131は、CPU128によって処理されたフレームを表示、または提示するように構成され得る。いくつかの例では、1つまたは複数のディスプレイ131は、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、投射ディスプレイデバイス、拡張現実ディスプレイデバイス、仮想現実ディスプレイデバイス、ヘッドマウントディスプレイ、または任意の他の種類のディスプレイデバイスのうちの1つまたは複数を含み得る。
上述したようなシステムメモリ124のような、GPU120およびコンテンツエンコーダ/デコーダ137の外部のメモリは、GPU120およびコンテンツエンコーダ/デコーダ137にアクセス可能であり得る。例えば、GPU120およびコンテンツエンコーダ/デコーダ137は、システムメモリ124などの外部メモリからの読み出しおよび/または外部メモリへの書き込みを行うように構成されてもよい。GPU120およびコンテンツエンコーダ/デコーダ137は、バスを介してシステムメモリ124に通信可能に結合されてよい。いくつかの例において、GPU120およびコンテンツエンコーダ/デコーダ137は、バスまたは異なる接続を介して互いに通信可能に結合されてもよい。
コンテンツエンコーダ/デコーダ137は、システムメモリ124および/または通信インターフェース126などの任意のソースからグラフィックコンテンツまたはデータを受信するように構成されてよい。システムメモリ124は、受信したエンコードされた、またはデコードされたグラフィックコンテンツまたはデータを記憶するように構成されてよい。コンテンツエンコーダ/デコーダ137は、例えば、システムメモリ124および/または通信インターフェース126から、エンコードされた画素データまたはエンコードされたデータの形のエンコードまたはデコードされたグラフィックコンテンツまたはデータを受信するように構成されてよい。コンテンツエンコーダ/デコーダ137は、任意のグラフィックコンテンツまたはデータをエンコードまたはデコードするように構成されてよい。
いくつかの例によれば、ビデオメモリ121またはシステムメモリ124は、非一時的コンピュータ可読記憶媒体であってもよい。「非一時的」という用語は、記憶媒体が搬送波または伝搬信号で具体化されていないことを示してよい。しかしながら、「非一時的」という用語は、ビデオメモリ121またはシステムメモリ124が移動不可能であること、またはその内容が静的であることを意味するように解釈されるべきではない。一例として、システムメモリ124は、デバイス104から取り外され、他のデバイスに移動されてもよい。他の例として、システムメモリ124は、デバイス104から取り外し可能でなくてもよい。
GPU(または処理回路)は、本明細書に記載されたような例示的技術に従ってグラフィックス処理または非グラフィックス処理を行うように構成され得る。いくつかの例では、GPU120は、デバイス104のマザーボードに統合されてもよい。いくつかの例では、GPU120は、デバイス104のマザーボードのポートに設置されたグラフィックカード上に存在してもよい、またはデバイス104と相互に動作するように構成された周辺デバイスに組み込まれてもよい。GPU120は、1つまたは複数のマイクロプロセッサ、GPU、ASIC、FPGA、ALU、DSP、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェア、他の等価な集積回路またはディスクリート論理回路、あるいはそれらの任意の組み合わせなどの1つまたは複数のプロセッサを含んでよい。これら技術が部分的にソフトウェアで実装されるのであれば、GPU120は、ソフトウェアのための命令群を適切な非一時的コンピュータ可読記憶媒体に記憶し、これらの命令群を、本開示の技術を行うために1つまたは複数のプロセッサを用いてハードウェアで実行してよい。ハードウェア、ソフトウェア、ハードウェアとソフトウェアとの組み合わせなどを含む上記のいずれも、1つまたは複数のプロセッサであると見なされてよい。
いくつかの態様では、データローディングシステム100は、通信インターフェース126を含むことができる。通信インターフェース126は、受信器133および送信器130を含んでもよい。受信器133は、デバイス104に関して本明細書に記載された任意の受信機能を行うように構成されてよい。さらに、受信器133は、他のデバイスから、例えば、目または頭の位置情報、レンダリングコマンド、または位置情報などの情報を受信するように構成されてよい。送信器130は、デバイス104に関して本明細書に記載された任意の送信機能を行うように構成されてよい。例えば、送信器130は、他のデバイスに情報を送信するように構成されてもよく、これはコンテンツに関する要求を含む可能性がある。受信器133および送信器130は、トランシーバ132に組み合わされてもよい。そのような例では、トランシーバ132は、デバイス104に関して本明細書で説明される任意の受信機能および/または送信機能を行うように構成されてよい。
再び図1Bを参照すると、特定の態様では、デバイス104は、アプリケーションプログラムの実行に基づいて、ロードするデータを特定するようにプロセッサ(例えば、GPU120)を制御するように構成された制御構成要素198を含んでよい。さらに、制御構成要素198はまた、エンコードされた形の特定されたデータのデータチャンクを、データ記憶装置から、GPUに関連付けられたビデオメモリ(例えば、121)にロードするようにプロセッサを制御するように構成することもできる。加えて、制御構成要素198は、データチャンクをデコードするために複数のGPUスレッドグループを並列に使用することによって、データチャンクを並列にデコードするようにプロセッサを制御するようにさらに構成することができる。
本明細書に記載されるように、例えばデバイス104のようなデバイスは、本明細書に記載された1つまたは複数の技術を行うように構成された任意のデバイス、装置、またはシステムを指す場合がある。例えば、デバイスは、サーバ、クライアントデバイス、コンピュータ(例えば、パーソナルコンピュータ)、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、コンピュータワークステーション、またはメインフレームコンピュータ、電話、スマートフォン、ビデオゲームプラットフォームまたはコンソール、ハンドヘルドデバイス(例えば、ポータブルビデオゲームデバイスまたは携帯情報端末(PDA))、ウェアラブルコンピューティングデバイス、例えばスマートウォッチ、拡張現実デバイス、仮想現実デバイス、ディスプレイまたはディスプレイデバイス、テレビ、テレビセットトップボックス、ネットワークデバイス、デジタルメディアプレーヤ、ビデオストリーミングデバイス、コンテンツストリーミングデバイス、車載コンピュータ、あるいは本明細書に記載の1つまたは複数の技術を行うように構成された任意の他のデバイスであってもよい。本明細書のプロセスは、特定の構成要素、例えばGPUによって行われるものとして説明されてよいが、さらなる実施形態では、記載されたプロセスを行うように構成された他の処理構成要素を使用して行うこともできる。
図2Aは、複数のプロセッサが扱うデータローディングパイプラインの一例の図を例示する。具体的には、図2Aは、データのライフサイクル中の複数のプロセッサの役割および複数のプロセッサ間の相互作用を示す。上述したように、データは、ランタイムプロセスにおいて消費されるデータの任意のブロックであってよい。図2Aに示されるように、処理パイプライン200aは、少なくとも、ハードドライブ201と、ホストメモリ203と、CPU205と、ビデオメモリ207と、GPU209とを含む。
関連するシステムでは、CPU205は、ディサイダ機能211、ローダ機能213、およびデコーダ機能215を行い、GPU209は、消費機能217を行う。ディサイダ機能211は、どのデータをロードするかを決定するように構成される。ローダ機能213は、データを読み出してメモリにロードするように構成される。デコーダ機能215は、データをデコードするように構成される。消費機能217は、データを消費するように構成される。
処理パイプライン200aにおいて、GPU209は、ハードドライブ201からのデータをロードするようにCPU205に要求する。データは、CPU205によってデコードされ、ホストメモリ203に送られる。次いで、CPU205およびビデオメモリ207は、ホストメモリ203からのデコードされたデータにアクセスしてよい。GPUがCPUにデータをロードするように要求し、次いでCPUがデータをデコードするのを待つプロセスは、GPUがデータを待っている間にボトルネックを作り出す。
図2Bは、複数のプロセッサが扱うGPU駆動レンダリングパイプラインの一例の図を例示する。具体的には、図2Bは、ビデオデータのライフサイクル中の複数のプロセッサの役割およびプロセッサの間の相互作用を示す。図2Bに示されるように、処理パイプライン200bは、少なくとも、ハードドライブ201と、ホストメモリ203と、CPU205と、ビデオメモリ207と、GPU209とを含む。
GPU駆動レンダリングパイプラインにおいて、GPU209は、レンダリングに必要なデータを決定し、記憶装置からデータをロードし、データをデコードするようにCPU205に要求する。図2Aに示される処理パイプライン200aとは対照的に、処理パイプライン200bは、ディサイダ機能211の役割をGPU209に移動させる。これにより、GPU209は、シーンおよび視野角に基づいて何をロードするかについて決定することが可能になる。その後、決定はCPU205に読み戻されて、ローダ機能213およびデコーダ機能215を行う。最後に、デコードされたデータは、消費機能219を行うためにGPUに転送される。
一般に、GPU209がCPU205にデータをロードするように要求する場合、CPU205およびGPU209の両方が非同期的に動作し、毎回データをCPU205に読み戻さなければならないため、要求を処理すると1~3フレームのレイテンシが生じる。
処理パイプライン200aおよび200bにはいくつかの欠点がある。最初に、GPU209は、CPUがデータをロードしデコードするのを待たなければならず、これにより、処理パイプラインの速度が遅くなる。第2に、CPU205の性能電力比はGPU209よりも低いため、CPU205にデコーディングを行うように要求することは、かなりの処理電力を消費する。加えてに、非統合メモリアーキテクチャ(NUMA)では、決定されたデータをホストメモリ203からビデオメモリ207に転送するための帯域幅も高く、これは消費電力を増加させる。
最後に、GPU解凍アルゴリズムは、1つのタイプのデータに焦点を合わせる。例えば、メッシュ圧縮は、メッシュを圧縮し、次いで他のメッシュに解凍することしかできない。同様に、テクスチャ圧縮は、テクスチャデータのみに焦点を合わせることができる。異なるタイプのデータに適用可能な圧縮および解凍を行うことができるGPUが必要とされている。
図3は、本開示の1つまたは複数の技術による、GPUが扱うデータローディングパイプラインの一例の図を例示する。具体的には、図3は、GPU309が扱う処理パイプライン全体を示している。図2Aからの処理パイプライン200aおよび図2Bからの処理パイプライン200bとは対照的に、処理パイプライン300は、すべてGPU309によって行われるローダ機能313、デコーダ機能315、ディサイダ機能317、および消費機能319を示す。
本開示の態様は、ローダ機能213およびデコーダ機能215をCPU205からGPU309へオフロードする。これにより、処理パイプライン全体が最小限のCPU関与でGPU309上で動作することが可能になる。したがって、GPU309における使用のためにデータをロードするプロセス中にGPUとCPUとの間に交換が存在しない可能性がある。代わりに、GPUは、より効率的に並列にデータをデコードし、圧縮された形でデータを転送してよい。加えて、圧縮されたデータはGPUメモリに直接読み込まれ、GPU209は、データを非圧縮データにデコードして消費するため、ビデオメモリ307において処理が生じるため、ホストメモリ303に戻る必要はない。CPUボトルネックをバイパスすることは、CPUを伴う他の関連システムと比較して、より高い性能、より少ない電力消費、およびより少ない帯域幅使用をもたらす。
処理パイプライン300の他の利益は、現在のOS、API、およびハードウェアを修正する必要がないことである。処理パイプライン300に導入されるフレームワークは、主に3つの部分を含んでよい。第1に、OSによって提供されるファイルマッピング機能は、ファイルの内容をメモリブロックにスワップするために使用される。ファイルマッピング機能を使用することは、ファイルがメモリ空間にマッピングされるため、メモリを割り当てる必要がないことを意味する。ファイルがメモリブロックにマッピングされた後、OSはコンテンツを非同期的にロードしてよい。第2に、GPU309がメモリブロックを介してファイルに間接的にアクセスできるように、API拡張がメモリブロックをグラフィックスAPIバッファに相関させるために使用されてもよい。これの利点は、バッファを作成する必要がないことである。代わりに、記憶装置上のデータは、グラフィックスAPIバッファに結合してよい。第3に、エンコードされたデータをGPU消費可能データに変換するために一般的な解凍(例えば、アンジップ)がGPU309上で並列に行われ得るように、GPUデコーディングアルゴリズムを構築するための構築ブロックが提供される。これの利益は、特定のファイルタイプの特定のアルゴリズムに固執する必要なしに順応性のあるフレームワークを提供することである。
GPU309は、マッピングされたホストメモリからのレンダリングのために最適化されていないため、マッピングされたホストメモリからのレンダリングは、ビデオメモリ307からの読み出しよりも遅くなる可能性がある。したがって、第3の部分(例えば、GPUデコーディングアルゴリズムを構築するための構築ブロック)は、マッピングされたホストメモリ303からビデオメモリ307へのコンテンツをデコードするために使用される。ここで、GP GPU技術は、連続CPUデコーディングアルゴリズムを並列GPUアルゴリズムに変換するように構成される。例えば、プレフィックスサムスキャン、ソート、およびマッチングなどの構築ブロックが、並列GPUアルゴリズムに変換されてよい。データがビデオメモリ307にデコードされた後、GPU209は、デコードされたデータを使用してよい。
既存のメモリアドレスまたはブロックからバッファを作成するために使用され得るツールの非限定的な例は、ヴァルカン(Vulkan)拡張グループである。ヴァルカンは、モバイルおよびパーソナルコンピュータ/コンソールゲーム開発で使用されるグラフィックスAPIである。ヴァルカン拡張は、様々なプラットフォームによってサポートされ、既存のメモリをヴァルカンバッファにマッピングしてよい。具体的には、ヴァルカン拡張を使用するこの非限定的な例では、また第2の部分(例えば、メモリブロックをグラフィックスAPIバッファに相関させること)に関して、ヴァルカン拡張(例えば、VK_KHR_external_memory)を使用して、メモリブロックをヴァルカンバッファに関連付けてよい。これにより、GPUは、ヴァルカンバッファを介して間接的にファイルにアクセスすることが可能になる。ウィンドウズ(Windows)では、メモリホスト(例えば、VK_EXT_external_memory_host)と呼ばれる第2のヴァルカン拡張を使用して、既存のメモリアドレスからバッファを作成してよい。リナックス(Linux)およびアンドロイド(Android)では、Memory FD(例えば、VK_KHR_external_memory_fd)と呼ばれる他のヴァルカン拡張がファイルデスクリプタからバッファを作成してもよい。
これらの拡張は、ファイルコンテンツが明示的なコピーなしにヴァルカンバッファに結合することを可能にする。ヴァルカンバッファは、メモリの割り当て方法に対して不可知である。代わりに、デフォルトでは、バッファとしてヴァルカン拡張グループ内に空間が作成される。これは、GPUにデータを配信する前にバッファを作成しなければならない関連システムとは対照的である。これらの関連システムでは、データがGPUに配信されるとき、データは最初にバッファ内に置かれ、コピーされ、次いでGPUに送信されなければならない。この拡張により、既存の割り当てられたバッファは、データが消費のためにGPUに直接送信され得るようにヴァルカンバッファに結合してよい。
ヴァルカン拡張を使用する非限定的な例を続けると、メモリブロックをヴァルカンバッファに相関させるために使用されるヴァルカン拡張(例えば、VK_KHR_external_memory)は、メモリのための追加条件を含む場合がある。第1の条件は、メモリがVkPhysicalDeviceExternalMemoryHostPropertiesEXT::minImportedHostPointerAlignmentにアライメントされることである。第2の条件は、メモリのサイズがアライメント値の倍数であることである。第3の条件は、メモリがそこから読み取られているだけであっても、メモリステータスがREADモードおよびWRITEモードにあることである。ウィンドウズでは、ファイルマッピングからのメモリアドレスは、第1の条件および第2の条件に自動的に従う。第3の条件は、ファイルを作成し、マッピングを作成し、アドレスを取得するときに満たされてよい。
加えて、関連する解凍アルゴリズムは、並列性を考慮せずに設計される。したがって、データは連続して解凍される。GPU309の並列処理アーキテクチャを利用するために処理の並列性を高めるために、データはデータチャンクに再編成されてよい。例えば、データは、データチャンクごとに4Kbに再編成されてよい。各データチャンクは、カスタマイズ可能なアルゴリズムで独立にエンコードされ、デコードされる。GPUは数百万のスレッドを有する場合があるが、それらは、各グループが常に単一命令/複数データ(SIMD)方式で同時に同じ命令を実行するようにグループに編成される。グループは、WARPと呼ばれる。WARPは、ストリーミングマルチプロセッサ(SM)によって同時に実行されるスレッドの集合である。各SMは、実行ユニットのセット、レジスタのセット、および共有メモリのチャンクを有する。複数のワープがSM上で一度に実行されてよい。GPUでは、WARPは、ハードウェア実装形態に応じて16から128のスレッドを含む場合がある。
チャンクをデコードするためにスレッドを割り当てるだけでは、分岐の逸脱のためにデコーディンの速度が遅くなる。代わりに、WARPが、チャンクをデコードするために割り当てられ、いくつかのデコーディングステップではデータ並列性に依存する。デコーディングチャンク間の干渉を最小限に抑えるために、デコードアルゴリズムは、WARP内動作のみを使用するように制限されてよい。したがって、WARPベースの構築ブロックがこの目的のためにフレームワークに提供され、これはまた、並列デコーディング手順を実施するのにも役立つことができる。いくつかの態様では、並列化されたアンジップアルゴリズムが、デフォルトの解決策として使用されてもよい。
プレフィックスサムスキャン、ソート、およびマッチングなどのWARPベースの構築ブロック動作のいくつかの例は、以下でより詳細に説明される。これらのWARPベースの構築ブロックはそれぞれ、デコーディングアルゴリズムに重要な役割を果たし、すべてのタイプの圧縮シナリオおよび解凍シナリオに適用可能であり得る。
第1のWARPベースの構築ブロックは、プレフィックスサムスキャン動作である。このフレームワークでは、ブロックベースの共有メモリを追加する代わりに、WARPシャッフル機能がWARP内でのスレッド間データ交換に使用される。スキャン動作は、連続アルゴリズムを並列アルゴリズムに変換するために重要であり、各スレッドの出力長が可変である場合に特に重要である。
第2のWARPベースの構築ブロックはソート動作である。2つのソートアルゴリズムが存在してよい。第1のソートアルゴリズムは、32ビット整数に対する基数ソートである。基数ソートでは、入力データ長は、WARPの幅以下であってもよい。第2のソートアルゴリズムは、任意のデータ型に対するマージソートであり、512要素未満のデータ長に対して最適化され得る。このソートアルゴリズムは、マージパスに基づいており、WARPシナリオに適合されている。第2のソートアルゴリズムが合計で(N*WARPサイズの)要素をソートできるように、WARP内の各スレッドはN個の要素を保持する。スレッド間の同期動作および通信は、WARP内に留まるように修正されてよい。
他のWARPベースの構築ブロックは、一致動作である。多くの解凍アルゴリズムは、以前に解凍されたデータからコピーするためにマッチングプロセスを使用する。例えば、「Abcd」は、「Abcd a[D=5、L=9]」にエンコードされてよく、式中、Dは距離であり、Lは長さである。例えば、[D=5、L=9]は、ポインタを5バイト分巻き戻し、9バイトをコピーすることに相当する。連続解凍では、バイトが1つずつコピーされるため、これは簡単な作業である。しかしながら、並列化する場合、より多くのデータが一度に並列にコピーされる可能性があり、コピー中にいくつかのバイトが生成される。この例では、最初の5バイト「bcd a」は既にそこにあるためコピーされるが、次の4バイトは後でコピーしなければならない。これら9バイトは、並列に一度にコピーすることはできない。したがって、アルゴリズムは反復的である。反復ごとに、[D、L]領域は2つに分割され、すなわち非重複領域[D、min(L、D)]と、重複領域[D+min(L、D)、max(0、L-D)]である。非重複領域は、新たな[D、L]領域となるように直接コピーすることができ、LがD以下になるまで分割が行われる。上記の例では、[D=5、L=9]が[D=5、L=5]と[D=10、L=4]に分割される。非重複領域は、並行してコピーすることができる。次に、[D=10、L=4]が非重複領域になり、他のコピーがそれを扱う。反復ごとに非重複長が2倍になる。したがって、並列性は反復ごとに2倍になる。
上述したデコーディング構築ブロック動作は一般的であり、無損失である。このフレームワークでは、映像データ、テクスチャデータ、メッシュデータ、ニューラルネットワークデータ、テキストデータなどの任意のデータを扱う場合がある。フレームワークはまた、より高い圧縮比を提供するために、適応型スケーラブルテクスチャ圧縮(ASTC)テクスチャ圧縮またはDracoジオメトリ圧縮などのドメイン固有圧縮の上で使用されてもよい。ASTCは、単一の固定サイズではなく可変ブロックサイズを使用するテクスチャ圧縮の形である。ASTCは、他の圧縮フォーマットのすべての特徴に加えて1つのフォーマットを提供することによって、ほとんどの従来の圧縮フォーマットを実質的に廃止するように設計されている。Dracoは、3D幾何学メッシュおよび点群を圧縮および解凍するためのライブラリであり、3Dグラフィックスの記憶および伝送を改善することを目的としている。さらに、ファイルごとに1つのデータの代わりに、すべてのゲームデータを大きなファイルに入れることができ、仮想ファイルシステムを使用してデータを管理してよい。これにより、アプリケーションは、大きなファイルをGPUに相関させ、次いでGPUにその中の任意のデータをロードさせることができる。
したがって、処理パイプライン300において、GPU309は、CPUとの通信がないため、処理パイプライン200aおよび200bよりも効率的にデータを並列にデコードすることが可能である。加えて、GPU309は、データを圧縮した形で転送することも可能である。これにより、処理パイプライン200aおよび200bよりも性能が高く、電力消費が少なく、帯域幅の使用が少なくなる。
図4は、本開示の1つまたは複数の技術による、コンピューティングデバイスにおけるデータローディングの種々の例の方法のフローチャートを例示する。方法400は、上述したように、制御構成要素198などの装置によって行われてよい。いくつかの実装形態では、方法400は、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせを含む処理ロジックによって行われる。いくつかの実装形態では、方法400は、非一時的コンピュータ可読媒体(例えば、メモリ)に記憶されたコードを実行するプロセッサによって行われる。方法400は、コンピューティングデバイスにおいてデータをロードするステップを含む。
ブロック402において、方法400は、GPUにおいて、アプリケーションプログラムの実行に基づいて、ロードするデータを特定するステップを含む。いくつかの態様では、データは、ビデオデータ、テクスチャデータ、メッシュデータ、ニューラルネットワークデータ、またはテキストデータに対応してよい。例えば、図3に戻って参照すると、GPU309は、ディサイダ機能317におけるアプリケーションプログラムの実行に基づいて、どのデータをロードするかを決定するように構成される。
ブロック404において、方法400は、GPUを介して、エンコードされた形の特定されたデータのデータチャンクを、データ記憶装置から、GPUに関連付けられたビデオメモリにロードするステップを含む。特定されたデータは、オフライン(すなわち、以前に行われた)圧縮フェーズ中にチャンクに編成される。データチャンクへのデータのこの編成は、GPUがランタイム中にデータチャンクをロードすることを可能にする。いくつかの態様では、ビデオメモリにデータをロードするステップは、データのファイル(例えば、データチャンクの1つまたは複数のファイル)をメモリブロックにマッピングするステップと、アプリケーションプログラムインターフェース(API)拡張グループを用いて、データのファイルにマッピングされたメモリブロックをバッファと関連付けるステップと、を含む。例えば、図3に戻って参照すると、GPU309は、ローダ機能313において、エンコードされた形のデータをハードドライブ301からビデオメモリ307にロードするように構成される。
ブロック406において、方法400は、データチャンクをデコードするために複数のGPUスレッドグループを並列に使用することによってデータチャンクを並列にデコードするステップを含む。データチャンクの各々は、他のデータチャンクとは独立にデコードされる。例えば、図3に戻って参照すると、GPU309は、デコーダ機能315においてデータチャンクを並列にデコードするように構成される。
いくつかの態様では、複数のGPUスレッドグループの各々は、それぞれのスレッドグループからのデータを使用することに限定されたグループ内デコーディング機能を採用することによって、他のデータチャンクから独立にデータチャンクのそれぞれ1つをデコードしてよい。いくつかの態様では、データチャンクを並列にデコードするステップは、複数のGPUスレッドグループのうちの第1のGPUスレッドグループを使用して第1のデータチャンクを、複数のスレッドグループのうちの第2のGPUスレッドグループを使用して第2のデータチャンクをデコードするステップと並列に、かつ、独立にデコードするステップを含んでよい。いくつかの態様では、グループ内デコーディング機能は、複数のGPUスレッドグループのうちの1つの中でのスレッド間データ交換を可能にするシャッフル機能を含み得る。いくつかの態様では、グループ内デコーディング機能は、複数のGPUスレッドグループのうちの1つの中の1つまたは複数のスレッドの基数ソートを含んでよく、基数ソートは、複数のGPUスレッドグループのうちの1つの中のスレッドの数以下である入力ビット長を有する。いくつかの態様では、グループ内デコーディング機能は、1つのスレッド内の要素の数とGPUスレッドグループ内のスレッドの数との積に等しい要素の最大数に適用可能なマージソートを含み得る。いくつかの態様では、グループ内デコーディング機能は、(i)データの重複領域から分割された非重複領域をコピーすることと、(ii)後続の重複領域の長さが後続の重複領域の距離よりも小さくなるまで、重複領域を後続の非重複領域と後続の重複領域とに分割することとを反復的に含む一致動作を含んでよい。
方法400は、視覚的表現のためにデコードされたデータをレンダリングするステップを含んでよい。例えば、図3に戻って参照すると、GPU309は、消費機能319における視覚的表現のためにデコードされたデータをレンダリングすることによってデコードされたデータを消費するように構成される。
本明細書に記載の主題は、1つまたは複数の利益または利点を実現するために実施することができる。例えば、本明細書に開示された技術は、コンピューティングデバイスにおけるデータローディングの方法を可能にし、ここで、特定、読み取り、およびデコーディングプロセスは、CPUではなくGPUによって行われる。その結果、CPUのボトルネックがバイパスされて、より高速なパフォーマンスおよびより低いレイテンシが提供される。加えて、方法を利用するために、現在のOS、API、ハードウェア、ドライバ、または既存の構成要素を修正する必要はない。さらに、本明細書に開示された技術は、特定のファイルタイプのための特定のアルゴリズムに依存する必要がないような順応性のあるフレームワークを提供する。
本明細書に記載の主題は、1つまたは複数の利益または利点を実現するために実施することができる。例えば、記載されたグラフィックス処理技術および非グラフィックス処理技術は、本明細書に記載された共有技術を実装するためにコンピュータ処理またはグラフィックス処理を行うことができるサーバ、クライアント、GPU、または他の何らかのプロセッサによって使用することができる。これはまた、他のコンピュータまたはグラフィックス処理技術と比較して低コストで達成することができる。さらに、本明細書のコンピュータ処理技術またはグラフィックス処理技術は、データ処理または実行を改善する、または高速化することができる。さらに、本明細書のコンピュータ処理技術またはグラフィックス処理技術は、リソースまたはデータの利用および/またはリソース効率を改善することができる。
本開示によれば、「または」という用語は、文脈がそうでないことを指示しない場合、「および/または」として解釈されてもよい。さらに、「1つ以上」または「少なくとも1つ」などの語句は、本明細書に開示されたいくつかの特徴に使用されているが、他の特徴には使用されていない場合があり、そのような文言が使用されていない特徴は、文脈がそうでないことを指示しない場合に暗示されるそのような意味を有すると解釈され得る。
1つまたは複数の例では、本明細書記載された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組み合わせで実装され得る。例えば、「処理装置」という用語が本開示を通して使用されているが、そのような処理装置は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組み合わせで(例えば、処理回路によって)実装されてもよい。任意の機能、処理装置、本明細書に記載の技術、または他のモジュールがソフトウェアにおいて実施される場合、その機能、処理装置、本明細書に記載の技術、または他のモジュールは、コンピュータ可読媒体上の1つまたは複数の命令またはコードとして記憶または転送されてよい。コンピュータ可読媒体は、ある場所から他の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含むコンピュータデータ記憶媒体または通信媒体を含んでもよい。このようにして、コンピュータ可読媒体は、一般に、(1)非一時的である有形のコンピュータ可読記憶媒体、または(2)信号または搬送波などの通信媒体に対応してよい。データ記憶媒体は、本開示に記載された技術を実装するための命令、コード、および/またはデータ構造を取り出すために、1つまたは複数のコンピュータあるいは1つまたは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。限定ではなく例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROMまたは他の光ディスク記憶装置、磁気ディスク記憶装置または他の磁気記憶装置を含むことができる。本明細書で使用されるディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザディスク(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)、およびブルーレイディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、レーザを用いて光学的にデータを再生する。上記の組み合わせもまた、コンピュータ可読媒体の範囲内に含まれるべきである。コンピュータプログラム製品は、コンピュータ可読媒体を含んでよい。
コードは、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、算術論理演算ユニット(ALU)、フィールドプログラマブルロジックアレイ(FPGA)、または他の同等の集積回路または個別論理回路などの1つまたは複数のプロセッサによって実行されてもよい。したがって、本明細書で使用される「プロセッサ」という用語は、前述の構造のいずれか、または本明細書に記載の技術の実装に適した任意の他の構造を指してよい。また、これらの技術は、1つまたは複数の回路または論理素子に完全に実装することができる。
本開示の技術は、無線ハンドセット、集積回路(IC)、またはICのセット、例えばチップセットを含む、多種多様なデバイスまたは装置において実装されてよい。本開示では、開示された技術を行うように構成されたデバイスの機能的態様を強調するために、様々な構成要素、モジュール、またはユニットが記載されているが、必ずしも異なるハードウェアユニットによる実現を必要としない。むしろ、上述したように、様々なユニットは、適切なソフトウェアおよび/またはファームウェアと共に、任意のハードウェアユニットに組み合わされてもよく、または上述したような1つまたは複数のプロセッサを含む相互動作ハードウェアユニットの集合によって提供されてもよい。