JP2002532775A - インタープリタプログラム実行方法 - Google Patents

インタープリタプログラム実行方法

Info

Publication number
JP2002532775A
JP2002532775A JP2000587249A JP2000587249A JP2002532775A JP 2002532775 A JP2002532775 A JP 2002532775A JP 2000587249 A JP2000587249 A JP 2000587249A JP 2000587249 A JP2000587249 A JP 2000587249A JP 2002532775 A JP2002532775 A JP 2002532775A
Authority
JP
Japan
Prior art keywords
instruction
program
interpreter
instructions
program instructions
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
Application number
JP2000587249A
Other languages
English (en)
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.)
Koninklijke Philips NV
Original Assignee
Philips Electronics NV
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 Philips Electronics NV filed Critical Philips Electronics NV
Publication of JP2002532775A publication Critical patent/JP2002532775A/ja
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • 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 or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

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)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

(57)【要約】 スレッド化インタープリタ(916)は、メモリ(904)に記憶されている一連のプログラム命令を有するプログラムを実行するのに適している。プログラム命令を実行するため、スレッド化インタープリタは、プログラム命令をスレッド化インタープリタにおいて利用できるようにする複数の準備ステップを実行する準備ユニット(918)と、プログラム命令をエミュレートする1つ又は複数の機械語命令をもつ実行ユニット(920)とを有する。本発明によれば、スレッド化インタープリタは、命令レベル並列プロセッサにおいて一連のプログラム命令を実行する間に、一連のプログラム命令の個々のものに関して準備ステップの第1のものをインプリメントする機械語命令が準備ステップの第2のものをインプリメントする機械語命令と並列に実行されるように設計されている。

Description

