JP2000311089A - インタプリタの高速化方法ならびに装置 - Google Patents

インタプリタの高速化方法ならびに装置

Info

Publication number
JP2000311089A
JP2000311089A JP11123175A JP12317599A JP2000311089A JP 2000311089 A JP2000311089 A JP 2000311089A JP 11123175 A JP11123175 A JP 11123175A JP 12317599 A JP12317599 A JP 12317599A JP 2000311089 A JP2000311089 A JP 2000311089A
Authority
JP
Japan
Prior art keywords
instruction
register
pattern
instructions
operand
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.)
Pending
Application number
JP11123175A
Other languages
English (en)
Inventor
Toshihiko Nakamura
寿彦 中村
Kazutoshi Usui
和敏 臼井
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.)
NEC Corp
Original Assignee
NEC 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 NEC Corp filed Critical NEC Corp
Priority to JP11123175A priority Critical patent/JP2000311089A/ja
Publication of JP2000311089A publication Critical patent/JP2000311089A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 【課題】 スタックマシンのアーキテクチヤを採用した
インタプリタの実行速度の改善をはかる。 【解決手段】 スタックアーキテクチャを持つプロセッ
サ上でインタプリット実行されるプログラムの命令列1
0を命令長変換部11でオペランド長毎に区切って整列
化し、パターンマッチャ12で整列化されたプログラム
から複数の命令を一度に読み取り、あらかじめ用意され
た命令実行パターンと照合することによりレジスタアー
キテクチャを持つプロセッサの命令に変換してその命令
を実行(命令実行部13)する。このことによりコンパ
イラを含むインタプリタの実行速度が高速化される。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、インタプリタ方式
の可変長命令を入力し実行する、スタックアーキテクチ
ャを持つプロセッサに用いて好適な、インタプリタの高
速化方法ならびに装置に関する。
【0002】
【従来の技術】機械語命令が行う演算について、あらか
じめスタック上に置かれたオペランドに対して演算を行
い結果をスタックに置くという方式をとる計算機をスタ
ックマシンという。このような方式をとると、スタック
操作(プッシュ、ポップ)の手間は増えるがオペランド
の指定が不要となるため、機械語命令の体系が簡単にな
るという利点があり、仮想計算機はしばしばスタックマ
シンとして設計される。
【0003】
【発明が解決しようとする課題】ところで、上述したス
タックマシンのアーキテクチャを採用したインタプリタ
においては、その実行速度の遅さが問題となっていた。
特に、レジスタを持つアーキテクチャのマシンにおいて
は、レジスタを最大限に使うことで実行速度があげられ
るため、スタックマシンのスタックを使ったオペランド
のやり取りをそのままエミュレートしたような実装方法
では実行速度の向上が望めない。本発明は上記事情に鑑
みてなされたものであり、スタックアーキテクチャを採
用しインタプリタ方式の可変長命令列を入力して実行す
るプロセッサにおいて、命令のビット長に対するプロセ
ッサの処理幅の広さに着目することによって、可変長命
令を整列化して複数命令を同時に先読み込み、レジスタ
アーキテクチャの命令に変換して実行することにより、
スタックマシンのアーキテクチャを採用したインタプリ
タの実行速度の改善をはかることのできる、インタプリ
タの高速化方法ならびに装置を提供することを目的とす
る。
【0004】
【課題を解決するための手段】上述した課題を解決する
ために請求項1に記載のインタプリタの高速化方法は、
スタックアーキテクチャを持つプロセッサ上でインタプ
リット実行されるプログラムの命令列をオペランド長毎
に区切って整列化し、この整列化されたプログラムから
複数の命令を一度に読み取り、あらかじめ用意された命
令実行パターンと照合することによりレジスタアーキテ
クチャを持つプロセッサの命令に変換してその命令を実
行するか、もしくは、コードジェネレータに入力して実
行形式のファイルとして出力することを特徴とする。請
求項2に記載のインタプリタの高速化方法は、請求項1
に記載の同方法において、読み取られた各命令をその命
令が持つ性質に応じてグループに分類し、グループに分
類された命令の列をそのグループの並びに着目してあら
かじめ用意された命令実行パターンと照合することによ
って命令の置換えを行ない、照合の結果一致した命令実
行パターンに従ってその命令のオペランドをレジスタに
割り当て、このレジスタに前記命令のオペランドをロー
ドしてその命令を実行すると共に、命令実行によって得
られた結果が入るレジスタをオペランドに書き出すこと
を特徴とする。
【0005】請求項3に記載のインタプリタの高速化方
法は、請求項2に記載の同方法において、前記照合の結
果、一致するパターンがみつからなかった場合、前記取
り込まれた命令列の先頭から任意の一部を切り出し、こ
の切り出された単位毎再度照合を行い、前記いずれのパ
ターンにも一致しなかった場合、それぞれの命令に対し
てオペランドとレジスタの割り当てをおこなうことを特
徴とする。請求項4に記載のインタプリタの高速化方法
は、請求項2に記載の同方法において、前記照合の結
果、複数パターンに一致した命令列は、最初に、先頭か
らの命令列が一致したパターンに従いオペランドとレジ
スタの割り当てを行ない、前記レジスタから当該オペラ
ンドの読み込みを行い、次以降一時的に書き込まれたス
タックからオペランドの読み込みを行い、前記一致した
パターンに従う命令の実行を行ないこの命令実行によっ
て得られた結果をレジスタに書き出すと共に、命令列の
区切りによってはスタックに書き出すことを特徴とす
る。
【0006】請求項5に記載の高速化インタプリタ装置
は、スタックアーキテクチャを持つプロセッサ上でイン
タプリット実行されるプログラムの命令列をオペランド
長毎に区切って整列化する命令長変換部と、この命令配
列変換部で整列化されたプログラムから複数の命令を一
度に読み取り、あらかじめ用意された命令実行パターン
と照合する命令実行パターン照合部と、一致した命令実
行パターンに従ってレジスタアーキテクチャを持つプロ
セッサの命令形式に置き換えその命令を実行する命令実
行部、もしくは、コードジェネレータに入力して実行形
式のファイルとして出力するコンパイル部とを有するこ
とを特徴とする。上述した構成において、複数命令を同
時に読み込み、読み込んだ命令に関してスタック操作に
着目しながら解釈し、前記複数の命令に関し、レジスタ
が本来持つ特徴を生かした命令により一度に実行するこ
とにより、スタック操作を省略でき高速化が可能であ
る。例えば、命令長8ビット、命令パターンマッチング
部(命令実行パターン照合)の処理幅を64ビットと仮
定した場合、最大8命令を同時に読み込むことができ、
パターンマッチングで効率的な命令が生成できればかな
りの高速化が期待できる。
【0007】
【発明の実施の形態】図1は本発明の実施形態を示すブ
ロック図である。図において、1は本発明における高速
化インタプリタ装置(以下、単にインタプリタと称す
る)である。インタプリタ1は、命令長変換部11と、
命令実行パターン照合部(以下、パターンマッチャと称
する)12と、命令実行部13を含む。10はインタプ
リット実行される入力プログラムである。インタプリタ
1を構成する命令長変換部11は、図に示すように入力
プログラム10の命令列を命令で定められたオペランド
長毎に区切り、整列化した入力プログラムを生成して出
力する。この整列化された入力プログラムはパターンマ
ッチャ12に供給される。パターンマッチャ12は、前
記入力プログラムから複数命令を一度に読み込み、あら
かじめ用意した複数のパターンにマッチングさせ、複数
のエグゼキュータA,B,…… nにより構成される命
令実行部13に出力する。命令実行部13は、マッチン
グさせたプログラムをレジスタ方式のアーキテクチャの
マシン上で複数同時に実行する。上述したインタプリタ
1は、全体としてスタックアーキテクチャを採用してお
り、通常のインタプリット実行では、スタックへのプッ
シュ、ポップによるオペランドの取得、書き出し処理を
伴いながら命令が実行される。
【0008】図2は、図1に示す本発明実施形態の動作
を説明するために引用した図であり、プログラムが入力
されてから実行に至る本発明の高速化インタプリタ処理
の流れをフローチャートで示す図である。各ステップS
21〜S31における動作は後述する。図3、図4は、
図1に示す本発明実施形態の動作を説明するために引用
した図であり、それぞれ、グルーピングの例を表形式
(表1)で示す図、マッチングパターンの例を表形式
(表2)で示す図である。
【0009】図3は、グルーピングの例として、(1)
変数、オブジェクトなどからスタックに転送する命令を
プッシュ(Push)系、(2)スタックから変数、オ
ブジェクトなどに転送する命令をポップ(Pop)系、
(3)スタック上の2項を取得して演算し、スタックに
結果を格納する命令を2項演算系、(4)スタック上の
1項を取得して演算し、スタックに結果を格納する命令
を1項演算系として4つに分類してある。また、図4
は、マッチングパターンの例として入力命令グループの
並びに着目して、(1)プッシュ系−プッシュ系−2項
演算系−ポップ系の場合は、オペランド操作と2項演算
命令を出力し、(2)プッシュ系−1項演算系−ポップ
系の場合、オペランド操作と1項演算命令を出力し、
(3)プッシュ系−ポップ系の場合はオペランド操作を
出力命令として変換出力している。図5,図6は、図1
に示す本発明実施形態の動作を説明するために引用した
図であり、入力プログラム10の具体例をリスト形式で
示す図、命令長変換部11により変換出力される命令列
の例をリスト形式で示す、それそれの図である。
【0010】以下、図2〜図6を参照しながら図1に示
す本発明実施形態の動作について詳細に説明する。ま
ず、ステップS21では、入力プログラム10から命令
を取得(リード)し、可変長のオペランドを各命令配列
に格納する。命令列は、スタック長が次に“0”になる
時点の命令までを一括して取得する。次に、ステップS
22では、取得した命令をグループに分類する。この分
類の代表的なものを図3に(表1)として示してある。
次に、ステップS23では、グループに分類した命令の
列を、そのグループの並びに着目し、あらかじめ用意し
たパターンとマッチングさせる。マッチングさせるパタ
ーンに関しては図4に(表2)として示してある。
【0011】ところで、実際にステップS22で取得し
てきた命令列を分割せずに一つのパターンにマッチング
するとは限らない。マッチングするパターンが見つから
ない場合、命令列の先頭から一部分を分割(切り出す)
することで、パターンにマッチングするか否かをを調
べ、マッチングする場合は、一つのパターン毎にステッ
プS28以降の処理を行なう。どのパターンともマッチ
ングしない場合も、それぞれの命令に対して後述するス
テップS28以降の処理を行なうことになる。また、命
令グループの分類と、パターンの用意の仕方は、用意す
るハードウェアにより様々な方法が考えられる。命令グ
ループを用意せずに、パターンの種類を多く用意するこ
とで対応することも一つの実装方法として考えられる。
【0012】一つのパターンにマッチングした命令列
は、ステップS25の処理に進む。ステップS25で
は、マッチングしたパターンに従って、命令のオペラン
ドとレジスタのマッピングを行ない、実際にオペランド
を読み込む。ステップS26では、パターンに応じた命
令を実行する。ステップS27では、実行によって得ら
れた結果の入っているレジスタをオペランドに書き出
す。この書き出しが終わると、ステップS21の処理に
戻る。複数のパターンにマッチングした命令列は、まず
先頭からの命令列がマッチしたパターンで、ステップS
28の処理に進む。ステップS28では、オペランドと
レジスタのマッピングを行ない、オペランドの読み込み
を行なうが、2度目以降は、一時的に書き込んだスタッ
クからもオペランドを読み出す。次に、ステップS29
でパターンに応じた命令を実行し、ステップS30で
は、実行によって得られた結果を書き出す。この時、命
令列の区切りによってはスタックに書き出す必要が生じ
る。全ての命令列のパターンマッチングが終了すればス
テップS21の処理に戻る。
【0013】図5,図6に示す命令列を使用して実際の
動作例を説明する。まず、ステップS21の処理に従い
図5に示す命令列を読み、各命令でのスタック長を調
べ、次にスタック長が“0”になる命令までを取り込
む。この例の命令列では、図6に示す単位で読み込まれ
ることになる。パターンマッチャ12では、この複数命
令を同時に読込み、読み込んだ命令それぞれを、図3に
(表1)で示す命令グループに分類し、あらかじめ用意
した命令グループパターンと一致するか否かを調べる。
図6に示す命令列の場合、読み込んだ単位で命令の置き
換えが出来る。その結果、例えば、RISC型アーキテ
クチャを採用したMIPS社のCPU(プロセッサ)で
は、以下に示す(1)〜(3)にリストされた命令に置
き換えられる。ステップS25に示すオペランド読込み
処理により、オペランドをレジスタにマッピングし、レ
ジスタにオペランドをロードする。そして、ステップS
26で命令が実行される。 (1)ADD R1,R0 ;変数1をレジスタR1にマッピング (2)ADDI R6,1 ;変数6をレジスタR6にマッピング (3)ADD R3,R1,R2 ;変数“1”をレジスタR1にマッピング、変数“6”
をレジスタR2にマッピング、変数“3”レジスタR3
にマッピング 最後に、ステップS27の処理により、変数にマッピン
グしたレジスタを、実際の変数の場所に書き戻す。
(1)の命令実行においては、R1の値を、変数“1”
に書き出す。(3)の命令実行においては、レジスタR
3の値を変数“3”に書き出す。ステップS30の処理
においては、さらに必要なスタック長分だけスタックに
書き戻す処理を行なう。
【0014】尚、上述した本発明実施形態は、スタック
アーキテクチャを採用したインタプリタ方式の可変長命
令を入力し実行する方法ならびに装置についてのみ記述
したが、本発明はこれに限ることなく、同じ入力プログ
ラムを読み込み、レジスタアーキテクチャを持つマシン
で実行できる形式のファイルを出力するバイトコードコ
ンパイラにおいても同様に応用できる。図7にその実施
形態が示されている。図中、図1と同一番号の付された
ブロックは図1のそれと同じであり、重複するため説明
を省略する。図1に示すインタプリタ1の場合、変換し
て得られた命令を実際に実行したが、図7に示すコンパ
イラの場合は、パターンマッチャ12によって変換して
得られる命令をコードジェネレータ14に供給し、コー
ドジェネレータ14によってアセンブリプログラム、ま
たは、実行形式のファイルが生成され出力する。このこ
とによりコンパイラを作成することが可能である。
【0015】以上説明のように、従来のインタプリタ
は、スタックアーキテクチャを採用している場合、その
スタック操作を含めた処理を忠実に実行していたため、
レジスタを持つアーキテクチャの特徴を最大限に活かす
ことができなかったが、本発明では、命令長を8ビッ
ト、命令パターン・マッチング部の処理幅を64ビット
と仮定した場合、最大8命令を同時に読み込むことが出
来、パターンマッチングで効率的な命令が生成できれ
ば、かなりの高速化が見込める。パターンマッチングで
得られる高速化の要因としては、スタック操作の省略が
考えられる。スタック操作は、命令の結果に表れるもの
ではなく、単に途中経過の一時的な保管場所に過ぎない
ため、このスタック操作は省略できる処理である。以上
の観点から、複数命令を一度に読み込み、スタック操作
に着目しながら解釈し、複数命令をレジスタを活かした
命令で一度に実行してしまうインタプリタ、または実行
形式のファイルを生成するコンパイラ(ここでは広義の
インタプリタとして説明している)を提供することによ
り性能向上がはかれる。
【0016】
【発明の効果】以上説明のように本発明は、スタックア
ーキテクチャを採用しインタプリタ方式の可変長命令列
を入力して実行するプロセッサにおいて、命令のビット
長に対するプロセッサの処理幅の広さに着目することに
よって、可変長命令を整列化して複数命令を同時に先読
みし、レジスタアーキテクチャの命令に変換して高速に
実行するものであり、このことにより、コンパイラを含
むインタプリタにおける実行速度の向上が期待でき、性
能向上がはかれる。
【図面の簡単な説明】
【図1】 本発明の実施形態を示すブロック図である。
【図2】 本発明の実施形態の動作を説明するために引
用した図であり、入力から実行までの処理の流れをフロ
ーチャートで示す図である。
【図3】 本発明の実施形態の動作を説明するために引
用した図であり、本発明において採用されるグルーピン
グの例を表形式(表1)で示す図である。
【図4】 本発明の実施形態の動作を説明するために引
用した図であり、本発明において採用されるマッチング
パターンの例を表形式(表2)で示す図である。
【図5】 本発明の実施形態の動作を説明するために引
用した図であり、本発明において使用される入力命令列
の例をリスト形式で示す図である。
【図6】 本発明の実施形態の動作を説明するために引
用した図であり、本発明において使用される変換命令列
の例をリスト形式で示す図である。
【図7】 本発明の他の実施形態を示すブロック図であ
る。
【符号の説明】
1…インタプリタ(コンパイラ) 10…入力プログラム 11…命令長変換部 12…パターンマッチャ 13…命令実行部(エグゼキュータA,B…) 14…コードジェネレータ

Claims (5)

    【特許請求の範囲】
  1. 【請求項1】 スタックアーキテクチャを持つプロセッ
    サ上でインタプリット実行されるプログラムの命令列を
    オペランド長毎に区切って整列化し、この整列化された
    プログラムから複数の命令を一度に読み取り、あらかじ
    め用意された命令実行パターンと照合することによりレ
    ジスタアーキテクチャを持つプロセッサの命令に置換
    え、この命令を実行するか、もしくは、コードジェネレ
    ータに入力して実行形式のファイルとして出力すること
    を特徴とするインタプリタの高速化方法。
  2. 【請求項2】 読み取られた各命令をその命令が持つ性
    質に応じてグループに分類し、グループに分類された命
    令の列をそのグループの並びに着目してあらかじめ用意
    された命令実行パターンと照合することによって命令の
    置換えを行ない、照合の結果一致した命令実行パターン
    に従ってその命令のオペランドをレジスタに割り当て、
    このレジスタに前記命令のオペランドをロードしてその
    命令を実行すると共に、命令実行によって得られた結果
    が入るレジスタをオペランドに書き出すことを特徴とす
    る請求項1に記載のインタプリタの高速化方法。
  3. 【請求項3】 前記照合の結果、一致するパターンがみ
    つからなかった場合、前記取り込まれた命令列の先頭か
    ら任意の一部を切り出し、この切り出された単位毎再度
    照合を行い、前記いずれのパターンとも一致しなかった
    場合、それぞれの命令に対してオペランドとレジスタの
    割り当てをおこなうことを特徴とする請求項2に記載の
    インタプリタの高速化方法。
  4. 【請求項4】 前記照合の結果、複数パターンに一致し
    た命令列は、最初に、先頭からの命令列が一致したパタ
    ーンに従いオペランドとレジスタの割り当てを行ない、
    前記レジスタから当該オペランドの読み込みを行い、次
    以降、一時的に書き込まれたスタックからオペランドの
    読み込みを行い、前記一致したパターンに従う命令の実
    行を行ない、その命令実行によって得られた結果をレジ
    スタに書き出すと共に、命令列の区切りによってはスタ
    ックに書き出すことを特徴とする請求項2に記載のイン
    タプリタの高速化方法。
  5. 【請求項5】 スタックアーキテクチャを持つプロセッ
    サ上でインタプリット実行されるプログラムの命令列を
    オペランド長毎に区切って整列化する命令長変換部と、
    該命令配列変換部で整列化されたプログラムから複数の
    命令を一度に読み取り、あらかじめ用意された命令実行
    パターンと照合する命令実行パターン照合部と、一致し
    た命令実行パターンに従ってレジスタアーキテクチャを
    持つプロセッサの命令形式に置換えその命令を実行する
    命令実行部、もしくは、コードジェネレータに入力して
    実行形式のファイルとして出力するコンパイル部とを有
    することを特徴とする高速化インタプリタ装置。
JP11123175A 1999-04-28 1999-04-28 インタプリタの高速化方法ならびに装置 Pending JP2000311089A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP11123175A JP2000311089A (ja) 1999-04-28 1999-04-28 インタプリタの高速化方法ならびに装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP11123175A JP2000311089A (ja) 1999-04-28 1999-04-28 インタプリタの高速化方法ならびに装置

Publications (1)

Publication Number Publication Date
JP2000311089A true JP2000311089A (ja) 2000-11-07

Family

ID=14854052

Family Applications (1)

Application Number Title Priority Date Filing Date
JP11123175A Pending JP2000311089A (ja) 1999-04-28 1999-04-28 インタプリタの高速化方法ならびに装置

Country Status (1)

Country Link
JP (1) JP2000311089A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006302272A (ja) * 2005-04-21 2006-11-02 Samsung Electronics Co Ltd ジャバ仮想マシンの命令語実行方法及びその装置
JP2006323844A (ja) * 2005-05-19 2006-11-30 Samsung Electronics Co Ltd ジャバ仮想マシンでバイトコードの実行時間を短縮するシステム及び方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006302272A (ja) * 2005-04-21 2006-11-02 Samsung Electronics Co Ltd ジャバ仮想マシンの命令語実行方法及びその装置
JP2006323844A (ja) * 2005-05-19 2006-11-30 Samsung Electronics Co Ltd ジャバ仮想マシンでバイトコードの実行時間を短縮するシステム及び方法

Similar Documents

Publication Publication Date Title
EP3588285B1 (en) Sequence optimizations in a high-performance computing environment
US6983458B1 (en) System for optimizing data type definition in program language processing, method and computer readable recording medium therefor
JPH10228382A (ja) コンパイル方式
US8074219B2 (en) Order preservation in data parallel operations
JPH06250846A (ja) コンパイル装置
Miecznikowski et al. Decompiling Java using staged encapsulation
Hou et al. Aspas: A framework for automatic simdization of parallel sorting on x86-based many-core processors
US20070011664A1 (en) Device and method for generating an instruction set simulator
CA2249042A1 (en) Method for generating a java bytecode data flow graph
JP2000035893A (ja) デ―タ処理システムの配列の静的初期化方法、デ―タ処理方法、並びにデ―タ処理システム及びその制御手順をコンピュ―タに実行させるプログラムを記憶したコンピュ―タ読み取り可能な記憶媒体
CN114816417B (zh) 一种交叉编译方法、装置、计算设备及存储介质
KR100853933B1 (ko) 메인프레임 시스템의 응용프로그램을 개방형 시스템에적합한 응용프로그램으로 변환하는 마이그레이션 장치 및그 방법
JP3246438B2 (ja) 可変ターゲットコンパイル処理方法、その処理装置、そのプログラムの記憶媒体および変換テーブルの記憶媒体
US20080184213A1 (en) Compiler device, method, program and recording medium
JP2001125792A (ja) 最適化促進装置
JP2000311089A (ja) インタプリタの高速化方法ならびに装置
JP3318051B2 (ja) 翻訳処理方法
Hohenauer et al. Retargetable code optimization with SIMD instructions
CN114546409A (zh) 一种编译产物与源码隔离的方法、系统及存储介质
JP5429164B2 (ja) 有限オートマトン生成システム
JP6897213B2 (ja) コード生成装置、コード生成方法及びコード生成プログラム
JP3887097B2 (ja) コンパイル方法,コンパイル装置および、コンパイル用プログラムを記憶したコンピュータ読み取り可能な記憶媒体
Shao et al. A survey of available information recovery of binary programs based on machine learning
US10387128B2 (en) Method and apparatus for compiling computer-readable computer programs using extended isomorphism
CN110825363B (zh) 智能合约获取方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20030311