JP3595158B2 - 命令割り当て方法及び命令割り当て装置 - Google Patents

命令割り当て方法及び命令割り当て装置 Download PDF

Info

Publication number
JP3595158B2
JP3595158B2 JP6332298A JP6332298A JP3595158B2 JP 3595158 B2 JP3595158 B2 JP 3595158B2 JP 6332298 A JP6332298 A JP 6332298A JP 6332298 A JP6332298 A JP 6332298A JP 3595158 B2 JP3595158 B2 JP 3595158B2
Authority
JP
Japan
Prior art keywords
instruction
operation mode
executed
value
cpu
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
JP6332298A
Other languages
English (en)
Other versions
JPH11259297A (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.)
Toshiba Corp
Original Assignee
Toshiba 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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP6332298A priority Critical patent/JP3595158B2/ja
Priority to US09/266,872 priority patent/US6367076B1/en
Publication of JPH11259297A publication Critical patent/JPH11259297A/ja
Application granted granted Critical
Publication of JP3595158B2 publication Critical patent/JP3595158B2/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/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards

Landscapes

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

Description

【0001】
【発明の属する技術分野】
本発明は、プレディケート実行をサポートするCPUに対する命令スケジューリングを行う命令割り当て方法及び命令割り当て装置に関する。
【0002】
【従来の技術】
電子計算機において実行されるプログラムは条件分岐命令を含んでいる。条件分岐命令とは、ある条件が成立するか否かで次に実行する命令番地が異なる命令である。通常、条件分岐命令においては、条件が成立した状態を、「分岐が起こる(taken)」と呼ぶ。このとき、条件分岐命令の次に実行される命令は該条件分岐命令に相続く番地にある命令ではなく、該条件分岐命令のオペランドにより指定された番地の命令である。一方、条件が成立しない状態を、「分岐が起こらない」と呼ぶ。このとき、条件分岐命令の次に実行される命令は該条件分岐命令に相続く番地にある命令である。
【0003】
パイプライン処理を行なうCPUにおいては、命令は実行される数クロック前にメモリまたはキャッシュからCPUにフェッチされる。このため、条件分岐命令の条件が成立するか否かを判別してから条件分岐命令の次に実行される命令をフェッチするのでは、条件分岐命令の次のサイクルで次の命令を実行することができず、何も実行できないサイクルが入ることになる。これはパイプライン・ハザードと呼ばれるが、高速実行を損なう一因となる。
【0004】
これを回避する方法の一つとして、プレディケート実行が提案されている(参考文献1;Scott Mahlke, A Comparison of Full and Partial Predicated ExecutionSupport for ILP Processors,Proc. ofISCA´95,pp.138−149.)。
【0005】
プレディケート実行をサポートするCPUは、次の二点で通常のCPUと異なる。
・CPUが管理するプレディケート・モードがあり、このモードを設定する命令がサポートされている。
・命令コードの中にはプレディケート・フィールドがある。このフィールドの値とCPUが管理するプレディケート・モードが一致するときのみ該命令は実行される。
【0006】
これを利用すると、通常のCPUでの条件分岐命令および条件の成立の如何により実行される命令は次のように変更することができる。
・条件分岐命令を動作モード設定命令に変更する。この命令は、条件が成立するならCPUのモードをaに、条件が不成立ならCPUのモードをbに設定する。
・分岐が起こったときに実行される一連の命令Aはプレディケート・フィールドの値をaに、分岐が起こらないときに実行される一連の命令Bはプレディケート・フィールドの値をbに指定しておき、動作モード設定命令の後に配置する。プレディケート・フィールドがaの命令とbの命令は混在して良い。
ここで、a、bは何らかの数値として実現される。このようにすると条件分岐命令がなくなるので、パイプライン・ハザードをなくすことができる。
【0007】
プレディケート実行は、特にVLIW構成のCPUにおいてより大きな効果が期待できる。VLIWはCPU内に複数の並行に動作する演算器を持つアーキテクチャである(参考文献2;Ellis,J.R.,Bulldog: A Compiler for VLIW Architectures,The MIT Press.)。VLIWにおいては同時に複数の命令を実行する能力を持つため、多くの演算器に命令を割り当てることができれば、プログラムを高速に実行できる。プレディケート実行では、先に述べたAとBの双方から命令を配置することができるため、演算器が命令で埋まり易い。従って、特にVLIWにおいてプレディケート実行は有望な高速化の手段である。
【0008】
しかしどの程度の効果が上がるかは、AとBを構成する命令をどのように演算器に割り当てるかに依存する。より高速性を発揮するための命令割り当て方法の確立が課題である。
【0009】
【発明が解決しようとする課題】
以上述べたように、プレディケート実行においては条件分岐を行なわないためパイプライン・ハザードがおこらず、プログラムをより高速に実行する可能性がある。しかしながら、より高速性を発揮させることのできる命令割り当て方法がなかった。
【0010】
本発明は、上記事情を考慮してなされたもので、プレディケート実行を行なうCPUでプログラムを高速に実行するための命令割り当て方法及び命令割り当て装置を提供することを目的とする。
【0011】
【課題を解決するための手段】
本発明(請求項1)は、命令コードに動作モードを示すフィールドを持ち、該命令コードの該フィールドの値とCPUが管理するレジスタの特定フィールドの値とが一定の関係にあるときのみ該命令を実行する機能を持つCPUに対し、各サイクルで実行される命令の割り当てを行なう命令割り当て方法であって、動作モードを設定する命令を割り当てるステップと、命令コードのフィールドの値が一致する一連の命令列の最後の命令同士の実行されるサイクルを比較するステップと、命令コードのフィールドの値が一致する一連の命令列の最後の命令の実行サイクルが他よりも早い場合に、該命令コードと同じフィールド値を持つ分岐命令を該命令と同じサイクルまたは後のサイクルで実行するように割り当てるステップとを有することを特徴とする。
【0012】
好ましくは、動作モードのうち実行頻度の高い値を判別するステップをさらに有し、実行頻度が高いと判別された動作モードに対応する命令を早いサイクルに優先的に割当てるようにしてもよい。
【0013】
本発明(請求項3)は、命令コードに動作モードを示すフィールドを持ち、該命令コードの該フィールドの値とCPUが管理するレジスタの特定フィールドの値が一定の関係にあるときのみ該命令を実行する機能を持つCPUに対し、各サイクルで実行される命令の割り当てを行なう命令割り当て方法であって、動作モードを設定する命令を割り当てるステップと、ある動作モードのときのみ実行される命令が動作モード設定命令よりも前で実行されるように割り当て可能かを判別するステップと、割り当て可能と判別された前記命令を動作モードに依らず実行される命令として割り当てるステップとを有することを特徴とする。
【0014】
本発明(請求項4)は、命令コードに動作モードを示すフィールドを持ち、該命令コードの該フィールドの値とCPUが管理するレジスタの特定フィールドの値が一定の関係にあるときのみ該命令を実行する機能を持つCPUに対し、各サイクルで実行される命令の割り当てを行なう命令割り当て方法であって、動作モードを設定する命令を割り当てるステップと、命令コードのフィールドの値が一致する一連の命令列同士を比較するステップと、前記比較の結果、同等の命令がある場合には該命令を動作モードにかかわらず実行される命令に変換するステップとを有することを特徴とする。
【0015】
本発明(請求項5)は、命令コードに動作モードを示すフィールドを持ち、該命令コードの該フィールドの値とCPUが管理するレジスタの特定フィールドの値が一定の関係にあるときのみ該命令を実行する機能を持つCPUに対し、各サイクルで実行される命令の割り当てを行なう命令割り当て行方法であって、特定の動作モードでのみ実行される命令を生成するよりも、動作モードによらずに動作する命令を生成した方が実行速度が大きい場合には、動作モードによらずに動作する命令を生成することを特徴とする。
【0016】
本発明(請求項6)は、命令コードに動作モードを示すフィールドを持ち、該命令コードの該フィールドの値とCPUが管理するレジスタの特定フィールドの値が一定の関係にあるときのみ該命令を実行する機能を持つCPUに対し、各サイクルで実行される命令の割り当てを行なう命令割り当て方法であって、動作モードを設定する命令を割り当てるステップと、動作モードのうち実行頻度の高い値を判別するステップとを有し、実行頻度が高いと判別された動作モードに対応する命令は分岐なしに実行されるように割り当てるとともに、必要に応じて他の動作モードに対応する命令は、前記実行頻度が高いと判別された動作モードに対応する命令とは別のサイクルで実行されるように割り当てることを特徴とする。
【0017】
好ましくは、動作モードに依存する実行をする必要がなくなっても、動作モードを戻す命令を割り当てないようにしてもよい。
【0018】
好ましくは、前記CPUは、並行に実行できる演算器を複数持つものである。
【0019】
本発明(請求項9)は、命令コードに動作モードを示すフィールドを持ち、該命令コードの該フィールドの値とCPUが管理するレジスタの特定フィールドの値とが一定の関係にあるときのみ該命令を実行する機能を持つCPUに対し、各サイクルで実行される命令の割り当てを行なう命令割り当て装置であって、動作モードを設定する命令を割り当てる手段と、命令コードのフィールドの値が一致する一連の命令列の最後の命令同士の実行されるサイクルを比較する手段と、命令コードのフィールドの値が一致する一連の命令列の最後の命令の実行サイクルが他よりも早い場合に、該命令コードと同じフィールド値を持つ分岐命令を該命令と同じサイクルまたは後のサイクルで実行するように割り当てる手段とを備えたことを特徴とする。
【0020】
なお、装置に係る本発明は方法に係る発明としても成立し、方法に係る本発明は装置に係る発明としても成立する。
【0021】
また、装置または方法に係る本発明は、コンピュータに当該発明に相当する手順を実行させるための(あるいはコンピュータを当該発明に相当する手段として機能させるための、あるいはコンピュータに当該発明に相当する機能を実現させるための)プログラムを記録したコンピュータ読取り可能な記録媒体としても成立する。
【0022】
本発明によれば、プレディケート実行を行なうCPUでプログラムを高速に実行させることができる。すなわち、高速実行可能なプログラムを生成することができる。
【0023】
【発明の実施の形態】
以下、図面を参照しながら発明の実施の形態を説明する。
【0024】
図1に、本発明の第1の実施形態に係るコンパイラの構成例を示す。
【0025】
図1に示すように、本コンパイラ30は、高級言語で記述されたソースプログラム(10)を入力し、命令割り当てを行い、対象とするCPUもしくは計算機で実行可能なオブジェクト・プログラム(20)に変換する。
【0026】
本コンパイラ30は、字句解析部31、構文解析部32、フロー解析部34、データ依存解析部35、命令割り当て部36、レジスタ割り当て部37を有する。
【0027】
本コンパイラ30は、ソフトウェアで実現可能であり、この場合、上記の各ブロックは、ソフトウェアの各モジュールに相当する。
【0028】
字句解析部31は、入力されたソースプログラムを形成する文字列を解析し、語句に分割する。
【0029】
構文解析部32は、上記解析により得た語句を文法に照合して正しいか否かを判別し、誤りがあればこれを通知し実行を止める。正しければ、その解析結果を中間コード(33)として生成する。生成された中間コードは、主記憶やディスク等の記憶装置に格納される。
【0030】
中間コード(33)は、通常はコンパイラ内部で管理され、外部からは見えない。
【0031】
フロー解析部34は、中間コードが生成されると、これをもとにプログラムの流れの解析を行なう。
【0032】
データ依存解析部35は、プログラムの流れの解析が行われると、さらに、中間コードを構成する各単位のデータ依存解析を行ない、どの順番に割当を行なわなければならないかの制約を明らかにする。
【0033】
命令割り当て部36は、詳しくは後述するが、動作モード設定命令を生成する動作モード設定命令生成部361と、実行される動作モード毎の命令列を作りその最後の命令のサイクルを比較する命令比較部362と、この比較結果をもとに分岐命令を生成する分岐命令生成部363から構成される。
【0034】
レジスタ割り当て部37は、仮に割り当てられていたレジスタを、対象となるCPUの持つ真のレジスタに割り当て直す、レジスタ割り当てを行う。
【0035】
図2に、割り当てを行なう命令のフォーマットの一例を示す。
【0036】
図2に示されるように、この命令は、「opcode」、「operand1」、「operand2」、「operand3」、「プレディケート・フィールド」からなる。
【0037】
opcodeは、命令の種類を表すコードである。数ビットが割り当てられ、その値により命令の種類が定まる。
【0038】
operand1、operand2、operand3は、それぞれ第1のオペランド、第2のオペランド、第3のオペランドである。これらはレジスタの番号や即値を示す。オペランドは全てのopcodeに対して第1〜第3まであるとは限らず、opcodeの値によりオペランドの個数が定まる。また、それぞれのオペランドがレジスタであるか即値であるかもopcodeの値により定まる。また、それぞれのオペランドの占めるビット数もopcodeの値により定まる。
【0039】
プレディケート・フィールドは、該命令が実行されるべき動作モードを示すフィールドである。数ビットからなり、全てが0のときは動作モードに関わらず実行される。0でないビットがあるときは、そのフィールドの値とCPUが管理する動作モードレジスタの値とが一致するときのみ該命令は実行される。
【0040】
図3に、命令割り当ての対象とするCPUの構成例を示す。このCPUは、プレディケート実行を行なうものである。
【0041】
図3中、200はCPU、201は命令解析器、202は分岐器(Branch)、203は第1の整数演算器(ALU1)、204は第2の整数演算器(ALU2)、205は第1のメモリアクセス器(MEM1)、206は第2のメモリアクセス器(MEM2)、207はレジスタ(群)、208は動作モードレジスタ、209はプログラムカウンタ(PC)、210は命令キャッシュ、211はデータキャッシュである。また、300は主記憶である。
【0042】
オブジェクト・プログラムは主記憶300にロードされ、CPU200がこのオブジェクト・プログラムを実行する。
【0043】
さて、このCPU200は、VLIW構成である。すなわち、1つの分岐器202と2つの整数演算器203,204と2つのメモリアクセス器205,206を持ち、これらは同時に動作可能である。
【0044】
CPU200は、プログラムカウンタ209が示す番地の命令をキャッシュ210からフェッチする。キャッシュ210になければ主記憶300からキャッシュ210に転送される。キャッシュ210から命令解析器201に各サイクルで同時に4命令が発行される。つまり、5つの演算器(202〜206)を持つが同時に発行できる命令は4命令である。命令解析器201は、4命令の各々をデコードし、opcodeを知ることにより各々をどの演算器(202〜206)で実行するかを決定する。命令のプレディケート・フィールドが0でない場合は、動作モードレジスタ208を読みこの値と一致した命令のみ実行する。
【0045】
次に、図4〜図6を参照しながら、図3に例示したようなプレディケート実行をサポートするCPUに対する命令割り当てを、プレディケート実行をサポートしないCPUに対する命令割り当てとの比較を通じて説明する。
【0046】
図4に、条件分岐を含む簡単なソースプログラムの例を示す。このプログラムは、B1で示される条件が成立しているか否かを調べ、条件が成立していればB2を、不成立ならB3を実行する、というものである。
【0047】
図5に、従来の命令割り当て方法を適用して命令を生成した例を示す。まず、B1に対応する命令列が、次にB2に対応する命令列が、次にB3に対応する命令列が生成される。また、B1の最後で条件分岐命令が生成されるが、ソースプログラムでの条件と、生成した命令レベルでの条件とは判定が逆となる。条件が成立すればL2に飛びB3に対応する命令列が実行され、不成立なら分岐は起こらずB2に対応する命令列が実行される。なお、B2の最後に、B3をスキップするための無条件分岐命令が生成される。
【0048】
図6に、本実施形態に係る命令割り当て方法を適用して命令を生成した例を示す。
【0049】
まず、B1に対応する命令列が生成されるが、図5の例とは異なりB1の最後で条件分岐命令を生成せず、その代わりに動作モード設定命令を生成する。これは条件の判定結果に応じた動作モードを動作モードレジスタ(図3の208)に設定するための命令である。ソースプログラムのB1に対応する条件が成立するなら動作モードb2を、不成立なら動作モードb3を設定する。b2、b3はそれぞれ命令のプレディケート・フィールドに等しいビット数を持つ0でない値であり、b2とb3の値は相異なる。
【0050】
次に、B2、B3に対応する命令列を生成する。図5の例とは異なり、B2、B3に対応する命令は混在して構わない。B2に対応する命令はプレディケート・フィールドの欄にb2を、B3に対応する命令はプレディケート・フィールドの欄にb3を記載する。
【0051】
前述したように、CPUでは、命令のプレディケート・フィールドが0でない場合は、動作モードレジスタを読みこの値と一致した命令のみ実行するので、条件が成立したら動作モードレジスタがb2に設定され、プレディケート・フィールドにb2を持つB2に対応する命令が実行され、一方、不成立なら動作モードレジスタがb3に設定され、プレディケート・フィールドにb3を持つB3に対応する命令が実行されることになる。
【0052】
以下では、本実施形態についてさらに詳しく説明する。
【0053】
図7に、より詳しいソースプログラムの例を示す。このプログラムは、条件i<jが成立すればkに配列a[i]の値を代入し、不成立ならkに−1を代入する、というものである。なお、図4のB1が図7の(5−4)行目に、B2が(5−6)行目に、B3が(5−8)行目に相当する。
【0054】
ソースプログラムが入力されると、字句解析部31および構文解析部32の働きにより、中間コードが生成される。
【0055】
図8に、図7のソースプログラムをもとに本実施形態に係るコンパイラにおいて生成される中間コードの例を示す。
【0056】
中間コードを形成する各々をノードと呼ぶ。図7のソースプログラムの行番号(5−x)と中間コードのノード(6−y)との対応は次のようになる(矢印の左側のものが矢印の右側のものに対応する)。
(5−1) → (6−2)
(5−2) → (6−3) (6−4) (6−5)
(5−4) → (6−7) (6−8) (6−9) (6−10)
(5−5) → (6−11)
(5−6) → (6−12) (6−13) (6−14) (6−15) (6−16)
(5−7) → (6−17)
(5−8) → (6−18) (6−19)
図8のノードのうち、図7の行番号と対応のとれないノードについて説明する。図8のノード(6−1)はブロック0(B0)が開始されることを示すノードである。ブロックは後続のフロー解析で使用される。(6−6)はブロック0(B0)が終了することを示すノードである。(6−20)は図7の行番号(5−8)までが終了した後に続くブロックである。
【0057】
次に、中間コードが生成されると、フロー解析部34は中間コードを基にブロックの流れを解析する。
【0058】
図9に、図8の中間コードに対するフロー解析部34による解析結果例を示す。図9に示すように、この中間コードのフローは、B0から始まりB1が続き、B2とB3に分岐し、B4に併合されることがわかる。
【0059】
続いて、データ依存解析部35は、データの依存関係を解析して、中間コードのノード間の前後関係を明らかにする。このデータ依存解析では実際に命令生成に対応するノードのみが対象となる。
【0060】
本実施形態では、命令割り当て部36は同一ブロック内の命令は同一ブロック内に配置するとの方針で割り当てる。従って、データ依存関係部35は各ブロック内でのみ依存関係の解析を行なう。
【0061】
図10に、図8の中間コードに対するデータ依存解析部35による解析結果例を示す。解析結果におけるA→BはAがBよりも先に実行されなければならないことを示す。例えば、図10の場合、(6−8)が(6−9)よりも先に実行されなければならないことが示される。
【0062】
次に、命令割り当て部36による命令割り当て処理の手順について説明する。
【0063】
図11に、本実施形態に係る命令割り当て処理のアルゴリズムの一例を示す。
【0064】
また、図12に、図8に例示した中間コードに対して図11に示すアルゴリズムを適用して生成されたコードの例を示す。図12の例では、横に並んだ4命令(例えば先頭行のcmpと3つのnop)が同時に命令キャッシュ210からフェッチされ命令解析器201により5つの演算器(202〜206)のいずれかに割り当てられる。その各々のサイクルを(10−1)〜(10−5)がそれぞれ表している。
【0065】
さて、図11の手順では、まず、未解析の中間ノードが残っている限り次の中間ノードを読み、読み込んだ中間ノードが条件分岐ノードであるかどうかを確かめる(ステップS9−1,S9−2)。
【0066】
条件分岐でない部分については従来と同様の方法で命令生成をすればよい(ステップS9−3,S9−4)。例えば先に挙げた参考文献2で示される方法により命令を生成すれば良い。
【0067】
読み込んだ中間ノードが条件分岐(図8では(6−9))である場合、動作モード設定命令を生成する(ステップS9−5)。
【0068】
図12では、(10−2)の「set gt,1,2」がこの動作モード設定命令に相当する。setは、opcodeを示すニーモニックで、動作モードレジスタに値を設定する命令である。gtとは、greater thanの略である。本命令は、実行時点での条件として、greater thanが成立していれば動作モードレジスタに1を、不成立なら動作モードレジスタに2を設定する。
【0069】
動作モードレジスタに1が設定された場合、その値が変更されない限りプレディケート・フィールドが1である命令か0である命令しか実行されない。一方、動作モードレジスタに2が設定された場合、その値が変更されない限りプレディケート・フィールドが2である命令か0である命令しか実行されない。なお、プレディケート・フィールドが0である命令は、動作モードレジスタの値によらず常に実行されるものとする。
【0070】
次に、ステップS9−6にて、フロー解析の結果に基づき条件分岐により到達し得るブロックBを求める。それらの集合をBI={Bi1,Bi2,…}とする。
【0071】
図9の例を参照すると、この場合、BI={B2,B3}と判明する。
【0072】
次に、ステップS9−7にて、図10に例示するようなデータ依存関係を保つように各サイクル毎の各演算器(図3では202〜206)への命令の割り当てを行なう。なお、BIに属する各ブロック毎の実行頻度等のデータがあれば、これに基づき、頻度の多いブロックのノードに対する命令を早いサイクルに優先的に割り当てるようにすると好ましい。
【0073】
BIに含まれるブロックの全ての中間コードが無くなるまで順次割り当てを繰り返す。
【0074】
図12ではB3の命令を優先的に割り当てた例を示している。すなわち、最初のサイクルである(10−3)で「ldi(2) Rt3,−1」を割り当てている。このldiに続く(2)はプレディケート・フィールドの値が2であることを示している。
【0075】
なお、ここでは、B2に含まれる命令はプレディケート・フィールドを1に、B3に含まれる命令はプレディケート・フィールドを2にして生成するものとしている。
【0076】
次に、ステップS9−8にて、BIに属する各ブロックの最後の命令が割り当てられたサイクルを求める。これらを比較し最終サイクルでないものを求める。
【0077】
図12の場合、各ブロックの最後の命令が割り当てられたサイクルは(10−3)と(10−5)であり、したがって最終サイクルでないもの(10−3)となる。
【0078】
次に、ステップS9−9にて、最終サイクルでないものについてはその動作モードで実行される無条件分岐命令を生成して割り当てる。これは、BIの全て命令が動作を終了するまで空のサイクルを回すのでは高速化できないからである。
【0079】
図12では、プレディケート・フィールドが2である命令は(10−3)で終了するが、1である命令は(10−5)で終了する。動作モードが2のときに(10−4)、(10−5)を実行すると2サイクル無駄となる。このため(10−3)でb(2)L3を実行する。これは動作モードが2のときだけ実行される無条件分岐命令である。これにより動作モードが2のときに1サイクル高速化される。
【0080】
本実施形態では、同サイクルでは分岐命令は1つしか実行できないため、もし(10−3)に分岐命令があればそれより後で分岐命令のないできるだけ早いサイクルを探す。見つかったサイクルがBIに属する最後の命令よりも前のサイクルであれば、そこに動作モード2で実行される無条件分岐命令を生成して割り当てればよい。
【0081】
以上によって、図12に例示したようなコードが生成される。なお、この時点では、仮のレジスタが割り当てられた状態になっている。
【0082】
さて、命令割り当て部36による命令割り当てが終わると、続いてレジスタ割り当て部37によるレジスタ割り当てを行う。
【0083】
図13に、図12に示すプログラムに対して、レジスタ割り当て部37によるレジスタ割り当てを適用した結果得られるプログラムの例を示す。
【0084】
図12では仮のレジスタとして割り当てられていたRp1,Rp2,Rt1,Rt2,Rt3が、図13ではCPUが所有する真のレジスタRi,Rj,R1,R2,R3に割り当て直されている。
【0085】
なお、このレジスタ割り当てにおいて、レジスタが不足する場合には、再度命令割り当て部36に制御を戻し、命令の一部をレジスタを使用しないように変更して命令割り当てをし直し、そして再度レジスタ割り当てを行う。
【0086】
以上のようにして、プレディケート実行をサポートするCPUに対するオブジェクト・プログラムが生成される。
【0087】
ここで、生成されたプログラムで実行に必要なサイクル数を計算すると次のようになる。通常、パイプライン制御を行なうCPUでは無条件分岐や条件分岐で分岐が起こると1サイクル実行が遅延され、条件分岐で分岐が起こらないときは遅延されない。図13に例示するプログラムについてみてみると、B2が実行される場合は、(11−1)(11−2)(11−3)(11−4)(11−5)の各サイクルがそれぞれ1クロックで実行され、計5クロックで実行可能となる。一方、B3が実行される場合は、(11−1)(11−2)(11−3)の各サイクルがそれぞれ1クロックで実行され、(11−3)の分岐の遅延1クロックと併せて、計4クロックで実行可能となる。
【0088】
次に、本発明の第2の実施形態について説明する。
【0089】
本実施形態は、第1の実施形態の処理手順に後述する手順を追加したもので、この追加部分以外は第1の実施形態と同様である。以下では、第1の実施形態と相違する点を中心に、また、第1の実施形態との比較を交えながら、本実施形態について説明する。
【0090】
本実施形態は、第1の実施形態において、ある動作モードのときのみ実行される命令が動作モード設定命令よりも前で実行されるように割り当て可能かを判別し、割り当て可能と判別されたときに該命令を動作モードに依らず実行される命令として割り当てるようにしたものである。
【0091】
本実施形態では、この処理は、命令割り当て部36またはレジスタ割り当て部37にて実行される。
【0092】
図14に、図7に例示するソースプログラムに対して命令割り当てを行って得られたコード(図12)をもとにレジスタ割り当て部37が生成したプログラムの例を示す。第1の実施形態におけるレジスタ割り当て部37が生成したプログラムを例示した図13との差異は、図14ではldi,lduiの2命令がL1の後からL1の前に移動し、プレディケート・フィールドが0になっていることである。
【0093】
すなわち、R1は一時レジスタであり、もしB2が実行されずB3が実行されるとしても先行実行して構わないため、ldi,lduiの2命令をL1の前に移動する。また、先行実行される命令は動作モードが設定される前であるので、プレディケート・フィールドを0する。
【0094】
これにより、B2が実行される場合は4クロックと、第1の実施形態に比較して1クロック高速化される。ただし、B3が実行される場合はクロック数に増減はない。
【0095】
次に、本発明の第3の実施形態について説明する。
【0096】
本実施形態は、第1の実施形態の処理手順に後述する手順を追加したもので、この追加部分以外は第1の実施形態と同様である。以下では、第1の実施形態と相違する点を中心に、また、第1の実施形態との比較を交えながら、本実施形態について説明する。
【0097】
本実施形態は、第1の実施形態において、命令コードのフィールドの値が一致する一連の命令列同士を比較し、比較の結果、同等の命令がある場合に該命令を動作モードにかかわらず実行される命令に変換するようにしたものである。
【0098】
本実施形態では、この処理は、命令割り当て部36またはレジスタ割り当て部37にて実行される。
【0099】
図15に、ソースプログラムの例を示す。図7のソースプログラムと比べて(5−8)と(13−8)が異なる。すなわち、このプログラムは、条件i<jが成立すればkに正数配列a[i]の値を代入し、不成立なら正数配列a[j]の値を代入する、というものである。
【0100】
図16に、第1の実施形態の処理手順を適用し、B3優先による命令割り当てとレジスタ割り当てを行なって得られたオブジェクト・プログラムの例を示す。B2が実行される場合、(14−1)から(14−7)まで7クロックかかり、B3が実行される場合、(14−1)から(14−5)までと分岐の遅延1クロックで6クロックかかる。
【0101】
図17に、本実施形態に係る処理手順を適用し、B3優先による命令割り当てとレジスタ割り当てを行なって得られたオブジェクト・プログラムの例を示す。本例では、ldi,ldui,ldの3つの命令はいずれもB2とB3において共通する命令であるので、このような命令を動作モード0で実行する命令とすることにより共通化して命令数を減らす。これにより、B2とB3のいずれが実行される場合でも、(15−1)から(15−5)まで5クロックで実行が完了する。
【0102】
次に、本発明の第4の実施形態について説明する。
【0103】
本実施形態は、第1の実施形態の処理手順に後述する手順を追加したもので、この追加部分以外は第1の実施形態と同様である。以下では、第1の実施形態と相違する点を中心に、また、第1の実施形態との比較を交えながら、本実施形態について説明する。
【0104】
本実施形態は、第1の実施形態において、特定の動作モードでのみ実行される命令を生成するよりも、動作モードによらずに動作する命令を生成した方が実行速度が大きい場合には、動作モードによらずに動作する命令を生成するようにしたものである。
【0105】
本実施形態では、この処理は、命令割り当て部36にて実行される。
【0106】
図18に、ソースプログラムの例を示す。図7と比べて(5−8)と(16−8)が異なる。すなわち、このプログラムは、条件i<jが成立すればkに配列a[i]の値を代入し、不成立なら配列b[j]の値を代入する、というものである。
【0107】
図19に、第1の実施形態の処理手順を適用し、B3優先による命令割り当てとレジスタ割り当てを行なって得られたオブジェクト・プログラムの例を示す。B2が実行される場合、(17−1)から(17−7)まで7クロックかかり、B3が実行される場合、(17−1)から(17−5)までと分岐の遅延1クロックで6クロックかかる。
【0108】
図20に、プレディケート実行を行なわない命令割り当てとレジスタ割り当てを行なって得られたオブジェクト・プログラムの例を示す。B2が実行される場合、(18−1)から(18−5)までと(18−5)の分岐の遅延で6クロックかかり、B3が実行される場合、(18−1)、(18−2)と(18−6)から(18−8)までと(18−2)の分岐の遅延1クロックで計6クロックかかる。つまり、第1の実施形態の処理手順を適用するとB3では同じクロック数がかかり、B2では1クロック余計にかかる。
【0109】
このように、演算器数や共に実行できる命令数の制限等により、プレディケート実行を行なわない方が高速になることがある。そこで、命令割り当ての際に、プレディケート実行を行なわない方が高速になると判断されたならば、プレディケート実行しないようにすると好ましい。
【0110】
次に、本発明の第5の実施形態について説明する。
【0111】
本実施形態は、第1の実施形態の命令割り当て処理を一部修正したもので、この修正部分以外は第1の実施形態と同様である。以下では、第1の実施形態と相違する点を中心に、また、第1の実施形態との比較を交えながら、本実施形態について説明する。
【0112】
本実施形態は、概略的には、第1の実施形態において、動作モードのうち実行頻度の高い値を判別し、実行頻度が高いと判別された動作モードに対応する命令は分岐なしに実行されるように割り当て、必要なら他の動作モードに対応する命令は上記の命令とは別のサイクルで実行されるように割り当てるようにしたものである。
【0113】
以下、本実施形態において、命令割り当て部36による実行される命令割り当て処理の手順について説明する。
【0114】
図21に、本実施形態に係る命令割り当て処理のアルゴリズムの一例を示す。
【0115】
なお、ここでは、図7に例示するソースプログラムが入力として与えられ、B3={(5−7),(5−8)}のブロックがB2={(5−5),(5−6)}のブロックよりも実行頻度が高いものとする。
【0116】
図21のステップS19−1〜ステップS19−6までの手順は、図11のステップS9−1〜ステップS9−6までの手順と同様である。
【0117】
すなわち、ステップS9−1〜S9−6までの実行により、読み込んだ中間ノードが条件分岐である場合に動作モード設定命令が生成し、そしてフロー解析の結果に基づき条件分岐により到達し得るブロックの集合としてBIが求められる。
【0118】
本例の場合、BI={B2,B3}が得られる。
【0119】
次に、本実施形態では、ステップS19−7にて、BIに属する各ブロックのうち、実行頻度の最も多いブロックBを選択し、このBの命令を割り当てる。
【0120】
本例の場合、BIに属するブロック毎の実行頻度を基に頻度の多いブロックB3が選択され、B3の命令がプレディケート・フィールドを2にして割り当てられる。
【0121】
次に、本実施形態では、ステップS19−8にて、Bの命令を割り当てたのと同じサイクルで、プレディケート実行をする分岐命令を割り当てるとともに、分岐した先でB以外のブロックの命令を割り当て、終了したら、Bの命令が終了した後のブロックへと分岐する。
【0122】
すなわち、第1の実施形態とは異なり、最後に分岐命令を割り当てずに終了することとし、B3の命令を割り当てたのと同じサイクルでプレディケート・フィールドが1である無条件分岐命令を割り当てる。分岐先でB2の命令を割り当て、最後にB3の命令の後のブロックへと分岐する。
【0123】
これにより、頻度の高いブロックが実行されるときは全く分岐が起こらず高速に実行可能となる。頻度の小さいブロックが実行される場合は、分岐で飛び出し、最後に分岐で合流する。
【0124】
図22に、図7に例示するソースプログラムに対し図21のアルゴリズムを適用したときにレジスタ割り当て部37が生成するプログラムの例を示す。
【0125】
本例では、B3の方が実行頻度が大きいため、(20−1)(20−2)に引き続いて(20−3)ではB3の命令が割り当てられる。
【0126】
「ldi(2) Rk,−1」が該当命令である。この後分岐命令なしに後のブロックL3へと続く。一方、B2が実行される場合には、(20−3)の「b(1) L4」によってL4に無条件分岐する。ここでB2が実行された後、L3に飛ぶ。
【0127】
B2が実行される場合、(20−1)から(20−3)で3クロックかかる。一方、B3が実行される場合、(20−1)から(20−3)と、(20−4)から(20−6)と、(20−3)の分岐の遅延と、(20−6)の分岐の遅延で、計8クロックかかる。つまり、実行頻度の大きいブロックが判別可能なときに本実施形態の命令割り当てを適用すると極めて高速に実行することができる。
【0128】
なお、以上の各実施形態では、高級言語で記述されたプログラムを計算機で実行するオブジェクトコードに変換するソフトウェアであるコンパイラの中で命令割り当てをする場合を想定して記述したが、本発明はターゲットCPUのアーキテクチャを意識しながらアセンプリ言語などを用いて直接プログラミングする場合にも適用することができる。
【0129】
また、以上の各実施形態では、BIに相当する命令を終了した後で動作モードレジスタを初期値0に戻す命令を生成していない。これはBIに相当する命令を終了した後は、動作モードに依らない命令(プレディケート・フィールドの値が0の命令)を生成するため、動作モードを初期値に戻さなくても全ての命令が実行されるからである。再びプレディケート実行する場合は、その直前で動作モード設定命令を実行すれば良い。動作モードを初期値に戻すためには1命令実行が必要であり、実行しないほうが同等かあるいは1サイクル高速化が可能である。
【0130】
なお、以上の各機能は、ソフトウェアとしても実現可能である。すなわち、本実施形態は、コンピュータに所定の手順を実行させるための(あるいはコンピュータを所定の手段として機能させるための、あるいはコンピュータに所定の機能を実現させるための)プログラムを記録したコンピュータ読取り可能な記録媒体として実施することもできる。
【0131】
本発明は、上述した実施の形態に限定されるものではなく、その技術的範囲において種々変形して実施することができる。
【0132】
【発明の効果】
本発明によれば、プレディケート実行を行なうCPUでプログラムを高速に実行することができる。
【図面の簡単な説明】
【図1】本発明の一実施形態に係るコンパイラの構成例を示す図
【図2】命令フォーマットの一例を示す図
【図3】CPUの一構成例を示す図
【図4】ソースプログラムの例を示す図
【図5】プレディケート実行をサポートしないCPUに対する命令割り当ての一例を示す図
【図6】プレディケート実行をサポートするCPUに対する命令割り当ての一例を示す図
【図7】ソースプログラムの例を示す図
【図8】中間コードの一例を示す図
【図9】フロー解析部による解析結果の例を示す図
【図10】データ依存解析部による解析結果の例を示す図
【図11】命令割り当て手順の一例を示すフローチャート
【図12】命令割り当て部により生成されるプログラムの例を示す図
【図13】レジスタ割り当て部により生成されるプログラムの例を示す図
【図14】レジスタ割り当て部により生成されるプログラムの例を示す図
【図15】ソースプログラムの例を示す図
【図16】レジスタ割り当て部により生成されるプログラムの例を示す図
【図17】レジスタ割り当て部により生成されプログラムの例を示す図
【図18】ソースプログラムの例を示す図
【図19】レジスタ割り当て部により生成されるプログラムの例を示す図
【図20】レジスタ割り当て部により生成されるプログラムの例を示す図
【図21】命令割り当て手順の他の例を示すフローチャート
【図22】レジスタ割り当て部により生成されるプログラムの一例を示す図
【符号の説明】
10…ソースプログラム
20…オブジェクトプログラム
30…コンパイラ
31…字句解析部
32…構文解析部
34…フロー解析部
35…データ依存解析部
36…命令割り当て部
361…動作モード設定命令生成部
362…命令比較部
363…分岐命令生成部
37…レジスタ割り当て部
200…CPU
201…命令解析器
202…分岐器
203,204…整数演算器
205,206…メモリアクセス器
207…レジスタ
208…動作モードレジスタ
209…プログラムカウンタ
210…命令キャッシュ
211…データキャッシュ
300…主記憶

