【文献】
竹居 智久,Apple主導の「OpenCL」 プロセサに自由をもたらす,日経エレクトロニクス,日本,日経BP社 Nikkei Business Publications,Inc.,2008年12月15日,pp.107−117
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0008】
本開示及び図面を通して同様の構成要素及び機能を示すのに同じ番号が使用される。100番台の番号は、最初に
図1で見られる機能を指し、200番台の番号は、最初に
図2で見られる機能を指し、以下同様である。
【0009】
以下の説明及び請求項においては、「結合される」及び「接続される」という用語及びその派生語が使用されることがある。これらの用語は、互いに対する類似語として意図されていないことを理解されたい。むしろ、特定の実施形態において、「接続される」という用語は、1つ又は複数の要素が、互いに対して、直接物理的に又は電気的に接触している状態を示すのに用いられることがある。「結合される」という用語は、1つ又は複数の要素が直接物理的に又は電気的に接触している状態にあることを意味することがある。しかしながら、「結合される」という用語は、2つ又は複数の用語が互いに対して直接接触している状態ではないが、相互に協働するか対話する状態にあることを意味することもある。
【0010】
一部の実施形態は、ハードウェア、ファームウェア及びソフトウェアのいずれか1つ又は組合せで実装され得る。一部の実施形態は、マシン読取可能な媒体に格納される命令として実装されてもよく、このような命令は、コンピューティングプラットフォームによって読み取られて実行され、本明細書で説明されるような演算を実施することができる。マシン読取可能媒体は、例えばコンピュータのようなマシンによって読取可能な形式で情報を格納又は伝送するための任意の機構を含み得る。例えばマシン読取可能媒体は、読取専用メモリ(ROM);ランダムアクセスメモリ(RAM);磁気ディスク記憶媒体;光記憶媒体;フラッシュメモリデバイス;又は電気、光、音響若しくは他の形式の伝搬信号、例えば特に搬送波、静外線信号、デジタル信号若しくは信号を送受信するインタフェースを含み得る。
【0011】
実施形態は、実装例又は実施例である。本明細書における「実施形態」、「一実施形態」、「一部の実施形態」、「様々な実施形態」又は「他の実施形態」への参照は、その実施形態に関連して説明される特定の特徴、構造又は特性が、本発明の少なくとも一部の実施形態に含まれるが、必ずしも全ての実施形態に含まれなくてもよいことを意味する。「実施形態」、「一実施形態」又は「一部の実施形態」という用語の様々な使用は、必ずしも同じ実施形態を示していない。ある実施形態の要素又は態様を、別の実施形態の要素又は態様を組み合せることができる。
【0012】
本明細書で説明され、図示される必ずしも全てのコンポーネント、特徴、構造、特性等が、特定の1つ又は複数の実施形態に含まれる必要はない。本明細書において、コンポーネント、特徴、構造又は特性が含まれる「ことがある」、「可能性がある」、「ことができる」、「かもしれない」という記載は、例えばその特定のコンポーネント、特徴、構造又は特性が含まれるべきことを必要とはしない。本明細書又は請求項において、「ある(a、an)」要素について言及する場合、これは、その要素が1つのみしか存在しないことを意味するものではない。また、本明細書又は請求項において、「追加の(additional)要素に言及する場合、これは、1つ以上の追加の要素が存在することを除外しない。
【0013】
一部の実施形態は特定の実装と関連して説明されているが、一部の実施形態によると、他の実装も可能であることに留意されたい。加えて、図面に示されるか及び/又は本明細書で説明される回路要素又は他の特徴の構成及び/又は順序は、図示され説明される特定の方法で構成されなくてもよい。一部の実施形態によると、多くの他の構成も可能である。
【0014】
図面に示される各システムにおいて、ある事例の要素はそれぞれ、示される要素が異なる及び/又は同様であり得ることを示唆するように、同じ参照番号又は異なる参照番号を有することがある。しかしながら、要素は、異なる実装となり、かつ本明細書で図示又は説明されるシステムの一部又は全てと協働するのに十分に柔軟なものとすることができる。図面に示される様々な要素は、同じものであってもお異なるものであってもよい。どの要素を第1の要素として参照するか、及びどの要素が第2の要素と呼ばれるかは任意である。
【0015】
図1は、諸実施形態に従って使用され得るコンピューティングデバイス100のブロック図である。コンピューティングデバイス100は、例えば特に、ラップトップコンピュータ、デスクトップコンピュータ、タブレットコンピュータ、モバイルデバイス又はサーバとすることができる。コンピューティングデバイス100は、格納された命令を実行するように構成される中央処理ユニット(CPU)102に加え、CPU102によって実行可能な命令を格納するメモリデバイス104を含むことができる。CPUは、バス106によってメモリデバイス104に結合され得る。加えて、CPU102は、シングルコアプロセッサ、マルチコアプロセッサ、コンピューティングクラスタ又は任意の数の他の構成とすることができる。さらに、コンピューティングデバイス100は、1つより多くのCPU102を含んでもよい。CPU102によって実行される命令は、共有仮想メモリを実装するのに使用され得る。
【0016】
コンピューティングデバイス100は、グラフィクス処理ユニット(GPU)108も含むことができる。GPU102は、コンピューティングデバイス100内の入出力デバイスである。図示されるように、CPU102は、バス106を通してGPU108に結合され得る。しかしながら、一部の実施形態では、GPU18は、コンピューティングデバイス100内のCPU102と同じダイス上に配置される。この手法では、CPU102とGPU108が物理的に接続されるので、CPU102とGPU108との間のバス106による接続は不要になる。さらに、諸実施形態において、CPU102とGPU108を、
図2に関連して説明されるような統合メモリアーキテクチャ内に含めてもよい。
【0017】
GPU108は、コンピューティングデバイス100内の任意の数のグラフィック処理を実行するように構成され得る。例えばGPU108は、コンピューティングデバイス100のユーザに表示されるよう、グラフィック画像、グラフィックフレーム、ビデオ等をレンダリング又は操作するように構成され得る。一部の実施形態において、GPU108は、複数のグラフィックエンジン(図示せず)を含み、この場合、各グラフィックエンジンが、特定のグラフィックタスクを行うか、特定のタイプのワークロードを実行するように構成される。
【0018】
メモリデバイス104は、ランダムアクセスメモリ(RAM)、読取専用メモリ(ROM)、フラッシュメモリ又は任意の他の適切なメモリシステムを含むことができる。例えばメモリデバイス104は、動的ランダムアクセスメモリ(DRAM)を含むことがある。メモリデバイス104は、共有仮想メモリを実装するための命令を実行するように構成され得るデバイスドライバ110を含むことがある。デバイスドライバ110は、ソフトウェア、アプリケーションプログラム、アプリケーションコード等とすることができる。一部の実施形態において、デバイスドライバ110は、ユーザモードのドライバである。
【0019】
メモリデバイス104は、マルチレベルキャッシュ112も含む。マルチレベルキャッシュ112は、最終レベルキャッシュ(LLC)114と、レベル2キャッシュ116と、レベル1キャッシュ118とを含む。説明のためにマルチレベルキャッシュ112を使用するが、任意のキャッシュをコンピューティングデバイス100に含めることができる。マルチレベルキャッシュ112は、CPU102に頻繁に使用されるデータの小さなサブセットを格納する、小さくかつ高速なメモリとすることができる。より大きなデータセットをストレージデバイス120に格納してもよい。ストレージデバイス120は、ハードドライブ、光学ドライブ、サム(thumb)ドライブ、ドライブのアレイ又はこれらの任意の組合せのような物理メモリである。ストレージデバイス120は、リモートストレージドライブを含んでもよい。CPU102がストレージデバイス120内に格納されたデータにアクセスする時間は、CPU102が、メモリ104内のマルチレベルキャッシュ112にアクセスするのにかかる時間に対して遅い可能性がある。
【0020】
一部の実施形態において、LLC114は、CPU102とGPU108との間で共有されるが、レベル2キャッシュ116及びレベル1キャッシュ118は、GPU108がレベル2キャッシュ116及びレベル1キャッシュ118内にキャッシュされたデータに直接アクセスすることができないように、GPU108から隠される。しかしながら、LLC114は、レベル2キャッシュ116及びレベル1キャッシュ118内に格納されたデータを読み出し、書き込むことができる。これにより、GPU108が、レベル2キャッシュ116及びレベル1キャッシュ118にキャッシュされたデータを要求するとき、LLC114は、GPU108によって処理するために、レベル2キャッシュ116及びレベル1キャッシュ118からデータを取り出すことができる。このようにして、LLC114は、コンピューティングデバイス100のデータコヒーレンシを保証する。本明細書で説明されるとき、コヒーレンシは、CPU102とGPU108によってアクセスされているデータが同じであるという状況を指す。したがって、CPU102は、GPU108と正しいデータを共有することができるようにするため、ストレージデバイス120からのデータがLLC114と一貫性を有することを保証することによって、このストレージデバイス120からのデータが、LLC114、レベル2キャッシュ116及びレベル1キャッシュ118内で正確に反映されることを保証することになる。
【0021】
加えて、諸実施形態において、CPUとGPUはメモリの任意のレベルにアクセスすることができる。しかしながら、LLC114は最新のデータを含むが、メモリの他のレベルからのデータは古い可能性がある。さらに、諸実施形態において、CPUとGPUは、任意の相互アクセス可能な記憶位置を用いて、共有仮想メモリを実施することができる。任意の相互アクセス可能な記憶位置には、これらに限られないが、メモリデバイス104の任意のエリア、ストレージ120の任意のエリア、ネットワーク化された記憶位置、サムドライブ又はこれらの任意の組合せが含まれ得る。
【0022】
ストレージデバイス120は、サーフェイス(surface)122及びコンピューティングデバイス100上で実行するように構成される任意の数のアプリケーション124を含む。サーフェイス122は、デバイスドライバ110によって割り当てられる、物理メモリの指定された部分である。サーフェイスは、該サーフェイス122内の物理メモリのコンテンツ上で実行される処理に基づいて更新され得る。諸実施形態において、アプリケーション124は、CPU102によって実行されると、サーフェイスがデバイスドライバ110によって割り当てられることを要求し得る。さらに、CPU102上で動作するアプリケーション124は、サーフェイス122の所望のサイズ及び特性を指定することにより、アプリケーション124によって要求されるメモリ割り当てに応じて、サーフェイス122を構成することができる。加えて、サーフェイスの割り当ては、例えばコンピューティングデバイス100のCPU102からの入力に応答して実施され得る。さらに、諸実施形態において、サーフェイスは、LLCキャッシュ可能としてマークされる。サーフェイス122をLLCキャッシュ可能として指定することにより、サーフェイス122内の位置からキャッシュされるデータは、LLC114へキャッシュされ、これにより、LLC内でCPU102とGPU108の双方によりアクセス可能になる。
【0023】
諸実施形態において、デバイスドライバは、カーネルモードドライバに、サーフェイスが、共有仮想メモリサーフェイスとなることを知らせる。カーネルモードドライバは、サーフェイスのためにCPU仮想メモリアドレスを保存することになる。カーネルモードドライバが、サーフェイスをグラフィクスメモリにページングすると、カーネルモードドライバは、元のグラフィクス仮想アドレスからのページングを、CPUアドレスに相当するグラフィクス仮想アドレスへルート変更することができる。さらに、諸実施形態において、仮想グラフィクスアドレスは、所与のアプリケーションだけに属するプライベートのグラフィクスアドレス空間である。
【0024】
メモリ管理ユニット(MMU)126を使用して、サーフェイス122内に格納されるデータへのアクセスを管理することができる。MMU126は、CPU102及びGPU108の仮想アドレス空間を、アドレス空間の様々なページへと分けることができる。CPU102及びGPU108はそれぞれ、同一の仮想アドレス空間を有する。仮想アドレス空間は、コンピューティングシステム内で動作している様々なアプリケーション124を、仮想アドレスの特定のサブセットに対して分離することによって、サーフェイス122内に含まれるデータの保護を可能にする。仮想アドレス空間の使用により、あるアプリケーション124が別のアプリケーション124のデータにアクセスしないことになる。したがって、MMU126は、CPUページテーブル128及びGPUページテーブル130を含む。CPUページテーブルは、サーフェイス122内の物理アドレス位置にマップされるCPUの仮想アドレスを含む。同様に、GPUページテーブルは、サーフェイス122内の物理アドレス位置にマップされるGPUの仮想アドレスを含む。GPUの仮想アドレスは、CPUの仮想アドレスに相当する。したがって、本明細書で説明される共有仮想メモリプロシージャでは、CPUページテーブル128は、物理アドレス空間に対するCPU仮想アドレス空間のマッピングを含み得る。物理アドレス空間は、サーフェイス122内の物理的な位置に対応する。同様に、GPUページテーブル130は、同じ物理アドレス空間に対するGPU仮想アドレス空間のマッピングを含み得る。
【0025】
様々な実施形態において、CPUページテーブル128からの仮想メモリアドレス及びGPUページテーブル130からのグラフィクス仮想メモリアドレスは、翻訳プロシージャを介してサーフェイス122の物理メモリページにマップされる。翻訳プロシージャを使用して、仮想メモリアドレスのいずれかを対応する物理アドレスに変換することができる。例えば翻訳プロシージャは、ページテーブルウォークを介して実行されてよい。ページテーブルウォークは、ページテーブル内の仮想メモリアドレスを、そのページテーブル内の物理メモリアドレスに変換する特定の翻訳テーブルに基づいて、実行され得る。加えて、諸実施形態において、翻訳ルックアサイド(look-aside)バッファを使用して、CPU及びGPUの仮想アドレスを、それぞれのページテーブル内における物理アドレス空間へ翻訳してもよい。
【0026】
翻訳又は変換プロシージャが実行された後、サーフェイス122はピン止め(pin)される。サーフェイスをピン止めすることとは、物理的な位置及び対応する物理的なアドレスが変更されないように、サーフェイスを保護することを指す。したがって、サーフェイス122をピン止めすることは、仮想アドレス空間と物理アドレス空間との間の「ハード」マッピングを保証する。アドレス空間の間のハードマッピングは、サーフェイスがピン止めされた後は変化しないマッピングである。サーフェイスがピン止めされない場合、ページフォルトが生成されるか、サーフェイスの物理的な位置がシフトすると、誤ったデータが処理されることがある。
【0027】
諸実施形態において、アプリケーション124は、データを処理すること等の演算を実行するために、CPU102において実行され、サーフェイス122のようなサーフェイスを要求する。CPU102は、演算をGPU108にハンドオフすることができる。双方の仮想メモリが等しく、ページテーブルはサーフェイス122にマップされているので、GPUは、サーフェイスにアクセスすることによって、データを別のアドレス空間へコピーすることなく、CPU102によってオフロードされた演算の即時実行を開始することができる。さらに、データを再構造化する必要がない。演算がCPU102によって完了すると、GPU108は、演算が完了したことをCPU122に伝えることができる。次いで、CPU102は、データを元のアドレス空間にコピーして戻す必要なく、データの処理を継続することができる。
【0028】
アプリケーション124によって要求された演算が、GPU108によって実行されると、サーフェイス122に対する修正が生じることがある。本明細書で説明される共有仮想メモリプロシージャによると、そのようなサーフェイス122への修正は、CPU102に十分に可視である。したがって、データは、GPU108からCPU102へ又はCPU102からGPU108へデータをコピーすることなく、GPU108とCPU102との間で共有され得る。
【0029】
CPU102は、バス106を通して、コンピューティングデバイス100を1つ又は複数の入出力(I/O)デバイス134に接続するように適合される入出力(I/O)デバイスインタフェース132に接続され得る。I/Oデバイス234は、例えばキーボード及びポインティングデバイスを含むことがあり、ポインティングデバイスは、特にタッチパッド又はタッチスクリーンを含み得る。I/Oデバイス134は、コンピューティングデバイス100のビルトインコンポーネントであってもよく、又はコンピューティングデバイス100に外部接続されるデバイスであってもよい。
【0030】
CPU102は、バス106を通して、コンピューティングデバイス100をディスプレイデバイス138に接続するように適合されるディスプレイインタフェース136にもリンクされ得る。ディスプレイデバイス138は、コンピューティングデバイス100のビルトインコンポーネントであるディスプレイスクリーンを含み得る。ディスプレイデバイス138は、特にコンピューティングデバイス100に外部接続されるコンピュータモニタ、テレビジョン又はプロジェクタも含み得る。
【0031】
ネットワークインタフェースコントローラ(NIC)140は、バス106を介して、コンピューティングデバイス100をネットワーク142に接続するように適合され得る。ネットワーク142は、特にワイドエリアネットワーク(WAN)、ローカルエリアネットワーク(LAN)又はインターネットとすることができる。
【0032】
図1のブロック図は、コンピューティングデバイス100が、
図1に示されるコンポーネントの全てを含むべきことを示すようには意図されていない。さらに、コンピューティングデバイス100は、具体的な実装の詳細に応じて、
図1に示されていない任意の数の追加のコンポーネントを含んでもよい。
【0033】
図2A及び
図2Bは、諸実施形態に従って、コンピューティングデバイス100のCPU102とGPU108との間の共有仮想メモリを実装するのに使用され得る統合メモリアーキテクチャ200のスキーマを示す。同様の番号が付されたアイテムは、
図1に関連して説明されている通りである。UMA200は、例えばコンピューティングデバイス100のCPUページテーブル128、GPUページテーブル及びサーフェイス122を含み得る。
【0034】
UMA200は、CPU102とGPU108との間でいずれのタイプのデータもコピーすることなく、CPU102とGPU108との間の共有仮想メモリを可能にすることができる。さらに、データの再構造化及びコンパイラの構成も行われない。これは、CPU102とGPU108がサーフェイス122を共有し、それぞれのページテーブル内で等しい仮想アドレスを有することができるようにすることによって達成され得る。上述のように、サーフェイス122は、物理的なストレージデバイスの一部であってよい。サーフェイスは、任意の数の物理的なメモリ位置202を含む。物理的なメモリ位置202は、ページングされたメモリフォーマットに編成されてよく、この場合、ページは、サーフェイス122内の物理メモリの固定長のブロックである。
【0035】
CPUページテーブル128は、複数のCPU仮想メモリアドレス204を含み、GPUページテーブル130も、複数のグラフィクス仮想メモリアドレス204を含み得る。CPU仮想メモリアドレス204は、CPU仮想アドレス空間を構成し、グラフィクス仮想メモリアドレス204は、グラフィクス仮想アドレス空間を構成する。各仮想アドレス空間は、各ページテーブル内の物理アドレス206にマッピングされる。したがって、CPU仮想メモリアドレス204及びグラフィクス仮想メモリアドレス204は双方とも、それぞれCPUページテーブル128及びGPUページテーブル130内の物理アドレス206の同じセットにマップされる。
【0036】
物理アドレス206は、CPU102及びGPU108(
図1)が、サーフェイス122内の物理的な位置202で格納されたデータを処理するのを可能にする。様々な実施形態において、サーフェイス122は、アプリケーション124(
図1)のようなアプリケーションによってアクセスされる特定のCPU仮想アドレス204に基づいて割り当てられる。サーフェイス122が割り当てられると、各物理アドレス208が、
図2に示されるように、CPUページテーブル128内の対応するCPU仮想アドレス204にマップされる。サーフェイス122のCPU仮想アドレス204は、グラフィクスメモリと共有される。アプリケーション124(
図1)の計算タスクがGPU108にオフロードされると、サーフェイス122は、グラフィクスメモリにページングされる。サーフェイス122がグラフィクスメモリにページングされると、該ページは、元のグラフィクス仮想アドレスから、CPU仮想アドレス204に相当するグラフィクス仮想アドレス204へルート変更されることになる。GPU仮想グラフィクスアドレス空間は、所与のアプリケーションに対してのみ属するプライベートグラフィクスアドレス空間である。
【0037】
GPUページテーブル130内のグラフィクス仮想メモリアドレス204は、CPU仮想アドレス及びGPU仮想メモリアドレスが物理アドレス206の同じセットにマップされるように、CPUページテーブル128と同期化され得る。物理アドレス206は、サーフェイス122内の物理的な位置202に対応する。したがって、サーフェイス122は、CPU102とGPU108との間で直接共有され得る。諸実施形態において、GPU108が物理的な位置202のいずれかに配置されたデータを修正する場合、この修正は自動的に、データのコピー又はデータのマーシャルを行う必要なく、サーフェイス122によりCPU102に対して可視である。
【0038】
図2のスキーマ図は、UMA200が
図2に示されるコンポーネントの全てを含むべきであることを指示するように意図されていない。さらに、UMA200は、具体的な実装の詳細に応じて、
図2に示されていない任意の数の追加のコンポーネントを含んでもよい。
【0039】
図3は、諸実施形態に係るコンピューティングデバイスのCPUとGPUとの間の共有仮想メモリのための方法300を示す処理フロー図である。様々な実施形態において、方法300は、CPUメモリからGPUメモリへデータをコピーすることなく、CPUとGPUとの間でメモリを共有するのに用いられる。
【0040】
一部の実施形態において、方法300は、CPU102とGPU108がバス106によって接続されるコンピューティングデバイス100のようなコンピューティングデバイスにおいて実行され得る。他の実施形態では、CPU102及びGPU108は、
図2に関連して上述したUMA200のようなUMAに含まれてもよい。さらに、方法300は、コンピューティングデバイス100のデバイスドライバ126のような、コンピューティングデバイスのドライバによって実行され得る。方法は、ブロック302において開始して、物理メモリ内でサーフェイスの割り当てが行われる。諸実施形態において、サーフェイスは、コンピューティングデバイスのCPU上で実行しているアプリケーションからの入力に応答して、コンピューティングデバイスの物理メモリ内で割り当てられる。さらに、諸実施形態において、サーフェイスはデバイスドライバによって割り当てられてもよい。また、サーフェイスは、共有仮想メモリサーフェイスとしてマークされてもよい。アプリケーション又はデバイスドライバは、CPUからCPU仮想アドレスを使用してサーフェイスにアクセスすることができる。諸実施形態において、CPU仮想アドレスは、コンピューティングデバイスのオペレーティングシステムによって、アプリケーション又はデバイスドライバに提供される。
【0041】
ブロック304において、CPU仮想アドレス空間が、サーフェイスに基づいて作成される。諸実施形態において、CPUアドレス空間は、アプリケーションの要求で生成される。ブロック306において、サーフェイスが、CPU仮想アドレス空間にマップされる。CPU仮想メモリアドレスと物理アドレスとの間のマッピングは、CPUページテーブル内に含まれる。
【0042】
ブロック308において、CPU仮想アドレス空間に相当するGPU仮想アドレス空間が作成される。ブロック310において、サーフェイスは、GPU仮想アドレス空間にマップされる。諸実施形態において、物理メモリページを仮想メモリアドレスにマップすることは、仮想アドレスを翻訳又は変換して、システムメモリ内の対応する物理メモリページを決定することを含むことがある。仮想アドレスが物理アドレスに翻訳又は変換されると、翻訳プロセス中に見つかった仮想アドレスと物理アドレスとの間の関連付けが、ロックされる。関連付けをロックすることにより、ページテーブル内の物理アドレスに対応するサーフェイスの物理的な位置が、キャッシュにページングされ得る。関連付けがロックされている間、ページはキャッシュ内に残り、サーフェイスの物理アドレスが、デバイスドライバによって変更されることを防ぐ。
【0043】
諸実施形態において、サーフェイスは、LLCキャッシュ可能として指定される。そのような指定により、サーフェイスの物理的な位置は確実に、CPUとGPUによって共有されるLLCへキャッシュされる。アプリケーションによって使用されるグラフィクス仮想メモリアドレスは、CPUの仮想アドレスにマップされる同じ物理アドレスへ翻訳され得る。諸実施形態において、デバイスドライバは、GPUページテーブル内の物理アドレスに対するグラフィクス仮想メモリアドレスのマッピングを更新してもよい。
【0044】
ブロック312において、サーフェイスはピン止めされる。サーフェイスをピン止めすることによって、サーフェイス内の物理的な位置が変更されるのを防ぐ。例えばオペレーティングシステムは、物理的な位置を、そのメモリ管理の一部として変更し得る。しかしながら、サーフェイスがピン止めされると、オペレーティングシステムは、サーフェイスの物理的な位置を変更することを妨げられる。
【0045】
図4は、諸実施形態に従って、コンピューティングデバイスのCPUとGPUとの間の共有メモリを処理するための方法400を示す処理フロー図である。ブロック402において、演算がCPUからGPUにオフロードされ得る。演算は、アプリケーション124(
図1)のようなアプリケーションによって指示されるように、GPUへオフロードされ得る。加えて、CPU又はGPUを制御するのに使用される任意のアプリケーションプログラミングインタフェース(API)を使用して、CPUからGPUへの演算のオフロードを指示することができる。諸実施形態において、演算をCPUからGPUへオフロードするのに先立って、CPUによって処理されているサーフェイス内に配置された任意のデータは、LLCと一貫性を有するようにされる。
【0046】
ブロック404において、GPUは、オフロードされた演算の処理を開始する。GPUは、その演算を実行するために、LLC及びサーフェイス内のデータにアクセスする。GPUが、LLC内にないがCPUの何らかの他のキャッシュにあるデータを要求する場合、LLCは、GPUによる処理のために、そのデータを他のキャッシュから取り出すことができる。
【0047】
ブロック406において、GPUは、その演算が完了したことを信号伝達する。完了の信号は、ホストへ送信され得る。諸実施形態において、演算が完了すると、デバイスドライバは、演算をGPUとCPUとの間で同期させる。さらに、諸実施形態において、完了の信号は、例えばメールボックスの書き込み(mailbox write)又は割り込みであってもよい。完了の信号は、結果としてサーフェイス内のデータの修正につながる何らかの計算又はグラフィカル処理をGPUが実行したことを示してもよい。完了後、GPUの出力がCPUによって処理される。様々な実施形態において、GPUが、サーフェイスの物理的な位置のいずれかの位置からの読み込み又はいずれかの位置への書き込みを行うことによってサーフェイスを処理するとき、処理は、GPUの内部バッファ及びキャッシュで生じ得る。したがって、GPU処理が完了した後、GPUの内部バッファ及びキャッシュ内のデータは、LLCと一貫性がある。
【0048】
図3及び
図4の処理フロー図は、方法300及び方法400のブロックが、いずれかの特定の順序で実行されるべきこと及び全てのブロックが全ての場合に含まれるべきことを示すようには意図されていない。さらに、具体的な実装の詳細に応じて、任意の数の追加のブロックが方法300及び方法400に含まれてもよい。さらに、本明細書で説明される方法はCPUを含むが、メモリは、別のCPU又は直接メモリアクセス(DMA)コントローラのような任意のI/Oデバイスとの間で共有され得る。
【0049】
図5は、諸実施形態に係るコンピューティングデバイスのCPUとGPUとの間の共有仮想メモリのためのコードを格納する、有形の非一時的コンピュータ読取可能媒体500を示すブロック図である。有形の非一時的コンピュータ読取可能媒体500は、コンピュータバス504を介してプロセッサ502によってアクセスされ得る。さらに、有形の非一時的コンピュータ読取可能媒体500は、本明細書で説明される方法を実行するようプロセッサ502に指示するように構成されるコードを含むことができる。
【0050】
図5に示されるように、本明細書で議論される様々なソフトウェアコンポーネントが、有形の非一時的コンピュータ読取可能媒体500に格納され得る。例えばサーフェイス割り当てモジュール506は、コンピューティングデバイスのメモリ内において、複数の物理メモリページを含むサーフェイスを割り当てるように構成され得る。仮想化モジュール508は、CPU仮想アドレス空間及び該CPU仮想アドレス空間に相当するGPU仮想アドレス空間を作成するように構成され得る。GPU仮想アドレス空間は、サーフェイスがグラフィクスメモリ内にページングされると、作成され得る。マッピングモジュール510は、サーフェイス内の物理的な位置を、CPUアドレステーブル及びGPUアドレステーブル内の仮想メモリアドレスにマッピングするように構成され得る。
【0051】
さらに、ピン止めモジュール512は、サーフェイス内の物理的な位置が変更されるのを防ぐように、サーフェイスをピン止めするように構成され得る。
【0052】
図5のブロック図は、有形の非一時的コンピュータ読取可能媒体500が
図5に示されるコンポーネント全てを含むべきことを示すようには意図されていない。具体的な実装の詳細に応じて、任意の数の追加のコンポーネントが有形の非一時的コンピュータ読取可能媒体500に含まれてもよい。
【0053】
図6は、共有される物理メモリを実装するための例示のシステム600を示すブロック図である。同様の番号が付されたアイテムは、
図1、
図2A及び
図2Bに関して説明したものである。一部の実施形態において、システム600は、メディアシステムである。加えてシステム600を、パーソナルコンピュータ(PC)、ラップトップコンピュータ、ウルトララップトップコンピュータ、タブレット、タッチパッド、ポータブルコンピュータ、ハンドヘルドコンピュータ、パルムトップコンピュータ、パーソナルデジタルアシスタント(PDA)、携帯電話、携帯電話/PDAの組合せ、テレビジョン、スマートデバイス(例えばスマートフォン、スマートタブレット又はスマートテレビ)、モバイルインターネットデバイス(MID)、メッセージングデバイス、データ通信デバイス等に組み込んでもよい。
【0054】
様々な実施形態において、システム600は、ディスプレイ604に結合されるプラットフォーム602を備える。プラットフォーム602は、コンテンツサービスデバイス606又はコンテンツ配信デバイス608又は他の同様のコンテンツソースのようなコンテンツデバイスから、コンテンツを受信することがある。1つ又は複数のナビゲーション機能を含むナビゲーションコントローラ610は、例えばプラットフォーム602及び/又はディスプレイ604と対話するのに使用され得る。これらのコンポーネントの各々を、以下で詳述する。
【0055】
プラットフォーム602は、チップセット612、中央処理ユニット(CPU)102、メモリデバイス104、ストレージデバイス120、グラフィクスサブシステム614、アプリケーション124及び/又は無線機616の任意の組合せを含んでよい。チップセット612は、CPU102、メモリデバイス104、ストレージデバイス120、グラフィクスサブシステム614、アプリケーション124及び/又は無線機616の間の相互通信を提供し得る。例えばチップセット612は、ストレージデバイス120との相互通信を提供することが可能なストレージアダプタ(図示せず)を含んでもよい。
【0056】
CPU102は、複数命令セットコンピュータ(CISC)又は縮小命令セットコンピュータ(RISA)プロセッサ、x86命令セット互換プロセッサ、マルチコアあるいは任意の他のマイクロプロセッサ又は中央処理ユニット(CPU)として実装され得る。一部の実施形態において、CPU102は、デュアルコアプロセッサ、デュアルコアモバイルプロセッサ等を含む。
【0057】
メモリデバイス104は、これらに限られないが、ランダムアクセスメモリ(RAM)、動的RAM(DRAM)又は静的RAM(RAM)のような揮発性メモリとして実装され得る。
【0058】
ストレージデバイス120は、これらに限られないが、磁気ディスクドライブ、光ディスクドライブ、テープドライブ、内部ストレージデバイス、外付けストレージデバイス、フラッシュメモリ、バッテリバックアップSDRAM(同期DRAM)及び/又はネットワークアクセス可能なストレージデバイスのような非揮発性ストレージデバイスとして実装され得る。一部の実施形態において、ストレージデバイス120は、例えば複数のハードドライブが含まれるときに価値あるデジタルメディアのために、保護が強化されたストレージ性能を向上させる技術を含む。
【0059】
グラフィクスサブシステム614は、表示用に静止画又はビデオのような画像の処理を実行することができる。グラフィクスサブシステム614は、例えばGPU108のようなグラフィクス処理ユニット(GPU)又はビジュアル処理ユニット(VPU)を含み得る。アナログ又はデジタルインタフェースを使用して、グラフィクスサブシステム614とディスプレイ604を通信可能に結合することができる。例えばインタフェースは、高解像度マルチメディアインタフェース(HDMI(登録商標))、ディスプレイポート、無線HDMI及び/又は無線HD準拠技術のうちのいずれかとすることができる。グラフィクスサブシステム614を、CPU102又はチップセット612に統合してもよい。あるいは、グラフィクスサブシステム614は、チップセット612に通信可能に結合されるスタンドアロンのカードであってもよい。
【0060】
本明細書で説明されるグラフィクス及び/又はビデオ処理技術は、様々なハードウェアアーキテクチャにいて実装され得る。例えばグラフィクス及び/又はビデオの機能性をチップセット612内に統合してもよい。あるいは、別個のグラフィクス及び/又はビデオプロセッサを使用してもよい。更に別の実施形態として、グラフィクス及び/又はビデオ機能が、マルチコアプロセッサを含め、汎用プロセッサによって実装されてもよい。更なる実施形態において、これらの機能は、家庭用電子機器において実装されてもよい。
【0061】
無線機616は、様々な適切な無線通信技術を使用して信号を送受信することができる1つ又は複数の無線機を含み得る。そのような技術は、1つ又は複数の無線ネットワークにわたる通信を含むことがある。例示的な無線ネットワークには、無線ローカルエリアネットワーク(WLAN)、無線パーソナルエリアネットワーク(WPAN)、無線メトロポリタンエリアネットワーク(WMAN)、セルラネットワーク及び衛星ネットワーク等が含まれる。そのようなネットワークにわたる通信において、無線機616は、任意のバージョンの1つ又は複数の適用可能な規格に従って動作し得る。
【0062】
ディスプレイ604は、任意のテレビタイプのモニタ又はディスプレイを含み得る。例えばディスプレイ604は、コンピュータディスプレイスクリーン、タッチスクリーンティスプレイ、ビデオモニタ、テレビ等を含み得る。ディスプレイ604はデジタル及び/又はアナログであってよい。一部の実施形態において、ディスプレイ604は、ホログラフィックディスプレイである。また、ディスプレイ604は、視覚的投影を受け取ることができる透明な面としてもよい。そのような投影は、様々な形式の情報、画像及び/又は対象物等を伝達することが可能である。例えばそのような投影は、モバイル拡張現実(MAR:mobile augmented reality)アプリケーションのための視覚的オーバレイとしてもよい。1つ又は複数のアプリケーション124の制御の下、プラットフォーム602は、ユーザインタフェース618をディスプレイ604上に表示することができる。
【0063】
コンテンツサービスデバイス606は、任意のナショナルサービス、インターナショナルサービス及び/又は独立サービスによってホストされることがあり、したがってプラットフォーム602から、例えばインターネットを介してアクセス可能である。コンテンツサービスデバイス606は、プラットフォーム602及び/又はディスプレイ604に結合され得る。プラットフォーム602及び/又はコンテンツサービスデバイス606は、ネットワーク142に結合されて、ネットワーク142との間でメディア情報を通信(例えば送信及び/又は受信)することができる。コンテンツ配信デバイス608も、プラットフォーム602及び/又はディスプレイ604に結合され得る。
【0064】
コンテンツサービスデバイス606は、ケーブルテレビボックス、パーソナルコンピュータ、ネットワーク、電話、デジタル情報又はデジタル情報を配信することができるインターネット対応デバイスを含み得る。さらに、コンテンツサービスデバイス606は、コンテンツプロバイダとプラットフォーム602又はディスプレイ604との間で、ネットワーク142を経由するか直接に、コンテンツを一方向又は双方向で通信することができる任意の他の同様のデバイスを含み得る。コンテンツは、システム600内のコンポーネントのいずれか1つとの間で、及びネットワーク142を介してコンテンツプロバイダとの間で、一方向及び/又は双方向に通信されてよいことが認識されよう。コンテンツの例には、例えばビデオ、音楽、医療及びゲーム情報等を含め、任意のメディア情報が含まれ得る。
【0065】
コンテンツサービスデバイス606は、メディア情報、デジタル情報又は他のコンテンツを含め、ケーブルテレビ番組のようなコンテンツを受信し得る。コンテンツプロバイダの例には、特に、任意のケーブル若しくは衛星テレビ又は無線又はインターネットコンテンツのプロバイダが含まれ得る。
【0066】
一部の実施形態において、プラットフォーム602は、1つ又は複数のナビゲーション機能を含むナビゲーションコントローラ610から、制御信号を受信する。コントローラ610のナビゲーション機能を使用して、例えばユーザインタフェース618と対話することができる。ナビゲーションコントローラ610は、ポインティングデバイスとすることができ、該ポインティングデバイスは、ユーザが空間的(例えば連続的な多次元の)データをコンピュータに入力することができる、コンピュータハードウェアコンポーネント(特にヒューマンインタフェースデバイス)とすることができる。グラフィカルユーザインタフェース(GUI)のような多くのシステム並びにテレビ及びモニタは、ユーザが、物理的なジェスチャを使用してコンピュータ又はテレビへのデータを制御及び提供するのを可能にする。物理的なジェスチャは、これらには限られないが、顔の表情、顔の動き、様々な手足の動き、身体の動き、ボディランゲージ又はこれらの任意の組合せを含む。このような物理的なジェスチャを認識して、コマンド又は命令に変換することができる。
【0067】
ナビゲーションコントローラ610のナビゲーション機能の動きは、ディスプレイ604上で、ポインタ、カーソル、フォーカスリング又はディスプレイ604上に表示される他の視覚的インジケータの動きによって返されることがある。例えばアプリケーション124の制御の下、ナビゲーションコントローラ610上に配置されるナビゲーション機能を、例えばユーザインタフェース618上に表示される仮想ナビゲーション機能にマップしてもよい。一部の実施形態において、コントローラ610を、別個のコンポーネントとするのではなく、プラットフォーム602及び/又はディスプレイ604に統合してもよい。
【0068】
システム600は、ドライバ(図示せず)を含んでもよく、該ドライバは、ユーザが、プラットフォーム602を、最初のブートアップの後、例えばイネーブルされると、ボタンのタッチですぐにターンオン及びターンオフできるようにする技術を含む。プログラムロジックは、プラットフォーム602がターン「オフ」されるとき、プラットフォーム602が、コンテンツをメディアアダプタ又は他のコンテンツサービスデバイス606又はコンテンツ配信デバイス608へストリーミングするのを可能にする。加えて、チップセット612は、例えば5.1サラウンドオーディオ及び/又は高品位7.1サラウンドサウンドオーディオ用のハードウェア及び/又はソフトウェアサポートを備えてもよい。ドライバは、統一的なグラフィクスプラットフォームのためのグラフィクスドライバを含み得る。一部の実施形態において、グラフィクスドライバは、周辺コンポーネント相互接続エクスプレス(PCIe)グラフィクスカードを含む。
【0069】
様々な実施形態において、システム600内に示されるコンポーネントのいずれか1つ又は複数を統合してもよい。例えばプラットフォーム602とコンテンツサービスデバイス606とを統合してもよく、プラットフォーム602とコンテンツ配信デバイス608とを統合してもよく、あるいはプラットフォーム602と、コンテンツサービスデバイス606と、コンテンツ配信デバイス608とを統合してもよい。一部の実施形態において、プラットフォーム602とディスプレイ604は一体型のユニットであってよい。例えばディスプレイ604とコンテンツサービスデバイス606とを統合してもよく、ディスプレイ604とコンテンツ配信デバイス608とを統合してもよい。 システム600は、無線システム又は有線システムとして実装され得る。無線システムとして実装されるとき、システム600は、1つ又は複数のアンテナ、送信機、受信機、送受信機、増幅器、フィルタ、制御ロジック等のような無線共有媒体を介して通信するのに適したコンポーネント及びインタフェースを含み得る。無線共有媒体の例には、RFスペクトルのような無線スペクトルの部分が含まれ得る。有線システムとして実装されるとき、システム600は、入出力(I/O)アダプタ、対応する有線通信媒体によりI/Oアダプタへ接続する物理コネクタ、ネットワークインタフェースカード(NIC)、ディスクコントローラ、ビデオコントローラ、オーディオコントローラ等のような有線通信媒体を介して通信するのに適したコンポーネント及びインタフェースを含み得る。有線通信媒体の例には、ワイヤ、ケーブル、金属導線、プリント基板(PCB)、バックプレーン、スイッチ構成、半導体金属、ツイストペア線、同軸ケーブル、ファイバ光学等が含まれ得る。
【0070】
プラットフォーム602は、情報を通信する1つ又は複数の論理又は物理チャネルを確立してもよい。この情報には、メディア情報及び制御情報が含まれ得る。メディア情報は、ユーザに向けられたコンテンツを表す任意のデータを指してよい。コンテンツの例には、例えば音声会話からのデータ、ビデオ会議、ストリーミングビデオ、電子メール(eメール)メッセージ、音声メールメッセージ、英数字文字、グラフィック、画像、ビデオ、テキスト等が含まれ得る。音声会話からのデータは、例えばスピーチ情報、無音の期間、背景雑音、快適雑音、トーン等とすることができる。制御情報は、コマンド、命令又は自動システムに向けられた制御ワードを表す任意のデータを指してよい。例えば制御情報を使用して、システム中を通じてメディア情報をルーティングするか、メディア情報を所定の手法で処理するようノードに指示してもよい。しかしながら、諸実施形態は、
図6に図示され、説明される要素又はコンテキストに限定されない。
【0071】
図7は、
図6のシステム600が具現化され得る小さなフォームファクタデバイス700の実施形態を図示している。同様の番号が付されたアイテムは、
図6に関連して説明される。一部の実施形態において、例えばデバイス700は、無線機能を有するモバイルデバイスとして実装されてよい。モバイルコンピューティングデバイスは、処理システムと、例えば1つ又は複数のバッテリのようなモバイル電力ソース又は電源とを有する任意のデバイスを指すことがある。
【0072】
上述のように、モバイルコンピューティングデバイスの例には、パーソナルコンピュータ(PC)、ラップトップコンピュータ、ウルトララップトップコンピュータ、タブレット、タッチパッド、ポータブルコンピュータ、ハンドヘルドコンピュータ、パルムトップコンピュータ、パーソナルデジタルアシスタント(PDA)、携帯電話、携帯電話/PDAの組合せ、テレビジョン、スマートデバイス(例えばスマートフォン、スマートタブレット又はスマートテレビ)、モバイルインターネットデバイス(MID)、メッセージングデバイス、データ通信デバイス等が含まれ得る。
【0073】
モバイルコンピューティングデバイスの例には、腕時計型コンピュータ、フィンガコンピュータ、リング型コンピュータ、眼鏡型コンピュータ、ベルトクリップ型コンピュータ、アームバンド型コンピュータ、靴型コンピュータ、衣服型コンピュータ又は任意の他の適切なタイプの装着可能なコンピュータのような、人間が身に着けるように構成されるコンピュータも含まれ得る。例えばモバイルコンピューティングデバイスは、コンピュータアプリケーションを実行することができ、さらに音声通信及び/又はデータ通信も可能なスマートフォンとして実装され得る。一部の実施形態は、例としてスマートフォンとして実装されるモバイルコンピューティングデバイスを用いて説明されるが、他の実施形態は、他の無線のモバイルコンピューティングデバイスを使用して実装されてもよいことが認識されよう。
【0074】
図7に示されるように、デバイス700は、ハウジング702、ディスプレイ704、入出力(I/O)デバイス706及びアンテナ708を含み得る。デバイス700はナビゲーション機能710も含み得る。ディスプレイ704は、モバイルコンピューティングデバイスに適した情報を表示するための任意の適切なディスプレイユニットを含み得る。I/Oデバイス706は、モバイルコンピューティングデバイスへ情報を入力するための任意の適切なI/Oデバイスを含むことができる。例えばI/Oデバイス706は、英数字のキーボード、数字のキーパッド、タッチパッド、入力キー、ボタン、スイッチ、ロッカースイッチ、マイクロフォン、スピーカ、音声認識デバイス及びソフトウェア等を含んでよい。情報はマイクロフォンによってデバイス700へ入力されてもよい。そのような情報は、音声認識デバイスによってデジタル化され得る。
【0075】
(例1)
コンピューティングデバイスの中央処理ユニット(CPU)とグラフィクス処理ユニット(GPU)との間の共有仮想メモリのための方法を、ここで説明する。本方法は、物理メモリ内でサーフェイスを割り当てるステップを含む。CPU仮想アドレス空間が作成されると、前記サーフェイスは、CPUページテーブル内において前記CPU仮想アドレス空間にマッピングされる。本方法はまた、前記CPU仮想アドレス空間に相当するGPU仮想アドレス空間を作成するステップと、GPUページテーブル内において、前記サーフェイスを前記GPU仮想アドレス空間にマッピングするステップと、前記サーフェイスをピン止めするステップを含む。
【0076】
メモリは、CPUメモリからGPUメモリへデータをコピーすることなく、CPUとGPUとの間で前記サーフェイスを介して共有される。前記サーフェイスは、コンピューティングデバイスの前記CPU上で実行しているアプリケーションからの入力に応答して割り当てられる。さらに、本方法は、コンピューティングデバイスのドライバによって実行されてよい。
【0077】
CPUのキャッシュ及びGPUのキャッシュからのデータは、CPUとGPUとの間で共有される最終レベルのキャッシュ(LLC)と一貫性を有する。演算はCPUからGPUにオフロードされ、この演算は、前記GPU内において実行される。完了信号が前記CPUに送信される。前記完了信号は、結果として前記サーフェイス内のデータの修正につながる何らかの計算を前記GPUが実行したという指示を含む。さらに、デバイスドライバが、CPUとGPUとの間でデータの処理を同期させることもある。
【0078】
(例2)
コンピューティングデバイスをここで説明する。当該コンピューティングデバイスは、格納された命令を実行するように適合される中央処理ユニット(CPU)と、命令を格納するストレージデバイスとを含む。ストレージデバイスは、CPUによって実行されると、物理メモリ内でサーフェイスを割り当てるように適合されるプロセッサ実行可能コードを含む。CPU仮想アドレス空間が作成されると、前記サーフェイスは、CPUページテーブル内において前記CPU仮想アドレス空間にマッピングされる。さらに、CPU仮想アドレス空間に相当するGPU仮想アドレス空間が作成され、GPUページテーブル内において、前記サーフェイスが前記GPU仮想アドレス空間にマッピングされる。前記プロセッサ実行可能なコードは、前記サーフェイスをピン止めするようにも適合される。
【0079】
物理メモリは、データをCPUメモリからGPUメモリへデータをコピーすることなく、前記CPUと前記GPUとの間で共有される。さらに、前記CPUと前記GPUは、コンピューティングデバイス内の同じダイス上に配置される。前記CPUと前記GPUは、最終レベルのキャッシュ(LLC)を共有し、該LLCは、前記CPU又はGPUのいずれかのキャッシュからデータを取り出すことができる。前記CPUと前記GPUは、統合メモリアーキテクチャ(UMA)を含むことがある。
【0080】
前記プロセッサ実行可能なコードは、当該コンピューティングデバイスの前記CPU上で実行しているアプリケーションからの入力に応答して、前記サーフェイスを割り当てるように適合されることがある。前記CPUページテーブル及び前記GPUページテーブル内の仮想メモリアドレスは、仮想メモリアドレスを物理アドレスへ変換することによって、前記サーフェイス内の物理的な位置にマップされ得る。ドライバが、前記プロセッサ実行可能なコードの実行を開始するように構成されることがある。さらに、当該コンピューティングデバイスは、無線機及びディスプレイを更に備え、該無線機及びディスプレイは、少なくとも前記中央処理ユニットに通信可能に結合され得る。
【0081】
(例3)
命令を有する少なくとも1つの非一時的マシン読取可能媒体をここで説明する。コンピューティングデバイスにおいて実行されたことに応答して、前記命令は、前記コンピューティングデバイスに、物理メモリ内でサーフェイスを割り当てることを実行させる。CPU仮想アドレス空間が生成され、前記サーフェイスが、CPUページテーブル内において前記CPU仮想アドレス空間にマッピングされる。前記命令はまた、前記CPU仮想アドレス空間に相当するGPU仮想アドレス空間を生成し、GPUページテーブル内において、前記サーフェイスを前記GPU仮想アドレス空間にマッピングする。さらに、前記サーフェイスがピン止めされる。
【0082】
前記物理メモリは、CPUメモリからGPUメモリへデータをコピーすることなく、CPUとGPUとの間で共有される。さらぶ、前記命令は、CPUのキャッシュ及びGPUのキャッシュからのデータが、最終レベルのキャッシュ(LLC)と一貫性を有するようにさせる。加えて、前記命令は、前記コンピューティングデバイスに、該コンピューティングデバイスのCPU上で実行しているアプリケーションからの入力に応答して、前記サーフェイスの割り当てを行われることもある。
【0083】
上記の例における詳細は、1つ又は複数の実施形態のいずれかにおいても用いられることがあることが理解されよう。例えば上述のコンピューティングデバイスについての全てのオプションの機能が、説明される方法又はコンピュータ読取可能媒体のいずれかに対して実装されてもよい。さらに、本明細書においてフロー図及び/又は状態図を用いて実施形態を説明してきたが、本発明は、これらの図又は対応する説明に限定されない。例えばフローは、それぞれ図示されたボックス若しくは状態又は図示及び説明されたものと正確に同じ順序で進む必要はない。
【0084】
本発明は、本明細書で列挙された特定の詳細に制限されない。実際、本開示の利点を享受する当業者には、上述の説明及び図面から多くの他の変更を本発明の範囲内で行うことが可能であることが認識されるであろう。したがって、いずれかの補正を含め、本発明の範囲を定義するのは特許請求の範囲である。