特許第6458959号(P6458959)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インテル・コーポレーションの特許一覧

特許6458959協調設計されたプロセッサ用動的言語アクセラレータ
<>
  • 特許6458959-協調設計されたプロセッサ用動的言語アクセラレータ 図000009
  • 特許6458959-協調設計されたプロセッサ用動的言語アクセラレータ 図000010
  • 特許6458959-協調設計されたプロセッサ用動的言語アクセラレータ 図000011
  • 特許6458959-協調設計されたプロセッサ用動的言語アクセラレータ 図000012
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6458959
(24)【登録日】2019年1月11日
(45)【発行日】2019年1月30日
(54)【発明の名称】協調設計されたプロセッサ用動的言語アクセラレータ
(51)【国際特許分類】
   G06F 9/455 20060101AFI20190121BHJP
【FI】
   G06F9/455 100
【請求項の数】19
【全頁数】21
(21)【出願番号】特願2016-550253(P2016-550253)
(86)(22)【出願日】2015年3月26日
(65)【公表番号】特表2017-508208(P2017-508208A)
(43)【公表日】2017年3月23日
(86)【国際出願番号】US2015022613
(87)【国際公開番号】WO2015148741
(87)【国際公開日】20151001
【審査請求日】2016年9月13日
(31)【優先権主張番号】14/225,755
(32)【優先日】2014年3月26日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】龍華国際特許業務法人
(72)【発明者】
【氏名】ワン、チェン
(72)【発明者】
【氏名】ウ、ヨウフェン
(72)【発明者】
【氏名】ロン、ホンボ
(72)【発明者】
【氏名】パク、ヒュンチュル
【審査官】 多胡 滋
(56)【参考文献】
【文献】 特開2006−127183(JP,A)
【文献】 特表2008−545284(JP,A)
【文献】 特開2004−030222(JP,A)
【文献】 特開2005−044336(JP,A)
【文献】 小池恵介,外6名,FPGAアクセラレータによるAndroidアプリケーションの高速化手法,情報処理学会 シンポジウム 組込みシステムシンポジウム 2011,日本,情報処理学会,2011年10月12日,pp.10-1-10-8
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455
(57)【特許請求の範囲】
【請求項1】
複数の命令を実行するプロセッサであって、少なくとも1つのコア及び動的言語アクセラレータを含み、前記動的言語アクセラレータと関連付けられたファイル記述子に関するメモリマップド入出力(MMIO)操作に応答してバイトコードを実行し、前記動的言語アクセラレータを用いて前記バイトコードを実行すべく、仮想マシンが、パス名を含むコールに従って、前記仮想マシンがアクセラレータを開くことが可能であると判断し、前記動的言語アクセラレータが前記バイトコードを実行している間、前記少なくとも1つのコアにおけるネイティブコードの実行をブロックし、システムコールを介して、前記動的言語アクセラレータをトリガする仮想マシンの仮想マシン状態に対して前記プロセッサのネイティブ状態のマッピングを構成し、前記仮想マシン状態はバイトコード状態を含み、識別子を前記仮想マシン状態と関連付け、前記動的言語アクセラレータに結合されたアクセラレータネイティブインタフェースをさらに備え、前記動的言語アクセラレータは、前記アクセラレータネイティブインタフェースを介して、ネイティブライブラリにコールバックし、前記ネイティブライブラリを用いて前記仮想マシン用の関数を実行して、前記関数が実行された後に、前記動的言語アクセラレータにおいて前記バイトコードの実行を継続する、プロセッサと、
前記プロセッサに結合されたシステムメモリと、
を備える、
システム。
【請求項2】
前記動的言語アクセラレータはハードウェア割り込みに応答して実行を中断し、前記プロセッサは前記ネイティブコードを実行して前記ハードウェア割り込みを処理し、前記ハードウェア割り込みが処理された後に、前記プロセッサは前記動的言語アクセラレータを再度トリガする、
請求項1に記載のシステム。
【請求項3】
前記動的言語アクセラレータは、前記ネイティブコードの実行の前に、前記識別子と関連付けられた前記バイトコード状態を記憶する、
請求項2に記載のシステム。
【請求項4】
前記仮想マシンは、前記ハードウェア割り込みが処理された後に、少なくとも1つのバイトコードを解釈し、その後、前記動的言語アクセラレータを再度トリガする、
請求項2又は3に記載のシステム。
【請求項5】
前記動的言語アクセラレータは、前記動的言語アクセラレータの実行中に生じた例外に応答して、前記例外を引き起こしたバイトコード命令の前の前記バイトコードの命令において実行を中断し、
前記プロセッサは、その後、前記バイトコードの少なくとも1つのバイトコード命令を解釈し、ネイティブ例外ハンドラを実行して前記例外を処理し、次に前記動的言語アクセラレータを再度トリガする、
請求項1から4の何れか一項に記載のシステム。
【請求項6】
プロセッサの動的言語アクセラレータを用いてバイトコードを実行すべく、仮想マシンが、パス名を含むコールに従って、前記仮想マシンがアクセラレータを開くことが可能であると判断し、前記動的言語アクセラレータ用のアクセラレータマッピング及び仮想マシン状態を構成し、前記仮想マシン状態を仮想マシンの識別子と関連付ける段階と、
入出力操作を実行して前記動的言語アクセラレータにおいて前記バイトコードの実行をトリガし、前記動的言語アクセラレータが前記バイトコードを実行している間、前記プロセッサのコアにおけるネイティブコードの実行をブロックする段階と、
前記動的言語アクセラレータのアクセラレータネイティブインタフェースを介して、ネイティブライブラリをコールし、前記動的言語アクセラレータ用の関数を処理する段階であって、前記プロセッサが、前記ネイティブライブラリを用いて前記仮想マシン用の関数を実行して、前記関数が実行された後に、前記動的言語アクセラレータにおいて前記バイトコードの実行を継続する、段階と、
前記動的言語アクセラレータが前記バイトコードの少なくとも一部を実行した後に、前記仮想マシンにおいて前記バイトコードの少なくとも1つのバイトコードを解釈する段階と、
を備える、
方法。
【請求項7】
ハードウェア割り込みに応答して、前記識別子と関連付けられたバイトコード状態を記憶し、その後、前記動的言語アクセラレータを中断し、ネイティブコードを実行して前記ハードウェア割り込みを処理する段階をさらに備える、
請求項6に記載の方法。
【請求項8】
前記ネイティブコードを実行して前記ハードウェア割り込みを処理した後に、前記少なくとも1つのバイトコードを解釈し、その後、前記動的言語アクセラレータを再度トリガして前記バイトコードをさらに実行する段階をさらに備える、
請求項7に記載の方法。
【請求項9】
例外に応答して、前記識別子と関連付けられたバイトコード状態を記憶し、その後、前記例外の前の命令において前記動的言語アクセラレータを中断し、ネイティブ例外ハンドラを実行して前記例外を処理する段階をさらに備える、
請求項6から8の何れか一項に記載の方法。
【請求項10】
前記動的言語アクセラレータのアクセラレータネイティブインタフェースを介して、ネイティブライブラリをコールして前記動的言語アクセラレータ用の関数を処理する段階をさらに備える、
請求項6から9の何れか一項に記載の方法。
【請求項11】
請求項6から10の何れか一項に記載の方法を実行する手段を備える、装置。
【請求項12】
請求項6から10の何れか一項に記載の方法を実行する手順をコンピュータに実行させる、プログラム。
【請求項13】
請求項12に記載のプログラムを格納する、コンピュータ可読記憶媒体。
【請求項14】
プロセッサの動的言語アクセラレータを用いてバイトコードを実行すべく、仮想マシンが、パス名を含むコールに従って、前記仮想マシンがアクセラレータを開くことが可能であると判断し、前記動的言語アクセラレータ用のアクセラレータマッピング及び仮想マシン状態を構成し、前記仮想マシン状態を仮想マシンの識別子と関連付ける手段と、
入出力操作を実行して前記動的言語アクセラレータにおいて前記バイトコードの実行をトリガし、前記動的言語アクセラレータが前記バイトコードを実行している間、前記プロセッサのコアにおけるネイティブコードの実行をブロックする手段と、
前記動的言語アクセラレータのアクセラレータネイティブインタフェースを介して、ネイティブライブラリをコールし、前記動的言語アクセラレータ用の関数を処理する手段であって、前記プロセッサが、前記ネイティブライブラリを用いて前記仮想マシン用の関数を実行して、前記関数が実行された後に、前記動的言語アクセラレータにおいて前記バイトコードの実行を継続する、手段と、
前記動的言語アクセラレータが前記バイトコードの少なくとも一部を実行した後に、前記仮想マシンにおいて前記バイトコードの少なくとも1つのバイトコードを解釈する手段と、
を備える、
システム。
【請求項15】
前記動的言語アクセラレータが開かれることが可能かどうかを判断し、可能でなければ、前記仮想マシンにおいて前記バイトコードを解釈する手段をさらに備える、
請求項14に記載のシステム。
【請求項16】
前記仮想マシンにおいて前記少なくとも1つのバイトコードを前記解釈した後に、前記動的言語アクセラレータにおいて前記バイトコードの実行を再度トリガする手段をさらに備える、
請求項14又は15に記載のシステム。
【請求項17】
ハードウェア割り込みに応答して、前記識別子と関連付けられたバイトコード状態を記憶し、その後、前記動的言語アクセラレータを中断し、ネイティブコードを実行して前記ハードウェア割り込みを処理する手段をさらに備える、
請求項14から16の何れか一項に記載のシステム。
【請求項18】
前記ネイティブコードを実行して前記ハードウェア割り込みを処理した後に、前記少なくとも1つのバイトコードを解釈し、その後、前記動的言語アクセラレータを再度トリガして前記バイトコードをさらに実行する手段をさらに備える、
請求項17に記載のシステム。
【請求項19】
例外に応答して、前記識別子と関連付けられたバイトコード状態を記憶し、その後、前記例外の前の命令において前記動的言語アクセラレータを中断し、ネイティブ例外ハンドラを実行して前記例外を処理する手段をさらに備える、
請求項14から18の何れか一項に記載のシステム。
【発明の詳細な説明】
【背景技術】
【0001】
いわゆるハードウェア(HW)/ソフトウェア(SW)の協調設計手法は、x86命令セットアーキテクチャ(ISA)の後方互換性の問題を持たずに、パフォーマンス効率のよいプロセッサ(例えば、中央処理ユニット(CPU))の設計を可能にする。パフォーマンス効率のよいCPUは、内部実装ISAを(例えば、マイクロ操作(uops)の形で)実装し、内部コードモーフィングソフトウェア(CMS)が、x86コードを実行用の内部実装ISAのコードに変換することで、CPU上でx86コード実行をエミュレートする。しかしながら、そのような変換を実行する際には複雑なことが多く、プロセッサ効率に影響し得る。これらの複雑なことの中には、Java(登録商標)/JavaScript(登録商標)/PHPなどの動的言語を可能にする仮想マシンにおいて実行時(JIT)コンパイルを実行する上でのオーバヘッドがある。これらの言語は、内部実装ISAへの変換を達成すべく、異なるプラットフォーム上でポータブルバイトコードを実行するよう設計されている。
【図面の簡単な説明】
【0002】
図1】コード実行をアクセラレーションするためのコンピューティングデバイスの少なくとも1つの実施形態の簡略ブロック図である。
【0003】
図2図1のコンピューティングデバイスの環境の少なくとも1つの実施形態の簡略ブロック図である。
【0004】
図3】本発明の別の実施形態に係るプロセッサのブロック図である。
【0005】
図4】本発明の一実施形態に係る方法のフロー図である。
【発明を実施するための形態】
【0006】
様々な実施形態において、HW/SW協調設計動的言語アクセラレータがプロセッサに提供され、仮想マシン(VM)でのJITコンパイルの必要がなく、アクセラレータインタフェースを介してバイトコードが効率的に動作することを可能にする。
【0007】
ここで図1を参照すると、コード実行をアクセラレーションし、本明細書で説明される機能を実行することが可能な任意の種類のコンピューティングデバイスとして、コンピューティングデバイス100が具現化され得る。例えば、コンピューティングデバイス100は、携帯電話、スマートフォン、タブレットコンピューティングデバイス、携帯情報端末、メッセージングデバイス、民生用電子デバイス、ハンドセット、ラップトップコンピュータ、デスクトップコンピューティング、及び/又は他のコンピューティング/通信デバイスとして具現化され得る。図1に示されるように、例示のコンピューティングデバイス100は、プロセッサ102、入出力(I/O)サブシステム104、メモリ106、ハードウェアアクセラレータ108、1又は複数の周辺デバイス110、及びデータストレージ112を含む。もちろん、他の複数の実施形態では、コンピューティングデバイス100は、コンピューティングデバイスで一般にみられるものなど(例えば、様々な入出力デバイス)、他の又は追加の複数のコンポーネントを含み得る。さらに、いくつかの実施形態では、例示の複数のコンポーネントのうちの1又は複数は、別のコンポーネントに組み込まれ得るか、そうでなければその一部を形成し得る。例えば、いくつかの実施形態では、メモリ106、又はその複数の部分は、プロセッサ102に組み込まれ得る。
【0008】
プロセッサ102は、本明細書で説明される複数の機能を実行することが可能な任意の種類のプロセッサとして具現化され得る。例えば、プロセッサは、シングル又はマルチコアプロセッサ、デジタルシグナルプロセッサ、マイクロコントローラ、あるいは他のプロセッサ又は処理/制御回路として具現化され得る。同様に、メモリ106は、本明細書で説明される複数の機能を実行することが可能な任意の種類の揮発性又は不揮発性メモリ、あるいはデータストレージとして具現化され得る。動作中、メモリ106は、コンピューティングデバイス100の動作中に用いられる、オペレーティングシステム、アプリケーション、プログラム、ライブラリ、及びドライバなどの様々なデータ及びソフトウェアを格納し得る。メモリ106は、プロセッサ102にI/Oサブシステム104を介して通信可能に結合され、I/Oサブシステム104は、コンピューティングデバイス100のプロセッサ102、メモリ106、及び他の複数のコンポーネントとの入出力操作を容易にする回路及び/又はコンポーネントとして具現化され得る。例えば、I/Oサブシステム104は、メモリコントローラハブ、入出力制御ハブ、ファームウェアデバイス、通信リンク(例えば、ポイントツーポイントリンク、バスリンク、ケーブル、ライトガイド、プリント回路基板配線など)、及び/又は、他の複数のコンポーネント及びサブシステムとして具現化されるか、そうでなければそれらを含み得て、入出力操作を容易にする。いくつかの実施形態では、I/Oサブシステム104は、SoCの一部を形成し、コンピューティングデバイス100のプロセッサ102、メモリ106、及び他の複数のコンポーネントと共に、単一の集積回路チップに組み込まれ得る。さらに、いくつかの実施形態では、プロセッサ102は、コード実行をアクセラレーションするバイトコードアクセラレーションサポート114を含む。バイトコードアクセラレーションサポート114は、プロセッサ102上で実行される1又は複数の命令又はバイトコードの実行をアクセラレーションすることが可能、且つ本明細書で説明される複数の機能を実行することが可能な任意の種類のコンポーネント又は回路として具現化され得る。
【0009】
ハードウェアアクセラレータ108は、ソフトウェアアプリケーションと関連する1又は複数の命令又はバイトコードの実行をアクセラレーションすることが可能、且つ本明細書で説明される複数の機能を実行することが可能な任意の種類のハードウェアデバイス又はコンポーネントとして具現化され得る。例えば、ハードウェアアクセラレータ108は、グラフィックスアクセラレータ、浮動小数点アクセラレータ、又は他のハードウェアアクセラレータデバイスとして具現化されるか、そうでなければそれを含み得る。以下に論じられるように、いくつかの実施形態では、ハードウェアアクセラレータ108は、コンピューティングデバイス100のオペレーティングシステム(OS)に依存しないコードをアクセラレーションするよう構成され得る。いくつかの実施形態では、ハードウェアアクセラレータ108は、コンピューティングデバイス100の1又は複数の他のコンポーネントと共に、SoCの一部を形成し得る。
【0010】
コンピューティングデバイス100の周辺デバイス110は、任意の数の周辺/インタフェースのデバイス又はコンポーネントを含み得る。例えば、周辺デバイス110は、リモートデバイスと通信する通信回路を含み得る。周辺デバイス110に含まれる複数の特定のデバイスは、例えば、コンピューティングデバイス100の使用目的に依存し得る。データストレージ112は、例えば、メモリデバイス及び回路、メモリカード、ハードディスクドライブ、ソリッドステートドライブ、又は他のデータストレージデバイスなど、データの短期又は長期保管用に構成された任意の種類の1又は複数のデバイスとして具現化され得る。
【0011】
図2に示されるように、コンピューティングデバイス100は、コードをアクセラレーションするための環境200を確立し得る。例示の実施形態における環境200は、仮想マシン202、アクセラレータランタイムライブラリ204、OSアクセラレータデバイスドライバ206、アクセラレータ仮想デバイス208、及び内部動的バイナリ変換モジュール210を含むソフトウェア環境を提供する。
【0012】
仮想マシン202は、コンピューティングデバイス100を調べて、アクセラレータ仮想デバイス208がコンピューティングデバイス100によりサポートされるかどうかを、例えば、I/O命令又は他のソフトウェアI/Oインタフェースを用いて判断し得る。アクセラレータランタイムライブラリ204は、アクセラレータ仮想デバイス208のアプリケーションプログラミングインターフェース(API)を実装し得る。そうすることで、アクセラレータランタイムライブラリ204は、アクセラレータ仮想デバイス208がOSアクセラレータデバイスドライバ206及びメモリマップドI/Oを介してアクセスされることを可能にする。以下に論じられるように、いくつかの実施形態では、OSアクセラレータデバイスドライバ206は、アクセラレータ仮想デバイス208を初期化するためだけに用いられる。その後、アクセラレータ仮想デバイス208は、メモリマップドI/Oを介してアクセスされ、コードアクセラレーションをトリガし得る。OSアクセラレータデバイスドライバ206は、例えば、標準的なオペレーティングシステムI/O命令を用いて、アクセラレータ仮想デバイス208を初期化するのに用いられ得る。アクセラレータ仮想デバイス208は、コード実行をアクセラレーションするのに用いられ得る内部動的バイナリ変換モジュール210を含み得る。いくつかの実施形態では、内部動的バイナリ変換モジュール210は、ハードウェアアクセラレータ108、及び/又は、バイトコードアクセラレーションサポート114を用いて、非ISAコード(例えば、Dalvikバイトコード、JavaScript(登録商標)、HTML5など)を内部ISAコードに透過的に変換することで、アクセラレータ仮想デバイス208を仮想化する。例示の実施形態を含むいくつかの実施形態では、内部動的バイナリ変換モジュール210は、プロセッサ102の内部にあり、コンピューティングデバイス100のオペレーティングシステムを含む外部のソフトウェアには透過的である。このように、内部動的バイナリ変換モジュール210ではなく、アクセラレータ仮想デバイス208を外部のソフトウェアは認識し得る。さらに、いくつかの実施形態では、内部動的バイナリ変換モジュール210は、内部ISA内の様々なハードウェアアクセラレータサポートを利用して、コードを異なる言語から透過的に変換し得る。
【0013】
ここで図3を参照すると、本発明の別の実施形態に係るプロセッサのブロック図が示される。図3に示されるように、プロセッサ300は、HW/SW協調設計動的言語アクセラレータを介してバイトコード実行を実行するよう構成される。図3の例示では、プロセッサ300は、I/O操作を介してVM/OS310をプロセッサと接続するx86−ISAインタフェースを含む複数のインタフェースを含む。さらに、例えばVM及び同時に動作するアクセラレータデバイスドライバから受信されたバイトコード315の通信を可能にすべく、動的言語アクセラレータインタフェースが存在する。
【0014】
図3にさらに示されるように、様々な変換を実行して内部実装ISAフォーマットでコードを生成し得るコードモーフィングソフトウェア(CMS)ユニット320に複数の着信操作が提供され、これらは、一時ストレージ340(一実施形態において、これは所与のキャッシュメモリ、バッファなどであってよい)に格納され得る。さらに、バイトコードエミュレーションをトリガするために、着信バイトコードがバイトコードCMSユニット330に提供される。バイトコードCMSユニット330は、バイトコードエミュレーションを実行し、これにより内部実装ISAにコードを生成し得る。図に見られるように、このコードは、1又は複数のコア及び他のロジックを含み得るCPU350に提供され、例えば、本明細書で説明されるように動的言語アクセラレータを介して、バイトコードアクセラレーションサポートをさらに提供する。図3の実施形態では、このような高レベルで示されているが、多くの変形形態があり得ることを理解されたい。
【0015】
図3の実装では、x86コードがVM/OS310においてx86−ISAインタフェースを介して従来通り実行され、これにより内部CMSユニット320を介してx86コード実行がエミュレートされる。x86−ISAインタフェースに加えて、動的言語アクセラレータインタフェースも存在する。一実施形態を用いると、VM/OS310は標準的なx86I/O操作を用いて動的言語アクセラレータを管理し得る。これは、従来のハードウェアアクセラレータが他のプロセッサにおいて管理されるのと同じである。ここで、しかしながら、I/O信号をI/Oバス305に送信する代わりに、動的言語アクセラレータのためのx86I/O操作が、内部バイトコードCMS330を介してバイトコード実行のエミュレーションをトリガする。内部バイトコードCMS330は、特化されたバイトコードアクセラレーションサポートを持つパフォーマンス効率のよいCPU上で実行するために、バイトコードを内部実装ISAのコードに変換する。
【0016】
HW/SW協調設計動的言語アクセラレータには、そこでのプログラミングを従来のアクセラレータ上のプログラミングと異なったものにしている多くの新たな特性がある。本明細書で説明される複数の実施形態は、そのようなプログラミングを柔軟且つ効率的な方法で可能にする。
【0017】
本明細書で説明される複数の実施形態及び手法を用いて、HW/SW協調設計動的言語アクセラレータを用いるVM実装は以下のことを実現し得る。動的言語アクセラレータをサポートするのにISAの変更も拡張も提供されないという点でのISA透過性(言い換えれば、動的言語アクセラレータへのアクセスは、標準的なx86I/O操作を介する)、動的言語アクセラレータをサポートするのに既存のOS実装への変更が実装されないという点でのOS透過性(しかしながら、後述されるように、OSカーネルアクセラレータドライバが、既存のOSに任意で接続され、動的言語アクセラレーションを管理し得ることに留意されたい)、移植可能でない複雑なJITコンパイルをせずに、移植可能なバイトコードインタプリタをVMが実装し得るという点での移植性(いくつかの実施形態では、動的言語アクセラレータを介してバイトコードを実行すべく、小さな変更が既存のVM実装を移植するのに提供され得ることに留意されたい)、及び、動的言語アクセラレータが複数の異なるVM実装を柔軟にサポートし得るという点での柔軟性である。
【0018】
動的言語プログラムは、ユーザレベルの仮想マシンで実行される。他のHWアクセラレータと同じように、ユーザレベルのアプリケーション(VMなど)が、OSカーネルアクセラレータデバイスドライバへの標準的なOSコールを介して、動的言語アクセラレータデバイスにアクセスする。以下の表1は、システム例(これは、Linux(登録商標)ベースのシステムであり得る)のアクセラレータデバイスを開く/閉じるためのVM実装例を示す。VMがアクセラレータデバイスを開くことができない場合(CPU内の動的言語アクセラレータサポートの欠如、又はアクセラレータ用のOSカーネルドライバの欠如による)、VMはバイトコードを従来通りに実行し得る。そうでなければ、サポートが利用可能なときに、以下の表1にあるようなコールを用い、VMは、動的言語アクセラレータを用いてバイトコードを実行する。
【表1】
【0019】
動的言語アクセラレータには、そのプログラミングを従来のHWアクセラレータのプログラミングと異なったものにする複数の独特な特性がある。例えば、HWアクセラレータは、ブロッキングI/O操作及び非ブロッキングI/O操作の両方をサポートし得る。非ブロッキングI/O操作は、CPU上でx86コードと同時に動作するために、OS/ランタイムが、HWアクセラレータを効率的に管理するのに有用であり得る。しかしながら、動的言語アクセラレータは、x86コードと同じCPU上で実行を共有する。このように、動的言語アクセラレータは、ブロッキングI/O操作のみをサポートし得る。これにより、非ブロッキングI/O操作用の複雑な同期を考慮することなく、VMプログラミング及びCMS実装の両方が簡略化される。
【0020】
さらに、一般的に共有物理メモリに対するダイレクトメモリアクセス(DMA)を介してx86コードで通信するHWアクセラレータとは異なり、動的言語アクセラレータはコプロセッサのように動作し、x86コンテキスト/状態(例えば、x86レジスタ及び仮想メモリ)上で直接動く。この方式は、アクセラレータ実行とx86コード実行との間の明確な通信を必要とせずに、動的言語アクセラレータのプログラミングを簡略化するだけでなく、バイトコードがVMプロセスの特権レベルでのみ動作することになるので、バイトコード実行のセキュリティ制御も提供する。
【0021】
いかなるx86ISA変更も拡張もせずに、アクセラレータ上のバイトコード実行は、関数コールとして実装され得る。すなわち、以下の表2に示されるように、x86ブロッキングメモリマップドI/O操作が、アクセラレータ上のバイトコード実行をトリガするのに用いられ得る。トリガした後に、x86コード実行はブロックされ、アクセラレータは、バイトコードに対する通常の関数コールと同様にバイトコードを実行し始める。バイトコード実行が終了した後に、ブロックされたx86コード実行は、関数コール復帰と同様に再開される。
【表2】
【0022】
アクセラレータ上のバイトコード実行はx86状態を用いてバイトコード状態をエミュレートする。これは、バイトコード状態からx86状態へのマッピングに依存する。例えば、バイトコードレジスタR0がx86レジスタEAXにマッピングされ、次にR0を修正するバイトコードをエミュレートする場合、それに応じて、アクセラレータはx86レジスタEAXを修正する。内部では、x86コード実行におけるx86状態のエミュレーションと同様に、バイトコードCMSは、その内部実装ISA状態にx86状態を再びマッピングする。
【0023】
異なる複数のVMが、バイトコード状態からx86状態に、異なる複数のマッピングを実装し得る。異なる複数のVM実装をサポートすべく、複数のVMのそれぞれが、OSアクセラレータデバイスドライバを介して、動的言語アクセラレータ上にマッピングを柔軟に構成し得る。以下の表3はVM実装例を示す。ここでは、複数のVMが柔軟にサポートされ得るように、OSシステムコール(ioctl)がアクセラレータを構成するのに用いられる。
【表3】
【0024】
アクセラレータ実行をトリガするx86メモリマップドI/O操作は、アクセラレータ実行が終了するまでブロックするが、そのような操作は、アクセラレータ実行の潜在的に長いレイテンシに起因して、HW割り込み処理をブロックしなくてよい。そこで、HW割り込みの場合では、アクセラレータ実行が中断し、ブロックされたx86コード実行が再開し得る(つまり、ブロッキングI/O操作が終了する)。割り込みは、アクセラレータ実行に非同期的に発生し得るが、アクセラレータは、正確な状態を伴ってバイトコード命令境界で中断し得る。このようにVMは、割り込み処理後に、バイトコード実行を正しく再開し得る。様々なHW/SW協調設計手法が、x86実行における正確な割り込み状態と同様に、バイトコード実行における正確な割り込み状態を実現するのに用いられ得る。
【0025】
複数の割り込みに起因して、動的言語アクセラレータの実行は非確定的に中断し得る。このために、表4のように、最後のバイトコードが現れるまで、VMは、バイトコードアクセラレーションをループで繰り返しトリガし得る。
【表4】
【0026】
排他的アクセラレータアクセスが、アクセラレータを用いるソフトウェアに制限を加え得る。例えば、ソフトウェアは排他的アクセラレータを、他のソフトウェアがそれを用いている限り、開くことができない。コードがアクセラレータ上でタイムシェアリングによって動作し得るように、OSは一般的に共用アクセラレータアクセスをサポートする。共用アクセラレータアクセスでは、上記の表4にあるように、アクセラレータ実行の繰り返しトリガ間のHW割り込みが、コンテキストスイッチに、アクセラレータを用いて別の(場合によっては異なる)仮想マシンを動作させ得る。このように、(アクセラレータの構成を含む)バイトコード状態が、(例えば、バイトコードCMSを持つ)アクセラレータ内で内部に、動的言語アクセラレータ実行の繰り返しトリガにわたって(例えば、ステートレスアクセラレーションとして)維持され得ない。別の言い方をすれば、バイトコードアクセラレーションの各トリガは、(x86状態によりエミュレートされた)完全なバイトコード状態を入力としてアクセラレータ実行に明示的に提供し得て、アクセラレータが中断した後に、完全なバイトコード状態はアクセラレータから出力される。
【0027】
表5は、ステートレスアクセラレーションを持つVM実装例を示す。バイトコードアクセラレーションの各トリガは、アクセラレータの構成を介して、(バイトコード状態を含む)仮想マシン状態と関連付けられる識別子を提供する。次に、バイトコードアクセラレータは、識別子と関連付けられたバイトコード状態上で動く。
【表5】
【0028】
アクセラレータ実行中に例外も生じうる。例えば、VMアプリケーションの仮想メモリにおけるバイトコード実行は、ページング例外をトリガして仮想ページをスワップし得る。この例外は、管理されたランタイムを用いても、バイトコード実行において発生し得る。バイトコード命令ではなくx86命令がOS例外処理を発動することがわかることを例外ハンドラが要求し得るので、アクセラレータ実行中の例外処理は複雑になり得る。従って、一実施形態において、OS透過性を提供すべく、OS例外処理はアクセラレータ実行中に発動されない。その代わり、アクセラレータ実行は、例外を引き起こしたバイトコード命令の前で正確なバイトコード状態を伴って中断する。
【0029】
アクセラレータ実行は、いかなるOS例外処理も発動しないので、アクセラレータ実行の中断が例外により引き起こされる場合、表5のアクセラレータ実行の繰り返しトリガは先に進むことができない。このために、表6に示されるように、VMの移植可能なインタプリタが先に進むために用いられ得る。動的言語アクセラレータを持たない従来のVMにおけるバイトコードの解釈と同様に、アクセラレータ実行の繰り返しトリガ間で、1つのバイトコードが解釈される。このように、バイトコード解釈中に、例外が発動されて処理される。
【表6】
【0030】
動的言語アクセラレータに関する別の問題は、特定のバイトコード命令実行が、VM/OS依存ネイティブライブラリにコールし得るということである。例えば、メモリ割り当てバイトコード命令が、新たなメモリを割り当てるためにライブラリをコールし得る。これは、VM/OSのメモリ管理に依存し得る。別の例として、スレッド間の同期のために、同期バイトコード命令がランタイムライブラリをコールし得る。これは、VM/OSのスレッド/同期管理に依存し得る。そのような場合に、I/Oバイトコード命令がI/O操作のためにライブラリをコールする。これは、VM/OSのI/O管理に依存し得る。バイトコードは、ダイレクトネイティブライブラリコール(例えば、Java(登録商標)ネイティブインタフェース、又はJNI)もサポートし得る。異なるVM及びOSをサポートする柔軟性のために、そのようなVM/OS依存ライブラリコードは、動的言語アクセラレータにおいて実行され得ない。
【0031】
様々な手法が、VM/OS依存ライブラリを処理するのに用いられ得る。まず、例外に起因してアクセラレータ実行を中断するのと同様に、アクセラレータ実行が、VM/OS依存ライブラリをコールするバイトコードの前のバイトコード境界において、正確な状態を伴って中断させられ得る。次に、アクセラレータ実行に続くバイトコード解釈が上記の表6にあるように生じ、当然、これらのライブラリコールをVMにおいて実行し得る。
【0032】
VM/OS依存ライブラリと対話する別の、場合によってはより効率的な方法は、アクセラレータ実行中に、ネイティブ関数にコールバックすることである。しかしながら、アクセラレータ実行中にネイティブ関数にダイレクトコールバックすることには2つの問題がある。第1に、ネイティブライブラリコールインタフェースはVM依存があり得る。第2に、ISA透過性に関しては、ネイティブ関数はアクセラレータ実行に直接戻ることができず、アクセラレータ実行は、メモリマップドI/O操作によってのみトリガされ得る。従って、いくつかの実施形態では、アクセラレータネイティブインタフェースが定義され得て、これにより、アクセラレータ実行中に、ネイティブライブラリコール用のこのアクセラレータネイティブインタフェースにコールバックし得る。
【0033】
表7は、アクセラレータネイティブインタフェース例を示す。所与のアクセラレータが、このアクセラレータネイティブインタフェースで構成され得る。次に、ネイティブライブラリコールの場合、ネイティブ関数ポインタを伴ったアクセラレータネイティブインタフェースへのアクセラレータコールは、native_funcに入る。ネイティブ関数の実行後に、アクセラレータネイティブインタフェースは、メモリマップドI/Oを介してアクセラレータへの復帰をトリガし得る。
【表7】
【0034】
もちろん、上述された表1から7、及びその中の疑似コードは、特定の複数の実装を対象にしており、例示のために提供されることが理解されるべきである。本明細書で論じられる概念は、そのように限定されず、上述されたものとは異なる疑似コードを有する他の複数の実装が作成され得る。
【0035】
本明細書で説明される複数の実施形態及び手法を用いて、動的言語アクセラレータは、アクセラレータインタフェース、及びCMSにおける内部バイトコード変換を介して、バイトコード実行をアクセラレーションするよう動作する。動的言語アクセラレータの独特な特性が、動的言語アクセラレータをプログラミングする手法を提供し、ISA透過性、OS透過性、移植性、及び柔軟性を実現するのに活用され得る。
【0036】
ここで図4を参照すると。本発明の一実施形態に係る方法のフロー図が示される。概して、図4は、本明細書で説明されるように、動的言語アクセラレータを用いて、バイトコードアクセラレーションにおいて様々な動作を実行する方法を説明する。概して、方法400の様々な動作は、所与のプロセッサ上でVMの実行に関連して実行され得る。
【0037】
方法400は、VMがアクセラレータを開くことが可能かどうかを判断すること(ひし形405)から始まる。一実施形態において、この判断は、上記の表1で説明されたように行われ得て、ファイル記述子をアクセラレータと関連付けることで、パス名が動的言語アクセラレータに提供される。アクセラレータ用のサポートもドライバもない場合、処理はブロック410に進み、VM自体が、例えばバイトコード解釈により、バイトコードを実行するのに用いられ得ることに留意されたい。
【0038】
代わりに、VMがアクセラレータを開くことが可能であると判断される場合、処理はブロック415に進む。ここでは、アクセラレータが構成され得る。より具体的には、アクセラレータは、バイトコード状態からx86状態へのマッピングを用いて構成され、VM状態を識別子と関連付けるようさらに構成され得る。次の処理は、ひし形420に進む。ここでは、実行されるバイトコードが最後に達したかどうかが判断される。最後に達した場合、処理はブロック425に進み、処理はVMに戻り得る。
【0039】
そうでなければ、処理はブロック430に進む。ここでは、MMIO操作が実行されてアクセラレータ実行をトリガし、x86コードを操作からブロックし得る。このように、デバイス言語アクセラレータは、実装を簡略化するために、ブロッキング環境で動作する。従って、この段階で、アクセラレータ実行がブロック435で生じ、その間に、バイトコードの少なくとも一部が実行される。図4に見られるように、そのようなアクセラレータ実行中に、所与の一連のイベントのうちの1又は複数が生じたかどうかが判断され得る。
【0040】
より具体的には、さらに図4を参照すると、アクセラレータ実行中に、処理は次にひし形440に進む。ここでは、ハードウェア割り込みが発生したかどうかが判断され得る。発生した場合、識別子と関連付けられたバイトコード状態が、例えば、キャッシュメモリなどの一時ストレージに記憶され得る(ブロック450)。次に、処理はブロック455に進み、アクセラレータ実行が中断させられ得て、ブロックされたx86コードが実行され得る。そのようなx86コードは、割り込みと関連付けられ得て、割り込みハンドラ又は他のx86コードに対応し得る。
【0041】
このネイティブコード(例えば、割り込みハンドラ)の最後で、処理はブロック495に進む。ここでは、バイトコードの少なくとも1つのバイトコードが、VM内で解釈され得る。VMの移植可能なインタプリタを介したこのバイトコード解釈は、割り込み又は他のそのような状況が発動する状態において、先に進むことが行われるのを可能にすることに留意されたい。図に見られるように、処理は次に上述されたひし形420に戻る。
【0042】
アクセラレータ実行中に、ひし形440で判断されるように、ハードウェア割り込みが受信されなかった場合、処理はひし形460に進む。ここでは、ハードウェア例外が発生したかどうかが判断され得る。発生した場合、処理はブロック465に進み、識別子と関連付けられたバイトコード状態が、例えばキャッシュメモリに記憶され得る。その後、アクセラレータ実行は中断させられ得る(ブロック470)。より具体的には、例外がマスクされるように、アクセラレータ実行は例外の前の命令で中断させられ得る。この段階で、x86コードが実行され得る。より具体的には、x86コード実行は生じる例外をトリガし、これにより、例外的なイベントを処理する例外ハンドラなどのネイティブ例外コードをトリガする。そのような実行の後、処理は上述のひし形420に進み、(バイトコードが最後に達していない場合には)さらにアクセラレータ実行に進む。
【0043】
さらに図4を参照すると、ひし形460で判断されるように、ハードウェア例外が生じなかった場合、処理は代わりにひし形480に進む。ここで、ネイティブライブラリへのコールが、必要かどうかが判断され得る。必要な場合、処理はブロック490に進み、アクセラレータネイティブインタフェースを介して、ネイティブライブラリへのコールバックが生じ得る。このネイティブライブラリでは、必要な関数が実行され得て、関数の結果は、動的言語アクセラレータにおいてさらなるバイトコード実行に用いられ得る。そのような実行の後に、処理はひし形492に進み、最後のバイトコードが現れたかどうかを判断する。最後のバイトコードの場合、処理はVMに戻る。そうでなければ、処理はブロック435に進み、上述されたように、アクセラレータ内でバイトコードをさらに実行する。図4の実装ではこのような高レベルで示されているが、複数の変形形態が可能であり、本発明の範囲はこの点に限定されないことを理解されたい。
【0044】
HW/SW協調設計動的言語アクセラレータがOSより下で動作するので、アクセラレータはこうして、割り込み/例外問題を処理し得る。それに対して、従来の仮想マシンは、OSより上で動作し、割り込み/例外処理などのシステム問題によって影響されない。その理由は、OSがそれらの問題を透過的に処理するからである。また、x86コード(そのセマンティクスは所与のISAにより明確に定義されている)だけを実行するCMSとは対照的に、一実施形態に係る動的言語アクセラレータは、いかなるx86−ISAの変更も拡張もせずに、CMSを介してバイトコードを実行する。本明細書で説明された複数の実施形態及び手法を用いて、動的言語アクセラレータは、透過的に、移植可能に、且つ柔軟にプログラミングされ得る。開示された複数の実施形態を用いて、HW/SW協調設計動的言語アクセラレータが、VMにおいて実行時コンパイルを必要とせずに、且ついかなるx86変更もせずに、バイトコード実行をアクセラレーションし得る。複数の実施形態が、非x86コード、例えばJava(登録商標)、JavaScript(登録商標)、HTML5、ARMなどを用いるタブレットコンピュータ、スマートフォンなどのモバイルでポータブルなデバイスに関連して特に用いられ、ワット当たりの優れたパフォーマンスでそのようなコードを効率的に実行し得る。
【0045】
以下の複数の実施例は、さらなる複数の実施形態に関する。
【0046】
実施例1はシステムである。システムは、複数の命令を実行するプロセッサであって、少なくとも1つのコア及び動的言語アクセラレータを含み、動的言語アクセラレータと関連付けられたファイル記述子に関するMMIO操作に応答してバイトコードを実行し、動的言語アクセラレータがバイトコードを実行している間、ネイティブコードの実行をブロックするプロセッサと、プロセッサに結合されたシステムメモリとを備える。
【0047】
実施例2において、実施例1のプロセッサは、システムコールを介して、動的言語アクセラレータをトリガする仮想マシンの仮想マシン状態に対してプロセッサのネイティブ状態のマッピングを任意で構成し、仮想マシン状態はバイトコード状態を含む。
【0048】
実施例3において、実施例2のプロセッサは、識別子を仮想マシン状態と任意で関連づける。
【0049】
実施例4において、実施例1から3のうちの1つの動的言語アクセラレータはハードウェア割り込みに応答して実行を任意で中断し、プロセッサはネイティブコードを実行してハードウェア割り込みを処理し、ハードウェア割り込みが処理された後に、プロセッサは動的言語アクセラレータを再度トリガする。
【0050】
実施例5において、実施例1から4のうちの1つの動的言語アクセラレータは、ネイティブコードの実行の前に、識別子と関連付けられたバイトコード状態を任意で記憶する。
【0051】
実施例6において、例4の仮想マシンは、ハードウェア割り込みが処理された後に、少なくとも1つのバイトコードを任意で解釈し、その後、動的言語アクセラレータを再度トリガする。
【0052】
実施例7において、アクセラレータネイティブインタフェースは動的言語アクセラレータに任意で結合され、動的言語アクセラレータはアクセラレータネイティブインタフェースを介してネイティブライブラリにコールバックし、プロセッサは、ネイティブライブラリを用いて仮想マシン用の関数を実行して、関数が実行された後に、動的言語アクセラレータにおいてバイトコードの実行を継続する。
【0053】
実施例8において、実施例1から7のうちの1つの動的言語アクセラレータは、動的言語アクセラレータの実行中に生じた例外に応答して、例外を引き起こしたバイトコード命令の前のバイトコードの命令において実行を任意で中断し、プロセッサは、その後、バイトコードの少なくとも1つのバイトコード命令を解釈し、ネイティブ例外ハンドラを実行して例外を処理し、次に動的言語アクセラレータを再度トリガする。
【0054】
実施例9において、方法は、プロセッサの動的言語アクセラレータ用のアクセラレータマッピング及び仮想マシン状態を構成し、仮想マシン状態を仮想マシンの識別子と関連付ける段階と、入出力操作を実行して動的言語アクセラレータにおいてバイトコードの実行をトリガし、ネイティブコードの実行をブロックする段階と、動的言語アクセラレータがバイトコードの少なくとも一部を実行した後に、仮想マシンにおいてバイトコードの少なくとも1つのバイトコードを解釈する段階とを備える。
【0055】
実施例10において、実施例9の方法は、ハードウェア割り込みに応答して、識別子と関連付けられたバイトコード状態を記憶し、その後、動的言語アクセラレータを中断し、ネイティブコードを実行してハードウェア割り込みを処理する段階を任意で備える。
【0056】
実施例11において、実施例10の方法は、ネイティブコードを実行してハードウェア割り込みを処理した後に、少なくとも1つのバイトコードを解釈し、その後、動的言語アクセラレータを再度トリガしてバイトコードをさらに実行する段階を任意で備える。
【0057】
実施例12において、実施例9から11のうちの1つの方法は、例外に応答して、識別子と関連付けられたバイトコード状態を記憶し、その後、例外の前の命令において動的言語アクセラレータを中断し、ネイティブ例外ハンドラを実行して例外を処理する段階を任意で備える。
【0058】
実施例13において、実施例9から12のうちの1つの方法は、動的言語アクセラレータのアクセラレータネイティブインタフェースを介して、ネイティブライブラリをコールして動的言語アクセラレータ用の関数を処理する段階を任意で備える。
【0059】
実施例14において、少なくとも1つのコンピュータ可読記憶媒体は、実行された場合に、システムが、プロセッサの動的言語アクセラレータ用のアクセラレータマッピング及び仮想マシン状態を構成して仮想マシン状態を仮想マシンの識別子と関連付け、入出力操作を実行して動的言語アクセラレータにおいてバイトコードの実行をトリガし、ネイティブコードの実行をブロックし、動的言語アクセラレータがバイトコードの少なくとも一部を実行した後に、仮想マシンにおいてバイトコードの少なくとも1つのバイトコードを解釈することを可能にする複数の命令を備える。
【0060】
実施例15において、実施例14の少なくとも1つのコンピュータ可読媒体は、システムが、動的言語アクセラレータが開かれることが可能かどうかを判断し、可能でなければ、仮想マシンにおいてバイトコードを解釈することを可能にする複数の命令を任意でさらに備える。
【0061】
実施例16において、実施例14から15のうちの1つの少なくとも1つのコンピュータ可読媒体は、システムが、仮想マシンにおいて少なくとも1つのバイトコードを解釈した後に、動的言語アクセラレータにおいてバイトコードの実行を再度トリガすることを可能にする複数の命令を任意でさらに備える。
【0062】
実施例17において、実施例14から16のうちの1つの少なくとも1つのコンピュータ可読媒体は、システムが、ハードウェア割り込みに応答して、識別子と関連付けられたバイトコード状態を記憶し、その後、動的言語アクセラレータを中断し、ネイティブコードを実行してハードウェア割り込みを処理することを可能にする複数の命令を任意でさらに備える。
【0063】
実施例18において、実施例17の少なくとも1つのコンピュータ可読媒体は、システムが、ネイティブコードを実行してハードウェア割り込みを処理した後に、少なくとも1つのバイトコードを解釈し、その後、動的言語アクセラレータを再度トリガしてバイトコードをさらに実行することを可能にする複数の命令を任意でさらに備える。
【0064】
実施例19において、実施例14から18のうちの1つの少なくとも1つのコンピュータ可読媒体は、システムが、例外に応答して、識別子と関連付けられたバイトコード状態を記憶し、その後、例外の前の命令において動的言語アクセラレータを中断し、ネイティブ例外ハンドラを実行して例外を処理することを可能にする複数の命令を任意でさらに備える。
【0065】
実施例20において、実施例14から19のうちの1つの少なくとも1つのコンピュータ可読媒体は、システムが、動的言語アクセラレータのアクセラレータネイティブインタフェースを介して、ネイティブライブラリをコールし、動的言語アクセラレータ用の関数を処理することを可能にする複数の命令を任意でさらに備える。
【0066】
複数の実施形態が、多くの異なる種類のシステムに用いられ得る。例えば、1つの実施形態では、通信デバイスが、本明細書で説明された様々な方法及び手法を実行するよう構成され得る。もちろん、本発明の範囲は通信デバイスに限定されず、その代わりに、複数の命令を処理する他の種類の装置、又は、コンピューティングデバイス上で実行されることに応答して、本明細書で説明された複数の方法及び手法のうちの1又は複数をデバイスに実行させる複数の命令を含む1又は複数の機械可読媒体を、他の複数の実施形態が対象とし得る。
【0067】
複数の実施形態がコードに実装され得て、非一時的記憶媒体に記憶され得る。非一時的記憶媒体は、そこに記憶された複数の命令を有し、複数の命令を実行するようシステムをプログラムするのに用いられ得る。記憶媒体は、限定されないが、フロッピー(登録商標)ディスク、光ディスク、ソリッドステートドライブ(SSD)、コンパクトディスクリードオンリメモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)、及び磁気光ディスクを含む任意の種類のディスク、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)・スタティックランダムアクセスメモリ(SRAM)などのランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)などの半導体デバイス、磁気又は光カード、あるいは複数の電子命令を記憶するのに適した他の種類の媒体を含み得る。
【0068】
本発明は、限られた数の実施形態を参照して説明されたが、当業者は、そこから様々な修正形態および変形形態を認識するであろう。添付の特許請求の範囲は、本発明の真の趣旨及び範囲内に含まれるそのような全ての修正形態および変形形態を包含することが企図されている。
図1
図2
図3
図4