Claims (9)

  1. 命令コードに動作モードを示すフィールドを持ち、該命令コードの該フィールドの値とCPUが管理するレジスタの特定フィールドの値とが一定の関係にあるときのみ該命令を実行する機能を持つCPUに対し、各サイクルで実行される命令の割り当てを行なう命令割り当て方法であって、
    動作モードを設定する命令を割り当てるステップと、
    命令コードのフィールドの値が一致する一連の命令列の最後の命令同士の実行されるサイクルを比較するステップと、
    命令コードのフィールドの値が一致する一連の命令列の最後の命令の実行サイクルが他よりも早い場合に、該命令コードと同じフィールド値を持つ分岐命令を該命令と同じサイクルまたは後のサイクルで実行するように割り当てるステップとを有することを特徴とする命令割り当て方法。
  2. 動作モードのうち実行頻度の高い値を判別するステップをさらに有し、
    実行頻度が高いと判別された動作モードに対応する命令を早いサイクルに優先的に割当てることを特徴とする請求項1に記載の命令割り当て方法。
  3. 命令コードに動作モードを示すフィールドを持ち、該命令コードの該フィールドの値とCPUが管理するレジスタの特定フィールドの値が一定の関係にあるときのみ該命令を実行する機能を持つCPUに対し、各サイクルで実行される命令の割り当てを行なう命令割り当て方法であって、
    動作モードを設定する命令を割り当てるステップと、
    ある動作モードのときのみ実行される命令が動作モード設定命令よりも前で実行されるように割り当て可能かを判別するステップと、
    割り当て可能と判別された前記命令を動作モードに依らず実行される命令として割り当てるステップとを有することを特徴とする命令割り当て方法。
  4. 命令コードに動作モードを示すフィールドを持ち、該命令コードの該フィールドの値とCPUが管理するレジスタの特定フィールドの値が一定の関係にあるときのみ該命令を実行する機能を持つCPUに対し、各サイクルで実行される命令の割り当てを行なう命令割り当て方法であって、
    動作モードを設定する命令を割り当てるステップと、
    命令コードのフィールドの値が一致する一連の命令列同士を比較するステップと、
    前記比較の結果、同等の命令がある場合には該命令を動作モードにかかわらず実行される命令に変換するステップとを有することを特徴とする命令割り当て方法。
  5. 命令コードに動作モードを示すフィールドを持ち、該命令コードの該フィールドの値とCPUが管理するレジスタの特定フィールドの値が一定の関係にあるときのみ該命令を実行する機能を持つCPUに対し、各サイクルで実行される命令の割り当てを行なう命令割り当て行方法であって、
    特定の動作モードでのみ実行される命令を生成するよりも、動作モードによらずに動作する命令を生成した方が実行速度が大きい場合には、動作モードによらずに動作する命令を生成することを特徴とする命令割り当て方法。
  6. 命令コードに動作モードを示すフィールドを持ち、該命令コードの該フィールドの値とCPUが管理するレジスタの特定フィールドの値が一定の関係にあるときのみ該命令を実行する機能を持つCPUに対し、各サイクルで実行される命令の割り当てを行なう命令割り当て方法であって、
    動作モードを設定する命令を割り当てるステップと、
    動作モードのうち実行頻度の高い値を判別するステップとを有し、
    実行頻度が高いと判別された動作モードに対応する命令は分岐なしに実行されるように割り当てるとともに、
    他の動作モードに対応する命令は、前記実行頻度が高いと判別された動作モードに対応する命令とは別のサイクルで実行されるように割り当てることを特徴とする命令割り当て方法。
  7. 動作モードに依存する実行をする必要がなくなっても、動作モードを戻す命令を割り当てないことを特徴とする請求項1ないし6のいずれか1項に記載の命令割り当て方法。
  8. 前記CPUは、並行に実行できる演算器を複数持つものであることを特徴とする請求項1ないし7のいずれか1項に記載の命令割り当て方法。
  9. 命令コードに動作モードを示すフィールドを持ち、該命令コードの該フィールドの値とCPUが管理するレジスタの特定フィールドの値とが一定の関係にあるときのみ該命令を実行する機能を持つCPUに対し、各サイクルで実行される命令の割り当てを行なう命令割り当て装置であって、
    動作モードを設定する命令を割り当てる手段と、
    命令コードのフィールドの値が一致する一連の命令列の最後の命令同士の実行されるサイクルを比較する手段と、
    命令コードのフィールドの値が一致する一連の命令列の最後の命令の実行サイクルが他よりも早い場合に、該命令コードと同じフィールド値を持つ分岐命令を該命令と同じサイクルまたは後のサイクルで実行するように割り当てる手段とを備えたことを特徴とする命令割り当て装置。
