(57)【特許請求の範囲】
【請求項１】
複数の命令セットを実行する情報処理装置であって、
第１命令セットを特定の命令として実行し、複数の第１ステージからなる第１パイプラインのパイプライン動作を行う命令実行部と、
第２命令セットの第２命令を前記第１命令セットの単数又は複数の第１命令を含む第１命令列に変換し、前記命令実行部に前記第１命令列を供給する命令変換回路とを有し、
前記命令実行部は、前記第１パイプラインのストールの制御及び前記第１パイプラインの後続命令をキャンセルする制御を行うパイプライン制御部を有し、
前記命令変換回路は、カウンタ手段と、複数の第２ステージからなる第２パイプラインとを有し、前記第２パイプラインは複数の第１ステージに対応する複数の第２ステージを有し、
前記第２パイプラインは、前記パイプライン制御部が前記第１パイプラインを制御するための信号を用いて前記第１パイプラインと同様に制御され、
前記カウンタ手段は、前記第１命令列のうちの一つの命令と同期したフラグが前記第２パイプラインに入力され、前記フラグが複数の第２ステージの一つのステージに到達したとき、カウント値をデクリメントし、
前記パイプライン制御部は、前記カウント値に基づいて前記ストールの制御及び前記キャンセルする制御を行う、情報処理装置。
【請求項２】
前記カウンタ手段は、前記カウント値を１ずつデクリメントしてカウントし、
前記命令変換回路は、前記カウント値がアンダーフロー状態のとき所定の命令を出力し、
前記情報処理装置は、前記カウント値がアンダーフロー状態のとき、前記命令実行部の第１パイプラインの残りの後続命令を無効にするモジュールを有する、請求項１記載の情報処理装置。
【請求項３】
前記命令変換回路は、前記カウンタ手段が所定のカウント値に達したとき、所定の命令を出力し、
前記所定の命令は、スレッド切り替えのソフト仮想マシンを実行する命令である、請求項１記載の情報処理装置。
【請求項４】
前記フラグは、前記第１命令列の最後の命令が前記命令変換回路から前記命令実行部に入力されたとき、第２パイプラインに入力され、
前記複数の第１ステージは、命令デコードステージ、命令実行ステージ、メモリアクセスステージ及びレジスタ格納ステージを有し、
前記複数の第２ステージは、前記命令デコードステージに対応する前記命令デコードステージに対応する模擬命令デコードステージ、前記命令実行ステージに対応する模擬命令実行ステージ、前記メモリアクセスステージに対応する模擬メモリアクセスステージ及び前記レジスタ格納ステージに対応する模擬レジスタ格納ステージを有し、
前記カウンタ手段は、前記フラグが前記模擬レジスタ格納ステージに到達したときにカウント値をカウントする、請求項３記載の情報処理装置。
【請求項５】
前記カウンタ手段は、前記第１命令列の最後の命令が前記命令実行部で実行された実行数をカウントする第１カウンタ手段と、前記命令実行部における後方分岐数をカウントする第２カウンタ手段とを有する、請求項１記載の情報処理装置。
【請求項６】
前記カウンタ手段は、前記第１命令列の最後の命令が前記命令実行部で実行された実行数をカウントする第１カウンタ手段と前記命令実行部における後方分岐数をカウントする第２カウンタ手段のうち、少なくともどちらか一方のカウンタ手段を有し、
前記情報処理装置は、前記カウンタ手段が前記実行数をカウントするか、前記後方分岐数をカウントするかを制御するための情報を記憶するレジスタを有する、請求項１記載の情報処理装置。
【請求項７】
前記情報処理装置は、後方分岐が成立したか否かを判定する検出部を有し、前記検出部は、後方分岐が成立したと判定したことを前記カウンタ手段に通知し、
前記カウンタ手段は、前記通知に基づいてカウント値を１ずつデクリメントする、請求項６記載の情報処理装置。
【請求項８】
前記フラグは、前記第１命令列の最後の命令が前記命令変換回路から前記命令実行回路に出力されたとき、前記第２パイプラインに入力され、
第２フラグは、前記第１命令列に含まれる後方分岐命令が前記命令変換回路から前記命令実行部に出力されたとき、前記第２パイプラインに入力され、
前記複数の第１ステージは、命令デコードステージ、命令実行ステージ、メモリアクセスステージ及びレジスタ格納ステージを有し、
前記複数の第２ステージは、前記命令デコードステージに対応する前記命令デコードステージに対応する模擬命令デコードステージ、前記命令実行ステージに対応する模擬命令実行ステージ、前記メモリアクセスステージに対応する模擬メモリアクセスステージ及び前記レジスタ格納ステージに対応する模擬レジスタ格納ステージを有し、
前記検出部は、前記第２フラグが前記模擬命令実行ステージに到達したとき、後方分岐が成立したか否かを判定し、
前記カウンタ手段は、前記レジスタに記憶されている情報に基づいて、前記第１フラグが前記模擬レジスタ格納ステージに到達したことによりカウントするか、又は前記通知によりカウントするかを決定する、請求項７記載の情報処理装置。
【請求項９】
複数の命令セットを実行する情報処理装置であって、
第１命令セットを特定の命令として実行し、複数の第１ステージからなるパイプラインのパイプライン動作を行う命令実行部と、
前記第２命令セットの第２命令を第１命令セットの第１命令列に変換し、前記第１命令列を前記命令実行部に供給する命令変換回路と、を有し、
前記命令実行部は、前記第１パイプラインのストールの制御及び前記パイプラインの後続命令をキャンセルする制御を行うパイプライン制御部を有し、
前記命令変換回路は、カウンタ手段と、複数の模擬ステージからなる模擬パイプラインとを有し、前記模擬パイプラインは前記命令実行部による前記第１命令列の実行に同期されるステージに対応する模擬ステージを有し、
前記模擬パイプラインは、前記パイプライン制御部が前記パイプラインを制御するための信号を用いて制御され、かつ、前記パイプラインのパイプライン動作と同じパイプライン動作を行い、
前記カウンタ手段は、前記第１命令列のうちの一つの命令と同期したフラグが前記模擬パイプラインに入力され、前記フラグが複数の模擬ステージの一つのステージに到達したとき、カウント値をデクリメントし、
前記パイプライン制御部は、前記カウント値に基づいて前記ストールの制御及び前記キャンセルする制御を行う、情報処理装置。
【請求項１０】
前記情報処理装置は、カウンタ手段を有し、
前記模擬パイプラインは、前記第１命令列に対応するフラグが入力され、
前記複数のステージは、命令デコードステージ、命令実行ステージ、メモリアクセスステージ及びレジスタ格納ステージを有し、
前記複数の模擬ステージは、前記命令デコードステージに対応する模擬命令デコードステージ、前記命令実行ステージに対応する模擬命令実行ステージ、前記メモリアクセスステージに対応する模擬メモリアクセスステージ及び前記レジスタ格納ステージに対応する模擬レジスタ格納ステージを有し、
前記カウンタ手段は、前記フラグが前記模擬レジスタ格納ステージに到達したときにカウントする、請求項９記載の情報処理装置。
【請求項１１】
前記情報処理装置は、カウンタ手段を有し、
前記模擬パイプラインは、前記第１命令列の所定の命令に対応するフラグが入力され、
前記複数のステージは、命令デコードステージ、命令実行ステージ、メモリアクセスステージ及びレジスタ格納ステージを有し、
前記複数の模擬ステージは、前記命令デコードステージに対応する模擬命令デコードステージ、前記命令実行ステージに対応する模擬命令実行ステージ、前記メモリアクセスステージに対応する模擬メモリアクセスステージ及び前記レジスタ格納ステージに対応する模擬レジスタ格納ステージを有し、
前記カウンタ手段は、前記フラグが前記模擬命令実行ステージに到達し、かつ、前記命令実行部で後方分岐が成立したことを検出したときにカウントする、請求項９記載の情報処理装置。
【請求項１２】
前記情報処理装置は、初期値を指定するカウンタ最大値レジスタを有し、
前記カウンタ最大値レジスタは、前記カウンタ手段がアンダーフローする際に、前記カウンタ手段に前記初期値を書き込む、請求項１記載の情報処理装置。
【請求項１３】
前記カウンタ手段が制御するレジスタに記憶される情報は、後方分岐数又は実行数である、請求項１記載の情報処理装置。
【請求項１４】
前記フラグは第１フラグ又は第２フラグであって、
前記第１フラグは、前記第１命令列の最後の命令である前記第１パイプラインのレジスタ格納ステージの実行を表し、
前記第２フラグは、前記第１命令列の後方分岐である前記第１パイプラインの実行ステージを表し、
前記第１フラグ又は前記第２フラグのうちの一つのフラグが前記レジスタによって選択される、請求項１３記載の情報処理装置。
【請求項１５】
第２レジスタは前記カウンタ手段に実行数を設定し、
前記カウンタ手段は、前記第１命令列の最後の命令の実行の通知によってカウント値をデクリメントし、
前記命令変換回路は、カウント値がアンダーフロー状態のとき、前記カウント値のカウントを終了し、スレッド切り替えのソフトウエア仮想マシンを実行する、請求項１４記載の情報処理装置。
【請求項１６】
第２レジスタは前記カウンタ手段に後方分岐数を設定し、
前記カウンタ手段は、後方分岐の通知によって、カウント値をデクリメントし、
前記命令変換回路は、カウント値がアンダーフロー状態のとき、前記カウント値のカウントを終了し、ガーベッジコレクションチェックを起動するソフトウエア仮想マシンを実行する、請求項１４記載の情報処理装置。
【請求項１７】
前記カウンタ手段は、第２命令から展開された前記第１命令列の最後の第１命令に同期するフラグが入力され、前記フラグがレジスタ格納ステージに到達したとき、カウント値をデクリメントする、請求項１記載の情報処理装置。
【請求項１８】
前記カウント値がアンダーフローしたとき、
前記パイプライン制御部は、前記第１パイプラインの残りの第１命令を無効にし、
前記命令変換回路は、スレッド切り替えのソフトウエア仮想マシンを実行するための所定の命令を出力して、前記ソフトウエア仮想マシンを実行する、請求項１７記載の情報処理装置。
【請求項１９】
前記命令変換回路は、検出部を有し、
前記カウンタ手段は、前記第１命令列のうちの一つの命令と同期したフラグが前記第２パイプラインに入力され、前記フラグが複数の第２ステージの一つのステージに到達したとき、又は、前記検出部が前記第２パイプラインの命令実行ステージからのフラグ情報と前記第１パイプラインの真偽ビット情報を参考にして後方分岐を検出したとき、カウント値をデクリメントし、
前記第１命令列の分岐命令は、事前の命令によって設定された真偽ビットを参考にして後方分岐であるか否かを判定する命令である、請求項１記載の情報処理装置。
【請求項２０】
前記カウント値がアンダーフローしたとき、
前記パイプライン制御部は、第１パイプラインの残りの第１命令を無効にし、
前記命令変換回路は、ガーベッジコレクションチェックを起動するソフトウエア仮想マシンを実行するための所定の命令を出力して、前記ソフトウエア仮想マシンを実行する、請求項１９記載の情報処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は情報処理装置、特に中間言語をプロセッサ固有の命令に変換して実行する情報処理装置における、特定のイベントの検出、及び、処理方法に関する。
【０００２】
【従来の技術】
近年、Ｊａｖａ言語で記述されたアプリケーションが携帯電話や携帯端末で急速に広がっている。Ｊａｖａとはサン・マイクロシステムズ社により開発されたＣ＋＋に類似したオブジェクト指向プログラミング言語である。なお、"Ｊａｖａ"はサン・マイクロシステムズ社の登録商標である。Ｊａｖａ言語が受けいれられる要因として、Ｊａｖａ言語は、中間言語に対して仮想マシンを用いてＣＰＵに固有の命令に変換して実行される特徴が挙げられる。仮想マシンを備えるＣＰＵであれば、ＣＰＵの種類に依存せずにＪａｖａアプリケーションを実行することができるので移植性が高い。なお、中間言語とは、Ｊａｖａの実行オブジェクトを生成するためのコンパイルの結果であり、Ｊａｖａバイトコードまたは省略してバイトコードとも呼ばれる。
【０００３】
仮想マシン（以下"ＶＭ"と呼ぶ）は、一般にソフトウェア（これを以下"ソフトＶＭ"と呼ぶ）で提供されるが、各バイトコードをインタプリタで解釈実行するために一般には低速である。このため、使用頻度の高いバイトコードをハードウェア実行することで高速化を行うハードウェアアクセラレータが知られている。ハードウェアアクセラレータの例については「日経エレクトロニクス」、ｎｏ．７９７，ｐｐ．１６８−１７６，２００１．６．４（この記事はＪａｖａ ｔｏ ｇｏ： Ｐａｒｔ １； Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ Ｒｅｐｏｒｔ，ｖｏｌ．１５，ｎｏ．２，Ｆｅｂ．２００１の翻訳である）に記載される。
【０００４】
【発明が解決しようとする課題】
本願発明者等は、本願に先立って、ハードウェアアクセラレータでバイトコードを処理する際のＪａｖａにおけるスレッド切り替えについて検討を行った。ＶＭの仕様はサン・マイクロシステムズ社により決定される。サン・マイクロシステムズ社はＪａｖａ２として複数の仕様を公開しており、そのうち組み込み機器向けの仕様はＪ２ＭＥである。この仕様にはさらに、ネットワーク情報機器用のＣＤＣと、ＣＰＵやメモリに制限のある携帯型ネットワーク情報機器用のＣＬＤＣの２つの仕様がある。
【０００５】
一般に、通常の複数のタスクを実行するＯＳでは、タスクの切り替えのタイミングの検出はタイマー割り込みを用いている。Ｊａｖａも複数のタスクを平行して実行している。Ｊａｖａでは、上記タスクのことを特にスレッドと呼んでいる。サン・マイクロシステムズ社が示したＣＤＣの参照実装におけるスレッド切り替えも、タイマー割り込みで行っている。一方、ＣＬＤＣの参照実装では、より簡単にスレッド切り替えを実現するために、実行したバイトコード数をカウントして、一定の値に達すると、スレッドの切り替えを行っている。図２にその概念図を示す。スレッドＡ（TH_A）、スレッドＢ（TH_B）、スレッドＣ（TH_C）の３つのスレッドが実行され、最初にTH_AにおけるTH_A1が実行されているとする。TH_A1の実行したバイトコードがある一定数に達すると、ＶＭは実行するスレッドをTH_B1に切り替える。次にTH_B1が実行したバイトコード数が一定に達すると、同様にTH_C1に切り替わり、TH_C1の次はTH_A2に切り替わる。
【０００６】
従来は、このカウンタのデクリメントとアンダーフローのチェックをソフトウェアで実行していた。例えば、カウント数をＣＰＵの汎用レジスタ上にマッピングし、ＣＰＵの固有の命令でカウンタのデクリメントを行う。この場合、カウントをデクリメントする命令とタスク切り替えの処理に条件分岐する命令を、毎バイトコード毎に実行することになる。この場合、通常のハードウェアによるタイマー割り込みに比べて、実行命令数が増えることになり、高速動作が困難になることに本願発明者等は気が付いた。
【０００７】
スレッド切り替えと似たＶＭの仕様に、ガベッジコレクションがある。ＶＭはランダムに使用するメモリ領域を持っており、Ｊａｖａプログラムの実行が進むとこのメモリ領域に使われなくなったエリアが断続的に残る。そこで、ＶＭはガベッジコレクションと呼ばれるメモリの整理を行う。ガベッジコレクションを行うかどうかチェックするタイミングはＶＭにより異なる。サン・マイクロシステムズ社が示したＣＤＣの参照実装では、後方分岐が実行された数をカウントして、アンダーフローしたところでガベッジコレクションのチェックを行う。この場合も、カウンタのデクリメントとアンダーフローのチェックはソフトウェアにより実行されており、スレッド切り替えの場合と同様に実行命令数が増えることになり、高速動作が困難になることに本願発明者等は気が付いた。
【０００８】
本発明の一つ目的は、ハードウェアアクセラレータにおいて、上記に示したような実行バイトコード数、あるいは、後方分岐数を正確かつ高速にハードウェアでカウントする機構を備えた情報処理装置を提供することである。
【０００９】
また、Ｊａｖａには特有のＪａｖａ例外と呼ばれる処理がある。Ｊａｖａでは、プログラムが配列構造のデータにアクセスしようとした際、配列へのポインタがＮｕｌｌでないこと、アクセスしようとしているインデックスが範囲を超えていないことを毎回チェックする。Ｎｕｌｌの場合はＮｕｌｌ Ｐｏｉｎｔｅｒ Ｅｘｃｅｐｔｉｏｎ、インデックスが範囲を超える場合はＡｒｒａｙ Ｉｎｄｅｘ Ｏｕｔ Ｏｆ Ｂｏｕｎｄｓ ＥｘｃｅｐｔｉｏｎというＪａｖａ例外を発生させて、例外処理のルーチンへ分岐する。Ｊａｖａ例外にはこの他にも、０で除算を行おうとした際に発生するＡｒｉｔｈｍｅｔｉｃ Ｅｘｃｅｐｔｉｏｎなどがある。このように、配列をアクセスする際に、Ｎｕｌｌでないこと、アクセスしようとしているインデックスが範囲を超えていないことを毎回チェックする必要があり、このチェックをソフトウェアにより行おうとすると実行命令数が増えるため、高速動作の妨げになることに本願発明者等は気が付いた。
【００１０】
本発明の他の一つの目的は、ハードウェアアクセラレータによってバイトコードをＣＰＵに固有の命令に変換する情報処理装置において、Ｊａｖａ例外の検出処理を高速に行う機構を提供することにある。
【００１１】
【課題を解決するための手段】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば、下記の通りである。すなわち、第１命令セットを固有命令として実行するための命令実行部と、第２命令セットの命令を前記第１命令セットの第１命令列に変換して前記命令実行部に供給するための命令変換回路と、所定のイベントをカウントするためのカウンタ手段とを具備し、前記命令変換回路は、前記カウンタが所定の条件を満たした際に、所定の命令を出力するよう情報処理装置を構成する。
【００１２】
更に望ましくは、前記命令実行部を複数のステージを有するパイプライン型とし、前記複数のステージに対応する複数の模擬ステージを有する模擬パイプラインを設けることが好ましい。
【００１３】
更に望ましくは、前記カウンタが前記所定の条件を満たした際に、前記命令実行部のパイプライン上に残った後続命令を無効化する機構を設けると良い。
【００１４】
【発明の実施の形態】
以下、本発明に係る情報処理装置及びシステムの好適な実施の形態について、添付図面を参照しながら説明する。特に制限されないが、実施例の各ブロックを構成する回路素子は、公知のＣＭＯＳ（相補型ＭＯＳトランジスタ）やバイポーラトランジスタ等の半導体集積回路技術によって、単結晶シリコンのような１個の半導体基板上に形成される。
【００１５】
図１に、本発明の情報処理装置の第1の実施例を示す。本実施例は、スレッドの切り替えを高速に行う情報処理装置の一実施例を示すものである。図１では命令フェッチ部（IF）3、命令変換部(ACC)2(以下、アクセラレータと呼ぶ)、命令実行部(CPU)1(以下、ＣＰＵと呼ぶ)を別ブロックで示したが、これらの区分は必ずしも明確ではなく、全てをＣＰＵと呼んだり、これらのいくつかをまとめてＣＰＵと呼ぶ場合もある。図１においてＣＰＵ（CPU）1は、一般的なプロセッサと同様、Ｊａｖａバイトコードとは異なるプロセッサ固有の命令（以下ＣＰＵ命令）の集まりである命令セット（以下ＣＰＵ命令セット）を持っている。この実施例のＣＰＵ（CPU）1はパイプライン処理を行い、特に制限されないが、パイプライン（PL）11は、命令デコードステージ(ＩＤステージ)（ID）、命令実行ステージ(ＥＸステージ)（EX）、メモリアクセスステージ(ＭＡステージ）（MA）、レジスタ格納ステージ(ＷＢステージ）（WB）を有する。パイプライン（PL）11は、パイプラインコントロール部（PLC）12により、パイプライン（PL）11のストールや、分岐時の後続命令のキャンセル等の制御がされる。
【００１６】
メモリ装置（MEM）4は、Ｊａｖａバイトコード、ソフトＶＭ、フレーム等Ｊａｖａを実行するための情報を保持している。更に、メモリ装置（MEM）4は、ほかのＣＰＵ命令で記述されたアプリケーションソフトウェアやソフトウェアの実行のためのワーク領域なども含む。尚、メモリ装置（MEM）4は、キャッシュメモリのようなＳＲＡＭ、メインメモリとなるべきＤＲＡＭ、又はそのキャッシュメモリとメインメモリの両方を持つもの等があげられるが、情報を保持できるものであればこれらに制限されない。また、ＣＰＵ（CPU）1と同一のチップであっても別々のチップであっても構わない。
【００１７】
メモリ装置（MEM）4から通常のＣＰＵ命令が供給された場合は、命令フェッチ部（IF）3を通り、アクセラレータ（ACC）2を介さない経路（4→3→11）で実行される。一方、メモリ装置（MEM）44からバイトコードが供給された場合は、命令フェッチ部（IF）3を通り、アクセラレータ（ACC）2内の命令変換回路（BT）21にバイトコードが入力され、入力されたバイトコードはＣＰＵ（CPU）1が解釈可能な一つの、又は、複数の命令列（以下、ＣＰＵ命令列と呼ぶ）に変換され、ＣＰＵ（CPU）1で実行される（4→3→21→11）。ここで、命令変換回路は、マイクロコードによりバイトコードをＣＰＵ命令に変換してもいいし、又は、ハードワイヤードによりバイトコードをＣＰＵ命令に変換してもよい。マイクロコードにより変換する場合は、異なるＣＰＵ命令セットを有する種々のＣＰＵに柔軟に対応することができる。また、ハードワイヤードにより変換する場合は、マイクロコードにより変換する場合よりも、回路規模を縮小することができる。
【００１８】
前述したように、ＶＭの実装によっては、実行したバイトコードの数によりスレッドを切り替える仕様のものがある。この場合に、アクセラレータ(ACC)が命令変換回路(BT)21で変換したバイトコード数をカウントすると、パイプライン(PL)11のストールや分岐時のパイプラインキャンセル等により、実際に実行したバイトコード数と一致しない。そこで、本願発明者等は、ＣＰＵ(CPU)1で実行されたバイトコード(実行イベント)をカウントするカウンタ(CNT)23をアクセラレータ(ACC)2に設けた。即ち、一つのバイトコードがＣＰＵ(CPU)1で実行されたのを受けて、カウンタ(CNT)23はカウント値を一つ減らす(デクリメント)。カウンタ(CNT)23がアンダーフローすると、カウンタ（CNT）23はＣＰＵ（CPU）1のパイプラインコントロール部（PLC）に伝え、パイプラインコントロール部（PLC）は、パイプライン（PL）11上に残った後続命令をキャンセル(無効化)する（23→12→11）。同時に命令変換回路（BT）21は、所定の命令列(ソフトＶＭに処理を渡すために必要な命令列)を出力する。スレッドの切り替えはソフトＶＭにより実行される。このような構成とすることで、ソフトウェアでカウントするよりも、高速にカウントすることが可能となり、情報処理装置の高速動作が可能となる。
【００１９】
更に、本実施例では、アクセラレータ（ACC）2内に模擬パイプライン（SPL）22を有する。模擬パイプライン（SPL)22には、パイプライン(PL)11の命令デコードステージ(ID)に対応する模擬命令デコードステージ(ID)、命令実行ステージ(EX)に対応する模擬命令実行ステージ(EX)、メモリアクセスステージ(MA)に対応する模擬メモリアクセスステージ(MA)及び前記レジスタ格納ステージ(WB)に対応する模擬レジスタ格納ステージ(WD)を有する。また、模擬パイプライン（SPL）22は、パイプラインコントロール部（PLC）12がパイプライン（PL）11を制御する信号を用いて制御される。つまり、模擬パイプライン（SPL）22のパイプライン動作は、パイプライン（PL）11と同じパイプライン動作を行う。模擬パイプライン（SPL）22には、バイトコードから展開されたＣＰＵ命令列の最後のＣＰＵ命令に同期したフラグ（FLG1）を流す。FLG1が模擬パイプライン（SPL）22の模擬レジスタ格納ステージ(WB)に到達すると、カウンタ（CNT）23はカウント値を１減らす。このようにパイプライン(PL)11の複数のステージに対応する複数の模擬ステージを有する模擬パイプライン(SPL)11を設けることにより、正確に実行されたバイトコード数をカウントすることができる。
【００２０】
更に、本実施例では、カウンタ最大値レジスタ(MAXCNT)25を有する。このカウンタ最大値レジスタ(MAXCNT)25は、カウンタ(CNT)23がアンダーフローした際に、カウンタ(CNT)23に書き込む初期値を指定するためのレジスタである。したがって、ソフトＶＭ等のソフトウェアで、カウンタ(CNT)23を自由に設定することが出来、また、カウンタ(CNT)23がアンダーフローした場合には自動的に初期値が書き込まれるため高速動作が実現できる。
【００２１】
図３に、本発明の情報処理装置の第２の実施例を示す。第２の実施例は、後方分岐をカウントする場合を示している。本実施例も、第１の実施例と同様、ＣＰＵの区分や、同一チップか別チップかは特に制限されない。また、特に制限されないが、ＣＰＵ命令セットにおける分岐命令は、事前の命令により設定された真偽ｂｉｔ（Ｔ−ｂｉｔ）を参考にして実際に分岐するかを決定する命令である。図4に本実施例での分岐に関するバイトコードと、命令変換回路（BT）21が出力するＣＰＵ命令列の例を示す。ＴＳＴ命令とＣＭＰ命令は、ゼロ比較と大小関係を比較し、真偽によってＴ−ｂｉｔを変更する命令である。ＢＴ、ＢＦ命令は、それぞれ、Ｔ−ｂｉｔが真の時、Ｔ−ｂｉｔが偽のときに分岐を実施し、それ以外の場合は何も行わない命令である。Ｔ−ｂｉｔはＥＸステージに同期して変更される。
【００２２】
第２の実施例では、後方分岐が成立した場合(後方分岐イベント)に、カウンタ（CNT）23はカウント値を１減少させる。カウンタ（CNT）23がアンダーフローした場合は、第１の実施例と同様、23→12→11の経路でパイプライン（PL）11上に残った後続命令をキャンセルし、命令変換回路（BT）21は、所定の命令列(ソフトＶＭに処理を渡す命令列)を出力する。ガベッジコレクションチェックはソフトＶＭにより実行される。これにより情報処理装置の高速動作が実現される。
【００２３】
更に、第2の実施例における情報処理装置は、第１の実施例と同様、アクセラレータ（ACC）2は模擬パイプライン（SPL）22を有し、更に、後方分岐が成立したかを判定する検出部(CHK)24を有する。模擬パイプライン（SPL）22には、ＢＴ、ＢＦ命令に同期したフラグ情報（FLG2）を流す。検出部（CHK）24は、模擬パイプライン（SPL）22のＥＸステージからフラグ情報を受け取ると共に、ＣＰＵ（CPU）1のパイプライン（PL）11からＴ−ｂｉｔを受ける。検出部（CHK）24はＢＴ命令がＥＸステージに来た時にＴ−ｂｉｔが真の場合、及び、ＢＦ命令がＥＸステージに来たときにＴ−ｂｉｔ命令が偽の場合、分岐が成立したと判定する。検出部（CHK）24が分岐を判定すると、カウンタ（CNT）23に通知し、カウンタ（CNT）23はカウンタ値を１減少させる。このような構成とすることにより正確に後方分岐の数をカウントすることが可能となる。
【００２４】
第1の実施例では実行バイトコードのカウントの場合を、第2の実施例では、後方分岐のカウントの場合を夫々説明したが、両者を実現したい場合は、夫々に対応したカウンタ(CNT)23を設ければよい。即ち、実行バイトコード数をカウントする第1カウンタと後方分岐をカウントする第2カウンタを設ければよい。この場合に、カウント最大値レジスタ(MAXCNT)25は夫々持つと良いが、共有することもできる。更に、模擬パイプライン(SPL)21も、共有することができるし、夫々に対応して設けてもよい。模擬パイプライン(SPL)21を共有する場合には、展開後の最終命令フラグ（FLG1）、ＢＴ、ＢＦフラグ（FLG2）の情報の両者を流せばよい。
【００２５】
図５に、本発明の情報処理装置の第３の実施例を示す。第３の実施例は、カウンタ（CNT）23が実行したバイトコードの数をカウントするのか、分岐した数をカウントするのかを選択できる実施例である。アクセラレータ（ACC）2は命令変換回路（BT）21、模擬パイプライン（SPL）22、検出部（CHK）24、カウンタ（CNT）23、カウンタ最大値レジスタ（MAXCNT）25、及び、カウントモードレジスタ（CNTMD）26を含む。
【００２６】
図６にソフトＶＭ等のソフトウェアで設定できるレジスタを示す。カウンタ最大値レジスタ（MAXCNT）25は、上述のようにカウンタ（CNT）23がアンダーフローした際にカウンタ（CNT）23に書き込む初期値を指定するためのレジスタである。カウントモードレジスタ（CNTMD）26は、バイトコード数と後方分岐のどちらをカウントするか、あるいは、カウントを行わないかを指定するレジスタである。
【００２７】
模擬パイプライン（SPL）22には、展開後の最終命令フラグ（FLG1）、ＢＴ、ＢＦフラグ（FLG2）の情報を流す。カウントモードレジスタ（CNTMD）26に実行バイトコード数をカウントするよう指定されている場合は、検出部（CHK）24は、模擬パイプライン（SPL）22の模擬レジスタ格納ステージ(WB)のFLG1の内容をそのままカウンタ（CNT）23に伝える。カウントモードレジスタ（CNTMD）26に後方分岐をカウントするよう指定されている場合は、第２の実施例と同様、模擬パイプライン（SPL）22のＥＸステージのFLG2とＣＰＵ（CPU）1のＴ−ｂｉｔを用いて、検出部（CHK）24が分岐成立を検出し、カウンタ（CNT）23に伝える。カウンタ（CNT）23はデクリメントを行う。カウンタ（CNT）23がアンダーフローすると、パイプラインコントロール部12はパイプライン（PL）11をキャンセルし、命令変換回路（BT）21はソフトＶＭに処理を渡す命令列を出力する。同時に、カウンタ最大値レジスタ（MAXCNT）25の値がカウンタ（CNT）23にロードされる。このように、カウントモードレジスタ(CNTMD)を設けることにより、カウンタ(CNT)23を実行バイトコード数をカウントするか、後方分岐をカウントするかを任意に設定でき、回路規模を小さくすることができる。
【００２８】
第１、第２、第３の実施例では、アクセラレータ（ACC）2における命令カウントのシステムの構成を示した。実施例では、レジスタ格納ステージ(WB）、命令実行ステージ(EX)での検出方法を示したが、これらは特に制限されるわけではない。本発明で重要なのは、アクセラレータ（ACC）2が、適切なタイミングでカウントを行い、もしくは、適切なタイミングでＣＰＵ（CPU）1の信号チェックしてカウントを行うことである。
【００２９】
また、カウンタ(CNT)22は、カウント値を１減らす構成としたが、これに制限されない。例えば、カウント値を１増やす構成とすることも可能である。この場合、カウント最大値レジスタ(MAXCNT)には、初期値でなく、カウンタ(CNT)22がオーバーフローするカウント値を設定できるようにすればよい。本発明のおけるカウンタ(CNT)22において重要なことは、所定のイベント(例えば、バイトコードが実行された数、後方分岐が成立した数)をカウントし、所定の条件を満たした場合(例えば、アンダーフロー)に、アクセラレータ(ACC)2から所定の命令が出力されるように構成することにある。また、カウンタ(CNT)は、アクセラレータ(ACC)2に設ける必要はなく、ＣＰＵ(CPU)1に設けられてもよいし、又、その他の場所に設けられても良い。更には、カウンタ最大値レジスタ(MAXCNT)を設けずにソフトウェアにより設定できるようにしてもよい。
【００３０】
図７に、本発明の情報処理装置の第４の実施例を示す。第４の実施例は、模擬パイプライン（SPL）22を用いてＪａｖａ例外を検出する実施例である。図７では、メモリ装置4から命令をフェッチする際に、バス（BUS）5を通って、フェッチ部3に送る経路を持つ。また、バス(BUS)は、アクセラレータ(ACC)2にある検出部(CHK)24及びＣＰＵ(CPU)1にも接続される。更に、第１から第３の実施例と同様に、模擬パイプライン(SPL)22を有する。
【００３１】
まず、ＣＰＵ（CPU）1のメモリからデータをロードする手順を、パイプライン（PL）11の動作の流れに沿って示す。命令はIDステージで解釈される。EXステージでアクセスするアドレスを計算し、バス（BUS）5にアドレスを乗せる。MAステージはメモリ装置（MEM）4の内部でデータにアクセスしている段階で、パイプライン（PL）11上では特に動作しない。WBステージは指定したアドレスのデータがバス（BUS）5を通してＣＰＵ（CPU）1に伝えられ、汎用レジスタに書かれる。
【００３２】
次に、Ｊａｖａ例外の検出をｂａｌｏａｄバイトコードを例に説明する。ｂａｌｏａｄは、Ｊａｖａスタック上にあるポインタとインデックスからアドレスを計算し、メモリ装置（MEM）4上に配列から１ｂｙｔｅ長のデータを取り込み、Ｊａｖａスタックにプッシュするバイトコードである。ｂａｌｏａｄを実行するには、本体の処理を実行する前にＪａｖａ例外のチェックを行わなければならない。すなわち配列へのポインタがＮｕｌｌでないこと、アクセスしようとしているインデックスが範囲を超えていないことのチェックである。前者のＪａｖａ例外がＮｕｌｌ Ｐｏｉｎｔｅｒ Ｅｘｃｅｐｔｉｏｎ、後者がＡｒｒａｙ Ｉｎｄｅｘ Ｏｕｔ Ｏｆ Ｂｏｕｎｄｓ Ｅｘｃｅｐｔｉｏｎである。Ｊａｖａ例外を検出すると、ソフトＶＭ中に実装されているＪａｖａ例外処理のルーチンへ分岐する。
【００３３】
図８（Ａ）に本発明との比較のためＣＰＵ命令のみでＪａｖａ例外を検出する場合のｂａｌｏａｄバイトコードを示す。実行前に、スタック上の配列のポインタとインデックスが汎用レジスタのＲ１、Ｒ０にマッピングされているとする。Ｊａｖａ例外のハンドラの開始アドレスをＲ６、一時使用のレジスタをＲ５としている。図８（Ａ）の項目00番で、配列へのポインタ（Ｒ１）とオフセット（offset1）から、配列長をＲ５へロードする。項目01番はポインタがＮｕｌｌかどうかのチェックである。Ｎｕｌｌの場合は項目02番でＪａｖａ例外処理のハンドラへ分岐する。項目03番は、インデックスの正負をチェックし、０以下の場合は項目04番でＪａｖａ例外処理のハンドラへ分岐する。項目05番は、インデックスと配列長の大小をチェックし、範囲を超えている場合は項目06番でＪａｖａ例外処理のハンドラへ分岐する。以上のチェックが終了して初めて、項目07番で対象となるバイトデータのアドレスを計算し、項目08番でバイトデータをロードする。すなわち、ｂａｌｏａｄバイトコードをＣＰＵ命令のみで行おうとすると、９命令のうち７命令がＪａｖａ例外の検出のために使用される。なお、図中のoffset1、offset2はＶＭに固有の定数であり、アクセラレータ（ACC）2が出力する命令列に挿入される。
【００３４】
本願発明者等は、Ｊａｖａ例外検出の高速化を検討するにあたり、項目00番の配列長ロード命令に注目した。この命令を実行すると、配列長を格納しているアドレスと配列長がバス（BUS）5に出力される。そこで、アクセラレータ（ACC）2にある検出部(CHK)22がＣＰＵ(CPU)1の動作を監視することで、バス(BUS)に出力された配列長を格納しているアドレスや配列長を取り込んで、Ｊａｖａ例外を検出する構成とした。このようにＪａｖａ例外の検出をハードウェアで行うことにより、後に詳述するが、ＣＰＵ命令のみでＪａｖａ例外を検出するよりも命令数が少なくなり、情報処理装置が高速に動作可能となる。
【００３５】
また、検出部(CHK)24のＣＰＵ(CPU)1の動作の監視に、模擬パイプライン（SPL）22を用いることにした。即ち、所定の命令がパイプライン(PL)11のどのステージにいるかを模擬パイプライン(SPL)に入力したフラグ(FLG3)の位置で検出部(CHK)24の動作を制御することでバス（BUS）5にアドレスやデータが出力されるタイミングを容易に測ることができる。
【００３６】
図８（Ｂ）にハードウェアアクセラレータ（ACC）2を用いた場合のＣＰＵ命令列を示す。項目00番で、配列へのポインタ（Ｒ１）と定数であるoffset1の和のアドレスから、配列長をＲ５へロードする。この命令のＥＸステージに同期して、バス（BUS）5に乗るアドレスを検出部（CHK）24が取り込む（時刻T1）。また、配列長は項目00番の命令のＷＢステージに同期して、メモリからバス（BUS）5に出力され、これも、検出部（CHK）24が取り込む（時刻T3）。項目01番のＬＤＣ命令はＥＸステージに同期して、レジスタの値をアクセラレータ（ACC）2に伝える命令である（時刻T2）。これらの３つのデータを用いて、検出部（CHK）24が比較演算等を行い、Ｊａｖａ例外の検出を行う。Ｊａｖａ例外条件を満たしている場合は、検出部（CHK）24がパイプラインコントロール部（PLC）12に指示して、パイプライン（PL）11をキャンセルする。その後、ソフトウェアに処理を渡す命令列を発行する。Ｊａｖａ例外の処理はソフトウェアが行う。
【００３７】
図９から図１２にｂａｌａｏｄのＪａｖａ例外の検出を時間を追って示す。時刻T1(図９)は、アクセラレータ（ACC）2の模擬パイプライン（SPL）22上で項目00番の命令に同期したフラグがＥＸステージに到達した状態である。このタイミングに同期して、バス（BUS）5上のアドレスを取り込む。時刻T2(図１０)は項目01番の命令に同期したフラグが模擬パイプライン（SPL）22のＥＸステージに来た状態である。このタイミングに同期して、検出部（CHK）24は、ＣＰＵ（CPU）1が出力したデータを取り込む。時刻T3(図１１）は、項目00番の命令に同期したフラグがＷＢステージに到達した状態である。このタイミングで、バス（BUS）5上のデータを取り込む。以上の３データで比較演算等を行い、Ｊａｖａ例外の判定を行う。Ｊａｖａ例外を検出した場合は、検出部（CHK）24がＣＰＵ（CPU）1のパイプラインコントロール部（PLC）12にパイプライン（PL）11のキャンセルを指示し、後続命令をキャンセルする（時刻T4、図１２）。次のサイクルから、アクセラレータ（ACC）2はＪａｖａ例外処理を行うため、ソフトウェアに処理を渡す命令列（項目06番とそれ以降の命令列）を発行する。
【００３８】
図１４に本発明の情報処理装置の第５の実施例を示す。第５の実施例はｉｄｉｖバイトコードにおけるＣＰＵ命令列を途中で切り替える実施例である。ｉｄｉｖ命令は３２ｂｉｔの整数除算命令である。図１４ではスタックトップと２番目のスタックが汎用レジスタＲ０、Ｒ１にマッピングされており、Ｒ１÷Ｒ０を計算する。Ｒ５、Ｒ６は一時使用に割り当てた汎用レジスタである。
【００３９】
本実施例におけるＣＰＵ命令セットでは、除算命令が１ビット除算であり、これを必要な回数繰り返して実行する。従って、３２ｂｉｔ除算と１６ｂｉｔ除算では、命令数に大きな差が出る。そこで、命令変換回路（BT）21には、３２ｂｉｔ除算の命令列と１６ｂｉｔ除算の命令列を実装する。そして、最初に３２ｂｉｔ除算の命令列を発行し、１６ｂｉｔ除算と判定した時点で１６ｂｉｔ除算の命令列に切り替えるようにする。この場合に、３２ビット除算の命令列と１６ビット除算の命令列で共通に出来る部分は共通にするように構成する。
【００４０】
次に第５の実施例の更に詳細な説明する。図１４の項目00番のＬＤＣ命令は、ＣＰＵ（CPU）1の汎用レジスタの値をＥＸステージに同期してアクセラレータ（ACC）2内の検出部（CHK）24に除数を伝える。この命令は０除算チェックもかねている。０の場合はＡｒｉｔｈｍｅｔｉｃ Ｅｘｃｅｐｔｉｏｎにあたり、第４の実施例と同様の方法でソフトＶＭに処理を渡す。項目01番は、被除数を検出部（CHK）24に伝える。命令を取り込むタイミングは、アクセラレータ（ACC）2内の模擬パイプライン（SPL）22で測る。以上で得られた除数、被除数が１６ｂｉｔ長に収まっている場合は１６ｂｉｔ除算命令列に切り替える。本実施例では、３２ｂｉｔ命令列と１６ｂｉｔ命令列で、項目00番から03番までを共通にした。このため、項目04番以降の命令列を切り替えるだけでよく、パイプライン（PL）11のキャンセルは行わないため、更に高速動作が可能となる。
【００４１】
第４の実施例と第５の実施例は、Ｊａｖａ例外の検出とｉｄｉｖバイトコードの命令列切り替え機構を示したが、他のバイトコードにも応用できる。本発明で重要なのは、ＣＰＵ(CPU)1の動作を監視することができる検出部(CHK)23を有し、適切なタイミングを測ってＣＰＵ（CPU）1の信号を取り込み、アクセラレータ（ACC）2の出力命令列を切り替える点にある。また、検出部(CHK)24の動作を模擬パイプライン(SPL)22で制御することにより容易にタイミングを測ることができる。その際、第４実施例に示したパイプライン（PL）11後続命令キャンセル機構を有してもよいし、第５の実施例に示したように、後続命令をキャンセルしないで高速化することも可能である。
【００４２】
また、第１から第３の実施例おいて、実行バイト数や後方分岐数をカウントするために模擬パイプライン(SPL)22を使用している。また、第４及び第５の実施例においては、Ｊａｖａ例外を検出するために模擬パイプライン(SPL)22を使用している。しかし、これらの実施例は、模擬パイプライン(SPL)22を有することにより実現できる一具体例であることは明らかである。即ち、模擬パイプライン(SPL)22を有することでＣＰＵ(CPU)1の動作タイミングを容易に知ることができ、第１から第５の実施例以外のアクセラレータ(ACC)2の動作を容易にＣＰＵ(CPU)1の動作タイミングにあわせることができる。
最後に本発明の好適な応用例としての携帯情報システムの構成図を図１５に示す。より具体的には携帯電話の構成の一例である。大きく分けて、通信部分とアプリケーション部分から構成される。通信部分は、電波を送受信するアンテナ（ＡＮＴ）と高周波回路（ＲＦ）部、ベースバンドのモデム、コーデックを行うベースバンドプロセッサ（ＢＡＳＥＢＡＮＤ）部、主記憶（ＭＥＭ）である。アプリケーション部分は、本発明の実施例のバイトコードアクセラレータ（ＡＣＣ）とＣＰＵ（ＣＰＵ）を内蔵するマイクロプロセッサ（ＰＲＯＣＥＳＳＯＲ）において、インターフェース（Ｉ／Ｆ）を介してアプリケーションプロセッサとベースバンドプロセッサが接続され、周辺インターフェース（ＰＥＲＩＰＨＥＲＡＬ）を介してカメラ（ＣＭＲ）、メモリカード（ＣＡＲＤ）、音源ＩＣ（ＳＯＤ）、キー（ＫＥＹ）が接続され、外部バスを介して液晶（ＬＣＤ）、主記憶（ＭＥＭ１）が接続される。本システム構成例は、携帯電話向けであったが、携帯情報端末やデジタルカメラなど多様なシステム構成例が考えられる。
【００４３】
本システム構成例では、例えば、次のようにメモリが使用される。Ｊａｖａアプリケーションは、外部サーバーよりアンテナ（ＡＮＴ）を介して配給され、ベースバンドプロセッサ（ＢＡＳＥＢＡＮＤ）を使用し、ベースバンド側主記憶（ＭＥＭ２）に格納される。ソフトＶＭは主記憶（ＭＥＭ１）か、ベースバンド側主記憶（ＭＥＭ２）のどちらに配置してもよい。ソフトＶＭのインタプリタ部はアクセス頻度が高いため、内蔵メモリ上に配置されることが望ましい。この発明により、ハードウェアアクセラレータを利用してＪａｖａアプリケーションを高速に実行できるため、携帯情報システムの付加価値を高めることができる。
【００４４】
以上の本願発明はＪａｖａを例にして説明したが、それに限られることはなく、同様の中間言語及びＶＭを固有命令を命令セットで実行するプロセッサに対するハードウェアアクセラレータに適用できる。
【００４５】
【発明の効果】
上記手法により、命令変換型Ｊａｖａアクセラレータにおいて、バイトコード数をカウントする場合のＣＰＵ命令や、Ｊａｖａ例外を検出する為のＣＰＵ命令の数を削減でき、高速に動作させることが可能である。
【図面の簡単な説明】
【図１】本発明による情報処理装置の概略ブロック図。
【図２】Ｊａｖａスレッド切り替えの概要。
【図３】第２の実施例における情報処理装置の概略ブロック図。
【図４】分岐バイトコードの命令変換例。
【図５】第３の実施例における情報処理装置の概略ブロック図。
【図６】カウンタに関する設定レジスタの構成例。
【図７】第４の実施例における情報処理装置の概略ブロック図。
【図８】ｂａｌｏａｄバイトコードの変換後の命令列。
【図９】ｂａｌｏａｄバイトコードの動作説明ブロック図。
【図１０】ｂａｌｏａｄバイトコードの動作説明ブロック図。
【図１１】ｂａｌｏａｄバイトコードの動作説明ブロック図。
【図１２】ｂａｌｏａｄバイトコードの動作説明ブロック図。
【図１３】ｂａｌｏａｄバイトコードの動作説明ブロック図。
【図１４】ｉｄｉｖバイトコードの変換後の命令列。
【図１５】本願発明を利用した携帯情報システムの構成図。
【符号の説明】
1…ＣＰＵ（CPU）
2…命令変換型アクセラレータ（ACC）
3…命令フェッチ部（IF）
4…メモリ装置（MEM）
5…バス（BUS）
11…パイプライン（PL）
12…パイプラインコントロール部（PLC）
21…命令変換回路（BT）
22…模擬パイプライン（SPL）
23…カウンタ（CNT）
24…検出部（CHK）
25…カウンタ最大値レジスタ（MAXCNT）
26…カウントモードレジスタ（CNTMD）。
【図１】
0004127495.tif 000002
【図２】
0004127495.tif 000003
【図３】
0004127495.tif 000004
【図４】
0004127495.tif 000005
【図５】
0004127495.tif 000006
【図６】
0004127495.tif 000007
【図７】
0004127495.tif 000008
【図８】
0004127495.tif 000009
【図９】
0004127495.tif 000010
【図１０】
0004127495.tif 000011
【図１１】
0004127495.tif 000012
【図１２】
0004127495.tif 000013
【図１３】
0004127495.tif 000014
【図１４】
0004127495.tif 000015
【図１５】
0004127495.tif 000016