JP4418509B2 - Javaアクセラレータを備えたプロセッサシステム - Google Patents

Javaアクセラレータを備えたプロセッサシステム Download PDF

Info

Publication number
JP4418509B2
JP4418509B2 JP2009069256A JP2009069256A JP4418509B2 JP 4418509 B2 JP4418509 B2 JP 4418509B2 JP 2009069256 A JP2009069256 A JP 2009069256A JP 2009069256 A JP2009069256 A JP 2009069256A JP 4418509 B2 JP4418509 B2 JP 4418509B2
Authority
JP
Japan
Prior art keywords
register
instruction
stack
java
general
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.)
Expired - Fee Related
Application number
JP2009069256A
Other languages
English (en)
Other versions
JP2009176311A (ja
Inventor
直彦 入江
文男 荒川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Renesas Technology Corp
Original Assignee
Renesas Technology Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Renesas Technology Corp filed Critical Renesas Technology Corp
Priority to JP2009069256A priority Critical patent/JP4418509B2/ja
Publication of JP2009176311A publication Critical patent/JP2009176311A/ja
Application granted granted Critical
Publication of JP4418509B2 publication Critical patent/JP4418509B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明はプロセッサシステムに関し、特にJavaアクセラレータを備えたプロセッサシステムに関する。
近年、マイクロプロセッサの組み込み用途では、アプリケーションソフトとしてJavaが広く使われ始めている。その理由は、ハードウェアまたはソフトウェアの形式でJVM(Java Virtual Machine)が実装されたマシンであれば、プロセッサの種類やシステムの構成に関係なくJavaプログラムを動作できるというプログラムの可搬性に優れているからである。Javaプログラムでは、スタック演算を基本としており、プログラム命令(Javaでは「バイトコード」と称されている)にオペランド指定部が不要であることから、オブジェクトコードのサイズが小さいと言う利点がある。また、Javaプログラムでは、データ型式についての概念が厳密で、且つ、プログラムの実行前にバイトコードのベリフィケーションが行われるため、セキュリティに優れると言う利点もある。
Javaを利用した組み込みシステムの多くは、JVM機能をソフトウェアで実現している。その理由は、Javaプログラムが、Java以外のソフトウェア、例えば、OSやMPG4のようなマルチメディア・アプリケーションプログラムなどと同一プロセッサで実行できるためである。しかしながら、ソフトウェアで実現されたJVM環境下でJavaプログラムを実行した場合、同一の処理内容をプロセッサに固有の命令で記述したプログラムを実行した場合と比較して、プログラムの実行速度の方が極端に遅くなるという問題がある。例えば、Dhrystoneベンチマーク・プログラムをC言語で記述し、これをコンパイルして実行した場合と、上記プログラムをJavaで記述してJVM上で実行した場合を比較すると、数十倍の性能差がある。その主な原因として、次の2点が挙げられる。
(1)JVM上では、Java命令(バイトコード)がインタプリタによって実行されるため、インタプリタのオーバヘッドが生じる。
(2)Javaの実行モデルは、スタック上での演算を仮定しているため、Javaプログラムをレジスタベースの通常のプロセッサで実行した場合、必然的にメモリアクセスが頻発し、演算器で余計な実行サイクルを必要とする。
Javaプログラムを高速に実行するための従来技術として、ソフトウェアで構成されたJIT(Just In Compiler)と、ハードウェアで構成されたアクセラレータが知られている。但し、JITは大きなメモリ容量を必要とするため、今後、メモリ容量に制約のある組み込み用途の多くは、ハードウェア・アクセラレータを採用する傾向にある。
ハードウェア・アクセラレータとしては、専用プロセッサタイプのものから、既存のプロセッサの一部にアクセラレータ機能を組み込んだタイプのものまで、種々の形態のものが提案されている。後者のアクセラレータとしては、例えば、ARM社のJazelleや、Nazomi Communication社のJSTARなどがある。
例えば、文献"Java to Go:Part1, Microprocessor Report, Feb 12, 2001"(非特許文献1)や、WO 00/34844(PCT/US99/28782)号公報(特許文献1)に記載された“Java Virtual Machine Hardware for RISC and CISC Processors”では、命令キャッシュから読み出したバイトコードをハードウェア・トランスレータでプロセッサに固有の命令に変換することによって、原因(1)のインタプリタ・オーバヘッドを低減してプログラムの実行速度を高速化している。
JVMは、例えば、第6図に概略的に示すように、インタプリタ90が参照する領域として、バイトコード列81とコンスタントプール82とが定義されるクラスデータ領域80と、配列オブジェクト84とインスタンス変数などのフィールド85が定義されるインスタンスデータ領域83と、フレームスタック86とを含む。フレームスタック86は、それぞれオペランドスタック88とローカル変数領域89とからなる複数のフレーム87からなり、JVM内で演算に使用される変数は、基本的に各フレームスタック86内のローカル変数領域89に定義される。JVMのインタプリタ90は、バイトコード列81から順次にバイトコードを読み込み、各バイトコードが示すJava命令をプロセッサ91に固有の命令形式に次々と変換する。第6図において、括弧内は、代表的なJava命令を上述した各領域と対応付けて例示したものである。
Javaプログラムでは、各演算に先立って、ローカル変数領域89に定義された変数のうち、演算に必要なものをオペランドスタック88のスタックトップに積み込む操作が行なわれる。この操作は、バイトコードで指定されたロード命令(例えば、iload)によって行われ、演算に必要なオペランドがオペランドスタック88に積み込まれた後、上記スタックトップを暗黙的なオペランドとして指定した演算命令が発行される。上記演算命令によって、スタックトップの内容をオペランドとした演算動作が実行され、演算結果は、オペランドスタック88のスタックトップに一時的に格納される。上記演算結果は、最終的にはフレームスタック内のローカル変数領域89に格納する必要があり、演算結果のローカル変数領域89への格納は、次のバイトコードが示すストア命令(例えば、istore)によって実現される。
WO 00/34844(PCT/US99/28782)号公報
Java to Go: Part1, Microprocessor Report, Feb 12, 2001
このように、JVMの実行環境においては、各演算の都度、ローカル変数をスタックトップに移し、演算結果をスタックトップからローカル変数領域に移すという動作が発生するため、汎用レジスタをオペランド領域として使用する通常のプロセッサでJavaプログラムを実行しようとすると、汎用レジスタへのアクセスが頻繁に発生する。
前述したWO 00/34844(PCT/US99/28782)号公報では、汎用レジスタのうち、例えば、R0〜R5をオペランドスタックの上位6つにマッピングし、R6とR7をローカル変数用にマッピングしている。また、文献"Java to Go: Part1, Microprocessor Report, Feb 12, 2001" では、第3頁に記載されているように、汎用レジスタのR0〜R3をオペランドスタックの上位4つにマッピングし、R4に0番目のローカル変数をマッピングしている。
然るに、これらの従来技術では、汎用レジスタへのオペランドスタックとローカル変数のマッピングが双方とも固定的なものとなっているため、汎用レジスタの使用に柔軟性を欠き、汎用レジスタの使用効率を低下させている。また、これらの従来技術では、レジスタベースのプロセッサによって、バイトコード列が指定する全てのJava命令を忠実に実行しており、Javaプログラム実行速度の遅延原因(2)として指摘した余計な実行サイクルの回避について何ら考慮されていない。
本発明の目的は、冗長な命令の実行サイクルを省略し、Javaプログラムの実行速度を向上させたプロセッサシステムを提供することにある。
本発明の他の目的は、オペランドスタックとローカル変数の汎用レジスタへのマッピングを柔軟に制御できるJavaアクセラレータを備えたプロセッサシステムを提供することにある。
上記課題を解決するために、本発明は、命令デコーダと、複数のレジスタ領域からなる汎用レジスタと、少なくとも1つの演算器とを有するプロセッサと、Javaバイトコード列を上記プロセッサに固有の命令列に変換して上記命令デコーダに供給するJavaアクセラレータとからなるプロセッサシステムにおいて、上記Javaアクセラレータが、上記プロセッサにとって冗長となるバイトコードを検出するための手段を備え、該検出手段によって冗長バイトコードが検出された時、上記命令デコーダへの固有命令の供給を抑制することを特徴とする。
更に詳述すると、上記Javaアクセラレータは、Javaバイトコード列を前記プロセッサに固有の命令列に変換するバイトコードトランスレータと、上記バイトコードトランスレータで処理中のJavaバイトコードに応じて、Javaのオペランドスタックを前記汎用レジスタの何れかのレジスタ領域にマッピングするためのレジスタ状態制御ユニットとからなり、
上記バイトコードトランスレータにおいてオペランドスタックへのローカル変数のロード命令を示すバイトコードが処理されている間に、上記レジスタ状態制御ユニットが、上記バイトコードが冗長か否かを判定し、冗長バイトコードとして検出された時、上記バイトコードトランスレータに対して固有命令の出力抑制信号を発行する。
本発明の1つの特徴は、上記レジスタ状態制御ユニットが、上記汎用レジスタの各レジスタ領域の使用状態を記憶するための手段を備え、上記汎用レジスタの使用状態に応じてJavaのオペランドスタックを上記汎用レジスタの何れかのレジスタ領域に動的にマッピングすることにある。
本発明の1実施例では、上記レジスタ状態制御ユニットが、汎用レジスタの各レジスタ領域と該レジスタ領域に設定されている変数との対応関係を記憶するためのレジスタ内容管理手段を有し、上記バイトコードトランスレータにおいてオペランドスタックへの変数ロード命令を示すバイトコードが処理されている時、上記変数ロード命令で扱う変数と上記レジスタ内容管理手段に記憶された変数とを照合することによって、上記バイトコードが冗長か否かを判定する。
本発明のプロセッサシステムによれば、Javaアクセラレータをバイトコードトランスレータとレジスタ状態制御ユニットで構成し、レジスタ状態制御ユニットで汎用レジスタの各レジスタ領域の使用状態を管理することによって、Javaのオペランドスタックを汎用レジスタの何れかのレジスタ領域に動的にマッピングすることが可能となる。
第1図は、本発明によるJavaアクセラレータ30を備えたプロセッサの概略的な構成を示すブロック図。 第2図は、第1図に示したJavaアクセラレータ30を構成するバイトコードトランスレータ40の1実施例を示すブロック図。 第3図は、第1図に示したJavaアクセラレータ30を構成するレジスタ状態制御ユニット50の1実施例を示すブロック図。 第4図(A)〜(C)は、それぞれJavaバイトコード列と、バイトコードトランスレータ40で変換されたバイトコード列と、Javaバイトコード列の他の例を示す図。 第5図は、本発明によるプロセッサの組み込み用途の1例を示すシステム構成図。 第6図は、JVMの特徴を説明するための図。
以下、本発明によるプロセッサシステムの実施例について図面を参照して説明する。
第1図は、本発明によるJavaアクセラレータ30を備えたプロセッサの概略的な構成を示す。
プロセッサ1は、主記憶2と接続されている。主記憶2には、プロセッサ1に固有の命令形式で記述された通常のプログラムとデータの他に、Javaプログラムを実行するためのJVM、バイトコード列、フレームスタックなどが保持されている。プロセッサ1は、主記憶2に格納されたプログラム(プロセッサ1に固有の命令列またはJavaバイトコード列)の一部を保持するための命令キャッシュ10と、主記憶2に格納されたデータまたはフレームスタックの一部を保持するためのデータキャッシュ11と、主記憶2に接続された主記憶制御ユニット12とを有し、該主記憶制御ユニット12によって、主記憶2と命令キャッシュ10およびデータキャッシュ11の間のデータ受け渡しが制御される。
一般的なプロセッサと同様に、プロセッサ1は、命令バッファ20と、命令デコーダ22と、汎用レジスタ61と、演算器60と、命令フェッチユニット23とを備えている。ここでは、便宜的に、演算器60が一つのブロックとして表示されているが、上記演算器60は、複数個の演算器から構成されるものであってもよい。命令デコーダ22がデコードする命令は、例えば、日立製作所が提供する制御用マイコンSH3の命令セットのように、このプロセッサに固有の命令のみである。命令キャッシュ10に一時的に保持されたプロセッサ固有の命令コード列またはJavaのバイトコード列は、命令フェッチユニット23からの制御信号に応答して信号線(内部バス)S10に読み出され、命令バッファ20とJavaアクセラレータ30に入力される。
Javaアクセラレータ30は、Javaのバイトコード列をプロセッサ1に固有の命令列に変換するバイトコードトランスレータ40と、汎用レジスタ61の状態を管理するレジスタ状態制御ユニット50とから構成されている。
プロセッサ1に固有のプログラムを実行中は、命令バッファ20の出力が有効となり、命令バッファ20の出力がセレクタ21を介して命令デコーダ22に入力される。一方、Javaプログラムを実行中は、バイトコードトランスレータ40の出力が有効となり、命令キャッシュ10から読み出されたJavaのバイトコード列が、上記バイトコードトランスレータ40でプロセッサ1に固有の命令列に変換された後、セレクタ21を介して命令デコーダ22に入力される。
第2図は、バイトコードトランスレータ40の1実施例を示す。
バイトコードトランスレータ40は、命令キャッシュ10から読み出されたバイトコード列を一時的に保持するためのバッファjava_inst420と、該java_inst420から読み出されたバイトコードをプロセッサ1に固有の命令コードに変換するためのトランスレートエンジン430と、上記java_inst420へのバイトコード列の読み込みを制御するためのバッファ管理ユニット400と、入力バイトコードがローカル変数領域からオペランドスタックへの変数ロード命令(iload、aloadなど)か否かを検出するためのロード検出ユニット410と、入力バイトコードがオペランドスタックへのローカル変数ロード命令であった場合に、入力バイトコードが示すindexを出力するためのゲート411を備える。
トランスレートエンジン430は、ソフトウェアで記述されたJVMのインタプリタの機能をハードウェア(LSI)にマッピングしたものであり、例えば、ソフトウェア記述のインタプリタ部分をVerilogのようなハードウェア記述言語に変換し、論理合成する方法によって形成される。トランスレートエンジン430で入力バイトコードを固有命令コードに変換する際に、バイトコードの種類によっては、1つのバイトコードが複数個の固有命令コードに分割される場合がある。カウンタcnt440は、このように1つのバイトコードを複数個の固有命令コードに分割する場合に、それまでに変換された固有命令の数あるいはサイクル数をカウントするためのものである。
トランスレートエンジン430で生成された固有命令のうち、オペレーションコード部は、信号線430Aを介して出力バッファtr_inst421に入力される。オペランド部は、第1オペランドが信号線430B、第2オペランドが430Cに出力され、それぞれセレクタ431、432を介して出力バッファtr_inst421に入力される。本実施例では、プロセッサ1の命令アーキテクチャが、日立製作所のSHプロセッサのように2オペランド形式ものを仮定しているが、MIPSやARMのような一般的プロセッサで採用されている3オペランド命令形式の場合は、オペランドの出力信号線とセレクタの数を3本にすればよい。
ここで、セレクタ431、432を設けた理由は、本発明では、バイトコードトランスレータ40の出力オペランドとして、トランスレートエンジン430の出力オペランドに代えて、後述するレジスタ状態制御ユニット50からの出力値が使用される場合があるからである。レジスタ状態制御ユニット50の動作は、入力バイトコードがオペランドスタックに対するローカル変数のロード命令(iloadなど)の場合にオン状態となるロード検出ユニット410からの出力信号load_vldと、ゲート411の出力信号load_indexによって制御されている。
第3図は、レジスタ状態制御ユニット50の1実施例を示す。
レジスタ状態制御ユニット50は、汎用レジスタ61の各エントリと対応して設けられた複数のレジスタ内容管理ロジック500−i(i=1〜N)と、第6図に示したJVMのオペランドスタック88の汎用レジスタ61へのマッピングを管理するためのスタック管理レジスタid_stack540とを備えている。
各レジスタ内容管理ロジック500−iは、汎用レジスタの対応エントリがJava実行環境において有効なデータを保持しているか否かを示す有効性表示メモリreg_valid501と、上記汎用レジスタの対応エントリがJVMにおけるオペランドスタック用として使用中か否かを示すオペランドスタック表示メモリstack_vld502と、上記汎用レジスタの対応エントリに設定されたローカル変数のインデックス値を記憶するためのインデックスメモリreg_idx503とを含んでいる。
JVMの規定では、任意のローカル変数は、フレームスタック86におけるカレントフレーム87を示すポインタと、当該ポインタからの相対位置であるインデックスのみによって指定されており、例えば、C言語のように、任意の変数をアドレスポインタによって参照することは禁止されている。従って、ローカル変数領域89に設定された任意のローカル変数は、仮にカレントフレームが固定されているとすれば、インデックス値のみで特定することができる。この特性を利用すれば、各ローカル変数に関して、それがロードされた汎用レジスタ61のエントリ番号(レジスタ番号)とインデックス値とを1対1の対応関係で管理することが可能となる。
スタック管理レジスタid_stack540は、汎用レジスタ61のエントリ数と同数またはこれよりも少数のエントリからなる。id_stack540のエントリ位置は、トップポインタtop_ptr530とボトムポインタbtm_ptr531によってリングバッファ的に管理され、各エントリには汎用レジスタ61のレジスタ番号が保持される。但し、上記id_stack540は、概念的にスタック構造を実現できるものであればよく、上述したリングバッファ構造に限定されるものではない。レジスタ状態制御ユニット50は、上記レジスタ内容管理ロジック500−i(i=1〜N)とスタック管理レジスタid_stack540の他に、エンコーダやセレクタなど種々の回路要素を備えているが、これらの回路要素の機能については、後述する詳細動作説明において明らかにする。
ここで、本発明のJavaアクセラレータ30に入力されるJavaバイトコード列と、Javaアクセラレータ30から出力されるプロセッサ1に固有の命令コード列との関係について、第4図を参照して説明する。
第4図(A)は、Javaバイトコード列の1例を示し、(B)は、上記バイトコード列を変換して得られる固有命令コード列を示す。ここで、"iload_1"(1)と"iload_2"(2)は、それぞれローカル変数領域89の第1、第2エントリにあるデータ(変数aとb)を第6図に示したオペランドスタック88に順次にロードすることを指示するバイトコード(命令)である。また、"iadd"(3)は、上記iload命令(1)、(2)によってオペランドスタックに積まれた上位2つのデータ“a”と“b”を加算し、加算結果“c”をオペランドスタック88のトップに積み込むことを指示する命令であり、"istore_3"(4)は、オペランドスタックのトップにあるデータ“c”をローカル変数領域89の第3エントリにストアすることを指示する命令である。
これらのバイトコードをプロセッサ1に固有の命令に変換する場合、対象となるプロセッサ1のアーキテクチャがレジスタベースとなっているため、汎用レジスタ61の一部を上記オペランドスタック88として使用する必要がある。第4図(B)に示した例では、汎用レジスタ61の第9レジスタ領域:R9と第10レジスタ領域:R10がオペランドスタックとして使用されている。
第4図(A)に示したバイトコード(1)〜(4)は、主記憶2から命令キャッシュ10に移され、命令キャッシュ10からJavaアクセラレータ30のバイトコードトランスレータ40に順次に供給される。バイトコードトランスレータ40では、例えば、最初のバイトコード"iload_1"を、トランスレートエンジン430に実装された命令変換機構によって、第4図(B)に示す最初の固有命令"MOV.L @(1,fp),R9"に変換する。
ここで、MOV.Lは、4バイト幅のデータ転送を意味しており、fpはフレームポインタ、R9は汎用レジスタ61の第9レジスタ領域を示している。フレームポインタfpは、実際には汎用レジスタ61の特定の領域に格納された値であるが、本明細書では、理解を容易にするためにfpというニーモニックで表すことにする。上記固有命令"MOV.L @(1,fp),R9"は、データキャッシュの「フレームポインタ+(1×4)」で示されるアドレス位置の内容(ローカル変数)を汎用レジスタ61の第9レジスタ領域:R9にロードすることを意味している。
トランスレートエンジン430で変換された固有命令は、一時的に出力バッファtr_inst421に蓄積された後、セレクタ21を経由して命令デコーダ22に取り込まれる。上記命令デコーダ22に取り込まれた固有命令は、プロセッサ1における通常の命令実行時と同様のプロセスで実行される。すなわち、命令で指定されたデータが汎用レジスタ61から読み出され、演算器60に送付される。固有命令"MOV.L @(1,fp), R9"の場合は、フレームポインタfpの値と即値1が演算器60に送付され、演算器60によって「フレームポインタ+(1×4)」のアドレス値が演算され、データキャッシュ11から上記アドレス位置の内容が演算器60に読み込まれ、汎用レジスタ61の第9レジスタ領域:R9に格納される。命令キャッシュ10に格納されたバイトコード列は、Javaアクセラレータ30のバイトコードトランスレータ40にパイプライン的に供給され、それぞれ対応する固有命令に変換された後、実行される。
第4図(A)に示したバイトコード列は、最も単純な加算ルーチンの1例を示しているが、更に複雑なバイトコード列として、配列されたデータの総和を算出するルーチンを実行する場合を考える。第4図(C)は、このような総和算出ルーチンのバイトコード列の1例を示す。ここで注目すべきことは、Javaはスタックマシンであるため、演算の都度、必要なデータをローカル変数領域89からオペランドスタック88に積み込むためのiload(またはaload)命令が実行されるという点にある。
第4図(C)において下線を付したバイトコード(iloadまたはaload)は、ループを繰り返す度に実行されるが、毎回同じ値をローカル変数領域からオペランドスタックにロードしている。これらのバイトコードを固有命令に変換して命令デコーダ22に供給した場合、演算器60は、値に変化のないデータあるいは既に汎用レジスタに格納済みとなっているデータ(演算結果)について、冗長なロード命令を何回も繰り返して実行すると言う無駄な動作が発生する。
本発明は、レジスタ状態制御ユニット50において、このような冗長なロード命令を検出し、実行しても意味のない固有命令がバイトコードトランスレータ40から命令デコーダ22に供給されるのを阻止することによって、Javaプログラムの実行速度を高速化することを特徴とする。例えば、第4図(C)に示したバイトコード列の場合、本発明を適用することによって、2回目以降の各イタレーションで実行される固有命令の個数を従来の10命令から6命令に減少でき、ループの繰り返し回数は増えれば増える程、演算所要時間の短縮効果が顕著になる。
以下、第1図〜第3図を参照して、本発明によるJavaアクセラレータ30の機能と動作について詳細に説明する。
命令キャッシュ10からバイトコードトランスレータ40に供給されたJavaバイトコードは、バッファjava_inst420に一時的に格納された後、トランスレートエンジン430に取り込まれ、各バイトコードに対応した固有命令に変換される。トランスレートエンジン430で生成された固有命令うち、オペコード部は、信号線430Aを介して出力バッファtr_inst421に入力される。
一方、信号線430B、430Cに出力されるオペランド部に関しては、もし、そのオペランド部が既に汎用レジスタに存在し、汎用レジスタから読み出し可能なものであれば、トランスレートエンジン430からの出力オペランドに代えて、レジスタ状態制御ユニット50から出力されるレジスタ番号、すなわち、dst_reg_idと、src_reg_id1と、src_reg_id2がセレクタ431、432で選択され、出力バッファtr_inst421に入力される。尚、オペランドが、入力バイトコードで暗黙的に指定される場合や、例えば、入力バイトコードの次のバイトで明示的に指定される場合は、トランスレートエンジン430で生成したオペランドが選択され、出力バッファtr_inst421に入力される。
例えば、第4図(A)に示したバイトコード列において、iadd命令(3)がトランスレートエンジン430に入力された場合、出力バッファtr_inst421には、オペコード部として、トランスレートエンジンで生成された固有命令のADDが入力され、第1オペランドと第2オペランドとして、レジスタ状態制御ユニット50から出力されたレジスタ番号R9、R10が入力される。レジスタ状態制御ユニット50におけるレジスタ番号の生成方法については後述する。
もし、或るバイトコードと対応して複数の固有命令が生成される場合、バイトコードの変換処理に複数サイクルを要する。この場合、トランスレートエンジン430は、入力バイトコードの種類とカウンタcnt440の値によって生成すべき固有命令を決定する。入力バイトコードが、例えば、iload命令のようにローカル変数領域の内容をオペランドスタックに移動する命令の場合、これをロード検出ユニット410によって検出し、load_vld信号としてレジスタ状態制御ユニット50に通知する。また、上記ロード検出ユニット410によって、フレームスタックへの変数ロード命令が検出された場合、暗黙的に指定されているインデックスの値や、次バイトにより明示的に指定されたインデックスの値が、load_index信号としてレジスタ状態制御ユニット50に通知される。
バッファ管理ユニット400は、上記バッファjava_inst420に有効なバイトコードが存在するか否かを監視し、もし有効なバイトコードが無くなった場合、バイトコード・フェッチ要求信号java_fetch_reqをアサートし、命令フェッチユニット23に次バイトコードのフェッチを要求する。
次に、レジスタ状態制御ユニット50の動作について説明する。
最初に、バイトコードトランスレータ40が上述したフレームスタックへの変数ロード命令以外の一般的な入力バイトコードを処理している場合のレジスタ状態制御ユニット50の動作について述べる。
バイトコードトランスレータ40が一般的な入力バイトコードを処理している時、ロード検出回路410の出力信号load_vldはオフ(ネゲート)状態となる。信号load_vldがネゲート状態にあるとき、レジスタ状態制御ユニット50は、変換後の固有命令のソースオペランド用として使用するために、スタック管理レジスタid_stack540のトップにあるレジスタ番号を信号線src_reg_id1またはsrc_reg_id2経由でバイトコートトランスレータ40に送付する。
すなわち、スタック管理レジスタid_stack540から、トップポインタtop_ptr530が指定するエントリの内容をセレクタ541で選択して、src_reg_id1として出力する。もし、入力バイトコードがオペランドスタックの上位2つをオペランドとして使用している場合は、デクリメンタ544によって上記top_ptr530の値から1を減算し、上記id_stack540から上記デクリメンタ544の出力で指示されたエントリの内容をセレクタ542で選択して、src_reg_id2として出力する。
バイトコードトランスレータ40で生成される固有命令が2つのソースオペランドを使用する場合、第1オペランドのソースレジスタが演算結果のディスティネーションレジスタとして使用される。この場合、信号src_reg_id1がディスティネーションレジスタの指定信号として兼用される。固有命令で使用するソースオペランドが1個の場合は、汎用レジスタ61の中から使用可能なレジスタ(エントリ)を検索し、これをディスティネーションレジスタとして用いる。使用可能なレジスタの検索は、例えば、次の条件で行われる。
(a) レジスタ内容管理ロジック500−1〜500−Nの中から、有効性表示メモリreg_valid501の値が“0”で、且つ、オペランドスタック表示メモリstack_vld502の値が“0”となっている管理ロジックを選択する。上記条件を満たす管理ロジックが1個以上見つかった場合は、プライオリティエンコーダ521によって、1つの管理ロジックを選択し、その管理ロジックの番号を使用可能なレジスタ番号としてセレクタ523に入力する。これによって、汎用レジスタ61の中から、オペランドスタック用またはローカル変数用としてマッピングされていない未使用エントリが選択され、新たなディスティネーションレジスタ候補に指定される。
(b) レジスタ内容管理ロジック500−1〜500−Nの中から、有効性表示メモリreg_valid501の値が“1”で、且つ、オペランドスタック表示メモリstack_vld501の値が“0”の管理ロジックを選択する。上記条件を満たす管理ロジックが1個以上見つかった場合は、プライオリティエンコーダ520によって1つの管理ロジックを選択し、その管理ロジック番号を使用可能なレジスタ番号としてセレクタ523に入力する。これによって、汎用レジスタ61の中から、オペランドスタック用にはなっていないが、ローカル変数用として使用中のエントリが選択され、新たなディスティネーションレジスタ候補に指定される。
(c) スタック管理レジスタid_stack540に登録されている汎用レジスタ61のエントリ番号の中から、セレクタ543によって、ボトムポインタbtm_ptr531で指示されたエントリ番号を使用可能なレジスタ番号として選択し、セレクタ523に入力する。これによって、オペランドスタック用として既にマッピング済みの汎用レジスタ・エントリのうち、オペランドスタックの最も下に位置するエントリが選択され、新たなディスティネーションレジスタ候補に指定される。上記ディスティネーションレジスタ候補がセレクタ523でディスティネーションレジスタとして選択された場合は、当該レジスタの内容についてスピルアウト処理が必要となるため、バイトコードトランスレータ40にスピルアウト用ストア命令を発行させるための信号ovr_flwをポインタ制御回路523から出力する。
上記条件(a)、(b)、(c)で選択されたディスティネーションレジスタ候補は、セレクタ523において、(a)、(b)、(c)の順番で優先順位付けされ、使用可能なレジスタ番号が選択される。セレクタ523で選択されたレジスタ番号は、dst_reg_id信号として、バイトコードトランスレータ40に通知される。尚、条件(b)によって指定されたレジスタがセレクタ523でディスティネーションレジスタとして選択された場合、該レジスタに対応するレジスタ内容管理ロジック500−kの有効性表示メモリreg_vld501の設定値を“0”に変更する必要がある。上記メモリreg_vldの設定値変更は、平易な論理回路で実現できるため、第3図では省略してある。
レジスタ状態制御ユニット50では、JVMで仮想的に定義されている図6に示したオペランドスタック88を管理する必要がある。すなわち、ソースオペランド用として使用された汎用レジスタ・エントリのレジスタ番号については、スタック管理レジスタid_stack540からポップ(pop)し、ディスティネーションオペランド用として使用されたエントリのレジスタ番号については、スタック管理レジスタid_stack540にプッシュ(push)する必要がある。
そこで、本実施例では、バイトコードトランスレータ40のトランスレートエンジン430に、入力バイトコードの解読結果に応じてスタック・インクリメント信号stack_incを発生させ、レジスタ制御ユニット50のポインタ制御532に、上記stack_incに応じてトップポインタtop_ptr530の値を更新させる。例えば、オペランドスタックで2つのソースオペランドをポップし、1つのディスティネーションをプッシュするバイトコード列を実行する場合、トランスレートエンジン430から、−1を示すstack_incを出力し、ポインタ制御532に、トップポインタtop_ptr530の値を現在値より1だけ減算させる。セレクタ523から出力されたディスティネーション用のレジスタ番号は、格納制御回路533によって、スタック管理レジスタid_stack540中の上記top_ptr530が指定するエントリに格納(push)される。
スタック管理レジスタid_stack540に新しいレジスタ番号kがpushされた時、格納制御回路533によって、上記レジスタ番号kに対応するレジスタ内容管理ロジック500−kのオペランドスタック表示メモリstack_vld502に“1”をセットする。なお、スタック管理レジスタid_stack540からpopされたレジスタ番号については、該レジスタ番号iに対応するレジスタ内容管理ロジック500−iにおいて、オペランドスタック表示メモリstack_vld502の値をクリアする必要がある。上記レジスタ番号iは、スタック管理レジスタid_stack540の読出し用セレクタ541、542から信号src_reg_id1またはsrc_reg_id2として出力されている。従って、上記stack_vldのクリア制御信号は、これらのセレクタ541、542の出力信号をデコードする比較的簡単な論理回路(図示せず)によって生成できる。
次に、本発明で特徴とするオペランドスタックへの変数ロード命令を含むバイトコードの変換時におけるJavaアクセラレータの動作について述べる。
先ず、繰り返しループにおける上記ロード命令の第1回目の変換処理、すなわち、当該ロード命令によって読み出されるローカル変数がまだ汎用レジスタ61にマッピングされていない場合の動作について説明する。
バッファjava_inst420に格納された変数ロード命令は、ロード検出ユニット410により解読され、その結果、信号load_vldがアサートされ、上記ロード命令で扱うローカル変数のインデックスがゲート411を介してload_indexとして出力される。信号load_vldがオン状態となった時、レジスタ状態制御ユニット50では、通知されたインデックスload_indexに基づいて、オペランドスタックにロードすべきローカル変数が既に汎用レジスタ61にマッピングされているか否かを検索する。
すなわち、各レジスタ内容管理ロジック500−1〜500−Nにおいて、インデックスメモリreg_idx503の内容と上記通知インデックスload_indexとを比較回路504で比較し、各管理ロジックのAND回路505から出力される判定信号をOR回路510に入力することによって、通知インデックスload_indexが汎用レジスタ61の何れかのエントリに登録済みか否かを示す検知信号reg_hitを得る。この論理は、一般的なキャッシュメモリにおけるヒット検出論理に類似している。変数ロード命令を含むバイトコードの第1回目の変換時には、通知インデックスload_indexは汎用レジスタに未登録状態となっているため、検知信号reg_hitはアサートされない。
この場合、バイトコードトランスレータ40から変換後の変数ロード命令を発行し、レジスタ状態制御ユニット50からローカル変数のディスティネーションレジスタを指定する必要がある。セレクタ523は、検知信号reg_hitがオフ状態の時、前述した条件(a)、(b)、(c)で指定された候補の中からディスティネーションレジスタを選択し、レジスタ番号をdst_reg_idとして出力する。
オペランドスタックへの変数ロード命令が発行され、ローカル変数が汎用レジスタ61の上記dst_reg_idが示すエントリにマッピングされることになった場合、変数とレジスタ番号との関係を記憶し、上記変数ロード命令の次回の処理に備える必要がある。このために、本実施例では、変数のディスティネーションレジスタ番号kと対応するレジスタ内容管理ロジック500−kにおいて、上記変数ロード命令が使用したインデックス値load_indexをインデックスメモリreg_idx503に登録し、有効性表示メモリreg_vld501に“1”を設定する。この動作は、reg_idx書き込み制御512によって行なわれる。reg_idx書き込み制御512は、検知信号reg_hitがオフ状態となった時、セレクタ523から出力されるレジスタ番号dst_reg_idをデコードし、該レジスタ番号と対応するレジスタ内容管理ロジック500−kのメモリreg_valid501とreg_idx503に書き込みイネーブル信号を与えることによって、有効性表示メモリreg_valid501とオペランドスタック表示メモリreg_idx503の内容を更新する。
第4図(C)に示したバイトコード列の場合、上記動作によって、iload命令(2)、(4)、(6)で指定されたローカル変数”i”、”sum”、”array pointer”と、aload命令(5)で指定されたreferenceタイプの変数”array pointer”が、それぞれセレクタ523で選択されたレジスタ番号dst_reg_idと対応するレジスタ内容管理ロジックに記憶されることになる。
次に、繰り返しループにおける変数ロード命令を含むバイトコードの2回目以降の変換時におけるJavaアクセラレータの動作について説明する。
バイトコードトランスレータ40から出力された信号load_vldがアサートされ、変数ロード命令のインデックス値がload_indexにより通知されると、何れかのレジスタ内容管理ロジック500−kにおいて、インデックスメモリreg_idx503の内容と通知インデックスload_indexとが一致し、AND回路505の出力がオン状態となる。この時、OR回路510から出力される検知信号reg_hitがアサートされる。また、上記AND回路505に接続されたエンコーダ511から、上記レジスタ内容管理ロジック500−kと対応するレジスタ番号kが出力される。
変数ロード命令のインデックス値が既に汎用レジスタに格納済みとなっていた場合、演算器60で上記変数ロード命令を実行する必要はなく、従って、バイトコードトランスレータ40で生成した固有命令を命令デコーダ22に与える必要ない。この場合にJavaアクセラレータ30で実行すべき動作は、既に汎用レジスタ61にマッピングされているローカル変数をオペランドスタックに積むこと、換言すれば、レジスタ状態制御ユニット50において、上記ローカル変数用のレジスタ番号kをスタック管理レジスタid_stack540にpushすることである。
OR回路510から出力される検知信号reg_hitは、バイトコードトランスレータ40のトランスレートエンジン430に、変数ロード命令の変換抑止信号として入力されている。検知信号reg_hitがアサート状態になると、トランスレートエンジン430は、現在変換中のバイトコードを廃棄し、バッファjava_inst420から取り込んだ次のバイトコードの変換処理を開始する。
検知信号reg_hitがアサート状態になると、セレクタ523が上記エンコーダ511から出力されたレジスタ番号を選択する。この結果、ローカル変数を保持しているレジスタの番号が、スタック管理レジスタid_stack540内のトップポインタtop_ptr530で指定されたエントリに格納され、上記レジスタ番号に対応するレジスタ内容管理ロジック500−kのメモリstack_vld502に“1”がセットされる。この動作は、前述した一般的なバイトコードの変換処理時と同様である。
1つのフレームについて処理が完了し、フレームスタック86内の別フレームのローカル変数を処理する場合、フレームの切替えに伴って、インデックス値と実際のローカル変数との対応関係が変わる。この場合、レジスタ内容管理ロジック500−1〜500−Nにおける有効性表示メモリreg_valid501の設定値を全てクリアする必要がある。この動作は、フレームポインタfpの変更、すなわち、フレームポインタfp用として割当てられている汎用レジスタ61の特定領域へのデータ書込みを検出して、各有効性表示メモリreg_valid501にクリア信号を発行する制御回路(図示せず)によって制御される。
第5図は、上述した本発明のプロセッサを利用した組み込みシステムの1例として、携帯電話システムのブロック構成図を示す。
本発明のJavaアクセラレータを備えたプロセッサは、アプリケーション処理プロセッサ1として使用される。Javaプログラムは、上記プロセッサ1に接続されたアプリケーションメモリ2に予め登録される。但し、Javaプログラムの一部は、ネットワークを介して上記メモリ2にダウンロードされてもよい。この場合、アンテナ6で受信されたJavaプログラムは、RFインターフェース5を介してベースバンド処理プロセッサ3に入力され、フォーマット変換された後、プロセッサ1を介してアプリケーションメモリ2に格納される。
Javaプログラムは、マイク71またはテンキー73からの入力に応答して実行され、実行結果は、I/O処理部7を介して液晶ディスプレイ70あるいはスピーカ72に出力される。上記システム構成により、予めメモリに内蔵されたJavaアプリケーションプログラム、あるいはインターネットを介して配信されるJavaアプリケーションプログラムを高速に実行可能な携帯端末システムを提供できる。
以上の説明から理解されるように、本発明プロセッサシステムによれば、上記レジスタ状態制御ユニットで冗長バイトコードを検出した時、バイトコードトランスレータから命令デコーダへの固有命令の供給を抑制することによって、プロセッサによる余計な命令実行を回避し、Javaプログラムの実行速度を向上させることが可能となる。
一般的に、Javaプログラムでは、オペランドスタックへのローカル変数のロード命令が全バイトコードの3割程度を占めているが、本発明によれば、繰り返しループに含まれるローカル変数のロード命令を冗長バイトコードとして扱い、その実行を省略すること可能となるため、Javaプログラムの内容によっては、実行速度において従来の20%〜30%の性能向上を図ることができる。
1:プロセッサ、2:主記憶、10:命令キャッシュ、
11:データキャッシュ、12:主記憶制御ユニット、
20:命令バッファ、21:セレクタ、22:命令デコーダ、
23:命令フェッチユニット、30:Javaアクセラレータ、
40:バイトコードトランスレータ、50:レジスタ状態制御ユニット、
60:演算器、61:汎用レジスタ。

Claims (1)

  1. 命令デコーダと、複数のレジスタ領域からなる汎用レジスタと、少なくとも1つの演算器とを有するプロセッサと、Javaバイトコード列を上記プロセッサに固有の命令列に変換して上記命令デコーダに供給するJavaアクセラレータとからなるプロセッサシステムにおいて、
    上記Javaアクセラレータが、上記汎用レジスタの各レジスタ領域の使用状態を示す状態情報を記憶するための手段と、上記状態情報に基づいて空き状態にあるレジスタ領域または解放すべきレジスタ領域を選択することによって、Javaのオペランドスタックを上記汎用レジスタに動的にマッピングするための手段とを備えたことを特徴とするプロセッサシステム。
JP2009069256A 2009-03-23 2009-03-23 Javaアクセラレータを備えたプロセッサシステム Expired - Fee Related JP4418509B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009069256A JP4418509B2 (ja) 2009-03-23 2009-03-23 Javaアクセラレータを備えたプロセッサシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009069256A JP4418509B2 (ja) 2009-03-23 2009-03-23 Javaアクセラレータを備えたプロセッサシステム

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2003529306A Division JP4485198B2 (ja) 2001-09-12 2001-09-12 Javaアクセラレータを備えたプロセッサシステム

Publications (2)

Publication Number Publication Date
JP2009176311A JP2009176311A (ja) 2009-08-06
JP4418509B2 true JP4418509B2 (ja) 2010-02-17

Family

ID=41031255

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009069256A Expired - Fee Related JP4418509B2 (ja) 2009-03-23 2009-03-23 Javaアクセラレータを備えたプロセッサシステム

Country Status (1)

Country Link
JP (1) JP4418509B2 (ja)

Also Published As

Publication number Publication date
JP2009176311A (ja) 2009-08-06

Similar Documents

Publication Publication Date Title
JP4485198B2 (ja) Javaアクセラレータを備えたプロセッサシステム
JP4171496B2 (ja) スタックを用いる演算マシンのための命令フォールディング処理
KR101817397B1 (ko) 하나의 아키텍처의 코드 모듈이 다른 아키텍처의 라이브러리 모듈을 사용할 수 있게 하는 아키텍처 간 호환성 모듈
CN108369511B (zh) 用于基于通道的跨步存储操作的指令和逻辑
US9146740B2 (en) Branch prediction preloading
RU2292581C2 (ru) Команды загрузки/перемещения и копирования для процессора
JP3634379B2 (ja) スタックキャッシングのための方法及び装置
KR100412920B1 (ko) 데이터 밀도가 높은 risc 프로세서
EP0950216B1 (en) A processing device for executing virtual machine instructions
KR102478874B1 (ko) 비순차적 하드웨어 소프트웨어 공동 설계된 프로세서에서 스택 동기화 명령어를 갖는 술어 값의 스택을 구현하고 유지하기 위한 방법 및 장치
US20200364054A1 (en) Processor subroutine cache
TWI515652B (zh) 具有在硬體中的分支計數表的指令最佳化處理器
JP2000501217A (ja) 配列アクセス境界チェックを加速したプロセッサ
JP2000515270A (ja) ネットワークまたはローカルメモリから受け取った命令セットの実行のための二重命令セットプロセッサ
TWI781588B (zh) 包含用於控制流向終止的模式特定結束分支之設備、系統及方法
JP2021174513A (ja) データ依存脆弱分岐の機会主義的再誘導のための命令セットアーキテクチャベース自動負荷追跡
JP6073392B2 (ja) 命令としてデータ値を評価するシステムおよび方法
WO1999041659A1 (en) Microprocessor including multiple register files occupying the same logical space
US20060075208A1 (en) Microprocessor instruction using address index values to enable access of a virtual buffer in circular fashion
JP3345787B2 (ja) データ処理装置
JP4418509B2 (ja) Javaアクセラレータを備えたプロセッサシステム
US7757067B2 (en) Pre-decoding bytecode prefixes selectively incrementing stack machine program counter
US20240036866A1 (en) Multiple instruction set architectures on a processing device
WO2020243044A1 (en) Processor, system and method of storing register data elements.
JP2696578B2 (ja) データ処理装置

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20091104

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20091127

R150 Certificate of patent or registration of utility model

Ref document number: 4418509

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121204

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121204

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121204

Year of fee payment: 3

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121204

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131204

Year of fee payment: 4

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees