(57)【要約】      （修正有）【課題】コンピューティングデバイスの中央処理ユニット（ＣＰＵ）とグラフィクス処理ユニット（ＧＰＵ）との間の共有仮想メモリのための方法及びシステムを提供する。【解決手段】サーフェイスを物理メモリ内で割り当てるステップを含む。ＣＰＵ仮想アドレス空間が作成され、サーフェイスは、ＣＰＵページテーブル内において、ＣＰＵ仮想アドレス空間にマッピングされる。また、ＣＰＵ仮想アドレス空間に相当するＧＰＵ仮想アドレス空間を作成するステップと、ＧＰＵページテーブル内において、サーフェイスをＧＰＵ仮想アドレス空間にマッピングするステップと、サーフェイスをピン止めするステップを含む。【選択図】図３
2018139128.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイスによって実行されると、該コンピューティングデバイスに、
物理メモリ内でサーフェイスを作成することであって、前記サーフェイスは、中央処理ユニット（ＣＰＵ）とグラフィクス処理ユニット（ＧＰＵ）との間で共有され、前記サーフェイス上のデータは、データをコピーすることなく自動的にアクセス可能であり、前記サーフェイスはＣＰＵ仮想アドレス空間内でアクセス可能であることと、
ＧＰＵ仮想アドレスを前記サーフェイスに割り当てることであって、前記ＧＰＵ仮想アドレスはＧＰＵ仮想アドレス空間内であり、前記ＧＰＵと前記ＣＰＵは共通の共有アドレス空間を共有することと、
前記サーフェイスをＧＰＵページテーブル内の前記ＧＰＵ仮想アドレス空間にマッピングすることであって、前記ＧＰＵページテーブルは、ＣＰＵページテーブルと同期され、前記ＧＰＵ仮想アドレス空間への前記サーフェイスのマッピングは、前記サーフェイスが割り当てられている間変化しないことと、
を含む動作を実行させる、コンピュータプログラム。
【請求項２】
前記ＧＰＵ及び前記ＣＰＵは、共通の物理及び仮想アドレス空間を共有し、前記動作は、ＣＰＵメモリからＧＰＵメモリへデータをコピーすることなく、前記サーフェイスを介して前記ＣＰＵと前記ＧＰＵとの間で物理メモリを共有することを更に含む、
請求項１に記載のコンピュータプログラム。
【請求項３】
前記動作は、前記ＣＰＵで実行中のアプリケーションからの入力に応答して、前記サーフェイスのためにメモリを割り当てることを更に含む、
請求項１に記載のコンピュータプログラム。
【請求項４】
前記動作は、前記ＣＰＵ仮想アドレス空間及び前記ＧＰＵ仮想アドレス空間を変換して、前記サーフェイス内の対応する物理的な位置を決定することを更に含む、
請求項１に記載のコンピュータプログラム。
【請求項５】
請求項１乃至４のいずれか一項に記載のコンピュータプログラムを記録する１つ以上の非一時的なコンピュータ読取可能媒体。
【請求項６】
データ処理システムであって、
格納された命令を実行するように適合される中央処理ユニット（ＣＰＵ）と、
同じダイ上で前記ＣＰＵと結合されるグラフィクス処理ユニット（ＧＰＵ）と、
前記ＣＰＵによって実行されると、前記ＣＰＵに、
物理メモリ内でサーフェイスを作成することであって、前記サーフェイスは、ＣＰＵとＧＰＵとの間で共有され、前記サーフェイス上のデータは、データをコピーすることなく自動的にアクセス可能であり、前記サーフェイスはＣＰＵ仮想アドレス空間内でアクセス可能であることと、
ＧＰＵ仮想アドレスを前記サーフェイスに割り当てることであって、前記ＧＰＵ仮想アドレスはＧＰＵ仮想アドレス空間内であり、前記ＧＰＵと前記ＣＰＵは共通の共有アドレス空間を共有することと、
前記サーフェイスをＧＰＵページテーブル内の前記ＧＰＵ仮想アドレス空間にマッピングすることであって、前記ＧＰＵページテーブルは、ＣＰＵページテーブルと同期され、前記サーフェイスについてマップされるアドレスは、前記サーフェイスが割り当てられている間変化しないことと、
を実行させる命令を格納するストレージデバイスと、
を備える、データ処理システム。
【請求項７】
前記ＧＰＵ及び前記ＣＰＵは、共通の物理及び仮想アドレス空間を共有し、前記ＣＰＵは、ＣＰＵメモリからＧＰＵメモリへデータをコピーすることなく、前記サーフェイスを介して前記ＣＰＵと前記ＧＰＵとの間で物理メモリを共有する、
請求項６に記載のデータ処理システム。
【請求項８】
前記命令は前記ＣＰＵに、前記ＣＰＵで実行中のアプリケーションからの入力に応答して、前記サーフェイスのためにメモリを割り当てさせる、
請求項６に記載のデータ処理システム。
【請求項９】
前記命令は前記ＣＰＵに、ＣＰＵ仮想アドレス空間内の仮想メモリアドレスを変換して、前記サーフェイス内の対応する物理的な位置を決定させる、
請求項６に記載のデータ処理システム。
【請求項１０】
共有仮想メモリのための方法であって：
物理メモリ内でサーフェイスを作成することであって、前記サーフェイスは、中央処理ユニット（ＣＰＵ）とグラフィクス処理ユニット（ＧＰＵ）との間で共有され、前記サーフェイス上のデータは、データをコピーすることなく自動的にアクセス可能であり、前記サーフェイスはＣＰＵ仮想アドレス空間内でアクセス可能であることと、
ＧＰＵ仮想アドレスを前記サーフェイスに割り当てることであって、前記ＧＰＵ仮想アドレスはＧＰＵ仮想アドレス空間内であり、前記ＧＰＵと前記ＣＰＵは共通の共有アドレス空間を共有することと、
前記サーフェイスをＧＰＵページテーブル内の前記ＧＰＵ仮想アドレス空間にマッピングすることであって、前記ＧＰＵページテーブルは、ＣＰＵページテーブルと同期され、前記サーフェイスについての前記のマッピングは、前記サーフェイスが割り当てられている間変化しないことと、
を備える、方法。
【請求項１１】
前記ＧＰＵ及び前記ＣＰＵは、共通の物理及び仮想アドレス空間を共有し、当該方法は、ＣＰＵメモリからＧＰＵメモリへデータをコピーすることなく、前記サーフェイスを介して前記ＣＰＵと前記ＧＰＵとの間で物理メモリを共有することを更に含む、
請求項１０に記載の方法。
【請求項１２】
前記ＣＰＵで実行中のアプリケーションからの入力に応答して、前記サーフェイスのためにメモリを割り当てることを更に含む、
請求項１０に記載の方法。
【請求項１３】
前記ＣＰＵ仮想アドレス空間及び前記ＧＰＵ仮想アドレス空間を変換して、前記サーフェイス内の対応する物理的な位置を決定することを更に含む、
請求項１０に記載の方法。
【請求項１４】
当該方法は、前記ＣＰＵ上で実行中のＧＰＵドライバによって実行される、
請求項１０に記載の方法。
【請求項１５】
コンピューティングデバイスであって：
物理メモリ内でサーフェイスを作成するための作成手段であって、前記サーフェイスは、中央処理ユニット（ＣＰＵ）とグラフィクス処理ユニット（ＧＰＵ）との間で共有され、前記サーフェイス上のデータは、データをコピーすることなく自動的にアクセス可能であり、前記サーフェイスはＣＰＵ仮想アドレス空間内でアクセス可能である、作成手段と、
ＧＰＵ仮想アドレスを前記サーフェイスに割り当てるための割当て手段であって、前記ＧＰＵ仮想アドレスはＧＰＵ仮想アドレス空間内であり、前記ＧＰＵと前記ＣＰＵは共通の共有アドレス空間を共有する、割当て手段と、
前記サーフェイスをＧＰＵページテーブル内の前記サーフェイスを前記ＧＰＵ仮想アドレス空間にマッピングするためのマッピング手段であって、前記ＧＰＵページテーブルは、ＣＰＵページテーブルと同期され、前記ＧＰＵ仮想アドレスへの前記サーフェイスの前記のマッピングは、前記サーフェイスが割り当てられている間変化しない、マッピング手段と、
を備える、コンピューティングデバイス。
【請求項１６】
前記ＧＰＵ及び前記ＣＰＵは、共通の物理及び仮想アドレス空間を共有し、ＣＰＵメモリからＧＰＵメモリへデータをコピーすることなく、前記サーフェイスを介して前記ＣＰＵと前記ＧＰＵとの間で物理メモリを共有するための手段を更に含む、
請求項１５に記載のコンピューティングデバイス。
【請求項１７】
前記ＣＰＵで実行中のアプリケーションからの入力に応答して、前記サーフェイスのためにメモリを割り当てる手段を更に含む、
請求項１５に記載のコンピューティングデバイス。
【請求項１８】
前記ＣＰＵ仮想アドレス空間及び前記ＧＰＵ仮想アドレス空間を変換して、前記サーフェイス内の対応する物理的な位置を決定する手段を更に含む、
請求項１５に記載のコンピューティングデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピューティングシステム内の中央処理ユニット（ＣＰＵ）とグラフィクス処理ユニット（ＧＰＵ）との間の共有仮想メモリに関する。より具体的には、本発明は、ＣＰＵとＧＰＵとの間で仮想メモリを共有することに関する。
【背景技術】
【０００２】
最近のＩ／Ｏデバイスは、多くのＣＰＵのコンピュータ処理能力に匹敵するコンピュータ処理能力を含むことがある。その結果、従来はＣＰＵによって実行されていた計算タスクの一部が、コンピューティングデバイスのＧＰＵのようなＩ／Ｏデバイスにオフロードされることがあり、これによりＣＰＵの効率は向上する。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
現在のオペレーティングシステム及びグラフィクスインタフェースは、ＧＰＵを、ＣＰＵと同様にプロセッサとして管理するのではなく、Ｉ／Ｏデバイスとして管理する。ＧＰＵをＩ／Ｏデバイスとして管理することにより、ＣＰＵとＧＰＵは、別個の物理アドレスドメイン及び別個の仮想アドレス指定スキーマを用いる物理的なメモリを有する。計算タスクをＧＰＵにオフロードするとき、データが、ＣＰＵの物理アドレスドメインからＧＰＵの物理アドレスドメインにコピーされる。ＧＰＵは、データ構造をトラバースするよう、データを再構造化するかコンパイラを構成することがある。加えて、ＧＰＵは、ＧＰＵ自身の仮想アドレス指定スキーマを使用して、コピーされたデータにアクセスすることがある。
【０００４】
従来はコンピューティングデバイスのＣＰＵによって実行されていた計算タスクの一部を、コンピューティングデバイスのＧＰＵにオフロードすることによって、ＣＰＵの効率が向上し得る。タスクをＧＰＵにオフロードするためには、データがＣＰＵの物理メモリとＧＰＵの物理メモリとの間で転送されることがある。このデータは、ツリーやリンクリストのような、ＣＰＵに適した技術を使用して構造化され得る。ツリー及びリンクリストは、ポインタベースのデータ構造であり、この場合、ＣＰＵは、様々なノードにおいてポインタを使用してツリー又はリンクリストをトラバースする。例えばリンクリストは、一群のノードを含むデータ構造である。各ノードは２つのフィールド、すなわち、整数値と、リスト内の次のノードへのリンクとを含む。最後のノードは、リストの終了を表す終端子（terminator）にリンクされる。
【０００５】
リンクリストをトラバースするために、ＧＰＵは典型的に、データを再構造化するか、リストをトラバースするようＧＰＵコンパイラを構成する。ＧＰＵはまた、データがＧＰＵメモリにコピーされた後に該データにアクセスするために、ポインタベースの構造を通じてポインタ追跡（pointer  chasing）を行う。ポインタ追跡とは、所望のポインタへアクセスするためにポインタの多くのレベルをトラバースするプロセスを指す。計算タスクをＧＰＵにオフロードするときに生じるデータの再構造化、コンパイラの構成及びポインタ追跡は、タスクをＧＰＵにオフロードすることによって得られる効率を低下させることがある。したがって、本明細書で説明される実施形態は、コンピューティングデバイスのＧＰＵとＣＰＵとの間で仮想メモリを共有することに関する。仮想メモリは、データを再構造化すること、データを消費するようＧＰＵコンパイラを構成すること及びポインタ追跡を要することなく、共有され得る。
【課題を解決するための手段】
【０００６】
様々な実施形態において、統合メモリアーキテクチャ（ＵＭＡ）は、ＣＰＵとＧＰＵの双方に同じ仮想メモリ及び同じ物理メモリを提供することによって、ＣＰＵとＧＰＵとの間の共有仮想メモリを提供する。諸実施形態において、物理メモリは、ＣＰＵとＧＰＵとの間で分割され得る。さらに、物理メモリは、コンピューティングデバイスのオペレーティングシステムによって割り当てられる、ページングされたシステムメモリとすることができる。加えて、一部の実施形態では、ＣＰＵとＧＰＵが物理的に、同じダイス上に配置される。したがって、ＣＰＵとＧＰＵは、ＧＰＵのアドレス空間からＣＰＵのアドレス空間へ、又はＣＰＵのアドレス空間からＧＰＵのアドレス空間へデータをコピーすることなく、物理メモリ内に含まれるデータを共有することができる。これは、例えばＣＰＵとＧＰＵとの間でデータを共有するための時間及び電力の消費を低減させることにより、計算タスクをＣＰＵからＧＰＵへオフロードするコストを減らすことができる。
【図面の簡単な説明】
【０００７】
【図１】諸実施形態に従って使用され得るコンピューティングデバイスのブロック図である。
【図２Ａ】諸実施形態に係る共有仮想メモリのプロシージャを実装するのに使用され得る統合メモリアーキテクチャ（ＵＭＡ）のスキーマ図である。
【図２Ｂ】諸実施形態に係る共有仮想メモリのためのプロシージャを実装するのに使用され得る統合メモリアーキテクチャ（ＵＭＡ）のスキーマ図である。
【図３】諸実施形態に係る共有仮想メモリのための方法を示す処理フロー図である。
【図４】諸実施形態に係る共有仮想メモリを処理する方法を示す処理フロー図である。
【図５】諸実施形態に係る共有仮想メモリのためのコードを格納する有形の非一時的なコンピュータ読取可能媒体を示すブロック図である。
【図６】共有物理メモリを実装するための例示のシステムを示すブロック図である。
【図７】図６のシステムが具現化され得る小さなフォームファクタデバイスのスキーマ図である。
【発明を実施するための形態】
【０００８】
本開示及び図面を通して同様の構成要素及び機能を示すのに同じ番号が使用される。１００番台の番号は、最初に図１で見られる機能を指し、２００番台の番号は、最初に図２で見られる機能を指し、以下同様である。
【０００９】
以下の説明及び請求項においては、「結合される」及び「接続される」という用語及びその派生語が使用されることがある。これらの用語は、互いに対する類似語として意図されていないことを理解されたい。むしろ、特定の実施形態において、「接続される」という用語は、１つ又は複数の要素が、互いに対して、直接物理的に又は電気的に接触している状態を示すのに用いられることがある。「結合される」という用語は、１つ又は複数の要素が直接物理的に又は電気的に接触している状態にあることを意味することがある。しかしながら、「結合される」という用語は、２つ又は複数の用語が互いに対して直接接触している状態ではないが、相互に協働するか対話する状態にあることを意味することもある。
【００１０】
一部の実施形態は、ハードウェア、ファームウェア及びソフトウェアのいずれか１つ又は組合せで実装され得る。一部の実施形態は、マシン読取可能な媒体に格納される命令として実装されてもよく、このような命令は、コンピューティングプラットフォームによって読み取られて実行され、本明細書で説明されるような演算を実施することができる。マシン読取可能媒体は、例えばコンピュータのようなマシンによって読取可能な形式で情報を格納又は伝送するための任意の機構を含み得る。例えばマシン読取可能媒体は、読取専用メモリ（ＲＯＭ）；ランダムアクセスメモリ（ＲＡＭ）；磁気ディスク記憶媒体；光記憶媒体；フラッシュメモリデバイス；又は電気、光、音響若しくは他の形式の伝搬信号、例えば特に搬送波、静外線信号、デジタル信号若しくは信号を送受信するインタフェースを含み得る。
【００１１】
実施形態は、実装例又は実施例である。本明細書における「実施形態」、「一実施形態」、「一部の実施形態」、「様々な実施形態」又は「他の実施形態」への参照は、その実施形態に関連して説明される特定の特徴、構造又は特性が、本発明の少なくとも一部の実施形態に含まれるが、必ずしも全ての実施形態に含まれなくてもよいことを意味する。「実施形態」、「一実施形態」又は「一部の実施形態」という用語の様々な使用は、必ずしも同じ実施形態を示していない。ある実施形態の要素又は態様を、別の実施形態の要素又は態様を組み合せることができる。
【００１２】
本明細書で説明され、図示される必ずしも全てのコンポーネント、特徴、構造、特性等が、特定の１つ又は複数の実施形態に含まれる必要はない。本明細書において、コンポーネント、特徴、構造又は特性が含まれる「ことがある」、「可能性がある」、「ことができる」、「かもしれない」という記載は、例えばその特定のコンポーネント、特徴、構造又は特性が含まれるべきことを必要とはしない。本明細書又は請求項において、「ある（ａ、ａｎ）」要素について言及する場合、これは、その要素が１つのみしか存在しないことを意味するものではない。また、本明細書又は請求項において、「追加の（additional）要素に言及する場合、これは、１つ以上の追加の要素が存在することを除外しない。
【００１３】
一部の実施形態は特定の実装と関連して説明されているが、一部の実施形態によると、他の実装も可能であることに留意されたい。加えて、図面に示されるか及び／又は本明細書で説明される回路要素又は他の特徴の構成及び／又は順序は、図示され説明される特定の方法で構成されなくてもよい。一部の実施形態によると、多くの他の構成も可能である。
【００１４】
図面に示される各システムにおいて、ある事例の要素はそれぞれ、示される要素が異なる及び／又は同様であり得ることを示唆するように、同じ参照番号又は異なる参照番号を有することがある。しかしながら、要素は、異なる実装となり、かつ本明細書で図示又は説明されるシステムの一部又は全てと協働するのに十分に柔軟なものとすることができる。図面に示される様々な要素は、同じものであってもお異なるものであってもよい。どの要素を第１の要素として参照するか、及びどの要素が第２の要素と呼ばれるかは任意である。
【００１５】
図１は、諸実施形態に従って使用され得るコンピューティングデバイス１００のブロック図である。コンピューティングデバイス１００は、例えば特に、ラップトップコンピュータ、デスクトップコンピュータ、タブレットコンピュータ、モバイルデバイス又はサーバとすることができる。コンピューティングデバイス１００は、格納された命令を実行するように構成される中央処理ユニット（ＣＰＵ）１０２に加え、ＣＰＵ１０２によって実行可能な命令を格納するメモリデバイス１０４を含むことができる。ＣＰＵは、バス１０６によってメモリデバイス１０４に結合され得る。加えて、ＣＰＵ１０２は、シングルコアプロセッサ、マルチコアプロセッサ、コンピューティングクラスタ又は任意の数の他の構成とすることができる。さらに、コンピューティングデバイス１００は、１つより多くのＣＰＵ１０２を含んでもよい。ＣＰＵ１０２によって実行される命令は、共有仮想メモリを実装するのに使用され得る。
【００１６】
コンピューティングデバイス１００は、グラフィクス処理ユニット（ＧＰＵ）１０８も含むことができる。ＧＰＵ１０２は、コンピューティングデバイス１００内の入出力デバイスである。図示されるように、ＣＰＵ１０２は、バス１０６を通してＧＰＵ１０８に結合され得る。しかしながら、一部の実施形態では、ＧＰＵ１８は、コンピューティングデバイス１００内のＣＰＵ１０２と同じダイス上に配置される。この手法では、ＣＰＵ１０２とＧＰＵ１０８が物理的に接続されるので、ＣＰＵ１０２とＧＰＵ１０８との間のバス１０６による接続は不要になる。さらに、諸実施形態において、ＣＰＵ１０２とＧＰＵ１０８を、図２に関連して説明されるような統合メモリアーキテクチャ内に含めてもよい。
【００１７】
ＧＰＵ１０８は、コンピューティングデバイス１００内の任意の数のグラフィック処理を実行するように構成され得る。例えばＧＰＵ１０８は、コンピューティングデバイス１００のユーザに表示されるよう、グラフィック画像、グラフィックフレーム、ビデオ等をレンダリング又は操作するように構成され得る。一部の実施形態において、ＧＰＵ１０８は、複数のグラフィックエンジン（図示せず）を含み、この場合、各グラフィックエンジンが、特定のグラフィックタスクを行うか、特定のタイプのワークロードを実行するように構成される。
【００１８】
メモリデバイス１０４は、ランダムアクセスメモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、フラッシュメモリ又は任意の他の適切なメモリシステムを含むことができる。例えばメモリデバイス１０４は、動的ランダムアクセスメモリ（ＤＲＡＭ）を含むことがある。メモリデバイス１０４は、共有仮想メモリを実装するための命令を実行するように構成され得るデバイスドライバ１１０を含むことがある。デバイスドライバ１１０は、ソフトウェア、アプリケーションプログラム、アプリケーションコード等とすることができる。一部の実施形態において、デバイスドライバ１１０は、ユーザモードのドライバである。
【００１９】
メモリデバイス１０４は、マルチレベルキャッシュ１１２も含む。マルチレベルキャッシュ１１２は、最終レベルキャッシュ（ＬＬＣ）１１４と、レベル２キャッシュ１１６と、レベル１キャッシュ１１８とを含む。説明のためにマルチレベルキャッシュ１１２を使用するが、任意のキャッシュをコンピューティングデバイス１００に含めることができる。マルチレベルキャッシュ１１２は、ＣＰＵ１０２に頻繁に使用されるデータの小さなサブセットを格納する、小さくかつ高速なメモリとすることができる。より大きなデータセットをストレージデバイス１２０に格納してもよい。ストレージデバイス１２０は、ハードドライブ、光学ドライブ、サム（thumb）ドライブ、ドライブのアレイ又はこれらの任意の組合せのような物理メモリである。ストレージデバイス１２０は、リモートストレージドライブを含んでもよい。ＣＰＵ１０２がストレージデバイス１２０内に格納されたデータにアクセスする時間は、ＣＰＵ１０２が、メモリ１０４内のマルチレベルキャッシュ１１２にアクセスするのにかかる時間に対して遅い可能性がある。
【００２０】
一部の実施形態において、ＬＬＣ１１４は、ＣＰＵ１０２とＧＰＵ１０８との間で共有されるが、レベル２キャッシュ１１６及びレベル１キャッシュ１１８は、ＧＰＵ１０８がレベル２キャッシュ１１６及びレベル１キャッシュ１１８内にキャッシュされたデータに直接アクセスすることができないように、ＧＰＵ１０８から隠される。しかしながら、ＬＬＣ１１４は、レベル２キャッシュ１１６及びレベル１キャッシュ１１８内に格納されたデータを読み出し、書き込むことができる。これにより、ＧＰＵ１０８が、レベル２キャッシュ１１６及びレベル１キャッシュ１１８にキャッシュされたデータを要求するとき、ＬＬＣ１１４は、ＧＰＵ１０８によって処理するために、レベル２キャッシュ１１６及びレベル１キャッシュ１１８からデータを取り出すことができる。このようにして、ＬＬＣ１１４は、コンピューティングデバイス１００のデータコヒーレンシを保証する。本明細書で説明されるとき、コヒーレンシは、ＣＰＵ１０２とＧＰＵ１０８によってアクセスされているデータが同じであるという状況を指す。したがって、ＣＰＵ１０２は、ＧＰＵ１０８と正しいデータを共有することができるようにするため、ストレージデバイス１２０からのデータがＬＬＣ１１４と一貫性を有することを保証することによって、このストレージデバイス１２０からのデータが、ＬＬＣ１１４、レベル２キャッシュ１１６及びレベル１キャッシュ１１８内で正確に反映されることを保証することになる。
【００２１】
加えて、諸実施形態において、ＣＰＵとＧＰＵはメモリの任意のレベルにアクセスすることができる。しかしながら、ＬＬＣ１１４は最新のデータを含むが、メモリの他のレベルからのデータは古い可能性がある。さらに、諸実施形態において、ＣＰＵとＧＰＵは、任意の相互アクセス可能な記憶位置を用いて、共有仮想メモリを実施することができる。任意の相互アクセス可能な記憶位置には、これらに限られないが、メモリデバイス１０４の任意のエリア、ストレージ１２０の任意のエリア、ネットワーク化された記憶位置、サムドライブ又はこれらの任意の組合せが含まれ得る。
【００２２】
ストレージデバイス１２０は、サーフェイス（surface）１２２及びコンピューティングデバイス１００上で実行するように構成される任意の数のアプリケーション１２４を含む。サーフェイス１２２は、デバイスドライバ１１０によって割り当てられる、物理メモリの指定された部分である。サーフェイスは、該サーフェイス１２２内の物理メモリのコンテンツ上で実行される処理に基づいて更新され得る。諸実施形態において、アプリケーション１２４は、ＣＰＵ１０２によって実行されると、サーフェイスがデバイスドライバ１１０によって割り当てられることを要求し得る。さらに、ＣＰＵ１０２上で動作するアプリケーション１２４は、サーフェイス１２２の所望のサイズ及び特性を指定することにより、アプリケーション１２４によって要求されるメモリ割り当てに応じて、サーフェイス１２２を構成することができる。加えて、サーフェイスの割り当ては、例えばコンピューティングデバイス１００のＣＰＵ１０２からの入力に応答して実施され得る。さらに、諸実施形態において、サーフェイスは、ＬＬＣキャッシュ可能としてマークされる。サーフェイス１２２をＬＬＣキャッシュ可能として指定することにより、サーフェイス１２２内の位置からキャッシュされるデータは、ＬＬＣ１１４へキャッシュされ、これにより、ＬＬＣ内でＣＰＵ１０２とＧＰＵ１０８の双方によりアクセス可能になる。
【００２３】
諸実施形態において、デバイスドライバは、カーネルモードドライバに、サーフェイスが、共有仮想メモリサーフェイスとなることを知らせる。カーネルモードドライバは、サーフェイスのためにＣＰＵ仮想メモリアドレスを保存することになる。カーネルモードドライバが、サーフェイスをグラフィクスメモリにページングすると、カーネルモードドライバは、元のグラフィクス仮想アドレスからのページングを、ＣＰＵアドレスに相当するグラフィクス仮想アドレスへルート変更することができる。さらに、諸実施形態において、仮想グラフィクスアドレスは、所与のアプリケーションだけに属するプライベートのグラフィクスアドレス空間である。
【００２４】
メモリ管理ユニット（ＭＭＵ）１２６を使用して、サーフェイス１２２内に格納されるデータへのアクセスを管理することができる。ＭＭＵ１２６は、ＣＰＵ１０２及びＧＰＵ１０８の仮想アドレス空間を、アドレス空間の様々なページへと分けることができる。ＣＰＵ１０２及びＧＰＵ１０８はそれぞれ、同一の仮想アドレス空間を有する。仮想アドレス空間は、コンピューティングシステム内で動作している様々なアプリケーション１２４を、仮想アドレスの特定のサブセットに対して分離することによって、サーフェイス１２２内に含まれるデータの保護を可能にする。仮想アドレス空間の使用により、あるアプリケーション１２４が別のアプリケーション１２４のデータにアクセスしないことになる。したがって、ＭＭＵ１２６は、ＣＰＵページテーブル１２８及びＧＰＵページテーブル１３０を含む。ＣＰＵページテーブルは、サーフェイス１２２内の物理アドレス位置にマップされるＣＰＵの仮想アドレスを含む。同様に、ＧＰＵページテーブルは、サーフェイス１２２内の物理アドレス位置にマップされるＧＰＵの仮想アドレスを含む。ＧＰＵの仮想アドレスは、ＣＰＵの仮想アドレスに相当する。したがって、本明細書で説明される共有仮想メモリプロシージャでは、ＣＰＵページテーブル１２８は、物理アドレス空間に対するＣＰＵ仮想アドレス空間のマッピングを含み得る。物理アドレス空間は、サーフェイス１２２内の物理的な位置に対応する。同様に、ＧＰＵページテーブル１３０は、同じ物理アドレス空間に対するＧＰＵ仮想アドレス空間のマッピングを含み得る。
【００２５】
様々な実施形態において、ＣＰＵページテーブル１２８からの仮想メモリアドレス及びＧＰＵページテーブル１３０からのグラフィクス仮想メモリアドレスは、翻訳プロシージャを介してサーフェイス１２２の物理メモリページにマップされる。翻訳プロシージャを使用して、仮想メモリアドレスのいずれかを対応する物理アドレスに変換することができる。例えば翻訳プロシージャは、ページテーブルウォークを介して実行されてよい。ページテーブルウォークは、ページテーブル内の仮想メモリアドレスを、そのページテーブル内の物理メモリアドレスに変換する特定の翻訳テーブルに基づいて、実行され得る。加えて、諸実施形態において、翻訳ルックアサイド（look-aside）バッファを使用して、ＣＰＵ及びＧＰＵの仮想アドレスを、それぞれのページテーブル内における物理アドレス空間へ翻訳してもよい。
【００２６】
翻訳又は変換プロシージャが実行された後、サーフェイス１２２はピン止め（pin）される。サーフェイスをピン止めすることとは、物理的な位置及び対応する物理的なアドレスが変更されないように、サーフェイスを保護することを指す。したがって、サーフェイス１２２をピン止めすることは、仮想アドレス空間と物理アドレス空間との間の「ハード」マッピングを保証する。アドレス空間の間のハードマッピングは、サーフェイスがピン止めされた後は変化しないマッピングである。サーフェイスがピン止めされない場合、ページフォルトが生成されるか、サーフェイスの物理的な位置がシフトすると、誤ったデータが処理されることがある。
【００２７】
諸実施形態において、アプリケーション１２４は、データを処理すること等の演算を実行するために、ＣＰＵ１０２において実行され、サーフェイス１２２のようなサーフェイスを要求する。ＣＰＵ１０２は、演算をＧＰＵ１０８にハンドオフすることができる。双方の仮想メモリが等しく、ページテーブルはサーフェイス１２２にマップされているので、ＧＰＵは、サーフェイスにアクセスすることによって、データを別のアドレス空間へコピーすることなく、ＣＰＵ１０２によってオフロードされた演算の即時実行を開始することができる。さらに、データを再構造化する必要がない。演算がＣＰＵ１０２によって完了すると、ＧＰＵ１０８は、演算が完了したことをＣＰＵ１２２に伝えることができる。次いで、ＣＰＵ１０２は、データを元のアドレス空間にコピーして戻す必要なく、データの処理を継続することができる。
【００２８】
アプリケーション１２４によって要求された演算が、ＧＰＵ１０８によって実行されると、サーフェイス１２２に対する修正が生じることがある。本明細書で説明される共有仮想メモリプロシージャによると、そのようなサーフェイス１２２への修正は、ＣＰＵ１０２に十分に可視である。したがって、データは、ＧＰＵ１０８からＣＰＵ１０２へ又はＣＰＵ１０２からＧＰＵ１０８へデータをコピーすることなく、ＧＰＵ１０８とＣＰＵ１０２との間で共有され得る。
【００２９】
ＣＰＵ１０２は、バス１０６を通して、コンピューティングデバイス１００を１つ又は複数の入出力（Ｉ／Ｏ）デバイス１３４に接続するように適合される入出力（Ｉ／Ｏ）デバイスインタフェース１３２に接続され得る。Ｉ／Ｏデバイス２３４は、例えばキーボード及びポインティングデバイスを含むことがあり、ポインティングデバイスは、特にタッチパッド又はタッチスクリーンを含み得る。Ｉ／Ｏデバイス１３４は、コンピューティングデバイス１００のビルトインコンポーネントであってもよく、又はコンピューティングデバイス１００に外部接続されるデバイスであってもよい。
【００３０】
ＣＰＵ１０２は、バス１０６を通して、コンピューティングデバイス１００をディスプレイデバイス１３８に接続するように適合されるディスプレイインタフェース１３６にもリンクされ得る。ディスプレイデバイス１３８は、コンピューティングデバイス１００のビルトインコンポーネントであるディスプレイスクリーンを含み得る。ディスプレイデバイス１３８は、特にコンピューティングデバイス１００に外部接続されるコンピュータモニタ、テレビジョン又はプロジェクタも含み得る。
【００３１】
ネットワークインタフェースコントローラ（ＮＩＣ）１４０は、バス１０６を介して、コンピューティングデバイス１００をネットワーク１４２に接続するように適合され得る。ネットワーク１４２は、特にワイドエリアネットワーク（ＷＡＮ）、ローカルエリアネットワーク（ＬＡＮ）又はインターネットとすることができる。
【００３２】
図１のブロック図は、コンピューティングデバイス１００が、図１に示されるコンポーネントの全てを含むべきことを示すようには意図されていない。さらに、コンピューティングデバイス１００は、具体的な実装の詳細に応じて、図１に示されていない任意の数の追加のコンポーネントを含んでもよい。
【００３３】
図２Ａ及び図２Ｂは、諸実施形態に従って、コンピューティングデバイス１００のＣＰＵ１０２とＧＰＵ１０８との間の共有仮想メモリを実装するのに使用され得る統合メモリアーキテクチャ２００のスキーマを示す。同様の番号が付されたアイテムは、図１に関連して説明されている通りである。ＵＭＡ２００は、例えばコンピューティングデバイス１００のＣＰＵページテーブル１２８、ＧＰＵページテーブル及びサーフェイス１２２を含み得る。
【００３４】
ＵＭＡ２００は、ＣＰＵ１０２とＧＰＵ１０８との間でいずれのタイプのデータもコピーすることなく、ＣＰＵ１０２とＧＰＵ１０８との間の共有仮想メモリを可能にすることができる。さらに、データの再構造化及びコンパイラの構成も行われない。これは、ＣＰＵ１０２とＧＰＵ１０８がサーフェイス１２２を共有し、それぞれのページテーブル内で等しい仮想アドレスを有することができるようにすることによって達成され得る。上述のように、サーフェイス１２２は、物理的なストレージデバイスの一部であってよい。サーフェイスは、任意の数の物理的なメモリ位置２０２を含む。物理的なメモリ位置２０２は、ページングされたメモリフォーマットに編成されてよく、この場合、ページは、サーフェイス１２２内の物理メモリの固定長のブロックである。
【００３５】
ＣＰＵページテーブル１２８は、複数のＣＰＵ仮想メモリアドレス２０４を含み、ＧＰＵページテーブル１３０も、複数のグラフィクス仮想メモリアドレス２０４を含み得る。ＣＰＵ仮想メモリアドレス２０４は、ＣＰＵ仮想アドレス空間を構成し、グラフィクス仮想メモリアドレス２０４は、グラフィクス仮想アドレス空間を構成する。各仮想アドレス空間は、各ページテーブル内の物理アドレス２０６にマッピングされる。したがって、ＣＰＵ仮想メモリアドレス２０４及びグラフィクス仮想メモリアドレス２０４は双方とも、それぞれＣＰＵページテーブル１２８及びＧＰＵページテーブル１３０内の物理アドレス２０６の同じセットにマップされる。
【００３６】
物理アドレス２０６は、ＣＰＵ１０２及びＧＰＵ１０８（図１）が、サーフェイス１２２内の物理的な位置２０２で格納されたデータを処理するのを可能にする。様々な実施形態において、サーフェイス１２２は、アプリケーション１２４（図１）のようなアプリケーションによってアクセスされる特定のＣＰＵ仮想アドレス２０４に基づいて割り当てられる。サーフェイス１２２が割り当てられると、各物理アドレス２０８が、図２に示されるように、ＣＰＵページテーブル１２８内の対応するＣＰＵ仮想アドレス２０４にマップされる。サーフェイス１２２のＣＰＵ仮想アドレス２０４は、グラフィクスメモリと共有される。アプリケーション１２４（図１）の計算タスクがＧＰＵ１０８にオフロードされると、サーフェイス１２２は、グラフィクスメモリにページングされる。サーフェイス１２２がグラフィクスメモリにページングされると、該ページは、元のグラフィクス仮想アドレスから、ＣＰＵ仮想アドレス２０４に相当するグラフィクス仮想アドレス２０４へルート変更されることになる。ＧＰＵ仮想グラフィクスアドレス空間は、所与のアプリケーションに対してのみ属するプライベートグラフィクスアドレス空間である。
【００３７】
ＧＰＵページテーブル１３０内のグラフィクス仮想メモリアドレス２０４は、ＣＰＵ仮想アドレス及びＧＰＵ仮想メモリアドレスが物理アドレス２０６の同じセットにマップされるように、ＣＰＵページテーブル１２８と同期化され得る。物理アドレス２０６は、サーフェイス１２２内の物理的な位置２０２に対応する。したがって、サーフェイス１２２は、ＣＰＵ１０２とＧＰＵ１０８との間で直接共有され得る。諸実施形態において、ＧＰＵ１０８が物理的な位置２０２のいずれかに配置されたデータを修正する場合、この修正は自動的に、データのコピー又はデータのマーシャルを行う必要なく、サーフェイス１２２によりＣＰＵ１０２に対して可視である。
【００３８】
図２のスキーマ図は、ＵＭＡ２００が図２に示されるコンポーネントの全てを含むべきであることを指示するように意図されていない。さらに、ＵＭＡ２００は、具体的な実装の詳細に応じて、図２に示されていない任意の数の追加のコンポーネントを含んでもよい。
【００３９】
図３は、諸実施形態に係るコンピューティングデバイスのＣＰＵとＧＰＵとの間の共有仮想メモリのための方法３００を示す処理フロー図である。様々な実施形態において、方法３００は、ＣＰＵメモリからＧＰＵメモリへデータをコピーすることなく、ＣＰＵとＧＰＵとの間でメモリを共有するのに用いられる。
【００４０】
一部の実施形態において、方法３００は、ＣＰＵ１０２とＧＰＵ１０８がバス１０６によって接続されるコンピューティングデバイス１００のようなコンピューティングデバイスにおいて実行され得る。他の実施形態では、ＣＰＵ１０２及びＧＰＵ１０８は、図２に関連して上述したＵＭＡ２００のようなＵＭＡに含まれてもよい。さらに、方法３００は、コンピューティングデバイス１００のデバイスドライバ１２６のような、コンピューティングデバイスのドライバによって実行され得る。方法は、ブロック３０２において開始して、物理メモリ内でサーフェイスの割り当てが行われる。諸実施形態において、サーフェイスは、コンピューティングデバイスのＣＰＵ上で実行しているアプリケーションからの入力に応答して、コンピューティングデバイスの物理メモリ内で割り当てられる。さらに、諸実施形態において、サーフェイスはデバイスドライバによって割り当てられてもよい。また、サーフェイスは、共有仮想メモリサーフェイスとしてマークされてもよい。アプリケーション又はデバイスドライバは、ＣＰＵからＣＰＵ仮想アドレスを使用してサーフェイスにアクセスすることができる。諸実施形態において、ＣＰＵ仮想アドレスは、コンピューティングデバイスのオペレーティングシステムによって、アプリケーション又はデバイスドライバに提供される。
【００４１】
ブロック３０４において、ＣＰＵ仮想アドレス空間が、サーフェイスに基づいて作成される。諸実施形態において、ＣＰＵアドレス空間は、アプリケーションの要求で生成される。ブロック３０６において、サーフェイスが、ＣＰＵ仮想アドレス空間にマップされる。ＣＰＵ仮想メモリアドレスと物理アドレスとの間のマッピングは、ＣＰＵページテーブル内に含まれる。
【００４２】
ブロック３０８において、ＣＰＵ仮想アドレス空間に相当するＧＰＵ仮想アドレス空間が作成される。ブロック３１０において、サーフェイスは、ＧＰＵ仮想アドレス空間にマップされる。諸実施形態において、物理メモリページを仮想メモリアドレスにマップすることは、仮想アドレスを翻訳又は変換して、システムメモリ内の対応する物理メモリページを決定することを含むことがある。仮想アドレスが物理アドレスに翻訳又は変換されると、翻訳プロセス中に見つかった仮想アドレスと物理アドレスとの間の関連付けが、ロックされる。関連付けをロックすることにより、ページテーブル内の物理アドレスに対応するサーフェイスの物理的な位置が、キャッシュにページングされ得る。関連付けがロックされている間、ページはキャッシュ内に残り、サーフェイスの物理アドレスが、デバイスドライバによって変更されることを防ぐ。
【００４３】
諸実施形態において、サーフェイスは、ＬＬＣキャッシュ可能として指定される。そのような指定により、サーフェイスの物理的な位置は確実に、ＣＰＵとＧＰＵによって共有されるＬＬＣへキャッシュされる。アプリケーションによって使用されるグラフィクス仮想メモリアドレスは、ＣＰＵの仮想アドレスにマップされる同じ物理アドレスへ翻訳され得る。諸実施形態において、デバイスドライバは、ＧＰＵページテーブル内の物理アドレスに対するグラフィクス仮想メモリアドレスのマッピングを更新してもよい。
【００４４】
ブロック３１２において、サーフェイスはピン止めされる。サーフェイスをピン止めすることによって、サーフェイス内の物理的な位置が変更されるのを防ぐ。例えばオペレーティングシステムは、物理的な位置を、そのメモリ管理の一部として変更し得る。しかしながら、サーフェイスがピン止めされると、オペレーティングシステムは、サーフェイスの物理的な位置を変更することを妨げられる。
【００４５】
図４は、諸実施形態に従って、コンピューティングデバイスのＣＰＵとＧＰＵとの間の共有メモリを処理するための方法４００を示す処理フロー図である。ブロック４０２において、演算がＣＰＵからＧＰＵにオフロードされ得る。演算は、アプリケーション１２４（図１）のようなアプリケーションによって指示されるように、ＧＰＵへオフロードされ得る。加えて、ＣＰＵ又はＧＰＵを制御するのに使用される任意のアプリケーションプログラミングインタフェース（ＡＰＩ）を使用して、ＣＰＵからＧＰＵへの演算のオフロードを指示することができる。諸実施形態において、演算をＣＰＵからＧＰＵへオフロードするのに先立って、ＣＰＵによって処理されているサーフェイス内に配置された任意のデータは、ＬＬＣと一貫性を有するようにされる。
【００４６】
ブロック４０４において、ＧＰＵは、オフロードされた演算の処理を開始する。ＧＰＵは、その演算を実行するために、ＬＬＣ及びサーフェイス内のデータにアクセスする。ＧＰＵが、ＬＬＣ内にないがＣＰＵの何らかの他のキャッシュにあるデータを要求する場合、ＬＬＣは、ＧＰＵによる処理のために、そのデータを他のキャッシュから取り出すことができる。
【００４７】
ブロック４０６において、ＧＰＵは、その演算が完了したことを信号伝達する。完了の信号は、ホストへ送信され得る。諸実施形態において、演算が完了すると、デバイスドライバは、演算をＧＰＵとＣＰＵとの間で同期させる。さらに、諸実施形態において、完了の信号は、例えばメールボックスの書き込み（mailbox  write）又は割り込みであってもよい。完了の信号は、結果としてサーフェイス内のデータの修正につながる何らかの計算又はグラフィカル処理をＧＰＵが実行したことを示してもよい。完了後、ＧＰＵの出力がＣＰＵによって処理される。様々な実施形態において、ＧＰＵが、サーフェイスの物理的な位置のいずれかの位置からの読み込み又はいずれかの位置への書き込みを行うことによってサーフェイスを処理するとき、処理は、ＧＰＵの内部バッファ及びキャッシュで生じ得る。したがって、ＧＰＵ処理が完了した後、ＧＰＵの内部バッファ及びキャッシュ内のデータは、ＬＬＣと一貫性がある。
【００４８】
図３及び図４の処理フロー図は、方法３００及び方法４００のブロックが、いずれかの特定の順序で実行されるべきこと及び全てのブロックが全ての場合に含まれるべきことを示すようには意図されていない。さらに、具体的な実装の詳細に応じて、任意の数の追加のブロックが方法３００及び方法４００に含まれてもよい。さらに、本明細書で説明される方法はＣＰＵを含むが、メモリは、別のＣＰＵ又は直接メモリアクセス（ＤＭＡ）コントローラのような任意のＩ／Ｏデバイスとの間で共有され得る。
【００４９】
図５は、諸実施形態に係るコンピューティングデバイスのＣＰＵとＧＰＵとの間の共有仮想メモリのためのコードを格納する、有形の非一時的コンピュータ読取可能媒体５００を示すブロック図である。有形の非一時的コンピュータ読取可能媒体５００は、コンピュータバス５０４を介してプロセッサ５０２によってアクセスされ得る。さらに、有形の非一時的コンピュータ読取可能媒体５００は、本明細書で説明される方法を実行するようプロセッサ５０２に指示するように構成されるコードを含むことができる。
【００５０】
図５に示されるように、本明細書で議論される様々なソフトウェアコンポーネントが、有形の非一時的コンピュータ読取可能媒体５００に格納され得る。例えばサーフェイス割り当てモジュール５０６は、コンピューティングデバイスのメモリ内において、複数の物理メモリページを含むサーフェイスを割り当てるように構成され得る。仮想化モジュール５０８は、ＣＰＵ仮想アドレス空間及び該ＣＰＵ仮想アドレス空間に相当するＧＰＵ仮想アドレス空間を作成するように構成され得る。ＧＰＵ仮想アドレス空間は、サーフェイスがグラフィクスメモリ内にページングされると、作成され得る。マッピングモジュール５１０は、サーフェイス内の物理的な位置を、ＣＰＵアドレステーブル及びＧＰＵアドレステーブル内の仮想メモリアドレスにマッピングするように構成され得る。
【００５１】
さらに、ピン止めモジュール５１２は、サーフェイス内の物理的な位置が変更されるのを防ぐように、サーフェイスをピン止めするように構成され得る。
【００５２】
図５のブロック図は、有形の非一時的コンピュータ読取可能媒体５００が図５に示されるコンポーネント全てを含むべきことを示すようには意図されていない。具体的な実装の詳細に応じて、任意の数の追加のコンポーネントが有形の非一時的コンピュータ読取可能媒体５００に含まれてもよい。
【００５３】
図６は、共有される物理メモリを実装するための例示のシステム６００を示すブロック図である。同様の番号が付されたアイテムは、図１、図２Ａ及び図２Ｂに関して説明したものである。一部の実施形態において、システム６００は、メディアシステムである。加えてシステム６００を、パーソナルコンピュータ（ＰＣ）、ラップトップコンピュータ、ウルトララップトップコンピュータ、タブレット、タッチパッド、ポータブルコンピュータ、ハンドヘルドコンピュータ、パルムトップコンピュータ、パーソナルデジタルアシスタント（ＰＤＡ）、携帯電話、携帯電話／ＰＤＡの組合せ、テレビジョン、スマートデバイス（例えばスマートフォン、スマートタブレット又はスマートテレビ）、モバイルインターネットデバイス（ＭＩＤ）、メッセージングデバイス、データ通信デバイス等に組み込んでもよい。
【００５４】
様々な実施形態において、システム６００は、ディスプレイ６０４に結合されるプラットフォーム６０２を備える。プラットフォーム６０２は、コンテンツサービスデバイス６０６又はコンテンツ配信デバイス６０８又は他の同様のコンテンツソースのようなコンテンツデバイスから、コンテンツを受信することがある。１つ又は複数のナビゲーション機能を含むナビゲーションコントローラ６１０は、例えばプラットフォーム６０２及び／又はディスプレイ６０４と対話するのに使用され得る。これらのコンポーネントの各々を、以下で詳述する。
【００５５】
プラットフォーム６０２は、チップセット６１２、中央処理ユニット（ＣＰＵ）１０２、メモリデバイス１０４、ストレージデバイス１２０、グラフィクスサブシステム６１４、アプリケーション１２４及び／又は無線機６１６の任意の組合せを含んでよい。チップセット６１２は、ＣＰＵ１０２、メモリデバイス１０４、ストレージデバイス１２０、グラフィクスサブシステム６１４、アプリケーション１２４及び／又は無線機６１６の間の相互通信を提供し得る。例えばチップセット６１２は、ストレージデバイス１２０との相互通信を提供することが可能なストレージアダプタ（図示せず）を含んでもよい。
【００５６】
ＣＰＵ１０２は、複数命令セットコンピュータ（ＣＩＳＣ）又は縮小命令セットコンピュータ（ＲＩＳＡ）プロセッサ、ｘ８６命令セット互換プロセッサ、マルチコアあるいは任意の他のマイクロプロセッサ又は中央処理ユニット（ＣＰＵ）として実装され得る。一部の実施形態において、ＣＰＵ１０２は、デュアルコアプロセッサ、デュアルコアモバイルプロセッサ等を含む。
【００５７】
メモリデバイス１０４は、これらに限られないが、ランダムアクセスメモリ（ＲＡＭ）、動的ＲＡＭ（ＤＲＡＭ）又は静的ＲＡＭ（ＲＡＭ）のような揮発性メモリとして実装され得る。
【００５８】
ストレージデバイス１２０は、これらに限られないが、磁気ディスクドライブ、光ディスクドライブ、テープドライブ、内部ストレージデバイス、外付けストレージデバイス、フラッシュメモリ、バッテリバックアップＳＤＲＡＭ（同期ＤＲＡＭ）及び／又はネットワークアクセス可能なストレージデバイスのような非揮発性ストレージデバイスとして実装され得る。一部の実施形態において、ストレージデバイス１２０は、例えば複数のハードドライブが含まれるときに価値あるデジタルメディアのために、保護が強化されたストレージ性能を向上させる技術を含む。
【００５９】
グラフィクスサブシステム６１４は、表示用に静止画又はビデオのような画像の処理を実行することができる。グラフィクスサブシステム６１４は、例えばＧＰＵ１０８のようなグラフィクス処理ユニット（ＧＰＵ）又はビジュアル処理ユニット（ＶＰＵ）を含み得る。アナログ又はデジタルインタフェースを使用して、グラフィクスサブシステム６１４とディスプレイ６０４を通信可能に結合することができる。例えばインタフェースは、高解像度マルチメディアインタフェース（ＨＤＭＩ（登録商標））、ディスプレイポート、無線ＨＤＭＩ及び／又は無線ＨＤ準拠技術のうちのいずれかとすることができる。グラフィクスサブシステム６１４を、ＣＰＵ１０２又はチップセット６１２に統合してもよい。あるいは、グラフィクスサブシステム６１４は、チップセット６１２に通信可能に結合されるスタンドアロンのカードであってもよい。
【００６０】
本明細書で説明されるグラフィクス及び／又はビデオ処理技術は、様々なハードウェアアーキテクチャにいて実装され得る。例えばグラフィクス及び／又はビデオの機能性をチップセット６１２内に統合してもよい。あるいは、別個のグラフィクス及び／又はビデオプロセッサを使用してもよい。更に別の実施形態として、グラフィクス及び／又はビデオ機能が、マルチコアプロセッサを含め、汎用プロセッサによって実装されてもよい。更なる実施形態において、これらの機能は、家庭用電子機器において実装されてもよい。
【００６１】
無線機６１６は、様々な適切な無線通信技術を使用して信号を送受信することができる１つ又は複数の無線機を含み得る。そのような技術は、１つ又は複数の無線ネットワークにわたる通信を含むことがある。例示的な無線ネットワークには、無線ローカルエリアネットワーク（ＷＬＡＮ）、無線パーソナルエリアネットワーク（ＷＰＡＮ）、無線メトロポリタンエリアネットワーク（ＷＭＡＮ）、セルラネットワーク及び衛星ネットワーク等が含まれる。そのようなネットワークにわたる通信において、無線機６１６は、任意のバージョンの１つ又は複数の適用可能な規格に従って動作し得る。
【００６２】
ディスプレイ６０４は、任意のテレビタイプのモニタ又はディスプレイを含み得る。例えばディスプレイ６０４は、コンピュータディスプレイスクリーン、タッチスクリーンティスプレイ、ビデオモニタ、テレビ等を含み得る。ディスプレイ６０４はデジタル及び／又はアナログであってよい。一部の実施形態において、ディスプレイ６０４は、ホログラフィックディスプレイである。また、ディスプレイ６０４は、視覚的投影を受け取ることができる透明な面としてもよい。そのような投影は、様々な形式の情報、画像及び／又は対象物等を伝達することが可能である。例えばそのような投影は、モバイル拡張現実（ＭＡＲ：mobile  augmented  reality）アプリケーションのための視覚的オーバレイとしてもよい。１つ又は複数のアプリケーション１２４の制御の下、プラットフォーム６０２は、ユーザインタフェース６１８をディスプレイ６０４上に表示することができる。
【００６３】
コンテンツサービスデバイス６０６は、任意のナショナルサービス、インターナショナルサービス及び／又は独立サービスによってホストされることがあり、したがってプラットフォーム６０２から、例えばインターネットを介してアクセス可能である。コンテンツサービスデバイス６０６は、プラットフォーム６０２及び／又はディスプレイ６０４に結合され得る。プラットフォーム６０２及び／又はコンテンツサービスデバイス６０６は、ネットワーク１４２に結合されて、ネットワーク１４２との間でメディア情報を通信（例えば送信及び／又は受信）することができる。コンテンツ配信デバイス６０８も、プラットフォーム６０２及び／又はディスプレイ６０４に結合され得る。
【００６４】
コンテンツサービスデバイス６０６は、ケーブルテレビボックス、パーソナルコンピュータ、ネットワーク、電話、デジタル情報又はデジタル情報を配信することができるインターネット対応デバイスを含み得る。さらに、コンテンツサービスデバイス６０６は、コンテンツプロバイダとプラットフォーム６０２又はディスプレイ６０４との間で、ネットワーク１４２を経由するか直接に、コンテンツを一方向又は双方向で通信することができる任意の他の同様のデバイスを含み得る。コンテンツは、システム６００内のコンポーネントのいずれか１つとの間で、及びネットワーク１４２を介してコンテンツプロバイダとの間で、一方向及び／又は双方向に通信されてよいことが認識されよう。コンテンツの例には、例えばビデオ、音楽、医療及びゲーム情報等を含め、任意のメディア情報が含まれ得る。
【００６５】
コンテンツサービスデバイス６０６は、メディア情報、デジタル情報又は他のコンテンツを含め、ケーブルテレビ番組のようなコンテンツを受信し得る。コンテンツプロバイダの例には、特に、任意のケーブル若しくは衛星テレビ又は無線又はインターネットコンテンツのプロバイダが含まれ得る。
【００６６】
一部の実施形態において、プラットフォーム６０２は、１つ又は複数のナビゲーション機能を含むナビゲーションコントローラ６１０から、制御信号を受信する。コントローラ６１０のナビゲーション機能を使用して、例えばユーザインタフェース６１８と対話することができる。ナビゲーションコントローラ６１０は、ポインティングデバイスとすることができ、該ポインティングデバイスは、ユーザが空間的（例えば連続的な多次元の）データをコンピュータに入力することができる、コンピュータハードウェアコンポーネント（特にヒューマンインタフェースデバイス）とすることができる。グラフィカルユーザインタフェース（ＧＵＩ）のような多くのシステム並びにテレビ及びモニタは、ユーザが、物理的なジェスチャを使用してコンピュータ又はテレビへのデータを制御及び提供するのを可能にする。物理的なジェスチャは、これらには限られないが、顔の表情、顔の動き、様々な手足の動き、身体の動き、ボディランゲージ又はこれらの任意の組合せを含む。このような物理的なジェスチャを認識して、コマンド又は命令に変換することができる。
【００６７】
ナビゲーションコントローラ６１０のナビゲーション機能の動きは、ディスプレイ６０４上で、ポインタ、カーソル、フォーカスリング又はディスプレイ６０４上に表示される他の視覚的インジケータの動きによって返されることがある。例えばアプリケーション１２４の制御の下、ナビゲーションコントローラ６１０上に配置されるナビゲーション機能を、例えばユーザインタフェース６１８上に表示される仮想ナビゲーション機能にマップしてもよい。一部の実施形態において、コントローラ６１０を、別個のコンポーネントとするのではなく、プラットフォーム６０２及び／又はディスプレイ６０４に統合してもよい。
【００６８】
システム６００は、ドライバ（図示せず）を含んでもよく、該ドライバは、ユーザが、プラットフォーム６０２を、最初のブートアップの後、例えばイネーブルされると、ボタンのタッチですぐにターンオン及びターンオフできるようにする技術を含む。プログラムロジックは、プラットフォーム６０２がターン「オフ」されるとき、プラットフォーム６０２が、コンテンツをメディアアダプタ又は他のコンテンツサービスデバイス６０６又はコンテンツ配信デバイス６０８へストリーミングするのを可能にする。加えて、チップセット６１２は、例えば５．１サラウンドオーディオ及び／又は高品位７．１サラウンドサウンドオーディオ用のハードウェア及び／又はソフトウェアサポートを備えてもよい。ドライバは、統一的なグラフィクスプラットフォームのためのグラフィクスドライバを含み得る。一部の実施形態において、グラフィクスドライバは、周辺コンポーネント相互接続エクスプレス（ＰＣＩｅ）グラフィクスカードを含む。
【００６９】
様々な実施形態において、システム６００内に示されるコンポーネントのいずれか１つ又は複数を統合してもよい。例えばプラットフォーム６０２とコンテンツサービスデバイス６０６とを統合してもよく、プラットフォーム６０２とコンテンツ配信デバイス６０８とを統合してもよく、あるいはプラットフォーム６０２と、コンテンツサービスデバイス６０６と、コンテンツ配信デバイス６０８とを統合してもよい。一部の実施形態において、プラットフォーム６０２とディスプレイ６０４は一体型のユニットであってよい。例えばディスプレイ６０４とコンテンツサービスデバイス６０６とを統合してもよく、ディスプレイ６０４とコンテンツ配信デバイス６０８とを統合してもよい。  システム６００は、無線システム又は有線システムとして実装され得る。無線システムとして実装されるとき、システム６００は、１つ又は複数のアンテナ、送信機、受信機、送受信機、増幅器、フィルタ、制御ロジック等のような無線共有媒体を介して通信するのに適したコンポーネント及びインタフェースを含み得る。無線共有媒体の例には、ＲＦスペクトルのような無線スペクトルの部分が含まれ得る。有線システムとして実装されるとき、システム６００は、入出力（Ｉ／Ｏ）アダプタ、対応する有線通信媒体によりＩ／Ｏアダプタへ接続する物理コネクタ、ネットワークインタフェースカード（ＮＩＣ）、ディスクコントローラ、ビデオコントローラ、オーディオコントローラ等のような有線通信媒体を介して通信するのに適したコンポーネント及びインタフェースを含み得る。有線通信媒体の例には、ワイヤ、ケーブル、金属導線、プリント基板（ＰＣＢ）、バックプレーン、スイッチ構成、半導体金属、ツイストペア線、同軸ケーブル、ファイバ光学等が含まれ得る。
【００７０】
プラットフォーム６０２は、情報を通信する１つ又は複数の論理又は物理チャネルを確立してもよい。この情報には、メディア情報及び制御情報が含まれ得る。メディア情報は、ユーザに向けられたコンテンツを表す任意のデータを指してよい。コンテンツの例には、例えば音声会話からのデータ、ビデオ会議、ストリーミングビデオ、電子メール（ｅメール）メッセージ、音声メールメッセージ、英数字文字、グラフィック、画像、ビデオ、テキスト等が含まれ得る。音声会話からのデータは、例えばスピーチ情報、無音の期間、背景雑音、快適雑音、トーン等とすることができる。制御情報は、コマンド、命令又は自動システムに向けられた制御ワードを表す任意のデータを指してよい。例えば制御情報を使用して、システム中を通じてメディア情報をルーティングするか、メディア情報を所定の手法で処理するようノードに指示してもよい。しかしながら、諸実施形態は、図６に図示され、説明される要素又はコンテキストに限定されない。
【００７１】
図７は、図６のシステム６００が具現化され得る小さなフォームファクタデバイス７００の実施形態を図示している。同様の番号が付されたアイテムは、図６に関連して説明される。一部の実施形態において、例えばデバイス７００は、無線機能を有するモバイルデバイスとして実装されてよい。モバイルコンピューティングデバイスは、処理システムと、例えば１つ又は複数のバッテリのようなモバイル電力ソース又は電源とを有する任意のデバイスを指すことがある。
【００７２】
上述のように、モバイルコンピューティングデバイスの例には、パーソナルコンピュータ（ＰＣ）、ラップトップコンピュータ、ウルトララップトップコンピュータ、タブレット、タッチパッド、ポータブルコンピュータ、ハンドヘルドコンピュータ、パルムトップコンピュータ、パーソナルデジタルアシスタント（ＰＤＡ）、携帯電話、携帯電話／ＰＤＡの組合せ、テレビジョン、スマートデバイス（例えばスマートフォン、スマートタブレット又はスマートテレビ）、モバイルインターネットデバイス（ＭＩＤ）、メッセージングデバイス、データ通信デバイス等が含まれ得る。
【００７３】
モバイルコンピューティングデバイスの例には、腕時計型コンピュータ、フィンガコンピュータ、リング型コンピュータ、眼鏡型コンピュータ、ベルトクリップ型コンピュータ、アームバンド型コンピュータ、靴型コンピュータ、衣服型コンピュータ又は任意の他の適切なタイプの装着可能なコンピュータのような、人間が身に着けるように構成されるコンピュータも含まれ得る。例えばモバイルコンピューティングデバイスは、コンピュータアプリケーションを実行することができ、さらに音声通信及び／又はデータ通信も可能なスマートフォンとして実装され得る。一部の実施形態は、例としてスマートフォンとして実装されるモバイルコンピューティングデバイスを用いて説明されるが、他の実施形態は、他の無線のモバイルコンピューティングデバイスを使用して実装されてもよいことが認識されよう。
【００７４】
図７に示されるように、デバイス７００は、ハウジング７０２、ディスプレイ７０４、入出力（Ｉ／Ｏ）デバイス７０６及びアンテナ７０８を含み得る。デバイス７００はナビゲーション機能７１０も含み得る。ディスプレイ７０４は、モバイルコンピューティングデバイスに適した情報を表示するための任意の適切なディスプレイユニットを含み得る。Ｉ／Ｏデバイス７０６は、モバイルコンピューティングデバイスへ情報を入力するための任意の適切なＩ／Ｏデバイスを含むことができる。例えばＩ／Ｏデバイス７０６は、英数字のキーボード、数字のキーパッド、タッチパッド、入力キー、ボタン、スイッチ、ロッカースイッチ、マイクロフォン、スピーカ、音声認識デバイス及びソフトウェア等を含んでよい。情報はマイクロフォンによってデバイス７００へ入力されてもよい。そのような情報は、音声認識デバイスによってデジタル化され得る。
【００７５】
（例１）
コンピューティングデバイスの中央処理ユニット（ＣＰＵ）とグラフィクス処理ユニット（ＧＰＵ）との間の共有仮想メモリのための方法を、ここで説明する。本方法は、物理メモリ内でサーフェイスを割り当てるステップを含む。ＣＰＵ仮想アドレス空間が作成されると、前記サーフェイスは、ＣＰＵページテーブル内において前記ＣＰＵ仮想アドレス空間にマッピングされる。本方法はまた、前記ＣＰＵ仮想アドレス空間に相当するＧＰＵ仮想アドレス空間を作成するステップと、ＧＰＵページテーブル内において、前記サーフェイスを前記ＧＰＵ仮想アドレス空間にマッピングするステップと、前記サーフェイスをピン止めするステップを含む。
【００７６】
メモリは、ＣＰＵメモリからＧＰＵメモリへデータをコピーすることなく、ＣＰＵとＧＰＵとの間で前記サーフェイスを介して共有される。前記サーフェイスは、コンピューティングデバイスの前記ＣＰＵ上で実行しているアプリケーションからの入力に応答して割り当てられる。さらに、本方法は、コンピューティングデバイスのドライバによって実行されてよい。
【００７７】
ＣＰＵのキャッシュ及びＧＰＵのキャッシュからのデータは、ＣＰＵとＧＰＵとの間で共有される最終レベルのキャッシュ（ＬＬＣ）と一貫性を有する。演算はＣＰＵからＧＰＵにオフロードされ、この演算は、前記ＧＰＵ内において実行される。完了信号が前記ＣＰＵに送信される。前記完了信号は、結果として前記サーフェイｖス内のデータの修正につながる何らかの計算を前記ＧＰＵが実行したという指示を含む。さらに、デバイスドライバが、ＣＰＵとＧＰＵとの間でデータの処理を同期させることもある。
【００７８】
（例２）
コンピューティングデバイスをここで説明する。当該コンピューティングデバイスは、格納された命令を実行するように適合される中央処理ユニット（ＣＰＵ）と、命令を格納するストレージデバイスとを含む。ストレージデバイスは、ＣＰＵによって実行されると、物理メモリ内でサーフェイスを割り当てるように適合されるプロセッサ実行可能コードを含む。ＣＰＵ仮想アドレス空間が作成されると、前記サーフェイスは、ＣＰＵページテーブル内において前記ＣＰＵ仮想アドレス空間にマッピングされる。さらに、ＣＰＵ仮想アドレス空間に相当するＧＰＵ仮想アドレス空間が作成され、ＧＰＵページテーブル内において、前記サーフェイスが前記ＧＰＵ仮想アドレス空間にマッピングされる。前記プロセッサ実行可能なコードは、前記サーフェイスをピン止めするようにも適合される。
【００７９】
物理メモリは、データをＣＰＵメモリからＧＰＵメモリへデータをコピーすることなく、前記ＣＰＵと前記ＧＰＵとの間で共有される。さらに、前記ＣＰＵと前記ＧＰＵは、コンピューティングデバイス内の同じダイス上に配置される。前記ＣＰＵと前記ＧＰＵは、最終レベルのキャッシュ（ＬＬＣ）を共有し、該ＬＬＣは、前記ＣＰＵ又はＧＰＵのいずれかのキャッシュからデータを取り出すことができる。前記ＣＰＵと前記ＧＰＵは、統合メモリアーキテクチャ（ＵＭＡ）を含むことがある。
【００８０】
前記プロセッサ実行可能なコードは、当該コンピューティングデバイスの前記ＣＰＵ上で実行しているアプリケーションからの入力に応答して、前記サーフェイスを割り当てるように適合されることがある。前記ＣＰＵページテーブル及び前記ＧＰＵページテーブル内の仮想メモリアドレスは、仮想メモリアドレスを物理アドレスへ変換することによって、前記サーフェイス内の物理的な位置にマップされ得る。ドライバが、前記プロセッサ実行可能なコードの実行を開始するように構成されることがある。さらに、当該コンピューティングデバイスは、無線機及びディスプレイを更に備え、該無線機及びディスプレイは、少なくとも前記中央処理ユニットに通信可能に結合され得る。
【００８１】
（例３）
命令を有する少なくとも１つの非一時的マシン読取可能媒体をここで説明する。コンピューティングデバイスにおいて実行されたことに応答して、前記命令は、前記コンピューティングデバイスに、物理メモリ内でサーフェイスを割り当てることを実行させる。ＣＰＵ仮想アドレス空間が生成され、前記サーフェイスが、ＣＰＵページテーブル内において前記ＣＰＵ仮想アドレス空間にマッピングされる。前記命令はまた、前記ＣＰＵ仮想アドレス空間に相当するＧＰＵ仮想アドレス空間を生成し、ＧＰＵページテーブル内において、前記サーフェイスを前記ＧＰＵ仮想アドレス空間にマッピングする。さらに、前記サーフェイスがピン止めされる。
【００８２】
前記物理メモリは、ＣＰＵメモリからＧＰＵメモリへデータをコピーすることなく、ＣＰＵとＧＰＵとの間で共有される。さらぶ、前記命令は、ＣＰＵのキャッシュ及びＧＰＵのキャッシュからのデータが、最終レベルのキャッシュ（ＬＬＣ）と一貫性を有するようにさせる。加えて、前記命令は、前記コンピューティングデバイスに、該コンピューティングデバイスのＣＰＵ上で実行しているアプリケーションからの入力に応答して、前記サーフェイスの割り当てを行われることもある。
【００８３】
上記の例における詳細は、１つ又は複数の実施形態のいずれかにおいても用いられることがあることが理解されよう。例えば上述のコンピューティングデバイスについての全てのオプションの機能が、説明される方法又はコンピュータ読取可能媒体のいずれかに対して実装されてもよい。さらに、本明細書においてフロー図及び／又は状態図を用いて実施形態を説明してきたが、本発明は、これらの図又は対応する説明に限定されない。例えばフローは、それぞれ図示されたボックス若しくは状態又は図示及び説明されたものと正確に同じ順序で進む必要はない。
【００８４】
本発明は、本明細書で列挙された特定の詳細に制限されない。実際、本開示の利点を享受する当業者には、上述の説明及び図面から多くの他の変更を本発明の範囲内で行うことが可能であることが認識されるであろう。したがって、いずれかの補正を含め、本発明の範囲を定義するのは特許請求の範囲である。
【図１】
2018139128.tif 000003
【図２Ａ】
2018139128.tif 000004
【図２Ｂ】
2018139128.tif 000005
【図３】
2018139128.tif 000006
【図４】
2018139128.tif 000007
【図５】
2018139128.tif 000008
【図６】
2018139128.tif 000009
【図７】
2018139128.tif 000010
【外国語明細書】
2018139128000001.pdf