JP6332298A 1998-03-13 1998-03-13 命令割り当て方法及び命令割り当て装置 Expired - Fee Related JP3595158B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP6332298A JP3595158B2 (ja) 1998-03-13 1998-03-13 命令割り当て方法及び命令割り当て装置
US09/266,872 US6367076B1 (en) 1998-03-13 1999-03-12 Compiling method and memory storing the program code

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP6332298A JP3595158B2 (ja) 1998-03-13 1998-03-13 命令割り当て方法及び命令割り当て装置

Publications (2)

Publication Number Publication Date
JPH11259297A JPH11259297A (ja) 1999-09-24
JP3595158B2 true JP3595158B2 (ja) 2004-12-02

Family

ID=13225924

Family Applications (1)

Application Number Title Priority Date Filing Date
JP6332298A Expired - Fee Related JP3595158B2 (ja) 1998-03-13 1998-03-13 命令割り当て方法及び命令割り当て装置

Country Status (2)

Country Link
US (1) US6367076B1 (ja)
JP (1) JP3595158B2 (ja)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7181730B2 (en) * 2000-06-21 2007-02-20 Altera Corporation Methods and apparatus for indirect VLIW memory allocation
US6662294B1 (en) * 2000-09-28 2003-12-09 International Business Machines Corporation Converting short branches to predicated instructions
US6779108B2 (en) * 2000-12-15 2004-08-17 Intel Corporation Incorporating trigger loads in branch histories for branch prediction
JP2002232796A (ja) * 2001-01-31 2002-08-16 Funai Electric Co Ltd デジタル/アナログ放送受信機のチャンネル選択装置
US20030023959A1 (en) * 2001-02-07 2003-01-30 Park Joseph C.H. General and efficient method for transforming predicated execution to static speculation
JP3612294B2 (ja) 2001-08-06 2005-01-19 松下電器産業株式会社 デバッグ方法およびデバッグ装置
JP2003140886A (ja) * 2001-10-31 2003-05-16 Seiko Epson Corp インストラクションセット及びコンパイラ
US20030145190A1 (en) * 2001-12-07 2003-07-31 Paolo Faraboschi Compiler algorithm to implement speculative stores
US7140003B2 (en) * 2003-02-14 2006-11-21 International Business Machines Corporation Method and system for specifying sets of instructions for selection by an instruction generator
US20050125783A1 (en) * 2003-12-09 2005-06-09 Texas Instruments Incorporated Program optimization with intermediate code
US7194606B2 (en) * 2004-09-28 2007-03-20 Hewlett-Packard Development Company, L.P. Method and apparatus for using predicates in a processing device
US7739696B2 (en) * 2005-09-08 2010-06-15 Honeywell International Inc. Message translation systems and methods
KR100736679B1 (ko) * 2006-08-09 2007-07-06 주식회사 유니테스트 반도체 테스트를 위한 패턴 생성 장치 및 패턴 생성 방법
US8612944B2 (en) * 2008-04-17 2013-12-17 Qualcomm Incorporated Code evaluation for in-order processing
US9298433B2 (en) * 2013-05-02 2016-03-29 Facebook, Inc. Optimizing intermediate representation of script code for fast path execution
US9298436B2 (en) * 2014-06-25 2016-03-29 International Business Machines Corporation Conditional branch instruction compaction for regional code size reduction

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5142681A (en) * 1986-07-07 1992-08-25 International Business Machines Corporation APL-to-Fortran translators
JP2839590B2 (ja) 1989-11-10 1998-12-16 株式会社東芝 命令割り当て装置及び命令割り当て方法
JPH0475139A (ja) * 1990-07-18 1992-03-10 Toshiba Corp ループ並列化装置