【発明の詳細な説明】
【0001】 本発明は、一連のプログラム命令を有するプログラムをインタープリットする
スレッド化されたインタープリタ(以後、スレッド化インタープリタと呼ぶ)を実
行する方法であって、各プログラム命令の実行のために、プログラム命令をスレ
ッド化インタープリタにおいて利用できるようにする複数の準備ステップと、プ
ログラム命令をエミュレートする実行ステップとを含む方法に関する。
【0002】 本発明は更に、一連のプログラム命令を有するプログラムをインタープリット
するスレッド化インタープリタを実行するシステムであって、一連のプログラム
命令を記憶するメモリと、スレッド化インタープリタとを有し、そのスレッド化
インタープリタが、特定のプログラム命令を該スレッド化インタープリタにおい
て利用できるようにする複数の準備ステップを実行する準備ユニットと、特定の
プログラム命令をエミュレートする実行ユニットとを有する、システムに関する
【0003】 本発明は更に、一連のプログラム命令を有するプログラムをインタープリット
するスレッド化インタープリタを有するデータ担体であって、前記スレッド化イ
ンタープリタが、特定のプログラム命令を該スレッド化インタープリタにおいて
利用できるようにする複数の準備ステップを実行する準備ユニットと、特定のプ
ログラム命令をエミュレートする実行ユニットとを有する、データ担体に関する
【0004】 本発明は更に、一連のプログラム命令を有するプログラムをインタープリット
する実行可能なインタープリタを生成するシステムであって、前記システムはイ
ンタープリタをソースコードから機械語命令に翻訳するコンパイラを有し、前記
ソースコードのインタープリタは、プログラム命令の1つを該インタープリタに
おいて利用できるようにする少なくとも1つの準備ステップを実行する準備ユニ
ットと、プログラム命令の1つをエミュレートするエミュレーションコードをも
つ実行ユニットとを有する、システムに関する。
【0005】 本発明は更に、一連のプログラム命令を有するプログラムをインタープリット
する実行可能なインタープリタを生成するコンパイラを含むデータ担体であって
、前記コンパイラが、インタープリタをソースコードから実行可能な機械語命令
に翻訳するよう構成されており、前記ソースコードのインタープリタが、プログ
ラム命令の1つをインタープリタにおいて利用できるようにする少なくとも1つ
の準備ステップを実行する準備ユニットと、プログラム命令の1つをエミュレー
トするエミュレーションコードをもつ実行ユニットとを有する、データ担体に関
する。
【0006】 インタープリタによってプログラムを実行することは既に知らている。インタ
ープリテーション(翻訳実行)は、コンパイラを使用する実行技法とは対照的に、
プログラムが、特定のプロセッサによる直接的な実行に適した形式に前もって翻
訳されないプログラム実行技法である。実行されるべきプログラムは、特定のプ
ロセッサ専用ではない標準的な形式で記述される。インタープリタが目下のプロ
セッサに特化したプログラムであるならば当該インタープリタは、実行されるべ
きプログラムのプログラム命令を読み取り、このプログラム命令を解析する。そ
の後、インタープリタはどんなアクションがとられなければならないかを判断し
、これらのアクションがプロセッサにより実行されるようにする。翻訳されたプ
ログラム命令を中間形式で記憶することなく、プログラム命令の読取りと、対応
する機械語命令の実行とが交互に行われる。プログラム命令は、実行されるべき
演算の種類(例えば加算演算)を示す演算コードを有する。更にプログラム命令
は、演算の後に続く1つ又は複数の即時の引数を有することができる。それらは
、その演算に関するオペランドである。インタープリットされるべきプログラム
が記述されうる標準的な形式の適当な例としては、Java(登録商標)バイトコー ドや、Pascalプログラムの翻訳により生じるPコードがある。
【0007】 実行されるべきプログラムのインタープリテーションに基づくプログラム実行
は、コンパイル済みのプログラムに基づくものよりも遅い。後者の場合、プログ
ラムは、前もって翻訳され、プロセッサにより直接実行可能な機械語命令の形式
で記憶されている。インタープリテーションの場合、翻訳の少なくとも最終フェ
ーズは、プロセッサ上で走り且つプロセッサの時間及び資源を利用するインター
プリタによりランタイムに実行される。これは、インタープリタに基づくプログ
ラムの実行を遅くすることになる。論文「Interpretation Techniques」(Paul
Klint、Software-Practice and Experience、Vol. 11、pages 963-973、1981年9
月)には、メモリに関して高価となる技法を必要としない比較的高速のインター
プリタである、いわゆるスレッド化インタープリタが記述されている。スレッド
化インタープリタは、インタープリットされ且つ実行されるべきプログラム命令
ごとに1ブロックの機械語命令を含む。このようなブロックは、以下の要素を含
む: −プログラム命令のためのエミュレーションコード。すなわち、プログラム命令
の目的を実現するためにプロセッサによって実行されるべき1つ又は複数の機械
語命令。 −実行されるべき次のプログラム命令をフェッチするためのフェッチ命令。 −プログラム命令がフェッチされた後、そのプログラム命令をデコードするため
のデコード命令。 −そのプログラム命令のブロックへのジャンプ。
【0008】 スレッド化インタープリタは、これらのブロックのいくつかの並列なものと考
えることができる。スレッド化インタープリタは、インタープリットする必要が
ある各種のプログラム命令ごとに1ブロックを有し、例えば256個の異なるプロ
グラム命令が支援されるときには256個のブロックを有する。ある特定のブロッ
クの実行後、実行されるべき次のプログラム命令をインプリメントするブロック
へのジャンプが行われる。そのブロックが実行され、再び次のプログラム命令の
ブロックへのジャンプが行われ、以後同様に続く。
【0009】 本発明の目的は、既知の方法よりも比較的高速である前述の種類の方法を提供
することである。この目的は、本発明により、命令レベル並列プロセッサにおけ
るインタープリタの実行中に、一連のプログラム命令の個々のものについて、準
備ステップの第1のものをインプリメントする機械語命令が、準備ステップの第
2のものをインプリメントする機械語命令と並列に実行されることを特徴とする
方法において達成される。準備ステップのうち2つのものに関する機械語命令を
実行することにより、各ステップがそれ自身のプログラム命令に関して実行され
、少なくとも2つの異なるプログラム命令が同時に実行されるようになる。必要
とされるすべての機械語命令を単一ゆえにより長いシーケンスで実行する必要が
なくなるので、これはプログラムの実行速度を大幅に改善する。
【0010】 命令の並列処理自体は既に知られている。これは例えば論文「Instruction-Le
vel Parallel Processing: History, Overview, and Perspective」(B. Ramakr
ishna Rau及びJoseph A. Fisher, The Journal of Supercomputing, 7, pages 9
-50, 1993年5月)において記述されている。この論文のページ19には、VLIW(Ve
ry Long Instruction Word,超長命令語)プロセッサにおける命令レベル並列処
理が記述されている。そのようなプロセッサは多数のスロットを有し、各スロッ
トに1つの命令を入れることができる。それらの命令は協働していわゆる超長命
令語を形成し、これは、単一の(非常に長い)命令としてプロセッサにより実行
される。これによって、それぞれのスロットに置かれている個々の命令の並列処
理が行われる。命令のうちのどれが互いに独立しており、並列に実行することが
できるかを識別するのはコンパイラの仕事である。これらの命令は、それぞれの
スロットに一緒に入れられるべき候補となる。コンパイラのこの仕事の重要な特
徴は、プログラム命令の実行におけるループの識別と、ループの中へのプログラ
ム命令の移動である。この目的は、命令のうちのどれが他の命令から独立してお
り、それゆえ他の命令と並列に実行されるべき候補となるかを識別することであ
る。
【0011】 テキストブック「Compiler: Principles, Techniques and Tools」(Alfred V
. Aho, Ravi Sethi及びJeffrey D. Ullman, Addison-Wesley Series in Compute
r Science, Addison-Wesley Publishing Company, Reading, Massachusetts, 19
85年)のページ602ないし608には、コンパイラによるプログラムコード最適化の
ためにプログラムコード内のループがどのように扱われるべきかが記述されてい
る。コンパイラによる最適化を可能にするために、外部からループの中間部への
ジャンプがあってはならない。ループへの唯一のエントリはそのヘッダを経由す
る。前述のテキストブックによれば、ループの制御フローエッジは、後ろエッジ
及び前エッジに区分することができる。後ろエッジは、ループのエントリーブロ
ックを指し示す特性を有し、前エッジは、残りのエッジである。前エッジが非周
期的なグラフすなわち別のループをもたないグラフを形成する場合、そのループ
を最適化することが可能である。従って、スレッド化インタープリタの構造は、
ループの複雑な構成を含む制御フローグラフと考えることができる。それぞれの
ブロックを通して、ループを通過させることができ、そのブロックの後、ループ
は各ブロックにおいて続行することができる。その後、ループは再び各ブロック
において続行することができ、以後同様に続く。すべての制御フローエッジは前
エッジであり、非周期的なグラフを形成しない。従って、インタープリタのこの
制御フローグラフは、テキストブックに開示されているように既知のソフトウェ
アパイプラインアルゴリズムにより最適化することができない。この教示にもか
かわらず、本出願の発明者は、スレッド化インタープリタの準備ステップのいく
つかが上述したように並列に実行することができることが分かった。
【0012】 本発明による方法の実施例は請求項3に規定されている。この実施例では、一
連のプログラム命令をインタープリットするステップをインプリメントする機械
語命令は、3ステージパイプラインにおいて実行される。これは、3つのプログ
ラム命令が並列にインタープリットされることを意味する。これは、プログラム
をインタープリットし且つ実行するのに必要とされる時間を大幅に低減する。
【0013】 本発明による方法の別の実施例は請求項4に規定されている。バイトコード形
式は、インタープリットされるべきプログラムを記述して記憶するのに非常に適
している。バイトコード形式は、プログラム命令の簡単な検索取出し及び解析を
可能にし、一層簡潔なインタープリタを与える。
【0014】 本発明の別の目的は、既知のシステムより高速な実行を可能にする前述の種類
のインタープリタを実行するシステムを提供することである。この目的は、本発
明に従って、スレッド化インタープリタが、一連のプログラム命令の個々のもの
について準備ステップの第1のものをインプリメントする機械語命令を、準備ス
テップの第2のものをインプリメントする機械語命令と並列に命令レベル並列プ
ロセッサにおいて実行させるように構成されていることを特徴とする、プログラ
ムを実行するためのシステムにより達成される。一連のプログラム命令のインタ
ープリテーションの際に2つのステップをインプリメントする機械語命令が命令
レベル並列プロセッサにおいて並列に実行されるので、インタープリタの実行は
一層高速になる。
【0015】 本発明によるスレッド化インタープリタを有するデータ担体は、スレッド化イ
ンタープリタが、一連のプログラム命令の個々のものについて、準備ステップの
第1のものをインプリメントする機械語命令を、準備ステップの第2のものをイ
ンプリメントする機械語命令と並列に命令レベル並列プロセッサにおいて実行さ
せるように構成されていることを特徴とする。
【0016】 本発明の別の目的は、既知のインタープリタより高速のプログラム実行に適し
ている前述の種類のインタープリタを生成するシステムを提供することである。
この目的は、本発明に従って、コンパイラが、実行可能なインタープリタの中の
コードの複製により、特定のプログラム命令について、この特定のプログラム命
令に関する実行ユニットの機械語命令への翻訳と、その後の、該特定のプログラ
ム命令の直ぐあとに続く次(successor)のプログラム命令に関する準備ユニット
の機械語命令への翻訳とを含むブロックを生成し、スレッド形式の実行可能なイ
ンタープリタが得られるように構成されていることを特徴とする、インタープリ
タを生成するシステムにより達成される。このシステムは、スレッド構造を含ま
ないソースコードから、実行可能なスレッド化インタープリタを生成する。これ
は、標準のプログラミング言語ANSI Cでソースコードを書くことを可能にする。
【0017】 本発明による方法の別の形態が請求項9に規定されている。生成されるインタ
ープリタは、準備ステップのうちの2つをインプリメントする機械語命令を命令
レベル並列プロセッサにおいて並列に実行するように構成されるので、2つの異
なるプログラム命令は、このインタープリタによるプログラムの実行中に同時に
実行される。これは、プログラムをインタープリットするインタープリタを実行
するのに必要とされる時間を大幅に減少させる。
【0018】 本発明によるコンパイラを有するデータ担体は、そのコンパイラが、実行可能
なインタープリタの中のコードの複製により、特定のプログラム命令について、
この特定のプログラム命令に関する実行ユニットの機械語命令への翻訳と、その
後の、該特定のプログラム命令の直ぐあとに続く次のプログラム命令に関する準
備ユニットの機械語命令への翻訳とを含むブロックを生成し、スレッド形式で実
行可能なインタープリタを得るように構成されていることを特徴とする。
【0019】 本発明の別の有利な実施例は、従属項において列挙されている。本発明及びそ
れに付随する利点は、例示としての実施例及び添付の概略的な図面を利用して明
らかになるであろう。それぞれの図において対応する機能は同じ参照符号によっ
て示されている。
【0020】
【発明の実施の形態】
図1は、スレッド化インタープリタの制御フローグラフを示している。スレッ
ド化インタープリタは、多数のブロックを有しており、そのうちのブロック102
、104、106及び108が図示されている。1つのブロックは、インタープリタによ
りインタープリットすることができる特定の種類のプログラム命令に対応してお
り、プロセッサにより実行されるべき多数の機械語命令を含んでいる。スレッド
化インタープリタは、支援される各種のプログラム命令ごとに1つのブロックを
有する。所与のプログラム命令がインタープリットされるとき、制御は、所与の
種類のプログラム命令に対応するブロック(例えばブロック106)にわたされ、そ
のブロックが実行される。当該ブロックの実行の終了時、どのプログラム命令が
次に実行されるべきかが決定され、制御は、次のプログラム命令の種類に対応す
るブロック(例えばブロック102)にわたされる。いかなるブロックの終了時にお
いても制御が他のいずれかのブロックに渡されるというのがスレッド化インター
プリタの特性である。
【0021】 インタープリタのブロックの内容は、プログラム命令の記憶の性質すなわちそ
れらが記憶される形式と、インタープリタを走らせるプロセッサとに依存する。
しかし、スレッド化インタープリタのブロックでは以下の要素を識別することが
可能である。 −プログラム命令をエミュレートする1つ又は複数の機械語命令。すなわちプロ
グラム命令の目的を実現する機械語命令。 −メモリから次のプログラム命令をフェッチするためのフェッチ命令。 −プログラム命令の種類が判断されるようにフェッチされたプログラム命令をデ
コードするためのデコード命令。 −プログラム命令の種類に対応するブロックへのジャンプ命令。
【0022】 本発明の好適な実施例において、プログラム命令は、いわゆるバイトコード形
式で記憶される。このような形式によれば、プログラム命令は、1バイトにおさ
まるコードに一意的にコード化される。このバイトコードは、演算の種類を示し
、命令のオペランドを示す1つ又は複数の即時の引数が後に続くことができる。
フェッチ命令及びデコード命令は、それらがバイトコード形式で記憶されたプロ
グラム命令を扱うことができるような態様でインプリメントされる。しかし本発
明の適用は、バイトコード形式で記憶されるプログラムに限定されるものではな
い。別の形式である場合、フェッチ及びデコード命令のインプリメンテーション
は、この別の形式を収容しなければならない。下表は、乗算のためのプログラム
命令に関するブロックの一例を示している。この例は、バイトコード形式に関係
し、擬似アセンブリ言語で与えられている。
【0023】
【表1】 左欄は、擬似アセンブリ言語の機械語命令を含み、右欄は、個々の命令に関する
コメントを含む。一行目は、プログラム命令をエミュレートする機械語命令であ
る。これは、スタックの一番上の要素とスタックの次の要素との乗算であり、そ
の結果はスタックの一番上に入れられる。2番目の行は、次のプログラム命令を
フェッチするためのフェッチ命令である。プログラムカウンタpcによって示され
るバイトがメモリからロードされ、変数bcに入れられる。次のプログラム命令に
備えるために、プログラムカウンタはインクリメントされる。3番目の行は、フ
ェッチされたプログラム命令をデコードするためのデコード命令である。デコー
ドするために、インタープリタのさまざまなブロックのアドレスを含むアレイを
使用することできる。0から255までの値をもつフェッチされたバイトがアレイの
インデックスとして使用され、インデックスされるワードは、可変長ブロックに
ロードされる。フェッチ及びデコード命令は、プログラム命令がバイトコードと
してメモリに記憶されることにより非常に簡潔である。4番目の行は、次のプロ
グラム命令に対応するブロックへのジャンプ命令である。
【0024】 図2は、超長命令語プロセッサの一部を概略的に示している。この例ではプロ
セッサは5つの機能ユニット(202-210)を有しており、それらは互いに並列に
演算を実行することが可能である。プロセッサは更に、レジスタファイル212に
おいてシンボリックにグループ化された多数のレジスタを有する。演算を実行す
るために、機能ユニットは、レジスタファイルの2つのレジスタの内容を入力と
して使用することができ、レジスタファイルのレジスタの1つに演算の結果を記
憶することができる。VLIWプロセッサの機能ユニットは、それぞれの機能ユニッ
トが、支援されるそれぞれの演算を実行することができるという点で同型(unifo
rm)であってもよい。しかし機能ユニットは、特定の機能ユニットがあるクラス
の利用可能な演算のみを実行することができ、別の機能ユニットが別のクラスの
演算のみを実行することができるという点で同型でなくてもよい。これに関する
一つの例は、ある機能ユニットがメモリ関連の演算用に構成され、別の機能ユニ
ットが算術演算用に構成されているような場合である。
【0025】 ブロック214により示される超長命令語(VLIW)命令は、機能ユニットにより
実行されるべき演算を置くことができる5つの発行(issue)スロットを有する。V
LIW命令における発行スロットの位置は、当該発行スロットに置かれた演算をど
の機能ユニットが実行するべきかを決める。図示する例では、発行スロット216
に置かれた演算は、機能ユニット202により実行され、発行スロット218の演算は
機能ユニット204により、発行スロット220の演算は機能ユニット206により、発
行スロット222の演算は機能ユニット208により、発行スロット224の演算は機能
ユニット210により実行される。発行スロットに置かれる演算、例えば演算226は
、演算の種類を示す演算コードフィールド228を有する。さらに、演算226は、2
つの入力レジスタを示すレジスタフィールド230及び232と、出力レジスタを示す
レジスタフィールド234とを有する。VLIWプロセッサは周期的に演算を行い、各
サイクルにおいて1つの完全なVLIW命令が処理される。これは、VLIW命令の発行
スロットに入れられた演算の並列実行を生じさせる。いくつかの演算については
、その結果が次のサイクルの開始時に直ちに利用できるわけではない。従ってそ
の結果を必要とする次の演算は、そのような演算の直後にスケジュールすること
ができない。好適な実施例において使用されるプロセッサに関するそのような演
算の例として、3サイクルをそれぞれに要するロードワード命令及びロードバイ
ト命令や、4サイクルを要するジャンプ命令がある。
【0026】 図3は、既知の方法に従ってVLIWプロセッサにより実行されるべきプログラム
の一部のレイアウトを概略的に示している。プログラムは行列として考えること
ができ、1つの行は、同時に発行されるべき演算を含む1つのVLIW命令を表して
いる。この行列の特定の列は、対応する機能ユニットにより実行されるべき演算
を表している。ジャンプ命令が、別の命令が実行されるべきことを強制しない限
り、実行の順序は、行列の中に与えられているように一番上の行302から下って
いくものである。ジャンプ命令すなわち指定されたアドレスへのジャンプの効果
は、ジャンプ命令の待ち時間(latency)が経過したあとに生じる。以下では、表
1に示される4つの機械語命令を使用してVLIWプロセッサのスレッド化インター
プリタのブロックの実行を説明する。実際には、この表から発生する演算以外の
いくつかの演算が空きの発行スロットにスケジュールされてもよいが、これは、
理解しやすいように図示されておらず、本発明を説明するために重要ではない。
MUL演算及びLDB演算は互いに依存しないので、これら2つの演算は第1のVLIW命
令の中にスケジュールすることができる。MUL演算は、本プログラム命令の実現
であるが、LDB演算は、次のプログラム命令のフェッチである。LDW演算は、LDB
演算の結果を必要とするのでまだスケジュールすることができず、JMP演算は、L
DW演算の結果を必要とするのでまだスケジュールすることができない。LDB演算
の結果が利用できるようになるまでには3サイクルを要するので、LDW演算は、
行304により示される第4のVLIW命令の中で発行される。LDW演算の結果が利用で
きるようになるまでには3サイクルを要する。従ってJMP演算は、行306により示
される7番目のVLIW命令の中で発行される。JMP演算の結果が実現されるまでに
は4サイクルを要するので、表1により指定されるブロックすべてを実行するに
は、VLIWプロセッサの少なくとも10サイクルを要する。平均して、MUL演算のよ
うなプログラム命令をエミュレートする演算はそれぞれ2サイクルを必要とする
。さらに、ほぼすべてのプログラム命令について、エミュレート演算に必要とさ
れるサイクルは10サイクルより少なくてよい。従って、スレッド化インタープリ
タの1ブロックを実行するにはVLIWプロセッサの10サイクルが必要とされると言
うことができる。LDB演算からLDW演算までの矢印308により、LDW演算は、LDB演
算の結果が利用できるようになって初めて実行することができ、従ってLDB演算
に依存するという事実が示されている。同様に、矢印310は、JMP演算がLDW演算
に依存していることを示す。
【0027】 図4は、本発明による、多数のプログラム命令に関するインタープリタステッ
プの実行を示している。1つのプログラム命令をインタープリットするためのイ
ンタープリタにおけるステップの実行は、1つの行により表されている。更にこ
の実行は、行の中の個々のフィールドにより示される多数のステージに区分され
る。i番目のプログラム命令に関する行402は、フェッチステップのためのステ
ージ404と、デコードステップのためのステージ406と、ジャンプステップ及び実
行ステップのためのステージ408とを有する。この実行ステップは、プログラム
命令iをエミュレートする機械語命令を実行するためのものであるが、フェッチ
ステップ、デコードステップ及びジャンプステップは、プログラム命令i+1に
関する演算であることに注意すべきである。これは、図1及び表1に関連して説
明したスレッド化インタープリタの性質に一致する。表1は、特定のプログラム
命令に関するブロックを示しており、そのブロックの中では特定のプログラム命
令が実行され、次のプログラム命令へのジャンプが準備され、実施される。従っ
てステージ404ではプログラム命令i+1がメモリからフェッチされ、ステージ4
06ではそのプログラム命令がデコードされる。ステージ408では、プログラム命
令i+1をエミュレートする機械語命令のユニットへのジャンプが実施される。
ステージ408ではプログラム命令iの機械語命令が更に実行される。行410は、(
i+1)番目のプログラム命令に関するステップを示している。つまり、ステー
ジ412のフェッチステップと、ステージ414のデコードステップと、ステージ416
のジャンプステップ及びプログラム命令i+1をエミュレートする機械語命令の
実行ステップとがある。同様に、行418は、プログラム命令i+2に関するステ
ップをステージ420、422及び424においてそれぞれ示している。この図では時間
が左から右に表わされており、1つのプログラム命令に関するステージが、左か
ら右に実行される。例えば、プログラム命令のフェッチステップはそのデコード
ステップの前に実行され、プログラム命令のデコードステップはそのジャンプス
テップの前に実行される。
【0028】 互いに上に示されているステージは、VLIWプロセッサにおいて並列に実行され
る。従って、ステージ408のプログラム命令iに関連するジャンプ及び実行ステ
ップは、ステージ414のプログラム命令i+1に関連するデコードステップと同
時に実行され、また、ステージ420のプログラム命令i+2に関連するフェッチ
ステップとも同時に実行される。この列のステージが実行されると、次のイタレ
ーション(反復)が行われ、ステージ416、422及び426が並列に実行される。これ
らのステージでは、直前のイタレーションと同様のステップが実行されるが、こ
こでは次のプログラム命令に関して実行される。図3の行及びステージは、イン
タープリタのパイプラインとも呼ばれ、特にソフトウェアパイプラインと呼ばれ
る。好適な実施例では、3つのプログラム命令が並列に実行されることを意味す
る3ステージパイプラインが使用される。上述したようなソフトウェアパイプラ
インにおけるプログラム命令のインタープリテーションは、インタープリットさ
れるべき次のプログラム命令が現在のプログラム命令のすぐ後に続くものである
という仮定において演算を行う。ジャンププログラム命令の場合にはこの仮定は
有効ではなく、インタープリットされるプログラム命令のフローは順次とは異な
る。この場合、パイプラインは初期化され、パイプラインの演算は、ジャンプし
た先であるプログラム命令から始まる。
【0029】 図4のステージは、インタープリットされるプログラムの一部であるプログラ
ム命令の一部を含むことに注意すべきである。これらのステージは、プロセッサ
により実行される機械語命令の一部を含む。言い換えると、図4は本発明による
インタープリタの実行中のソフトウェアパイプラインを示しているが、プロセッ
サにより機械語命令を実行するためのハードウェアパイプラインを示していない
【0030】 図5は、図4に示すステージをインプリメントするプログラムの一部のレイア
ウトを概略で示している。この一部は、並列に実行される個々のプログラム命令
の3つのステージを示しており、この例ではステージ408、ステージ414及びステ
ージ420である。JMP演算502及びMUL演算504は、第1のVLIW命令にスケジュール
されている。これらの演算は、互いに依存しないので並列に実行することができ
る。MUL演算は、プログラム命令iの実現であり、JMP演算は、プログラム命令i
+1へのジャンプである。MUL演算及びJMP演算は、i番目のプログラム命令のス
テージ408に対応している。JMP演算502を実行し終えるには4サイクルを要し、
従ってこのステージを実行し終えるには、JMP演算がスケジュールされているサ
イクルの後に少なくとも3サイクルが続かなければならない。LDW演算506は、2
番目のVLIW命令にスケジュールされており、ステージ414に示すようなプログラ
ム命令i+1に属するデコードをインプリメントする。LDW演算を実行し終える
には3サイクルを要し、JMP演算502には4サイクルを要するので、LDW演算は、
プログラムフラグメントの長さに影響を及ぼすことなく第1又は第2のVLIW命令
にスケジュールすることができる。LDB演算508は、最初のVLIW命令にスケジュー
ルされ、ステージ420に示すようにプログラム命令i+2に属するフェッチをイ
ンプリメントする。LDB演算を実行し終えるには3サイクルを要し、JMP演算502
には4サイクルを要するので、LDB演算は、プログラムフラグメントの長さに影
響を及ぼすことなく第1又は第2のVLIW命令にスケジュールすることができる。
【0031】 図5に示す演算と図4に示すインタープリタのステップとの間の関係をまとめ
、どのプログラム命令において演算がなされるかを明示するために、 −MUL演算は、プログラム命令iの実行に属し、プログラム命令iをエミュレー
トする。 −JMP演算は、プログラム命令iの実行に属し、プログラム命令i+1のブロッ
クにジャンプする。 −LDW演算は、プログラム命令i+1の実行に属し、プログラム命令i+2をデ
コードする。 −LDB演算は、プログラム命令i+2の実行に属し、プログラム命令i+3をフ
ェッチする。
【0032】 次の3ステージの実行は、図5に示したものと同様にVLIW命令の次のブロック
において実行され、個々の次のプログラム命令に関して演算を行う。JMP演算502
は、VLIW命令の直前のブロックのLDW演算に依存しており、本ブロックのLDW演算
506には依存しない。この依存関係は、行列の外を通るループにより描かれた矢
印510により示されており、直前のイタレーションすなわち直前のVLIW命令ブロ
ックへの依存を示している。直前のブロックは、本ブロックの開始前に完全に終
了しているので、JMP演算を本ブロックの開始時に直ちにスケジュールしてもよ
い。同様に、LDW演算506は、直前のブロックのLDB演算に依存しており、本ブロ
ックのLDB演算508には依存しない。この依存関係は矢印512により示されている
【0033】 単一のブロックの中の演算は、互いに依存せず、ブロック全体に必要とされる
VLIWプロセッサのサイクルができるだけ少なく済むような態様でスケジュールさ
れる。この例では、JMP演算を実行し終えるには4サイクルを必要とする。他の
演算、特にMUL演算は、より早くあるいは遅くとも同時に終了するので、ブロッ
ク全体として4サイクルを要する。これは、プログラム命令をエミュレートする
1つ又は複数の演算(例えばこの例ではMUL演算)が最高で4サイクルを必要とす
る限りにおいては他の種類のプログラム命令についても同様である。実際にこれ
はほとんどの種類のプログラム命令にあてはまる。これは、図4及び図5に示し
たようなステップ及び演算のスケジューリングが、VLIWプロセッサにおけるプロ
グラム命令のインタープリテーションを図3に示した10サイクルから4サイク
ルまで低減させていることを意味する。
【0034】 本発明の好適な実施例は、Philips VLIWプロセッサTM 1000におけるスレッド
化インタープリタの実行に関連する。しかし、本発明は、機械語命令が並列に実
行されることを許す別の種類のプロセッサでも実行することが可能である。この
技法は、概して命令レベル並列処理と呼ばれ、そのようなプロセッサは、命令レ
ベル並列プロセッサと呼ばれる。VLIWプロセッサは、命令レベル並列プロセッサ
のクラスの特定のサブクラスに属する。
【0035】 好適な実施例におけるインタープリタは、移植可能なプログラムを異なるプロ
セッサ上で利用できるようにするためにC言語で書かれる。ANSI Cのスレ
ッド化インタープリタは、この言語が変数ラベルを欠いていることから直接イン
プリメントすることができない。従ってスレッド化インタープリタのブロックの
終了時、ランタイムにおいて判断されるべきブロックへのジャンプ命令をインプ
リメントすることができない。従って、インタープリタは、無限のwhileループ
の中に含まれるswitchステートメントによりANSI Cでインプリメントされ、最適
化されたコンパイラによりコンパイルされ、コンパイルされた命令を並べ直して
、スレッド化インタープリタを得るようにしている。以下の表は、ANSI C
のインタープリタの1ブロックを示している。 while (1) { switch (b0) { ........ //その他の場合 case 0x4e: //乗算演算 tos = tos x nos; //エミュレーションコード nos = sp[2]; //スタックキャッシュの更新 sp += 1; //スタックポインタの更新 b0 = b1;b1 = b2;b2 = b3; //プリフェッチパイプラインのシフト b3 = b4;b4 = b5; b5 = b6;b6 = pc[7]; //バイトのプリフェッチ pc += 1; //プログラムカウンタの更新 #pragma TCS-graft_here //スレッド化インタープリタの生成 break; ........ //その他の場合 }} 表2:乗算プログラム命令用のインタープリタのブロック
【0036】 パイプライン化されたインタープリタとしてのインプリメンテーションは、イ
ンタープリタにおける一組のプリフェッチされたバイトb0,…,bnを明確に維持す
ることにより実現されている。インタープリタのスイッチの引数はb0であり、イ
ンタープリットされるべきプログラム命令のバイトコードである。そのプログラ
ム命令の即時の引数は、b1,…,bmである。ここでmは、プログラム命令が必要と
する即時の引数の数である。プログラム命令がnバイトより多くの即時の引数を
必要とするような稀なケースでは、不足しているm-nバイトがメモリからフェッ
チされる。nの値を決めることは、プリフェッチされたバイトをシフトするのに
必要な命令の量と、不十分なプリフェッチがパイプラインを遅くする可能性との
間のトレードオフを伴う。nに適した値は6であることが経験的に判明した。b0,
…,bmが使用された後、プリフェッチパイプラインは、m+1ポジションだけシフト
され、m+1の新しいバイトがメモリからフェッチされる。バイトが十分前もって
プリフェッチされると、コンパイラは、後述するように、先行するイタレーショ
ンにデコードロード演算を移動させることができる。「TC-graft_here」という
プラグマは、そのような最適化がそこで実行されるべきであるというコンパイラ
に対する命令である。
【0037】 図6は、Cインプリメンテーションから翻訳されたインタープリタの制御フロ
ーグラフを示している。制御フローグラフは、コンパイラにより翻訳されたプロ
グラムの構造及び起こりうるフローを示している。制御フローグラフは、基本ブ
ロック及び制御フローエッジを含む。基本ブロックは多数の命令を含んでおり、
制御が当該基本ブロックに渡されると、それぞれの命令が所与の順序で実行され
る。制御フローエッジは、ある基本ブロックから他のブロックへ制御がどのよう
に渡されることが可能であるかを示す。基本ブロック602は、switch引数b0がswi
tchステートメントのcaseの1つに対応しているかどうかを確認するレンジであ
る。これが対応していない場合、制御は、この例外を処理するための基本ブロッ
ク604に渡される。b0が対応するcaseを有する場合、制御はswitchを含む基本ブ
ロック605に渡され、その後、関連するcaseの基本ブロック(例えば基本ブロック
608)に渡される。それぞれの基本ブロック604ないし610の後には、制御が基本ブ
ロック612に渡され、基本ブロック602に戻るジャンプが行われる。このジャンプ
は、Cプログラムで与えられるような無限のwhileループを反映する。
【0038】 図7は、第1の最適化の後のインタープリタの制御フローグラフを示している
。switchがほぼ256個のcaseを含む場合、従ってインタープリタにより支援され
る種類のプログラム命令の数がほぼ256個である場合、コンパイラによるこの最
初の最適化を利用することが可能である。caseの数は、多数のダミーのcaseによ
り256まで増やされる。これは、プログラム命令に対応するバイトコードのどん
な値についても、有効な基本ブロックがswitchの中で利用可能であり、レンジチ
ェックを省くことができることを意味する。制御フローグラフは、基本ブロック
702のswitchから直接始まる。そして制御は、バイトコードの値に依存して基本
ブロック704ないし710のうちの1つに渡される。その後制御は上述したように常
に基本ブロック712のジャンプに渡される。
【0039】 図8は、別の最適化の後のインタープリタの制御フローグラフを示している。
基本ブロック702のswitchは、ループの中の後ろの方に移動されており、基本ブ
ロック712のジャンプと共にそれぞれの基本ブロック704ないし710に追加されて
いる。スイッチ及びジャンプは、プログラム命令のデコードと、そのプログラム
命令のブロックへのジャンプとを表す。この最適化により、256個の基本ブロッ
クをもつ制御フローグラフと、各ブロックから各ブロックへの制御フローエッジ
とが与えられている。256の基本ブロックのうち基本ブロック802ないし808が図
示されている。1つの基本ブロックは以下の要素を含む: −プログラム命令をエミュレートする機械語命令の実行。 −次のプログラム命令のバイトコードのフェッチ。 −そのバイトコードのデコード。 −デコードされたプログラム命令に対応するブロックへのジャンプ。
【0040】 上述したものは、図1に関連して説明したスレッド化インタープリタのインプ
リメンテーションに対応している。従って本発明によるコンパイラは、スレッド
化構造を含まないANSI Cのプログラムソースコードからスレッド化インタ
ープリタを形成する。
【0041】 一連のプログラム命令を有するプログラムのインタープリテーションの場合、
基本ブロックは、プログラムが終了するまでイタレーションの中で繰り返し実行
される。図4に関して説明したようなパイプライン化を実現するために、コンパ
イラは、後述するような方法で、1つのイタレーションから別のイタレーション
に命令を移動させる。デコード命令は、先行するイタレーションにコンパイラに
より移動させられる。これは、与えられたプログラム命令のブロックのデコード
命令は、一連のプログラム命令の中の1つ後ろのポジションにあるプログラム命
令に関連することを意味する。そのデコード命令は、次のブロックからそこに移
動されてきたものだからである。フェッチ命令は、上記のCプログラムにおいて
指定されたプリフェッチパイプラインによって2つ前のイタレーションに移動さ
れる。これは、所与のプログラム命令のブロックのフェッチ命令が、一連のプロ
グラム命令の中の2つ後ろのポジションにあるプログラム命令に関連することを
意味する。そのフェッチ命令は、2つ後ろのブロックからこのブロックに移され
てきたものだからである。これらの命令を他のイタレーションへ移すことにより
、所与のブロックの中の命令からそれらを独立させる。これは、図5に関して説
明したように命令の並列処理を可能にする。
【0042】 コンパイラは、目下の基本ブロックのすべての起こりうる前のブロック(prede
cessors)に命令の複製を作ることにより、あるブロックの1つの命令を直前のイ
タレーションに移動させる。スレッド化インタープリタの場合、これは、特定の
ブロックからすべての他のブロックに命令の複製を作ることを意味する。所与の
ブロックにはそれぞれの他のブロックから到達することが可能であるからである
。あらゆるブロックがこうして変更され、すなわち、あらゆるブロックがかつて
の特定のブロックの役割を果たすので、それぞれのブロックは、移動されるべき
命令の多数のコピーを受け取る。移動されるべき命令は、次にジャンプすべきブ
ロックのアドレスを与えるデコード命令である。デコード命令は、入力として、
次のプログラム命令のバイトコードである1バイトを受け取る。プリフェッチパ
イプラインの中の1つ又は複数のバイトが即時の引数である場合、これは、プリ
フェッチパイプラインにおける次のバイトであってもよく、もっと後ろのバイト
であってもよい。異なる種類のプログラム命令は異なる数の即時の引数をもつこ
とができるので、ブロックのデコード命令の正確なインプリメンテーションは、
そのブロックのプログラム命令の種類に依存する。従って複数のコピーの中には
多数の異なる種類のデコード命令が存在する。コンパイラは、ブロックに移動さ
れたデコード命令から重複したコピーを除去し、異なる種類のみが当該ブロック
において実行される状態となる。
【0043】 従って、スレッド化インタープリタを実行するための所望のパイプラインの実
現は2つの特徴に基づく。第1の特徴は、Cプログラムでコード化されているよ
うな6バイトのプリフェッチパイプラインであり、これは、プログラム命令のフ
ェッチステップを2つ前のイタレーションに移動することを可能にする。フェッ
チステップの実際の移動は、コンパイラにより実行され、これは、プリフェッチ
パイプラインに与えられる直接的なタスクである。第2の特徴は、プログラム命
令のデコード命令を1つ前のイタレーションに移動させることである。コンパイ
ラは、関連する機械語命令をすべてのブロックから他のすべてブロックに複製を
作り、ブロックから重複した命令を除去することによりこの移動を実行する。
【0044】 図9は、本発明によるプログラムを実行するシステムの実施例を示している。
システム900は、既知のアーキテクチャによりインプリメントされる。このシス
テムは、ワークステーション又はテレビのような民生機器であってもよく、必要
な資源を有する他のいかなる種類の装置であってもよい。システムは、メモリ90
4にロードされるプログラムモジュールの機械語命令を実行するためのVLIWプロ
セッサ902を有する。このメモリは、ランダムアクセスメモリであってもよく、
ランダムアクセスメモリと読取り専用メモリとの組合せであってもよい。このシ
ステムは更に、周辺装置と通信するためのインタフェース906を有する。システ
ムの多様な構成要素の間でコマンド及びデータを交換するためのバス908がある
。システムの周辺装置は、インタープリットされるべきプログラムを含む記憶媒
体910を有する。代替として、このプログラムは、システムの読取り専用メモリ
に記憶されていてもよい。記憶媒体910は、ハードディスクであってもよく、光
ディスク、チップカード又はテープのような他の適当な媒体であってもよい。更
にシステムの周辺装置は、システムのユーザと通信するためのディスプレイ912
及び入力装置914を有する。このシステムは、上述したようなスレッド化インタ
ープリタ916を有する。インタープリタは、プログラム命令をメモリ904から検索
して取り出し、それをインタープリタによる処理に利用できるようする準備ユニ
ット918を有する。インタープリタは更に、検索され取り出されたプログラム命
令をエミュレートする1つ又は複数の機械語命令を含むユニット920を有する。
実行されるべきプログラムは、一連のプログラム命令からなり、インタープリタ
916によるインタープリテーション及び実行のためにメモリ904にロードされる。
【0045】 図10は、本発明によるインタープリタを生成するシステムの実施例を示して
いる。システム1000は、既知のアーキテクチャによりインプリメントされる。こ
のシステムは、汎用コンピュータに基づくワークステーションであるが、別の種
類のコンピュータを使用してもよい。このシステムは、メモリ1004にロードされ
たプログラムモジュールの機械語命令を実行するためのプロセッサ1002を有する
。このシステムは更に、周辺装置と通信するためのインタフェース1006を有する
。システムのさまざまな構成要素の間でコマンド及びデータを交換するためのバ
ス1008がある。システムの周辺装置は、コンパイルされるべきインタープリタの
ソースを含む記憶媒体1010を有する。結果として生じる実行可能なコンパイラも
また記憶媒体1010に記憶される。記憶媒体1010は、ハードディスクであってもよ
く、光ディスク、チップカード又はテープのような他の適当な媒体であってもよ
い。更にシステムの周辺装置は、システムのユーザと通信するためのディスプレ
イ1012及び入力装置1014を有する。このシステムは、上述したようなコンパイラ
1016を有する。
【図面の簡単な説明】
【図1】スレッド化インタープリタの制御フローグラフを示す図。
【図2】超長命令語プロセッサの一部を示す概略図。
【図3】既知の手法に従って、VLIWプロセッサにより実行されるべきプログ
ラムの一部のレイアウトを示す概略図。
【図4】本発明による多数のプログラム命令に関するインタープリタステッ
プの実行を示す図。
【図5】図4に示すステージをインプリメントするプログラムの一部のレイ
アウトを示す概略図。
【図6】Cインプリメンテーションから翻訳されるインタープリタの制御フ
ローグラフを示す図。
【図7】第1の最適化の後のインタープリタの制御フローグラフを示す図。
【図8】別の最適化の後のインタープリタの制御フローグラフを示す図。
【図9】本発明によるプログラムを実行するためのシステムの実施例を示す
図。
【図10】本発明によるインタープリタを生成するためのシステムの実施例
を示す図。
【符号の説明】
902,1002 プロセッサ 904,1004 メモリ 910,1010 記憶媒体 916 インタプリタ 1016 コンパイラ
───────────────────────────────────────────────────── フロントページの続き (51)Int.Cl.7 識別記号 FI テーマコート゛(参考) G06F 9/44 322A (71)出願人 Groenewoudseweg 1, 5621 BA Eindhoven, Th e Netherlands Fターム(参考) 5B013 AA01 DD00 5B033 BA00 BA03 DB06 5B081 AA06 AA07 CC00 CC21 DD00

Claims (11)

    【特許請求の範囲】
  1. 【請求項1】 それぞれのプログラム命令を実行するために、プログラム命
    令をスレッド化インタープリタにおいて利用できるようにする複数の準備ステッ
    プと、プログラム命令をエミュレートする実行ステップとを含む、一連のプログ
    ラム命令を有するプログラムをインタープリットするスレッド化インタープリタ
    を実行する方法であって、 命令レベル並列プロセッサ上で前記インタープリタを実行する間に、前記一連
    のプログラム命令のそれぞれのものについて、前記準備ステップの第2のものを
    インプリメントする機械語命令と並列に前記準備ステップの第1のものをインプ
    リメントする機械語命令が実行されることを特徴とする方法。
  2. 【請求項2】 前記プログラム命令はメモリに記憶されており、前記準備ス
    テップの第1のものをインプリメントする前記機械語命令は、特定のプログラム
    命令に関して実行され、前記準備ステップの第2のものをインプリメントする前
    記機械語命令は、前記特定のプログラム命令の直ぐあとに続く次のプログラム命
    令に関して実行される、請求項1に記載の方法。
  3. 【請求項3】 前記準備ステップは、前記メモリからプログラム命令をフェ
    ッチするためのフェッチステップと、プログラム命令をデコードするためのデコ
    ードステップと、プログラム命令をエミュレートする1つ又は複数の機械語命令
    のユニットにジャンプするためのジャンプステップとを含み、 特定のプログラム命令に関するジャンプステップをインプリメントする機械語
    命令と、該特定のプログラム命令に関する実行ステップをインプリメントする機
    械語命令とが、該特定のプログラム命令の直ぐあとに続く次のプログラム命令に
    関するデコードステップをインプリメントする機械語命令と、前記次のプログラ
    ム命令の直ぐあとに続くプログラム命令に関するフェッチステップをインプリメ
    ントする機械語命令と並列に実行される、請求項2に記載の方法。
  4. 【請求項4】 前記一連のプログラム命令を有する前記プログラムは、バイ
    トコードで記述される、請求項1に記載の方法。
  5. 【請求項5】 一連のプログラム命令を有するプログラムをインタープリッ
    トするスレッド化インタープリタを実行し、前記一連のプログラム命令を記憶す
    るためのメモリを有するシステムであって、前記スレッド化インタープリタが、
    特定のプログラム命令を該スレッド化インタープリタにおいて利用できるように
    する複数の準備ステップを実行するための準備ユニットと、特定のプログラム命
    令をエミュレートするための実行ユニットとを有する、前記スレッド化インター
    プリタを実行するシステムであって、 前記スレッド化インタープリタは、前記一連のプログラム命令のそれぞれのも
    のについて、前記準備ステップの第2のものをインプリメントする機械語命令と
    並列に命令レベル並列プロセッサにおいて前記準備ステップの第1のものをイン
    プリメントする機械語命令を実行させるように構成されていることを特徴とする
    システム。
  6. 【請求項6】 前記命令レベル並列プロセッサはVLIWプロセッサである、請
    求項5に記載のシステム。
  7. 【請求項7】 一連のプログラム命令を有するプログラムをインタープリッ
    トするスレッド化インタープリタが、特定のプログラム命令を該スレッド化イン
    タープリタにおいて利用できるようにする複数の準備ステップを実行するための
    準備ユニットと、特定のプログラム命令をエミュレートするための実行ユニット
    とを有する、前記スレッド化インタープリタを含むデータ担体であって、 前記スレッド化インタープリタは、前記一連のプログラム命令のそれぞれのも
    のについて、前記準備ステップの第2のものをインプリメントする機械語命令と
    並列に命令レベル並列プロセッサにおいて前記準備ステップの第1のものをイン
    プリメントする機械語命令を実行させるように構成されていることを特徴とする
    、データ担体。
  8. 【請求項8】 インタープリタをソースコードから機械語命令に翻訳するコ
    ンパイラを有し、前記ソースコードのインタープリタは、プログラム命令の1つ
    を該インタープリタにおいて利用できるようにする少なくとも1つの準備ステッ
    プを実行するための準備ユニットと、プログラム命令の1つをエミュレートする
    ためのエミュレーションコードをもつ実行ユニットとを有する、一連のプログラ
    ム命令を有するプログラムをインタープリットする実行可能なインタープリタを
    生成するシステムであって、 前記コンパイラは、スレッド形式の前記実行可能なインタープリタを得るため
    に、前記実行可能なインタープリタにおけるコードの複製により、特定のプログ
    ラム命令について該特定のプログラム命令に関する実行ユニットの機械語命令へ
    の翻訳と、その後に、前記特定のプログラム命令の直ぐあとに続く次のプログラ
    ム命令に関する準備ユニットの機械語命令への翻訳とを含むブロックを生成する
    ように構成されることを特徴とするシステム。
  9. 【請求項9】 前記コンパイラは、繰り返されるイタレーションの中で、命
    令レベル並列プロセッサ上で実行されるように構成されるスレッド化インタープ
    リタを生成するように構成され、また、前記準備ステップの第1のものをインプ
    リメントする機械語命令を直前のイタレーションに移動させることにより、前記
    一連のプログラム命令のそれぞれのものについて、前記準備ステップの第2のも
    のをインプリメントする機械語命令と並列に前記準備ステップの第1のものをイ
    ンプリメントする機械語命令を実行させるように構成される前記スレッド化イン
    タープリタを生成するように構成される、請求項8に記載のシステム。
  10. 【請求項10】 前記コンパイラは、それぞれの前記ブロックについて、前
    記準備ステップの第1のものをインプリメントする前記機械語命令を直前のイタ
    レーションに移動させ、このような移動から生じる特定のブロック内の機械語命
    令の重複したコピーを除去するよう構成されている、請求項9に記載のシステム
  11. 【請求項11】 一連のプログラム命令を有するプログラムをインタープリ
    ットする実行可能なインタープリタを生成するコンパイラを有するデータ担体で
    あって、前記コンパイラは、前記インタープリタをソースコードから実行可能な
    機械語命令に翻訳するように構成され、前記ソースコードのインタープリタは、
    プログラム命令の1つを該インタープリタにおいて利用できるようにする少なく
    とも1つの準備ステップを実行するための準備ユニットと、プログラム命令の1
    つをエミュレートするためのエミュレーションコードをもつ実行ユニットとを含
    む、該データ担体であって、 前記コンパイラは、スレッド形式の前記実行可能なインタープリタを得るため
    に、前記実行可能なインタープリタにおけるコードの複製により、特定のプログ
    ラム命令について該特定のプログラム命令に関する実行ユニットの機械語命令へ
    の翻訳と、その後に、前記特定のプログラム命令の直ぐあとに続く次のプログラ
    ム命令に関する準備ユニットの機械語命令への翻訳とを含むブロックを生成する
    ように構成されていることを特徴とする、データ担体。
JP2000587249A 1998-12-08 1999-11-24 インタープリタプログラム実行方法 Withdrawn JP2002532775A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP98204163 1998-12-08
EP98204163.4 1998-12-08
PCT/EP1999/009184 WO2000034854A2 (en) 1998-12-08 1999-11-24 Method of executing an interpreter program

Publications (1)

Publication Number Publication Date
JP2002532775A true JP2002532775A (ja) 2002-10-02

Family

ID=8234445

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000587249A Withdrawn JP2002532775A (ja) 1998-12-08 1999-11-24 インタープリタプログラム実行方法

Country Status (6)

Country Link
US (2) US6658655B1 (ja)
EP (1) EP1062577A2 (ja)
JP (1) JP2002532775A (ja)
KR (1) KR20010040742A (ja)
TW (1) TW518511B (ja)
WO (1) WO2000034854A2 (ja)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6986128B2 (en) * 2000-01-07 2006-01-10 Sony Computer Entertainment Inc. Multiple stage program recompiler and method
US20030009750A1 (en) * 2001-07-09 2003-01-09 Robert Hundt Optimizing an executable computer program having linkage functions
US7506322B2 (en) * 2001-12-13 2009-03-17 Synopsys, Inc. System and method of utilizing a hardware component to execute an interpretive language
US20040088703A1 (en) * 2002-11-05 2004-05-06 Nedim Fresko Mechanism for implementing an interpreter with hierarchical execution loops
US7103881B2 (en) * 2002-12-10 2006-09-05 Intel Corporation Virtual machine to provide compiled code to processing elements embodied on a processor device
US7210127B1 (en) 2003-04-03 2007-04-24 Sun Microsystems Methods and apparatus for executing instructions in parallel
JP2004318502A (ja) * 2003-04-16 2004-11-11 Matsushita Electric Ind Co Ltd 電力制御機能を備えたマイクロプロセッサ及び命令変換装置
US7600221B1 (en) 2003-10-06 2009-10-06 Sun Microsystems, Inc. Methods and apparatus of an architecture supporting execution of instructions in parallel
US7765539B1 (en) 2004-05-19 2010-07-27 Nintendo Co., Ltd. System and method for trans-compiling video games
EP1828889B1 (en) * 2004-12-13 2010-09-15 Nxp B.V. Compiling method, compiling apparatus and computer system to compile a loop in a program
TWI306215B (en) * 2005-04-29 2009-02-11 Ind Tech Res Inst Method and corresponding apparatus for compiling high-level languages into specific processor architectures
GB2426083A (en) * 2005-05-09 2006-11-15 Sony Comp Entertainment Europe Software emulation of a pipeline processor
KR100678912B1 (ko) * 2005-10-18 2007-02-05 삼성전자주식회사 메소드 바이트코드 해석 방법 및 상기 방법에 의해동작하는 시스템
KR100806274B1 (ko) 2005-12-06 2008-02-22 한국전자통신연구원 멀티 쓰레디드 프로세서 기반의 병렬 시스템을 위한 적응형실행 방법
JP2008269529A (ja) * 2007-04-25 2008-11-06 Toshiba Corp デバッグ支援装置
US8046750B2 (en) * 2007-06-13 2011-10-25 Microsoft Corporation Disco: a simplified distributed computing library
JP5256685B2 (ja) * 2007-10-18 2013-08-07 日本電気株式会社 情報処理装置
US7971032B2 (en) * 2007-11-14 2011-06-28 Vns Portfolio Llc System for native code execution
EP2573403B1 (en) * 2011-09-20 2017-12-06 Grundfos Holding A/S Pump
CN112632095B (zh) * 2020-12-31 2024-08-06 中国农业银行股份有限公司 一种更新解释器和线程池单元的对应关系的方法和装置

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4493027A (en) * 1981-05-22 1985-01-08 Data General Corporation Method of performing a call operation in a digital data processing system having microcode call and return operations
US5179734A (en) * 1984-03-02 1993-01-12 Texas Instruments Incorporated Threaded interpretive data processor
JPH0475139A (ja) * 1990-07-18 1992-03-10 Toshiba Corp ループ並列化装置
JP2834292B2 (ja) * 1990-08-15 1998-12-09 株式会社日立製作所 データ・プロセッサ
US5299321A (en) * 1990-12-18 1994-03-29 Oki Electric Industry Co., Ltd. Parallel processing device to operate with parallel execute instructions
US5774727A (en) * 1991-06-27 1998-06-30 Digital Equipment Corporation Parallel processing system for virtual processor implementation of machine-language instructions
US5430850A (en) * 1991-07-22 1995-07-04 Massachusetts Institute Of Technology Data processing system with synchronization coprocessor for multiple threads
US5410681A (en) * 1991-11-20 1995-04-25 Apple Computer, Inc. Interpreter for performing remote testing of computer systems
IL100598A0 (en) * 1992-01-06 1992-09-06 Univ Bar Ilan Dataflow computer
US5404469A (en) * 1992-02-25 1995-04-04 Industrial Technology Research Institute Multi-threaded microprocessor architecture utilizing static interleaving
US5712996A (en) * 1993-03-15 1998-01-27 Siemens Aktiengesellschaft Process for dividing instructions of a computer program into instruction groups for parallel processing
US5721854A (en) * 1993-11-02 1998-02-24 International Business Machines Corporation Method and apparatus for dynamic conversion of computer instructions
US5859991A (en) * 1995-06-07 1999-01-12 Advanced Micro Devices, Inc. Parallel and scalable method for identifying valid instructions and a superscalar microprocessor including an instruction scanning unit employing the method
WO1997027537A2 (en) * 1996-01-24 1997-07-31 Sun Microsystems, Inc. A processor for executing instruction sets received from a network or from a local memory
US6031992A (en) * 1996-07-05 2000-02-29 Transmeta Corporation Combining hardware and software to provide an improved microprocessor
US5889996A (en) * 1996-12-16 1999-03-30 Novell Inc. Accelerator for interpretive environments
US5872990A (en) * 1997-01-07 1999-02-16 International Business Machines Corporation Reordering of memory reference operations and conflict resolution via rollback in a multiprocessing environment
US6139199A (en) * 1997-06-11 2000-10-31 Sun Microsystems, Inc. Fast just-in-time (JIT) scheduler
US6021273A (en) * 1997-06-30 2000-02-01 Sun Microsystems, Inc. Interpreter generation and implementation utilizing interpreter states and register caching
US6163836A (en) * 1997-08-01 2000-12-19 Micron Technology, Inc. Processor with programmable addressing modes
US6085315A (en) * 1997-09-12 2000-07-04 Siemens Aktiengesellschaft Data processing device with loop pipeline
EP0950216B1 (en) * 1997-10-02 2003-11-26 Koninklijke Philips Electronics N.V. A processing device for executing virtual machine instructions
JP3377419B2 (ja) * 1997-11-11 2003-02-17 インターナショナル・ビジネス・マシーンズ・コーポレーション 命令列生成方法及び装置、変換方法、及びコンピュータ
US6549930B1 (en) * 1997-11-26 2003-04-15 Compaq Computer Corporation Method for scheduling threads in a multithreaded processor
US6324639B1 (en) * 1998-03-30 2001-11-27 Matsushita Electric Industrial Co., Ltd. Instruction converting apparatus using parallel execution code
US6427234B1 (en) * 1998-06-11 2002-07-30 University Of Washington System and method for performing selective dynamic compilation using run-time information
US6256784B1 (en) * 1998-08-14 2001-07-03 Ati International Srl Interpreter with reduced memory access and improved jump-through-register handling
US6205578B1 (en) * 1998-08-14 2001-03-20 Ati International Srl Interpreter for stack-based languages
US7111290B1 (en) * 1999-01-28 2006-09-19 Ati International Srl Profiling program execution to identify frequently-executed portions and to assist binary translation
US6826748B1 (en) * 1999-01-28 2004-11-30 Ati International Srl Profiling program execution into registers of a computer
US6446192B1 (en) * 1999-06-04 2002-09-03 Embrace Networks, Inc. Remote monitoring and control of equipment over computer networks using a single web interfacing chip
US6629312B1 (en) * 1999-08-20 2003-09-30 Hewlett-Packard Development Company, L.P. Programmatic synthesis of a machine description for retargeting a compiler

Also Published As

Publication number Publication date
KR20010040742A (ko) 2001-05-15
WO2000034854A2 (en) 2000-06-15
EP1062577A2 (en) 2000-12-27
US20030149964A1 (en) 2003-08-07
US6658655B1 (en) 2003-12-02
US7194734B2 (en) 2007-03-20
TW518511B (en) 2003-01-21
WO2000034854A3 (en) 2000-10-19

Similar Documents

Publication Publication Date Title
US6658655B1 (en) Method of executing an interpreter program
JP4640683B2 (ja) プログラムコード変換方法
US5692169A (en) Method and system for deferring exceptions generated during speculative execution
US7458069B2 (en) System and method for fusing instructions
US5778219A (en) Method and system for propagating exception status in data registers and for detecting exceptions from speculative operations with non-speculative operations
US8578351B2 (en) Hybrid mechanism for more efficient emulation and method therefor
US6138273A (en) Programmable interpretive virtual machine
JP2000066898A (ja) コンピュ―タ命令の実行をスケジュ―ルする方法
JP2000112758A (ja) 投機的実行中に発生する例外を遅延させるシステム及び方法
EP2951682B1 (en) Hardware and software solutions to divergent branches in a parallel pipeline
JP2001290658A (ja) マッピング回路及び方法
US6115811A (en) Digital data process system including efficient arrangement to support branching within trap shadows
EP0982655A2 (en) Data processing unit and method for executing instructions of variable lengths
Fog Optimizing software in C++
US6691307B2 (en) Interpreter optimization for native endianness
US5854928A (en) Use of run-time code generation to create speculation recovery code in a computer system
EP0924603A2 (en) Compiler controlled dynamic scheduling of program instructions
Huang et al. ASIA: Automatic synthesis of instruction-set architectures
US20070074186A1 (en) Method and system for performing reassociation in software loops
Shipnes et al. A modular approach to Motorola PowerPC compilers.
JPH02110636A (ja) タグ・アーキテクチャマシンのデバッグ装置とそのコンパイラ
Hwang et al. SEJA: Simple Scalar Extensions for Java Applications
JPH11272465A (ja) パイプライン制御型計算機

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061122

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20090203

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20090317