JP2008004132A - 情報処理装置 - Google Patents
情報処理装置 Download PDFInfo
- Publication number
- JP2008004132A JP2008004132A JP2007246635A JP2007246635A JP2008004132A JP 2008004132 A JP2008004132 A JP 2008004132A JP 2007246635 A JP2007246635 A JP 2007246635A JP 2007246635 A JP2007246635 A JP 2007246635A JP 2008004132 A JP2008004132 A JP 2008004132A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- bca
- cpu
- bytecode
- accelerator
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30174—Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
【課題】モードの移行を高速に行なうハードウェアアクセラレータを提供する。
【解決手段】スタックベースの中間言語(バイトコード)をレジスタベースの命令に変換するバイトコードアクセラレータBCAを備える情報処理装置において、命令フェッチ部FETとデコード部DECの間にBCAと命令切換のためのセレクタSELを配置し、BCAとレジスタファイルREG_FILEとの間にデータ転送経路(P4、P5)を設ける。バイトコードアクセラレータBCAが起動されると、変換されたCPU命令がセレクタSELにてP3側が選択されデコード部DECに供給される。中間言語がBCAで変換できない場合、ソフト処理を行うためにモードが移行する。モード移行を行う処理中に、データ転送経路(P4とP5)を用いて、BCAとREG_FILEの間でのBCAの内部情報の転送を並行して行うことで高速にモード切替が可能となる。
【選択図】図1
【解決手段】スタックベースの中間言語(バイトコード)をレジスタベースの命令に変換するバイトコードアクセラレータBCAを備える情報処理装置において、命令フェッチ部FETとデコード部DECの間にBCAと命令切換のためのセレクタSELを配置し、BCAとレジスタファイルREG_FILEとの間にデータ転送経路(P4、P5)を設ける。バイトコードアクセラレータBCAが起動されると、変換されたCPU命令がセレクタSELにてP3側が選択されデコード部DECに供給される。中間言語がBCAで変換できない場合、ソフト処理を行うためにモードが移行する。モード移行を行う処理中に、データ転送経路(P4とP5)を用いて、BCAとREG_FILEの間でのBCAの内部情報の転送を並行して行うことで高速にモード切替が可能となる。
【選択図】図1
Description
本発明はマイクロプロセッサに使用される半導体集積回路、特に所定の中間言語をマイクロプロセッサの固有命令に変換するハードウェア加速回路を搭載する情報処理装置に関する。
近年、Java言語で記述されたアプリケーションが携帯電話や携帯端末で急速に広がっている。Javaとはサン・マイクロシステムズ社により開発されたC++に類似したオブジェクト指向プログラミング言語である。なお、”Java”はサン・マイクロシステムズ社の登録商標である。Java言語が受けいれられる要因として、Java言語は、中間言語に対して仮想マシンを用いてマシン固有のCPU命令に変換して実行される特徴が挙げられる。仮想マシンを備えるCPUであれば、CPUの種類に依存せずにJavaアプリケーションを実行することができるので移植性が高い。なお、中間言語とは、Javaの実行オブジェクトを生成するためのコンパイルの結果であり、バイトコードとも呼ばれる。
仮想マシン(以下”VM”と呼ぶ)は、一般にソフトウェア(これを以下”ソフトVM”と呼ぶ)で提供されるが、各バイトコードをインタプリタで解釈実行するために低速であり、使用頻度の高いバイトコードをハードウェア実行することで高速化を行なう例が知られている。これらの例の一つには特表2000−507015(対応国際公開:WO98/21655、国際出願番号:PCT/US07/20980)がある。
本願に先立ち、本願発明者等は上述のJavaに代表されるような中間言語の命令(バイトコード)のソフトVMによる命令変換とハードウェアによる命令変換の整合性について検討を行った。即ち、バイトコードの実行時にターゲットとなるマイクロコンピュータの固有言語(以下CPU命令と呼ぶ)に命令変換するハードウェアを採用する場合に、全てのバイトコードをハードウェアで変換できるのが理想である。しかし、バイトコードの中には複雑な機能を有し、変換するとCPU命令で数十から数百命令に及ぶバイトコードが存在する。このため、全てのバイトコードをハードウェア実行することは困難であり、一部のバイトコードのみをサポートしている。即ち、全てのバイトコードをハードウェア処理しようとするとハードウェアが増大しすぎてしまうからである。従って、ハードウェア処理とソフトウェア処理の切替えが必要となってくる。
図9に本願発明者等の、ハードウェア処理とソフトウェア処理の切替えの検討図を示す。図9(A)は、バイトコードによるアプリケーションソフトウェアAPP1と、CPU命令によるアプリケーションソフトウェアAPP2がメモリマップ上に配置されている様子を示す。APP2はCPU命令NCによるものなので、直接実行が可能であり実行にあたり命令を変換する必要はない。
これに対してバイトコードによるAPP1は、CPU命令に変換しなければ実行できない。APP1は、命令の変換実行という観点でみると以下の3種類の命令群を含んでいる。即ち、C1はバイトコードの内第1命令群に属する命令であり、ソフトVMで変換される命令である。C1はハードウェア変換器ではサポートされない命令となる。次に、C2は第2命令群に属し、ハードウェア変換器により処理される。最後に、C3は第3命令群に属し、実行時にJava例外が検出された場合である。Java例外とは、Java言語の意味制約に違反したことを表す。例えば、除数ゼロでの整数除算などの例外的な計算状況はArithmeticExceptionと定義される。Java例外検出時は、制御をソフトVMに移し、ソフトVMに含まれるエラー処理ルーチンにより処理される。C3を放置するとマイクロコンピュータ自体の暴走を招くことがあるので、適切なエラー処理が必要となるためである。
図9(B)にC1からC3による命令群の実行の様子を示す。SはソフトVMによる処理、Hがハードウェアによる処理を表す。ここでSからHに移行するには、ハードウエアの起動処理ACT_Hが追加され、逆にHからSに移行するにはハードウェアの終了及びソフトVMの起動処理END_Hが追加される。即ち、本願発明者等は、ハードウェア非実行と実行のバイトコードが交互に現われSとHを頻繁に切り替えたり、ハードウェア処理中にJava例外が発生するとACT_HやEND_Hが発生し処理を低下させることに気がついた。
本願発明の目的の一つは、ハードウェア処理とソフトウェア処理の切替えを高速に行うことにある。
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば、下記の通りである。すなわち、複数のレジスタと、第1フォーマット命令を固有命令として実行するための命令実行部と、命令変換回路とを有し、第2フォーマットで記述された第1プログラムを実行する際に、前記情報処理装置は、前記命令変換回路によって前記第1プログラムに含まれる第1命令群を前記第1フォーマット命令に変換して実行する第1動作モードと、前記第1フォーマット命令で記述された変換ソフトウェアによって前記第1プログラムに含まれる第2命令群を前記第1フォーマット命令に変換して実行する第2動作モードを有し、前記第1動作モードと前記第2動作モードとの間の動作モードの移行に際し、当該動作モードの移行動作と、前記複数のレジスタの少なくとも一つと前記命令変換回路との間のデータ転送動作とを並列に行うようにする。
また、本願発明の別な側面によれば情報処理装置に命令変換回路とレジスタファイルの間でデータ転送を行うためのデータ転送経路とを備えるようにすると良い。
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。
本願発明によれば、中間言語のハードウェア処理とソフトウェア処理の切替えの高速化が図れる。
以下、本発明に係るデータ処理装置の好適な実施の形態について、添付図面を参照しながら説明する。特に制限されないが、実施例の各ブロックを構成する回路素子は、特に制限されないが、公知のCMOS(相補型MOSトランジスタ)やバイポーラトランジスタ等の半導体集積回路技術によって、単結晶シリコンのような1個の半導体基板上に形成される。
まず、図1に本発明の実施例のバイトコードアクセラレータの構成図を示す。CPUはキャッシュCACHEと命令バスI_BUS及びデータバスD_BUSを介して接続される。CPUは、命令を供給する命令フェッチ部(一般には命令入力部)FET、中間言語のバイトコードをCPU本来の固有命令に変換するバイトコードアクセラレータ(一般には命令変換回路)BCA、命令フェッチ部出力とバイトコードアクセラレータ出力のCPU命令を選択するセレクタSEL、命令のデコードを行うデコード部DEC、命令の演算と実行を行う命令実行部EXE、制御信号を生成する制御部CTL、プログラムカウンタPC、レジスタファイルREG_FILE、レジスタファイルとバイトコードアクセラレータBCA間のデータ転送経路P4、P5から構成される。特に制限されないが、この実施例ではレジスタファイルには16本の汎用レジスタが含まれ、レジスタR0からR15の名前で呼ばれる。
図9で前述したように固有のCPU命令で記述されたAPP2を実行する際には、セレクタSELは常にP1のパスを選択して、CPU命令を実行し、BCAは全く動作させない。これに対して図9で前述したバイトコードで記述されたAPP1を実行する際にはSELによってP1またはP3の何れかを選択してDECに供給する。ソフトVMでバイトコードを実行させる場合にはセレクタはP1を選択する。一方、BCAを利用して処理する場合にはP2からP3を経てセレクタで選択されDECに供給される。
バイトコードアクセラレータBCAは、変換テーブル部TRS_TBL、スタック制御部STK_CTL、制御レジスタ部CTL_REGから構成される。変換テーブル部では、スタックベースのバイトコードからレジスタベースの複数のCPU命令に変換する。変換テーブル部TRS_TBLは、ハードウェア実行をサポートする全バイトコードに対して、対応する固有のCPU命令がテーブル形式で格納されており、変換されたCPU命令が何番目の命令であるかを示すカウント情報を管理する。
カウント情報は変換テーブル部内のステートマシンにより生成される。そのカウント情報を用いてテーブルを参照することによりバイトコードから固有の複数のCPU命令に変換することができる。バイトコードは1バイトから数バイト長までの可変長である。変換テーブル部は各バイトコードのバイトコード長を把握しており、固有のCPU命令に変換終了後、命令フェッチ部に使用バイトコード長P6を介して通知し、新たなバイトコードをP2を介して受け取る。
本方式がソフトVMに対して高速に変換できる理由を述べる。ソフトVMでは、バイトコードをインタプリタにて1つずつ解釈実行するための命令処理ループが存在する。ソフトVM内にバイトコードに対応して固有のCPU命令に変換するテーブルが用意されており、ループ内でのバイトコード実行においては、そのテーブルを参照するためにテーブル分岐が必要である。以上のように、ソフトVMではインタプリタ部の命令処理ループオーバヘッドとテーブル分岐オーバヘッドが存在するため、それらを必要としない本方式が高速である。
スタック制御部STK_CTLは、CPUのレジスタファイル中の汎用レジスタR0〜R7のうち、本数は特に規定されないが、上位7つのスタックを7本の汎用レジスタに割り付けた場合の割り付けの状況やスタックのトップやボトム等のスタック情報を管理する。即ち、Javaによるバイトコードはいわゆるスタックを想定している。これに対して、本願の対象とするCPUはいわゆるレジスタであり、そのままでは整合性が良くない。レジスタによりスタック処理を行うには主記憶上にスタックを作ればよいが、主記憶へのアクセスでは遅くなってしまう。このため、オペランドスタックの上位を汎用レジスタの一部(一例としてはR0〜R7)に割り当てることにより、スタックベースのバイトコードをレジスタベースのCPU命令に効率的に変換することができる。オペランドスタックをレジスタ上に割り当てるもう一つの利点として、レジスタ上の前命令の結果を次の命令に使用できるため、スタックマシンに比べ、ロードストア命令を減らすことができる。
スタック制御部は、各CPU命令において変化するオペランドスタックの状態に対応して各命令における汎用レジスタのスタック情報を管理する。
最後に、制御レジスタ部CTL_REGにはバイトコードアクセラレータのイネーブルビットが含まれる。バイトコードアクセラレータを使用可能とするためには、まず制御レジスタのイネーブルビットを設定する。そして、バイトコードアクセラレータは、特定のCPU命令を検出することで起動し、バイトコードの変換を開始する。
それでは,本発明の実施例の特長となる動作を説明する。バイトコードアクセラレータBCAは起動の際、(1)CPUのプログラムカウンタPCにJava命令(バイトコード)のアドレス(JavaPC)を設定する動作と(2)CPUの汎用レジスタ(例えばR10)に記憶されたスタック情報と変換テーブル部のカウント情報から構成される内部情報をバイトコードアクセラレータのREG_CTLに設定しなければならない。プログラムカウンタの設定は、レジスタファイル中の一つの汎用レジスタ(例えばR11)から、実行部EXE、制御部CTLを経て、プログラムカウンタPCに汎用レジスタに格納されたJava命令のアドレスを設定する。このとき、並行して、レジスタファイルREG_FILEの一つの汎用レジスタ(例えばR10)に記憶されたスタック情報と変換テーブル部のカウントから成る内部情報をデータ転送経路P4を介してバイトコードアクセラレータBCAのレジスタ制御部REG_CTLに設定する。
また、バイトコードアクセラレータBCAは終了の際、(1)CPUのプログラムカウンタにソフトVMのCPU命令アドレスを設定する動作と、(2)バイトコードアクセラレータの内部情報をCPUの汎用レジスタに待避する動作と、(3)CPUのプログラムカウンタのJavaバイトコードのアドレス(JavaPC)を汎用レジスタに退避する動作、とを行わなければならない。CPUのプログラムカウンタにソフトVMのCPU命令アドレスを設定する動作は、BCAが該当する動作を行う分岐命令に変換して出力し、セレクタにて該当命令が選択され、デコード部、制御部を経てプログラムカウンタPCに設定される。このとき、並行して、プログラムカウンタのJavaPCから制御部、実行部を経てレジスタファイルREG_FILEの一つの汎用レジスタ(例えばR11)に設定し、BCAから内部情報をデータ転送経路P5を用いてレジスタファイルREG_FILEの一つの汎用レジスタ(例えばR10)に設定する。
以上のように、本発明では、データ転送経路P4,P5を設けたことが一つの特徴である。これによりバイトコードアクセラレータBCAとレジスタファイルREG_FILEとの間のバイトコードの内部情報のデータ転送が容易になり、ひいてはプログラムカウンタの設定と並行してバイトコードの内部情報の転送を可能にする。
図2に本発明のバイトコードアクセラレータBCAの状態遷移図を示す。BCAは停止、休止、及び実行の3つの動作状態がある。リセット後は常に停止状態HALTに遷移する(RESET)。停止状態では、BCAは使用不可の状態であり、起動することができない。
バイトコードの変換実行を行うためには、制御レジスタのイネーブルビットを1に設定し、休止状態IDLEに遷移する(ENABLE)。休止状態では、BCAが使用可能の状態であり、BCAの起動命令を検出することができる。この状態では、CPU命令で記述されたソフトVM、もしくはCPU命令のソフトウェアが稼動している状態である。
更に、BCAの起動シーケンスを実行することにより実行状態EXECとなる(ACT)。実行状態では、BCAがハードウェアでバイトコードを実行している状態である。
一方、BCAの終了シーケンスを実行することにより、BCAは休止状態になる(DEACT)。また、実行状態であってもバイトコードアクセラレータがハードウェア実行を行わず、ソフトVMで処理する非サポートバイトコード処理、NullpointerExceptionなどのJava実行時例外が発生した場合のJava例外処理、TLBミスなどのCPU例外や割込み処理を行う場合、終了シーケンスを行う。
バイトコードアクセラレータBCAはバイトコードのハードウェア実行を行い、それ以外のソフトウェアによる実装部分と協調して仮想マシンを構成する。このソフトウェアによる実装部分がソフトVMである。本発明の実施例のBCAとソフトVMとの動作の分担及び相互の遷移状態を図3に示す。
ソフトVM SOFT_VMは、ソフトVM実行の初期設定を行う初期化部分(INITIALIZE)36、バイトコードアクセラレータを起動する際の起動命令が置かれたフックアップ(HOOKUP)部分37、ソフトウェアで解釈実行を行うために各バイトコードの処理開始アドレスを示すディスパッチテーブル(DISPATCH TABLE)38、ディスパッチテーブルに示されたアドレスの指す固有CPU命令列が配置され、ソフトウェアで解釈実行を行うインタプリタ部(INTERPRETER)39、Java例外発生時に適切な例外処理を行うためのJava例外ハンドラ(JAVA EXP HANDLER)40から構成される。
非サポートバイトコード時32は、ディスパッチテーブル38の該当するバイトコードよりインタプリタの処理アドレスが与えられ、インタプリタ39上で解釈実行を行う。ディスパッチテーブルは8ビットのバイトコード数分の256個の配列で構成される。
Java実行時にBCAにおいて検出されたJava既定の例外事象33はソフトVMのJava例外ハンドラ40で処理される。Java例外の識別子はバイトコードアクセラレータBCAが与える。
CPU例外や割込み発生時(EXP/INTR)34には、ソフトVMとは別のCPU例外/割込みハンドラ41によりソフトウェアにより適切な処理が行われる。
HOOKUP37はバイトコードアクセラレータBCAを起動する際にソフトウェアで実行すべき起動命令が配置されたソフトウェアルーチンである。非サポートバイトコードをインタプリタで実行した後、Java例外ハンドラあるいはCPU例外/割込みハンドラはHOOKUP37に分岐後、BCAが起動される。ここで、HOOKUP37は1箇所ではなく、複数箇所存在してもよい。例えば、非サポートバイトコードの処理はソフトVMのインタプリタ部分、インタプリタの各バイトコード処理部分の末尾に起動命令を置いてもよい。
本発明の実施例の起動シーケンスを図4に示す。休止状態のバイトコードアクセラレータBCAは起動命令として、CPUの特定の命令(J_JP)の発行を検出して実行状態となる。より具体的には、ソフトVMが一連のバイトコードを変換実行している時にソフトVMのインタプリタ(図3の39)はバイトコードを一つずつ実行するたびにHOOKUPルーチンに分岐する。HOOKUPルーチンには起動命令が置かれている。BCAが休止状態(IDLE)のとき、CPUが起動命令J_JPをフェッチすると、BCAは起動命令を検出し、以下の3命令をCPUに起動シーケンスとして供給する。CPUはJ_JP命令の実行を中止し、次の3命令を実行する。
(1) JMP @Rjp
(2) B_LDC Rsc
(3) B_MOVA @(0,PC), Rjp
(1)最初のJMP @Rjp命令では、CPUのプログラムカウンタPCをこれからBCAで処理するバイトコードのアドレス(JavaPC)に設定する命令である。ソフトVMではRjpに常にJavaPCを置いているため、RjpをPCに転送すればよい。特に制限されないが、Rjpは汎用レジスタのR11とされる。このPCで示されるバイトコードからバイトコードアクセラレータBCAによる実行が開始される。そして、プログラムカウンタを設定する前に並行して以下の(2)と(3)の2命令を実行する。
(2)B_LDC Rsc命令では、汎用レジスタRsc上にあるバイトコードアクセラレータの内部状態をバイトコードアクセラレータに設定する。内部状態には、命令カウンタ情報とレジスタスタック情報から構成される。特に制限されないが、Rscは汎用レジスタのR10とされる。内部状態を汎用レジスタで待避回復を行うことにより、CPU例外/割込み時にバイトコードアクセラレータの内部状態を正確に復帰できる。このとき、RscはソフトVM上では変更を行わないことが必要である。
(3)B_MOVA @(0,PC), Rjp命令において、J_JP命令発行時のプログラムカウンタの値を保存する。この値はHOOKUPを指しており、バイトコードアクセラレータ起動時の命令のアドレスとしてRjpに保持され、CPU例外/割込み時の復帰アドレスとして使用される。CPU例外/割込み時の復帰方法は、HOOKUPに分岐した後、BCAが起動される。
(1) JMP @Rjp
(2) B_LDC Rsc
(3) B_MOVA @(0,PC), Rjp
(1)最初のJMP @Rjp命令では、CPUのプログラムカウンタPCをこれからBCAで処理するバイトコードのアドレス(JavaPC)に設定する命令である。ソフトVMではRjpに常にJavaPCを置いているため、RjpをPCに転送すればよい。特に制限されないが、Rjpは汎用レジスタのR11とされる。このPCで示されるバイトコードからバイトコードアクセラレータBCAによる実行が開始される。そして、プログラムカウンタを設定する前に並行して以下の(2)と(3)の2命令を実行する。
(2)B_LDC Rsc命令では、汎用レジスタRsc上にあるバイトコードアクセラレータの内部状態をバイトコードアクセラレータに設定する。内部状態には、命令カウンタ情報とレジスタスタック情報から構成される。特に制限されないが、Rscは汎用レジスタのR10とされる。内部状態を汎用レジスタで待避回復を行うことにより、CPU例外/割込み時にバイトコードアクセラレータの内部状態を正確に復帰できる。このとき、RscはソフトVM上では変更を行わないことが必要である。
(3)B_MOVA @(0,PC), Rjp命令において、J_JP命令発行時のプログラムカウンタの値を保存する。この値はHOOKUPを指しており、バイトコードアクセラレータ起動時の命令のアドレスとしてRjpに保持され、CPU例外/割込み時の復帰アドレスとして使用される。CPU例外/割込み時の復帰方法は、HOOKUPに分岐した後、BCAが起動される。
図5に本発明の実施例の起動シーケンスのタイムチャートの一例を示す。本実施例のCPUは、パイプライン6段を想定しておりで、命令フェッチIF、バイトコード変換B、デコードID、実行EX、メモリアクセスMA、レジスタライトWBで構成される。
時刻t0においてバイトコードアクセラレータBCAは、IDステージのCPUの特定命令J_JP命令を検出し、時刻t0にてCPUに対してID_CANCEL信号をアサートし、IDステージのキャンセルを通知すると同時に、Bステージで起動シーケンスの供給を開始する。CPUは時刻t0にてJ_JP命令をキャンセルする。
そしてBCAは、シーケンスの先頭を表すためにINST_FIRST信号をアサートし、CPUに通知する。CPUは割込みの受付をバイトコード間の境界とするためにINST_FIRST信号を使用する。
JMP @Rjp命令からNOP命令までが起動シーケンスである。BCAはNOP命令が時刻t3においてシーケンスの最後であることを表すためにINST_LAST信号をアサートし、CPUに通知する。CPUはプログラムカウンタの更新と次に述べる分岐命令の遅延スロットの終了信号としてINST_LAST信号を使用する。
分岐命令JMP @Rjp命令のターゲットは時刻t4においてBCAで処理される最初のバイトコードiconst_1である。このとき、JMP命令とiconst_1の間の3命令、すなわちB_LDC、B_MOVA、NOP命令はJMP命令と並行して動作することができ、分岐命令の遅延スロットとみなすことができる。CPUは遅延スロットの範囲を、INST_LAST信号により知ることができる。遅延スロット命令が複数ある場合、遅延スロットで発生した例外の戻り番地が分岐命令となるため区別できないという問題が生じるが、上記3命令ではCPU例外を起こさないため問題は発生しない。割込みに関しても、INST_FIRST信号を用いてシーケンスの先頭のみ受付けることにすれば、例外と同じく問題は発生しない。従って、起動シーケンスのJMP命令は3命令の遅延分岐命令をもつ分岐命令とみなすことができる。
B_LDC Rsc命令は時刻t3において汎用レジスタRscをバイトコードアクセラレータBCAに転送する。BCAは、時刻t4で最初のバイトコードを変換する前に、時刻t3でスタック情報と変換テーブル部のカウント情報からなる内部情報を基に内部のステートマシンを設定する。
B_MOVA @(0,PC), Rjp命令は時刻t6において、J_JP命令のアドレスHOOKUPをRjpに転送する。そして、時刻t4において、最初のバイトコードのハードウェア実行が開始される。
以上の通り、バイトコードアクセラレータBCAの起動に必要な処理を分岐命令の遅延スロットを利用して実行するため、BCAの起動動作のオーバヘッドが軽減される。この遅延スロットによる命令実行を可能する構成上の工夫は図1に示したP4、P5のBCAとレジスタファイル間のデータ転送経路である。
図6に、本発明の実施例の終了シーケンスの一例として、BCAの非サポートバイトコードによる終了シーケンスを示す。BCAがバイトコードをハードウェアで実行できないと判断すると、非サポートバイトコードとして、ソフトVM上のインタプリタにて実行するために、BCAは実行状態から休止状態に遷移し、ソフトVMでのソフトウェア処理に移行する。レジスタ上のオペランドスタック上にデータがある場合は、レジスタのデータをまずメモリに待避する。ここでは、メモリ待避後のシーケンスを示す。次の4命令から構成される。
(1) B_MOV.L @(#op, Rdp), R0
(2) JMP @R0
(3) B_MOVA @(0,PC), Rjp
(4) B_STC Rsc
(1)まず、B_MOV.L @(#op,Rdp),R0命令により,該当バイトコードの処理アドレスは、バイトコード#opをインデクスとし、ディスパッチテーブルのベースアドレスRdpとの和から該当バイトコード処理アドレスを汎用レジスタR0にロードする。
(2)次に、JMP @R0命令でR0で示すアドレスへ分岐し、ターゲットから非サポートバイトコードのソフトウェア処理を開始する。そして、この分岐命令と並行して、次の2命令が実行される。
(3)B_MOVA @(0,PC),Rjp命令で、非サポートバイトコードのJavaPCをレジスタRjpに設定する。Rjpはこの実施例では汎用レジスタのR11である。
(4)そして、B_STC Rsc命令により、バイトコードアクセラレータのスタック情報と変換テーブル部のカウント情報からなる内部情報を汎用レジスタRsc上に設定する。Rscはこの実施例では汎用レジスタのR10である。この分岐命令とレジスタ転送の並行処理により、終了処理が高速化される。そして、JMP @R0命令でソフトVMへのターゲットへの分岐が実行されると、バイトコードアクセラレータBCAは休止状態(IDLE)に遷移する。
(1) B_MOV.L @(#op, Rdp), R0
(2) JMP @R0
(3) B_MOVA @(0,PC), Rjp
(4) B_STC Rsc
(1)まず、B_MOV.L @(#op,Rdp),R0命令により,該当バイトコードの処理アドレスは、バイトコード#opをインデクスとし、ディスパッチテーブルのベースアドレスRdpとの和から該当バイトコード処理アドレスを汎用レジスタR0にロードする。
(2)次に、JMP @R0命令でR0で示すアドレスへ分岐し、ターゲットから非サポートバイトコードのソフトウェア処理を開始する。そして、この分岐命令と並行して、次の2命令が実行される。
(3)B_MOVA @(0,PC),Rjp命令で、非サポートバイトコードのJavaPCをレジスタRjpに設定する。Rjpはこの実施例では汎用レジスタのR11である。
(4)そして、B_STC Rsc命令により、バイトコードアクセラレータのスタック情報と変換テーブル部のカウント情報からなる内部情報を汎用レジスタRsc上に設定する。Rscはこの実施例では汎用レジスタのR10である。この分岐命令とレジスタ転送の並行処理により、終了処理が高速化される。そして、JMP @R0命令でソフトVMへのターゲットへの分岐が実行されると、バイトコードアクセラレータBCAは休止状態(IDLE)に遷移する。
終了シーケンスの一例として、BCAのハードウェア実行を行わない非サポートバイトコードの場合について述べたが、Java例外の時もJava例外ハンドラに分岐する際に、Java例外識別コードの設定、JavaPCのRjpへの設定とバイトコードアクセラレータの内部情報の汎用レジスタRscへの設定を分岐処理と並行して実行し、非サポートバイトコードと同様に終了処理が高速化される。Java例外識別コードの設定とは、Java例外の種別をBCAからSoftVMに示すために汎用レジスタに識別コードを設定することを示す。例えば、NullPointerExceptionは0である。特に制限されないが、汎用レジスタはR0を使用する。
CPU例外/割込みの処理では、バイトコードアクセラレータの内部情報の汎用レジスタRscへの設定、プログラムカウンタにCPU例外/割込みハンドラからの戻りアドレスとしてHOOKUPを設定、JavaPCのRjpへの設定を行った後、BCAは休止状態に遷移します。そして、通常のCPU例外/割込み処理を行う。
図7に本発明の実施例の終了シーケンスのタイムチャートの一例を示す。BCAはハードウェアで実行ができない非サポートバイトコードnewを検出すると終了シーケンスの命令列を供給し、休止状態(IDLE)に遷移する。そして、CPUが終了シーケンスの命令列を実行後、ソフトVMに制御を移す。レジスタスタック上にデータがある場合は、レジスタのデータをメモリに待避する。ここでは、レジスタスタック上にデータがなく、メモリ待避が不要な場合のシーケンスを示している。
時刻t0においてバイトコードアクセラレータBCAは、Bステージの非サポートバイトコードnew命令を検出すると同じ時刻t0にBステージで終了シーケンスの供給を開始する。実施例の起動シーケンスと同様に、BCAはシーケンスの先頭を表すためにINST_FIRST信号をアサートし、CPUに通知する。B_MOV.L命令からB_STC命令までが終了シーケンスである。B_STC命令はシーケンスの最後であり、BCAは時刻t3においてシーケンスの最後を表すためにINST_LAST信号をアサートし、CPUに通知する。同時刻t3において、BCAはCPUに休止状態であることを通知するために、INST_ENABLE信号をネゲートする。CPUはINST_ENABLE信号がネゲートされることによって、図1のセレクタSELはP1側を選択し、BCA側のCPU命令を選択しない。
分岐命令JMP @R0命令のターゲットは時刻t5においてソフトVM上の最初のCPU命令がデコードされる。このとき、JMP命令とそのCPU命令の間の2命令、すなわちB_MOVA、B_STC命令はJMP命令と並行して動作することができ、起動シーケンスのときと同様に分岐命令の遅延スロットとみなすことができる。遅延スロットの範囲は、INST_LAST信号により知ることができる。
時刻t5において、分岐の結果、プログラムカウンタPCに該当バイトコードのディスパッチテーブルのアドレス(DISP)が設定され、ソフトVM上でのCPU命令の実行が開始される。
B_MOVA @(0,PC), Rjp命令では時刻t6において、CPUは、プログラムカウンタのJavaPCを汎用レジスタRjpに書き込む。B_STC Rsc命令では時刻t7において、CPUはバイトコードアクセラレータの内部情報STATUSを汎用レジスタRscに書き込む。
図8に本発明のの好適な応用例としての携帯情報システムの構成図を示す。より具体的には携帯電話の構成の一例である。大きく分けて、通信部分とアプリケーション部分から構成される。通信部分は、電波を送受信するアンテナ(RF)部83、ベースバンドのモデム、コーデックを行うベースバンドプロセッサ(BASEBAND)部81、主記憶(MEM)82である。アプリケーション部分は、本発明の実施例のバイトコードアクセラレータ10を備えるCPU1を内蔵するマイクロプロセッサ(PROCESSOR)70において、インターフェース(I/F)73を介してアプリケーションプロセッサとベースバンドプロセッサが接続され、周辺インターフェース(PERIPHERAL)74を介してカメラ(CMR)75、メモリカード(CARD)76、音源IC(SOD)77、キー(KEY)78が接続され、外部バスを介して液晶(LCD)79、主記憶(MEM)80が接続される。本システム構成例は、携帯電話向けであったが、携帯情報端末やデジタルカメラなど多様なシステム構成例が考えられる。
本システム構成例では、例えば、次のようにメモリが使用される。Javaアプリケーションは、外部サーバーよりアンテナ83を介して配給され、ベースバンドプロセッサ81を使用し、主記憶82に格納される。ソフトVMは主記憶80か主記憶82のどちらに配置してもよい。ソフトVMのインタプリタ部はアクセス頻度が高いため、内蔵メモリ上に配置されることが望ましい。この発明により、バイトコードの処理が高速に行えるため、携帯情報システムの付加価値を高めることができる。
以上本願の発明をJavaバイトコードを例にして説明したが、本願はそれにそれに限られることはなく、本願の趣旨の範囲内で変形可能である。即ち、本願発明は、一つの命令コード体系を別の命令コード体系にハードウェアアクセラレータを用いて変換して実行するような情報処理装置に一般的に用いることができる。
以上本願発明の実施例による効果をまとめると以下の通りである。バイトコードアクセラレータを内蔵することによって、Javaのバイトコードは高速に実行される一方、ハードウェア処理とソフトウェア処理の切替のオーバヘッドの削減が必須となっている。そこで、本発明では、処理モードを切替えるための分岐命令の実行と並行して、バイトコードアクセラレータの内部情報の転送を行うことで、従来は、内部情報の転送を行った後に分岐命令を実行する逐次処理に対して高速となる。処理モードの切替としては、バイトコードアクセラレータの起動処理、非サポートバイトコード、Java例外発生による終了処理、あるいはCPU例外/割込み発生による終了処理の際に行われ、頻度が高く、バイトコード実行の高速化に寄与する。
CPU…中央情報処理装置
CPU_CORE…CPUの中心部
CACHE…キャッシュ
FET…命令フェッチ部
SEL…セレクタ
DEC…デコード部
EXE…実行部
CTL…制御部
PC…プログラムカウンタ
REG_FILE…レジスタファイル
BCA…バイトコードアクセラレータ
TRS_TBL…変換テーブル部
REG_CTL…レジスタ制御部
CTL_REG…制御レジスタ部
D_BUS…データバス
I_BUS…命令バス
P1…CPU命令パス
P2…バイトコード入力パス
P3…バイトコード出力パス
P4,P5…内部情報の転送経路
HALT…停止状態
IDLE…休止状態
EXEC…実行状態
30…バイトコードアクセラレータで発生するイベント
31…起動時
32…非サポートバイトコード時
33…Java例外発生時
34…CPU例外と割込み発生時
35…ソフトVM
36…初期化ルーチン部
37…HOOKUP部
38…ディスパッチテーブル部
39…インタプリタ部
40…Java例外ハンドラ
41…CPU例外/割込みハンドラ
50…ソフトVMHOOKUP部の起動命令
51…バイトコードアクセラレータでの変換命令列
54…ディスパッチテーブル
55…インタプリタ
70…マイクロプロセッサ
73…ベースバンドプロセッサとの接続インターフェース
74…周辺インターフェース
75…カメラ
76…メモリカード
77…音源LSI
78…キーボード
79…液晶
80…主記憶
81…ベースバンドプロセッサ
82…主記憶
83…RFアンテナ
CPU_CORE…CPUの中心部
CACHE…キャッシュ
FET…命令フェッチ部
SEL…セレクタ
DEC…デコード部
EXE…実行部
CTL…制御部
PC…プログラムカウンタ
REG_FILE…レジスタファイル
BCA…バイトコードアクセラレータ
TRS_TBL…変換テーブル部
REG_CTL…レジスタ制御部
CTL_REG…制御レジスタ部
D_BUS…データバス
I_BUS…命令バス
P1…CPU命令パス
P2…バイトコード入力パス
P3…バイトコード出力パス
P4,P5…内部情報の転送経路
HALT…停止状態
IDLE…休止状態
EXEC…実行状態
30…バイトコードアクセラレータで発生するイベント
31…起動時
32…非サポートバイトコード時
33…Java例外発生時
34…CPU例外と割込み発生時
35…ソフトVM
36…初期化ルーチン部
37…HOOKUP部
38…ディスパッチテーブル部
39…インタプリタ部
40…Java例外ハンドラ
41…CPU例外/割込みハンドラ
50…ソフトVMHOOKUP部の起動命令
51…バイトコードアクセラレータでの変換命令列
54…ディスパッチテーブル
55…インタプリタ
70…マイクロプロセッサ
73…ベースバンドプロセッサとの接続インターフェース
74…周辺インターフェース
75…カメラ
76…メモリカード
77…音源LSI
78…キーボード
79…液晶
80…主記憶
81…ベースバンドプロセッサ
82…主記憶
83…RFアンテナ
Claims (1)
- 複数のレジスタと、
第1フォーマット命令を固有命令として実行するための命令実行部と、
命令変換回路と、を有する情報処理装置は、
第2フォーマットで記述された第1プログラムを実行する際に、前記命令変換回路によって前記第1プログラムに含まれる第1命令群を前記第1フォーマット命令に変換して実行する第1動作モードと、前記第1フォーマット命令で記述された変換ソフトウェアによって前記第1プログラムに含まれる第2命令群を前記第1フォーマット命令に変換して実行する第2動作モードを有し、
前記第1動作モードと前記第2動作モードとの間の動作モードの移行に際し、当該動作モードの移行動作と、前記複数のレジスタの少なくとも一つと前記命令変換回路との間のデータ転送動作とを並列に行う。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007246635A JP2008004132A (ja) | 2007-09-25 | 2007-09-25 | 情報処理装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007246635A JP2008004132A (ja) | 2007-09-25 | 2007-09-25 | 情報処理装置 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002185451A Division JP4035004B2 (ja) | 2002-06-26 | 2002-06-26 | 情報処理装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008004132A true JP2008004132A (ja) | 2008-01-10 |
Family
ID=39008402
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007246635A Withdrawn JP2008004132A (ja) | 2007-09-25 | 2007-09-25 | 情報処理装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2008004132A (ja) |
-
2007
- 2007-09-25 JP JP2007246635A patent/JP2008004132A/ja not_active Withdrawn
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7853776B2 (en) | Handover between software and hardware accelerator | |
JP4035004B2 (ja) | 情報処理装置 | |
US10241791B2 (en) | Low energy accelerator processor architecture | |
TWI567646B (zh) | 容許一架構之編碼模組使用另一架構之程式庫模組的架構間相容性模組 | |
US9003422B2 (en) | Microprocessor architecture having extendible logic | |
JP4485198B2 (ja) | Javaアクセラレータを備えたプロセッサシステム | |
US11341085B2 (en) | Low energy accelerator processor architecture with short parallel instruction word | |
US7930443B1 (en) | Router having routing engine software instance and interface controller software instance on a single processor | |
JP2001195250A (ja) | 命令トランスレータ、トランスレータ付命令メモリおよびそれらを用いたデータ処理装置 | |
JP4224430B2 (ja) | 情報処理装置 | |
US20120240116A1 (en) | Performance In A Virtualization Architecture With A Processor Abstraction Layer | |
US6986028B2 (en) | Repeat block with zero cycle overhead nesting | |
GB2429084A (en) | Operating system coprocessor support module | |
JP2000284973A (ja) | 二重割込みベクトル・マッピング装置とその操作方法 | |
JP4127495B2 (ja) | 情報処理装置 | |
JP2005267640A (ja) | 機能を呼び出す方法と装置 | |
JP2008004132A (ja) | 情報処理装置 | |
JP2004127255A (ja) | 情報処理装置 | |
JP2004133641A (ja) | 情報処理装置 | |
JP2009032263A (ja) | 情報処理装置 | |
JP2007287126A (ja) | マルチマイクロコントローラーシステム、及び、制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20071022 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20071022 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20080213 |