Also Published As

Publication number Publication date
US6367076B1 (en) 2002-04-02
JPH11259297A (ja) 1999-09-24

Similar Documents

Publication Publication Date Title
JP3595158B2 (ja) 命令割り当て方法及び命令割り当て装置
US10776127B2 (en) Reducing data hazards in pipelined processors to provide high processor utilization
Eichenberger et al. Using advanced compiler technology to exploit the performance of the Cell Broadband Engine™ architecture
KR100715055B1 (ko) Vliw 프로세서, 인스트럭션 컴파일 방법, 머신 판독가능한 매체 및 컴퓨터 프로그램 실행 방법
US5958048A (en) Architectural support for software pipelining of nested loops
US5649135A (en) Parallel processing system and method using surrogate instructions
US5303357A (en) Loop optimization system
JP3847672B2 (ja) コンパイラ装置及びコンパイル方法
US8677330B2 (en) Processors and compiling methods for processors
US20030079114A1 (en) Processor, compiling apparatus, and compile program recorded on a recording medium
JPH10161884A (ja) パイプラインコンピュータのための改善されたコードオプティマイザ
JPH0792752B2 (ja) 命令スケジューラ及び入力命令シーケンスを再スケジュールする方法
JP2004234126A (ja) コンパイラ装置およびコンパイル方法
JPH11249897A (ja) Nウェイ分岐を有するスーパースカラまたは超長命令語コンピュータにおける次の命令を選択する方法および装置
JP2002024011A (ja) プロセッサにおける命令の叙述された実行
US6154828A (en) Method and apparatus for employing a cycle bit parallel executing instructions
JP6236093B2 (ja) 並列パイプラインにおいてブランチを分岐するためのハードウェアおよびソフトウェアソリューション
Hormati et al. Macross: Macro-simdization of streaming applications
USRE41751E1 (en) Instruction converting apparatus using parallel execution code
KR100316078B1 (ko) 파이프라인방식프로세서
JPH11194948A (ja) コンパイラ最適化アルゴリズム
JP2001290658A (ja) マッピング回路及び方法
US20050257200A1 (en) Generating code for a configurable microprocessor
JP2000284970A (ja) プログラム変換装置及びプロセッサ
Muthukumar et al. Software pipelining of nested loops

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20040511

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040601

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040802

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: 20040831

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040902

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

Free format text: PAYMENT UNTIL: 20070910

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20080910

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20080910

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20090910

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees