(57)【要約】  コンピューティングデバイスの上でアクセラレータ仮想デバイスを初期化しているコンピューティングデバイス含に対して柔軟なコードアクセラレーションを実行する技術。コンピューティングデバイスはメモリマップされた入出力（Ｉ／Ｏ）をアクセラレータ仮想デバイスに割り当て、さらにアクセラレータ仮想デバイスコンテキストをアクセラレーションされるべきコードに割り当てる。コンピューティングデバイスはアクセラレーションされるべきコードのバイトコードにアクセスして、バイトコードがオペレーティングシステム依存バイトコードであるかどうか決定する。もしそうしなければ、コンピューティングデバイスは内部バイナリ変換モジュールを用いて、バイトコードのハードウェアアクセラレーションをメモリマップドＩ／Ｏを介して実行する。しかし、バイトコードがオペレーティングシステム依存的である場合、コンピューティングデバイスはバイトコードのソフトウェアアクセラレーションを実行する。
2015534184.tif 000002
【特許請求の範囲】
【請求項１】
柔軟なコードアクセラレーションを実行するためのコンピューティングデバイスであって、
複数の命令を格納して有する物理メモリと、
アクセラレータ仮想デバイス、アクセラレータ仮想デバイスオペレーティングシステムドライバ、および仮想マシンを確立するために前記複数の命令を実行するプロセッサとを備え、
前記仮想マシンは、前記アクセラレータ仮想デバイスオペレーティングシステムドライバを用いて、
（ｉ）ソフトウェアコードのアクセラレーションを促すべく、前記アクセラレータ仮想デバイスを初期化すること、および
（ｉｉ）前記アクセラレータ仮想デバイスにアクセスするためのメモリマップＩ／Ｏとして、前記物理メモリの一部分を割り当てること、ならびに、
前記アクセラレータ仮想デバイスは、アクセラレーションされるべき前記ソフトウェアコードのバイトコードがオペレーティングシステム依存バイトコードであるかどうかを決定する、コンピューティングデバイス。
【請求項２】
前記仮想マシンは、
（ｉ）前記メモリマップＩ／Ｏのために予約されるべきメモリのサイズを決定すること、および、
（ｉｉ）予約されるメモリの決定済サイズとサイズが一致する一部分である前記メモリマップＩ／Ｏ用の前記物理メモリの一部分を予約することによって、
前記メモリマップＩ／Ｏを割り当てる、請求項１に記載のコンピューティングデバイス。
【請求項３】
前記仮想マシンは、さらに、アクセラレーションされるべき前記ソフトウェアコードにアクセラレータ仮想デバイスコンテキストを割り当てる、請求項２に記載のコンピューティングデバイス。
【請求項４】
前記仮想マシンは、さらに、アクセラレーションされるべき前記ソフトウェアコードのインスタンスに関連した仮想メモリに予約物理メモリをマッピングすることによって、前記アクセラレータ仮想デバイスコンテキストを割り当てる、請求項３に記載のコンピューティングデバイス。
【請求項５】
前記予約物理メモリのアドレスは、異なるアクセラレータ仮想デバイスコンテキストと関連している、請求項４に記載のコンピューティングデバイス。
【請求項６】
前記仮想マシンは、前記ソフトウェアコードの前記インスタンスがどのスレッド上で実行されるかを決定することによって、前記アクセラレータ仮想デバイスコンテキストを割り当てる、請求項４に記載のコンピューティングデバイス。
【請求項７】
前記仮想マシンは、さらに、スレッドの末尾を特定することに応答して前記仮想メモリから前記アクセラレータ仮想デバイスをアンマッピングすることで、前記割り当てられたアクセラレータ仮想デバイスコンテキストを解放する、請求項６に記載のコンピューティングデバイス。
【請求項８】
前記アクセラレータ仮想デバイスは、前記バイトコードがオペレーティングシステム依存バイトコードでないとの決定に応答して前記メモリマップＩ／Ｏを用いることによって、前記バイトコードのハードウェアアクセラレーションを実行する段階を、さらに備える。請求項４に記載のコンピューティングデバイス。
【請求項９】
前記仮想マシンは、前記メモリマップＩ／Ｏを介して前記ハードウェアアクセラレーションをトリガするために、前記予約物理メモリ内でアドレスに直接分岐する、請求項８に記載のコンピューティングデバイス。
【請求項１０】
前記予約物理メモリへのリードおよびライト呼び出しをインターセプトして、前記ハードウェアアクセラレーションを実行する内部動的バイナリ変換モジュールをさらに備え、前記予約物理メモリ内の各アドレスはリターン命令のみを格納する、請求項９に記載のコンピューティングデバイス。
【請求項１１】
前記仮想マシンは、前記アクセラレータ仮想デバイスを前記アクセラレータ仮想デバイスオペレーティングシステムドライバに関連付けけることによって前記アクセラレータ仮想デバイスを初期化する、請求項１に記載のコンピューティングデバイス。
【請求項１２】
前記アクセラレータ仮想デバイスは、前記バイトコードのハードウェアアクセラレーションを実行するべく、内部動的バイナリ変換モジュールを備える、請求項１に記載のコンピューティングデバイス。
【請求項１３】
前記プロセッサは、前記内部動的バイナリ変換モジュールを備える、請求項１２に記載のコンピューティングデバイス。
【請求項１４】
前記仮想マシンは、前記バイトコードがオペレーティングシステム依存バイトコードであると決定することに応答して前記バイトコードのソフトウェアアクセラレーションを、さらに実行する、請求項１に記載のコンピューティングデバイス。
【請求項１５】
前記プロセッサは、複数のオペレーティングシステムサポートを用いて、前記オペレーティングシステム依存バイトコードを実行する、請求項１４に記載のコンピューティングデバイス。
【請求項１６】
前記プロセッサは、前記バイトコードのハードウェアアクセラレーションを実行するべく、バイトコードアクセラレーションサポートを備える、請求項１に記載のコンピューティングデバイス。
【請求項１７】
前記バイトコードのハードウェアアクセラレーションを実行するべく、ハードウェアアクセラレータを、さらに備える、請求項１に記載のコンピューティングデバイス。
【請求項１８】
コンピューティングデバイスにおいて柔軟なコードアクセラレーションを実行するための方法であって、
前記コンピューティングデバイス上で、ソフトウェアコードのアクセラレーションを促すべく、アクセラレータ仮想デバイスを初期化する段階と、
前記アクセラレータ仮想デバイスにアクセスするためのメモリマップＩ／Ｏとして前記コンピューティングデバイスのメモリの一部分を割り当てる段階と、
前記コンピューティングデバイス上で、アクセラレーションされるべき前記ソフトウェアコードのバイトコードがオペレーティングシステム依存バイトコードであるかどうかを決定する段階と、を備える、方法。
【請求項１９】
前記メモリマップＩ／Ｏを割り当てる段階は、前記アクセラレータ仮想デバイスをアクセラレータ仮想デバイスランタイムライブラリに関連付けける段階を備える、請求項１８に記載の方法。
【請求項２０】
前記メモリマップＩ／Ｏを割り当てる段階は、
前記コンピューティングデバイス上で、前記メモリマップＩ／Ｏのために予約されるべきメモリのサイズを決定する段階と、
前記コンピューティングデバイス上で、予約されるべきメモリの決定済サイズとサイズが一致する部分である、前記コンピューティングデバイスの物理メモリの一部分を予約する段階とを、備える、請求項１８に記載の方法。
【請求項２１】
アクセラレーションされるべき前記ソフトウェアコードにアクセラレータ仮想デバイスコンテキストを前記コンピューティングデバイス上で、割り当てる段階を、さらに備える、請求項２０に記載の方法。
【請求項２２】
前記アクセラレータ仮想デバイスコンテキストを割り当てる段階は、実行される前記ソフトウェアコードのインスタンスに関連する仮想メモリに前記物理メモリをマッピングする段階を備える、請求項２１に記載の方法。
【請求項２３】
前記アクセラレータ仮想デバイスコンテキストを割り当てる段階は、前記物理メモリの各アドレスを異なるアクセラレータ仮想デバイスコンテキストに予約する段階を備える、請求項２２に記載の方法。
【請求項２４】
前記バイトコードが前記オペレーティングシステム依存バイトコードでないとの決定に応答して前記メモリマップＩ／Ｏを用いることによって、前記バイトコードのハードウェアアクセラレーションを実行する段階を、さらに備える、請求項２２に記載の方法。
【請求項２５】
前記バイトコードの前記ハードウェアアクセラレーションを実行する段階は、前記ハードウェアアクセラレーションをトリガするべく、前記メモリマップＩ／Ｏのアドレスに直接分岐する段階を備える、請求項２４に記載の方法。
【請求項２６】
前記アクセラレータ仮想デバイスコンテキストを割り当てる段階は、前記ソフトウェアコードの前記インスタンスがどのスレッド上でアクセラレーションされるかを決定する段階を備える、請求項２２に記載の方法。
【請求項２７】
前記スレッドの末尾を特定することに応答して前記仮想メモリから前記アクセラレータ仮想デバイスをアンマッピングすることで、前記割り当てられたアクセラレータ仮想デバイスコンテキストを解放する段階を、さらに備える、請求項２６に記載の方法。
【請求項２８】
前記アクセラレータ仮想デバイスを初期化する段階は、前記アクセラレータ仮想デバイスを前記アクセラレータ仮想デバイスのオペレーティングシステムドライバに関連付けける段階を備える、請求項１８に記載の方法。
【請求項２９】
前記アクセラレータ仮想デバイスを初期化する段階は、仮想ペリフェラルコンポーネントインターコネクトデバイスとして、前記アクセラレータ仮想デバイスを初期化する段階を備える、請求項１８に記載の方法。
【請求項３０】
前記バイトコードのハードウェアアクセラレーションを実行する段階は、前記バイトコードの動的バイナリ変換を実行する段階を備える、請求項１８に記載の方法。
【請求項３１】
前記コンピューティングデバイス上で、前記アクセラレータ仮想デバイスが前記コンピューティングデバイスによってサポートされるかどうかを決定する段階と、
前記アクセラレータ仮想デバイスが前記コンピューティングデバイスによってサポートされていないとの決定に応答して、前記コンピューティングデバイスの仮想マシン上で前記バイトコードを実行する段階と、をさらに備える、請求項１８に記載の方法。
【請求項３２】
前記コンピューティングデバイス上で、前記バイトコードが前記オペレーティングシステム依存バイトコードであると決定することに応答して前記バイトコードのソフトウェアアクセラレーションを実行する段階を、さらに備える、請求項１８に記載の方法。
【請求項３３】
前記バイトコードのソフトウェアアクセラレーションを実行する段階は、複数のオペレーティングシステムサポートを用いて前記オペレーティングシステム依存バイトコードを実行する段階を備える、請求項３２に記載の方法。
【請求項３４】
プロセッサと、
前記プロセッサによって実行された場合に、コンピューティングデバイスに請求項１８から３３のいずれか一項に記載の方法を実行させる複数の命令が格納されたメモリと、
を備える、コンピューティングデバイス。
【請求項３５】
実行されることに応答して、請求項１８から３３のいずれか一項に記載の方法を実行するコンピューティングデバイスをもたらす複数の命令を備える、プログラム。
【発明の詳細な説明】
【背景技術】
【０００１】
様々なハードウェアアクセラレーション設計は、電力消費を最小化しながらコンピューティングデバイスのパフォーマンスを改善するために用いられる。例えば、電力消費を最小化することは、消費者向けモバイルコンピューティングデバイスの鍵となる市場性のある特徴の１つである電池寿命の改善に、きわめて重大である。特定の市場区分に応じて、様々なシステムオンチップ（ＳｏＣ）手法は、１ワットあたりの優れたパフォーマンスを達成するために、実装される場合がある。
【０００２】
しかし、ハードウェアアクセラレータは一定の機能性を有することから、比較的に高価であって柔軟性がない。従来のハードウェアバイトコードアクセラレータは、ｘ８６命令セットアーキテクチャ（ＩＳＡ）エクステンションを用いてアクセスされる。ｘ８６ＩＳＡがアクセラレーションのために用いられるので、そのようなハードウェアアクセラレータは符号化空間、ダイ領域、および電力消費に関して非効率的であると考えられる。
【図面の簡単な説明】
【０００３】
本明細書中に説明される概念は、添付図面において限定のためでなく例として示される。説明を簡潔かつ明確にするために、図面に示される複数の構成要素は必ずしも縮尺通りに描かれていない。適切であると決定する場合、参照符号は、対応または類似の構成要素を示すために、複数の図面間で繰り返して参照される。
【図１】コード実行をアクセラレーションするためのコンピューティングデバイスの少なくとも１つの実施形態の簡略ブロック図である。
【図２】図１のコンピューティングデバイスの環境の少なくとも１つの実施形態の簡略ブロック図である。
【図３】図１のコンピューティングデバイス上でコード実行をアクセラレーションするための方法の少なくとも１つの実施形態の簡略化したフロー図である。
【図４】図１のコンピューティングデバイス上でコード実行をアクセラレーションするための方法の少なくとも１つの実施形態の簡略化したフロー図である。
【発明を実施するための形態】
【０００４】
本開示の概念は様々な変更および代替形式に影響されやすい一方で、その複数の特定の実施形態は図面において例として示され、本明細書中に詳細に説明される。しかし、当然のことながら、開示された特定の形態に対して本開示の複数の概念が制限されることを意図しておらず、それどころか、本開示および添付の特許請求の範囲と整合性のあるすべての変更、均等物、および代替例を包含することを意図している。
【０００５】
明細書における「１つの実施形態」、「実施形態」、「例示の実施形態」、その他に対する言及は、説明される実施形態は特有の機能、構造、または特性を含む場合があるが、いずれの実施形態も、特有の機能、構造、もしくは特性を必ず含んでもよく、または含まなくてもよいことを示す。さらに、そのような用語が、同一実施形態を必ずしも言及しているというわけではない。さらに、特有の機能、構造、または特性が実施形態に関連して説明される場合、明示的に説明されるか否かを問わず、他の実施形態に関連してそのような機能、構造、または特性を達成することは当業者の知識の範囲内であるとされる。
【０００６】
開示された複数の実施形態は、場合によっては、ハードウェア、ファームウェア、ソフトウェア、またはそれらの任意の組み合わせにおいて、実装されてもよい。開示された複数の実施形態は、１または複数のプロセッサによって読み取られて実行されてもよい一時的または非一時的機械可読（例えば、コンピュータ可読）ストレージ媒体によって搬送また格納される複数の命令として実装されてもよい。機械可読ストレージ媒体は、機械によって可読な形で情報を格納または送信するための、任意のストレージデバイス、メカニズム、または他の物理的構造（例えば、揮発性もしくは不揮発性メモリ、メディアディスク、または他の媒体デバイス）として、実装されてもよい。
【０００７】
複数の図面において、いくつかの構造的または方法的な特徴は、特定の配置および／または順序で示される場合がある。しかし、そのような特定の配置および／または順序が必要ではない場合もあると理解されるべきである。むしろ、いくつかの実施形態では、そのような複数の特徴は、異なるやり方で、および／または例示された図面に示されたものとは異なる順序で、構成されてもよい。その上、特定の図面中の構造的または方法的な特徴の包含は、そのような特徴がすべての実施形態に必要であること、および、いくつかの実施形態では、そのような特徴が他の特徴に包含可能ではないこと、または他の特徴と組み合わせてもよいことを、暗示するものでもない。
【０００８】
ここで図１を参照すると、コンピューティングデバイス１００は、コード実行のアクセラレーション化と本明細書中に説明される複数のファンクションの実行とが可能である任意のタイプのコンピューティングデバイスとして、実装されもよい。例えば、コンピューティングデバイス１００は、携帯電話、スマートフォン、タブレットコンピューティングデバイス、パーソナルデジタルアシスタント、メッセージングデバイス、消費者向け電子デバイス、ハンドセット、ラップトップコンピュータ、デスクトップコンピューティング、および／または他の任意のコンピューティング／通信デバイスとしても実装可能である。図１に示されるように、例示されるコンピューティングデバイス１００は、プロセッサ１０２、入出力（Ｉ／Ｏ）サブシステム１０４、メモリ１０６、ハードウェアアクセラレータ１０８、１または複数の周辺デバイス１１０、およびデータストレージ１１２を備える。もちろん、複数の他の実施形態では、コンピューティングデバイス１００は、例えば、コンピューティングデバイスで一般に見られる、様々な入出力デバイスなど、他または追加の複数のコンポーネントを有してもよい。さらに、いくつかの実施形態では、例示された複数のコンポーネントのうちの１または複数は、別のコンポーネントに組み込まれてもよく、またはさもなければ、別のコンポーネントの一部分に由来するものであってもよい。例えば、メモリ１０６またはその複数の部分は、いくつかの実施形態では、プロセッサ１０２に組み込まれてもよい。
【０００９】
プロセッサ１０２は、本明細書中に説明される複数のファンクションを実行することが可能な任意のタイプのプロセッサとして、実装されてもよい。例えば、プロセッサは、シングルコアまたはマルチコアプロセッサ、デジタルシグナルプロセッサ、マイクロコントローラ、あるいは他のプロセッサまたは処理／制御回路として、実装されてもよい。同様に、メモリ１０６は、本明細書中に説明される複数のファンクションを実行することが可能な、任意のタイプの揮発性または不揮発性メモリ、あるいはデータストレージとして、実装されてもよい。動作中、メモリ１０６は、コンピューティングデバイス１００の動作中に用いられる様々なデータおよびソフトウェア（例えば、複数のオペレーティングシステム、複数のアプリケーション、複数のプログラム、複数のライブラリ、および複数のドライバ）を格納してもよい。メモリ１０６は、Ｉ／Ｏサブシステム１０４を介してプロセッサ１０２に通信可能に結合する。Ｉ／Ｏサブシステム１０４は、コンピューティングデバイス１００のプロセッサ１０２、メモリ１０６、および他のコンポーネントによる複数の入出力動作を促すべく、電気回路および／または複数のコンポーネントとして、実装されてもよい。例えば、Ｉ／Ｏサブシステム１０４は、複数のメモリコントローラハブ、複数の入出力制御ハブ、複数のファームウェアデバイス、複数の通信リンク（すなわち、複数のポイントツーポイントリンク、複数のバスリンク、複数のワイヤ、複数のケーブル、複数の導光体、プリント回路基板トレース、その他）、および／または複数の他のコンポーネントならびにサブシステムとして、さもなければそれらを含むものとして、複数の入出力動作を促すべく実装されてもよい。いくつかの実施形態では、Ｉ／Ｏサブシステム１０４は、ＳｏＣの一部分を形成することが可能であり、単一の集積回路チップ上で、コンピューティングデバイス１００のプロセッサ１０２、メモリ１０６、および他のコンポーネントと共に、組み込まれてもよい。さらに、いくつかの実施形態では、プロセッサ１０２は、コード実行をアクセラレーションするために、バイトコードアクセラレーションサポート１１４を有する。バイトコードアクセラレーションサポート１１４は、プロセッサ１０２上で実行される１または複数の命令またはバイトコードの実行をアクセラレーション可能であり、かつ本明細書中に説明される複数のファンクションを実行可能である任意のタイプのコンポーネントまたは電気回路として、実装されてもよい。
【００１０】
ハードウェアアクセラレータ１０８は、ソフトウェアアプリケーションに関連する１または複数の命令またはバイトコードの実行をアクセラレーション可能であり、かつ本明細書中に説明される複数のファンクションを実行可能である任意のタイプのハードウェアデバイスまたはコンポーネントとして、実装されてもよい。例えば、ハードウェアアクセラレータ１０８はグラフィックスアクセラレータ、浮動小数点アクセラレータ、または他のハードウェアアクセラレータデバイスとして実装されてもよく、あるいはさもなければ、それを有してもよい。以下に説明するように、いくつかの実施形態では、ハードウェアアクセラレータ１０８は、コンピューティングデバイス１００のオペレーティングシステム（ＯＳ）に依存しないコードをアクセラレーションするように設定されてよい。いくつかの実施形態では、ハードウェアアクセラレータ１０８は、コンピューティングデバイス１００の１または複数の他のコンポーネントと共に、ＳｏＣの一部分を形成してもよい。
【００１１】
コンピューティングデバイス１００の複数の周辺デバイス１１０には、任意の数の周辺デバイスまたはインターフェースデバイスもしくはコンポーネントが含まれてもよい。例えば、周辺デバイス１１０として、遠隔デバイスと通信する通信回路を挙げることが可能である。複数の周辺デバイス１１０に含まれる特定のデバイスは、例えば、コンピューティングデバイス１００の使用目的次第であろう。データストレージ１１２は、短期間または長期間にわたってデータを格納するように設定された任意のタイプのデバイスまたは複数のデバイスとして、実装されてもよい。そのようなデバイスとして、例えば、複数のメモリデバイスおよび回路、複数のメモリーカード、複数のハードディスクドライブ、複数のソリッドステートドライブ、または複数の他のデータストレージデバイスなどが挙げられる。
【００１２】
図２に示されるように、コンピューティングデバイス１００は、コードをアクセラレーションするために、環境２００を確立してもよい。例示の実施形態の環境２００には、仮想マシン２０２、アクセラレータランタイムライブラリ２０４、ＯＳアクセラレータデバイスドライバ２０６、アクセラレータ仮想デバイス２０８、および内部動的バイナリ変換モジュール２１０が含まれる。
【００１３】
仮想マシン２０２は、例えば、コンピューティングデバイス１００の既存のＩ／Ｏインターフェースを用いて、コンピューティングデバイス１００によってアクセラレータ仮想デバイス２０８がサポートされるかどうかを決定するべく、コンピューティングデバイス１００をプローブしてもよい。アクセラレータランタイムライブラリ２０４は、アクセラレータ仮想デバイス２０８のアプリケーションプログラミングインターフェース（ＡＰＩ）を実装してもよい。その際に、アクセラレータランタイムライブラリ２０４は、ＯＳアクセラレータデバイスドライバ２０６を介して、およびメモリマップドＩ／Ｏを介して、アクセラレータ仮想デバイス２０８へのアクセスを可能にしてもよい。後述するように、いくつかの実施形態では、ＯＳアクセラレータデバイスドライバ２０６は、アクセラレータ仮想デバイス２０８を初期化するためにのみ、用いられる。その後、アクセラレータ仮想デバイス２０８は、コードアクセラレーションをトリガするために、メモリマップドＩ／Ｏを介してアクセスされてもよい。ＯＳアクセラレータデバイスドライバ２０６は、例えば、複数の標準的オペレーティングシステムＩ／Ｏ命令を用いて、アクセラレータ仮想デバイス２０８を初期化するために用いられてもよい。アクセラレータ仮想デバイス２０８は、コード実行をアクセラレーションするために用いられ得る内部動的バイナリ変換モジュール２１０を有してもよい。いくつかの実施形態では、内部動的バイナリ変換モジュール２１０は、ハードウェアアクセラレータ１０８および／またはバイトコードアクセラレーションサポート１１４を用いて非ＩＳＡコード（例えば、Ｄａｌｖｉｋバイトコード、ＪａｖａＳｃｒｉｐｔ（登録商標）、ＨＴＭＬ５、その他）を内部ＩＳＡコードにトランスペアレントに変換することによって、アクセラレータ仮想デバイス２０８を仮想化する。例示の実施形態を含むいくつかの実施形態では、内部動的バイナリ変換モジュール２１０は、プロセッサ１０２の内側であり、コンピューティングデバイス１００のオペレーティングシステムを含む外部のソフトウェアに対してトランスペアレントである。このように、外部のソフトウェアは、内部動的バイナリ変換モジュール２１０でなくアクセラレータ仮想デバイス２０８を認識可能である。さらに、いくつかの実施形態では、内部動的バイナリ変換モジュール２１０は、異なる言語からコードをトランスペアレントに変換するべく、内部ＩＳＡにおいて様々なハードウェアアクセラレータサポートを利用することができる。
【００１４】
ここで図３および４を参照すると、コンピューティングデバイス１００によって実行可能であるコード実行をアクセラレーションするための方法３００の例示の実施形態は、図３のブロック３０２で開始する。ブロック３０２において、コンピューティングデバイス１００は、オペレーティングシステムが起動されるかどうか決定する。オペレーティングシステムが起動すると、コンピューティングデバイス１００はブロック３０４でアクセラレータ仮想デバイス２０８を初期化する。その際に、ブロック３０６において、コンピューティングデバイス１００はアクセラレータ仮想デバイス２０８をＯＳアクセラレータデバイスドライバ２０６に関連付けけてもよい。いくつかの実施形態では、アクセラレータ仮想デバイス２０８は、仮想ペリフェラルコンポーネントインターコネクト（ＰＣＩ）デバイスとして実装されてもよい。そのような実施形態において、コンピューティングデバイス１００は、アクセラレータ仮想デバイス２０８が存在し、かつコンピューティングデバイス１００によってサポートされるかどうかを決定するべく、ＰＣＩデバイスのそれぞれをプローブしてもよい。
【００１５】
ブロック３０８において、コンピューティングデバイス１００はメモリマップドＩ／Ｏをアクセラレータ仮想デバイス２０８に割り当てる。その際に、コンピューティングデバイス１００は、ブロック３１０でメモリマップドＩ／Ｏのために予約されるべきメモリのサイズを決定する。例えば、アクセラレータ仮想デバイス２０８は、メモリマップドＩ／Ｏのためにメモリの１ページを予約する。ブロック３１２において、コンピューティングデバイス１００は、メモリマップドＩ／Ｏに適応するべく、メモリ１０６で物理メモリを予約する。いくつかの実施形態では、各予約物理メモリアドレスは、アクセラレーションのためにアクセラレータまたはスレッドコンテキストを表す。ブロック３１４において、コンピューティングデバイス１００はアクセラレータランタイムライブラリ２０４をアクセラレータ仮想デバイス２０８に関連付けしてもよい。いくつかの実施形態では、アクセラレータ仮想デバイス２０８は初期化され、および／または、メモリマップドＩ／ＯはＯＳアクセラレータデバイスドライバ２０６を介して割り当てられる。
【００１６】
ブロック３１６において、コンピューティングデバイス１００は、それがアクセラレータ仮想デバイス２０８をサポートするかどうかを決定する。もしアクセラレータ仮想デバイス２０８がサポートされなければ、そのときは、コンピューティングデバイス１００はコードを実行するべく、従来の仮想マシンを使用する。例えば、いくつかの実施形態では、従来の仮想マシンは、一度に１つのバイトコードを、オペレーティングシステムサポートによって実行可能であり、または、仮想マシンコンテキストで対応するジャストインタイム（ＪＩＴ）コードを実行可能である。しかし、もしアクセラレータ仮想デバイス２０８がサポートされるならば、方法３００はブロック３２０へ進む。理解されるべきことは、いくつかの実施形態では、方法３００の複数の他の段階（例えばブロック３０４など）ではアクセラレータ仮想デバイス２０８がサポートされないことを、コンピューティングデバイス１００が決定し得ることである。いくつかの実施形態では、アクセラレータ仮想デバイス２０８がサポートされないとコンピューティングデバイス１００が決定するいかなるポイントにおいても、方法３００は、コード実行を行うべくコンピューティングデバイス１００が従来の仮想マシンを用いるブロック３１８へ、直接進む。
【００１７】
ブロック３２０において、コンピューティングデバイス１００は、ソフトウェア実行をアクセラレーションするべきかどうか決定する。例えば、いくつかの実施形態では、コンピューティングデバイス１００は、どのコードアクセラレーションが望まれるかについて新たなソフトウェアアプリケーションまたは他のコードがいつ実行されるかを決定する。いくつかの実施形態では、バイトコードのアクセラレーションは、中間状態を可視化することなく、ｘ８６アーキテクチャレベルで自動的に実行される。理解されるべきことは、いくつかの実施形態では、複数のコードまたは複数のスレッドが方法３００を用いて同時に（例えば、並列して）アクセラレーションされてもよいことである。もしアクセラレーションされるべきソフトウェアまたは他のコードが存在するとコンピューティングデバイス１００が決定するならば、コンピューティングデバイス１００はブロック３２２でアクセラレータランタイムライブラリ２０４にアクセスする、または、それを開く。いくつかの実施形態では、もしコンピューティングデバイス１００はアクセラレータランタイムライブラリ２０４にアクセスできなければ、方法３００は、コンピューティングデバイス１００がコード実行用に従来の仮想マシンを使用するブロック３１８に戻る。
【００１８】
ここで図４を参照すると、ブロック３２４では、コンピューティングデバイス１００は、コンテキスト（例えば、スレッドコンテキスト）をアクセラレータ仮想デバイス２０８に割り当てる。ソフトウェアアプリケーションの各々のインスタンスに関連するバイトコードは、一般的に必ずしもそうではないが、単一のスレッド上で概ね実行される。このように、コンテキストをアクセラレータ仮想デバイス２０８に割り当てる際に、コンピューティングデバイス１００は、アクセラレーションされるべきソフトウェアがどのスレッド上で動作しているかについて決定可能である。さらに、ブロック３２６において、コンピューティングデバイス１００は、アクセラレーションされるべきソフトウェアアプリケーションと関連した仮想メモリにメモリマップドＩ／Ｏ（ブロック３１２を参照）のために予約された物理メモリ１０６をマッピングする。物理メモリを仮想メモリにマッピングすることは、仮想マシン２０２がオペレーティングシステムを「トラップする」ことなくアクセラレーションをトリガするべく、メモリマップドＩ／Ｏアドレスへ直接分岐することを可能にする。
【００１９】
ブロック３２８〜３４２で説明されるように、コンピューティングデバイス１００は、例えば、方法３００を用いて、特定のスレッドのコード実行をアクセラレーションしてもよい。ブロック３２８において、コンピューティングデバイス１００はスレッド上で次のバイトコードまたは命令にアクセスしてもよい。次に、コンピューティングデバイス１００は、アクセスされたバイトコードがＯＳ依存であるかどうかを、ブロック３３０で決定してもよい。すなわち、コンピューティングデバイス１００は、ＯＳサポートがバイトコードの実行を必要とされるかどうかを決定する。いくつかの実施形態では、例えば、ＯＳ依存バイトコードは、Ｉ／Ｏ動作などの複数の動作を対象とするバイトコードを含む。しかし、ＯＳに依存しないバイトコードは、例えば、単純な数学的計算（例えば演算ロジックユニット（ＡＬＵ）によって実行されるもの）を実行するべく、バイトコードを含む。もしコンピューティングデバイス１００はバイトコードがＯＳ依存でないと決定したならば、そのときは、コンピューティングデバイス１００はハードウェアアクセラレータ１０８および／またはバイトコードアクセラレーションサポート１１４を用いて、ブロック３３４でバイトコードのハードウェアアクセラレーションを実行する。その際に、ブロック３３６では、コンピューティングデバイス１００は、アクセラレータ仮想デバイス２０８の内部動的バイナリ変換モジュール２１０を用いて、バイトコードの動的バイナリ変換を実行する。
【００２０】
いくつかの実施形態では、内部動的バイナリ変換モジュール２１０は、例えば、アクセラレータ仮想デバイス２０８と関連したメモリマップドＩ／Ｏ空間に複数のリードおよびライト動作を理解するべく、メモリ障害トラップとしてメモリマップドＩ／Ｏを使用可能である。このように、内部動的バイナリ変換モジュール２１０は、メモリマップドＩ／Ｏ空間へのリードまたはライトメモリに対する複数のｘ８６命令（すなわち、アクセラレーションされるもの）と、正常なメモリ空間へのリードまたはライトメモリに対する複数のｘ８６命令（すなわち、アクセラレーションされないもの）との間を識別することができる。これは、一部がＯＳ依存バイトコードを含むすべてのリードおよびライト動作をインターセプトする労力を内部動的バイナリ変換モジュール２１０が強いられるのを抑え、メモリマップドＩ／Ｏ空間を対象とする動作だけがハードウェアによってアクセラレーションされる。内部動的バイナリ変換モジュール２１０は、メモリマップドＩ／Ｏ空間への呼び出しをさえぎり、ハードウェアアクセラレータ１０８および／またはバイトコードアクセラレーションサポート１１４を用いてコードをアクセラレーションする場合がある。いくつかの実施形態では、メモリマップドＩ／Ｏ空間は、単に、リターンコマンドを含み、このリターンコマンドは、コードがアクセラレーションされて、内部動的バイナリ変換モジュール２１０がメモリマップドＩ／Ｏ空間への呼び出し先アドレスにコードを戻した後に、コードは、それが呼び出されたコード内のポイントにさらに戻ることができるようにする。
【００２１】
コンピューティングデバイス１００はバイトコードがＯＳ依存であると決定する場合、コンピューティングデバイス１００はブロック３３８で任意の適したソフトウェアアクセラレーションメカニズムを用いてバイトコードのソフトウェアアクセラレーションを実行する。いくつかの実施形態では、ブロック３４０では、コンピューティングデバイス１００はＯＳサポートでＯＳ依存バイトコードを実行し、さらに、ハードウェアアクセラレータ１０８またはバイトコードアクセラレーションサポート１１４を用いることなく、可能な限りコードをアクセラレーションする。いくつかの実施形態では、ＯＳ依存バイトコードは、仮想マシン２０２を用いて、処理される。そのような実施形態において、アクセラレータ仮想デバイス２０８は、それらのバイトコードを処理するべく、アクセラレータ仮想デバイス２０８から仮想マシン２０２に戻るためのサポートを提供する。
【００２２】
コンピューティングデバイス１００がブロック３２８でアクセスされるバイトコードをアクセラレーションした後（すなわちブロック３３４のハードウェアアクセラレーションまたはブロック３３８のソフトウェアアクセラレーションを用いて）、コンピューティングデバイス１００は、ソフトウェアスレッドの末尾にブロック３４２で達したかどうを決定する。もし達していなければ、方法３００は、コンピューティングデバイス１００がそのスレッドの次のバイトコードにアクセスするブロック３２８に戻る。しかし、スレッドの末尾に達した場合、コンピューティングデバイス１００はブロック３４４でアクセラレータ仮想デバイスコンテキストを解放する。いくつかの実施形態では、コンピューティングデバイス１００はアクセラレータ仮想デバイスコンテキストをソフトウェアの仮想メモリからアンマッピングまたは分離する。方法３００は、ブロック３２０に戻り、コンピューティングデバイス１００は、別のソフトウェアの実行をアクセラレーションするべきかどうかを決定する。上記のように、いくつかの実施形態では、複数のスレッドが並列して、および／または連続して、アクセラレーションされてもよい。いくつかの実施形態では、パフォーマンスクリティカルではない１または複数のＯＳ非依存バイトコードは、メモリマップドＩ／Ｏを用いるよりはむしろ、複数のＯＳ依存バイトコードと同様に、実行されてもよい。
【００２３】
実施形態において、アクセラレータ仮想デバイス２０８は、例えばＤａｌｖｉｋバイトコードをアクセラレーションするために用いられる、所謂、共設計フレキシブルアクセラレータ（ＣＤＦＡ）デバイスとして、実装されてもよい。表１の疑似コードは、ＣＤＦＡサポートをレバレッジする仮想マシン２０２の実装の一実施形態を示す。
【表１】
2015534184.tif 000003
表１は、ＣＤＦＡをレバレッジする仮想マシンの例を示す。
【００２４】
表２の疑似コードは、ＣＤＦＡ実行時（例えば、アクセラレータランタイムライブラリ２０４）の実装例を示す。
【表２】
2015534184.tif 000004
表２は、ＣＤＦＡ実行時の実装の例を示す。
【００２５】
表３の疑似コードは、Ｄａｌｖｉｋバイトコードをアクセラレーションするための仮想ＰＣＩデバイスとしてモデル化されるＣＤＦＡデバイスドライバ（例えば、ＯＳアクセラレータデバイスドライバ２０６）の例を示す。
【表３】
2015534184.tif 000005
表３は、ＣＤＦＡデバイスドライバの例を示す。
【００２６】
表４の疑似コードは、内部動的バイナリ変換モジュール２１０を用いて仮想ＰＣＩ  ＣＤＦＡデバイスを実装する例を示す。
【表４】
2015534184.tif 000006
表４は、仮想ＰＣＩ  ＣＤＦＡデバイスを実装する例を示す。
【００２７】
もちろん、上述の表１〜４とそれらの中にある疑似コードとが複数の特定の実装を対象にしており、例示のために提供されていることを理解されるべきである。本明細書中で議論される複数の概念は、限られたものではなく、開示された複数の概念の複数の実装は、前述された異なる疑似コードを持つようにして作成されてもよい。  実施例
【００２８】
本明細書中に開示された複数のデバイス、システム、および方法に関する複数の例示的実施例を以下に提供する。複数のデバイス、システム、および方法の実施形態として、後述する複数の実施例の任意の１または複数、あるいはそれらの任意の組み合わせを挙げることができる。
【００２９】
実施例１は、柔軟なコードアクセラレーションを実行するためのコンピューティングデバイスを備える。このコンピューティングデバイスは、複数の命令を格納して有する物理メモリと、アクセラレータ仮想デバイス、アクセラレータ仮想デバイスオペレーティングシステムドライバ、および仮想マシンを確立するために複数の命令を実行するプロセッサとを備え、仮想マシンは、アクセラレータ仮想デバイスオペレーティングシステムドライバを用いて、（ｉ）ソフトウェアコードのアクセラレーションを促すべく、アクセラレータ仮想デバイスを初期化すること、および（ｉｉ）アクセラレータ仮想デバイスにアクセスするためのメモリマップＩ／Ｏとして、物理メモリの一部分を割り当てること、ならびに、アクセラレータ仮想デバイスは、アクセラレーションされるべきソフトウェアコードのバイトコードがオペレーティングシステム依存バイトコードであるかどうかを決定する。
【００３０】
実施例２は、実施例１の開示内容を備え、ここで、仮想マシンは、（ｉ）メモリマップＩ／Ｏのために予約されるべきメモリのサイズを決定すること、および、（ｉｉ）予約されるメモリの決定済サイズとサイズが一致する一部分であるメモリマップＩ／Ｏ用に物理メモリの一部分を予約することによって、メモリマップＩ／Ｏを割り当てることである。
【００３１】
実施例３は、実施例１または２のいずれかの開示内容を備え、ここで、仮想マシンは、アクセラレーションされるべきソフトウェアコードにアクセラレータ仮想デバイスコンテキストを割り当てるように、さらに構成されている。
【００３２】
実施例４は、実施例１から３のいずれかの開示内容を備え、ここで、仮想マシンは、アクセラレーションされるべきソフトウェアコードのインスタンスに関連した仮想メモリに予約物理メモリをマッピングすることによって、アクセラレータ仮想デバイスコンテキストを割り当てるように、さらに構成されている。
【００３３】
実施例５は、実施例１から４のいずれかの開示内容を備え、ここで、予約物理メモリの各々のアドレスは、異なるアクセラレータ仮想デバイスコンテキストと関連している。
【００３４】
実施例６は、実施例１から５のいずれかの開示内容を備え、ここで、仮想マシンは、ソフトウェアコードのインスタンスがどのスレッド上で実行されるかを決定することによって、アクセラレータ仮想デバイスコンテキストを割り当てるように、さらに、構成されている。
【００３５】
実施例７は、実施例１から６のいずれかの開示内容を備え、ここで、仮想マシンは、スレッドの末尾を特定することに応答して仮想メモリからアクセラレータ仮想デバイスをアンマッピングすることで、割り当てられたアクセラレータ仮想デバイスコンテキストを解放するように、さらに構成されている。
【００３６】
実施例８は、実施例１から７のいずれかの開示内容を備え、ここで、アクセラレータ仮想デバイスは、バイトコードがオペレーティングシステム依存バイトコードでないとの決定に応答してメモリマップＩ／Ｏを用いることによって、バイトコードのハードウェアアクセラレーションを実行するように設定されている。
【００３７】
実施例９は、実施例１から８のいずれかの開示内容を備え、ここで、仮想マシンは、メモリマップＩ／Ｏを介してハードウェアアクセラレーションをトリガするべく、予約物理メモリ内でアドレスに直接分岐するように設定されている。
【００３８】
実施例１０は、実施例１から９のいずれかの開示内容を備え、予約物理メモリへの複数のリードおよびライト呼び出しをインターセプトして、ハードウェアアクセラレーションを実行する内部動的バイナリ変換モジュールをさらに備え、予約物理メモリ内の各アドレスはリターン命令のみを格納する。
【００３９】
実施例１１は、実施例１から１０のいずれかの開示内容を備え、ここで、仮想マシンは、アクセラレータ仮想デバイスをアクセラレータ仮想デバイスオペレーティングシステムドライバに関連付けけることによってアクセラレータ仮想デバイスを初期化する。
【００４０】
実施例１２は、実施例１から１１のいずれかの開示内容を備え、ここで、アクセラレータ仮想デバイスは、バイトコードのハードウェアアクセラレーションを実行するべく、内部動的バイナリ変換モジュールを備える。
【００４１】
実施例１３は、実施例１から１２のいずれかの開示内容を備え、ここで、プロセッサは、内部動的バイナリ変換モジュールを備える。
【００４２】
実施例１４は、実施例１から１３のいずれかの開示内容を備え、ここで、仮想マシンは、バイトコードがオペレーティングシステム依存バイトコードであると決定することに応答してバイトコードのソフトウェアアクセラレーションを、さらに実行する。
【００４３】
実施例１５は、実施例１から１４のいずれかの開示内容を備え、ここで、プロセッサは、複数のオペレーティングシステムサポートを用いて、オペレーティングシステム依存バイトコードを実行する。
【００４４】
実施例１６は、実施例１から１５のいずれかの開示内容を備え、ここで、プロセッサは、バイトコードのハードウェアアクセラレーションを実行するべく、バイトコードアクセラレーションサポートを有する。
【００４５】
実施例１７は、実施例１から１６のいずれかの開示内容を備え、バイトコードのハードウェアアクセラレーションを実行するべく、ハードウェアアクセラレータを、さらに備える。
【００４６】
実施例１８は、コンピューティングデバイスに対して柔軟なコードアクセラレーションを実行するための方法を備える。この方法は、コンピューティングデバイス上で、ソフトウェアコードのアクセラレーションを促すべく、アクセラレータ仮想デバイスを初期化する段階と、アクセラレータ仮想デバイスにアクセスするためのメモリマップＩ／Ｏとしてコンピューティングデバイスのメモリの一部分を割り当てる段階と、コンピューティングデバイス上で、アクセラレーションされるべきソフトウェアコードのバイトコードがオペレーティングシステム依存バイトコードであるかどうかを決定する段階と、を備える。
【００４７】
実施例１９は、実施例１８の開示内容を備え、ここで、メモリマップＩ／Ｏを割り当てる段階は、アクセラレータ仮想デバイスをアクセラレータ仮想デバイスランタイムライブラリに関連付けける段階を有する。
【００４８】
実施例２０は、実施例１８および実施例１９の開示内容を備え、ここで、メモリマップＩ／Ｏを割り当てる段階は、コンピューティングデバイス上で、メモリマップＩ／Ｏのために予約されるべきメモリのサイズを決定する段階と、コンピューティングデバイス上で、予約されるべきメモリの決定済サイズとサイズが一致する部分である、コンピューティングデバイスの物理メモリの一部分を予約する段階とを、備える。
【００４９】
実施例２１は、実施例１８から２０のいずれかの開示内容を備え、アクセラレーションされるべきソフトウェアコードにアクセラレータ仮想デバイスコンテキストをコンピューティングデバイス上で、割り当てる段階を、さらに備える。
【００５０】
実施例２２は、実施例１８から２１のいずれかの開示内容を備え、ここで、アクセラレータ仮想デバイスコンテキストを割り当てる段階は、実行されるソフトウェアコードのインスタンスに関連する仮想メモリに物理メモリをマッピングする段階を備える。
【００５１】
実施例２３は、実施例１８から２２のいずれかの開示内容を備え、ここで、アクセラレータ仮想デバイスコンテキストを割り当てる段階は、物理メモリの各アドレスを異なるアクセラレータ仮想デバイスコンテキストに予約する段階を備える。
【００５２】
実施例２４は、実施例１８から２３のいずれかの開示内容を備え、バイトコードがオペレーティングシステム依存バイトコードでないとの決定に応答してメモリマップＩ／Ｏを用いることによって、バイトコードのハードウェアアクセラレーションを実行する段階を、さらに備える。
【００５３】
実施例２５は、実施例１８から２４のいずれかの開示内容を備え、ここで、バイトコードのハードウェアアクセラレーションを実行する段階は、ハードウェアアクセラレーションをトリガするべく、メモリマップＩ／Ｏのアドレスに直接分岐する段階を備える。
【００５４】
実施例２６は、実施例１８から２５のいずれかの開示内容を備え、ここで、アクセラレータ仮想デバイスコンテキストを割り当てる段階は、ソフトウェアコードのインスタンスがどのスレッド上でアクセラレーションされるかを決定する段階を備える。
【００５５】
実施例２７は、実施例１８から２６のいずれかの開示内容を備え、スレッドの末尾を特定することに応答して仮想メモリからアクセラレータ仮想デバイスをアンマッピングすることで、割り当てられたアクセラレータ仮想デバイスコンテキストを解放する段階を、さらに備える。
【００５６】
実施例２８は、実施例１８から２７のいずれかの開示内容を備え、ここで、アクセラレータ仮想デバイスを初期化する段階は、アクセラレータ仮想デバイスをアクセラレータ仮想デバイスのオペレーティングシステムドライバに関連付けける段階を備える。
【００５７】
実施例２９は、実施例１８から２８のいずれかの開示内容を備え、ここで、アクセラレータ仮想デバイスを初期化する段階は、仮想ペリフェラルコンポーネントインターコネクトデバイスとして、アクセラレータ仮想デバイスを初期化する段階を備える。
【００５８】
実施例３０は、実施例１８から２９のいずれかの開示内容を備え、ここで、バイトコードのハードウェアアクセラレーションを実行する段階は、バイトコードの動的バイナリ変換を実行する段階を備える。
【００５９】
実施例３１は、実施例１８から３０のいずれかの開示内容を備え、コンピューティングデバイス上で、アクセラレータ仮想デバイスがコンピューティングデバイスによってサポートされるかどうかを決定する段階と、アクセラレータ仮想デバイスがコンピューティングデバイスによってサポートされていないとの決定に応答して、コンピューティングデバイスの仮想マシン上でバイトコードを実行する段階と、をさらに備える。
【００６０】
実施例３２は、実施例１８から３１のいずれかの開示内容を備え、コンピューティングデバイス上で、バイトコードがオペレーティングシステム依存バイトコードであると決定することに応答してバイトコードのソフトウェアアクセラレーションを実行する段階を、さらに備える。
【００６１】
実施例３３は、実施例１８から３２のいずれかの開示内容を備え、ここで、バイトコードのソフトウェアアクセラレーションを実行する段階は、複数のオペレーティングシステムサポートを用いてオペレーティングシステム依存バイトコードを実行する段階を備える。
【００６２】
実施例３４は、コンピューティングデバイスを備える。このコンピューティングデバイスは、プロセッサと、このプロセッサによって実行された場合に、コンピューティングデバイスに実施例１８から３３のいずれかの方法を実行させる複数の命令が格納されたメモリとを備える。
【００６３】
実施例３５は、１または複数の機械可読ストレージ媒体を備える。この機械可読ストレージ媒体は、実行されていることに応答して、実施例１８から３３のいずれかの方法を実行するコンピューティングデバイスをもたらす、それに格納された複数の命令を有する。
【図１】
2015534184.tif 000007
【図２】
2015534184.tif 000008
【図３】
2015534184.tif 000009
【図４】
2015534184.tif 000010
【国際調査報告】
2015534184.tif 000011
2015534184.tif 000012