JP4884297B2 - コンパイラ装置、コンパイル方法およびコンパイラプログラム - Google Patents

コンパイラ装置、コンパイル方法およびコンパイラプログラム Download PDF

Info

Publication number
JP4884297B2
JP4884297B2 JP2007131506A JP2007131506A JP4884297B2 JP 4884297 B2 JP4884297 B2 JP 4884297B2 JP 2007131506 A JP2007131506 A JP 2007131506A JP 2007131506 A JP2007131506 A JP 2007131506A JP 4884297 B2 JP4884297 B2 JP 4884297B2
Authority
JP
Japan
Prior art keywords
code
execution path
variable
execution
branch
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
JP2007131506A
Other languages
English (en)
Other versions
JP2008004082A (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.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co Ltd
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 Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP2007131506A priority Critical patent/JP4884297B2/ja
Priority to US11/802,636 priority patent/US20070277162A1/en
Publication of JP2008004082A publication Critical patent/JP2008004082A/ja
Application granted granted Critical
Publication of JP4884297B2 publication Critical patent/JP4884297B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code

Description

本発明は、コンパイラ装置、コンパイル方法およびコンパイラプログラムにかかわり、特に実行速度面に関する最適化コンパイルの技術に関する。
従来、大量のデータを処理するコンピュータシステムに搭載されるプログラムの性能を上げるため、プログラムの実行時間を短縮するように最適化を行うコンパイラ装置が用いられる。
コンパイラ装置では、最適化を行うために、プログラムの実行効率を上げるように命令の順序を並び替える命令スケジューリングが用いられる。また、コンパイラ装置は、最適化の際に、プログラム中の分岐の命令文および分岐先の命令文に着目した制御フロー解析により、プログラムを基本ブロック単位に分割する。基本ブロックは、命令文の文列であって基本ブロックの先頭の命令文から最後の命令文へと順に実行され、命令文の列の途中に分岐や合流を含まないものをいう。但し、基本ブロックの最後には分岐命令を含んでいてもよい。
基本ブロックの途中には分岐や合流がないため、基本ブロック毎の命令スケジューリングは容易に行うことができるが、基本ブロック毎の局所的な最適化では最適化の効果が限られる。そのため、基本ブロックを拡張し命令スケジューリングの対象範囲を広げることが必要とされる。
また、複数の分岐を含むプログラムにおいて、実行頻度が高い実行経路(以下「ホットパス」という)が分かっている場合がある。そのような場合には、ホットパス上の命令文を移動させてホットパスの基本ブロックを拡大し、ホットパスの実行効率を上げる方法が従来から知られている。
ここで、ホットパス上の基本ブロックを拡張する方法について、図5A,図5Bのプログラムを例にして説明する。図5Aはプログラムの一部を示しており、図5Bはこのプログラムのコンパイラ内部における中間プログラム表現を示している。中間プログラムは、S1,S2などの中間コードの列により構成される。また、図5Bでは、実線の矢印により、制御の流れを示す制御フローグラフも表現している。プログラム中の命令文はコンパイラ内部では中間コードとして表現される。制御フローグラフは、基本ブロックB1〜B7の間を分岐や合流を表す有向辺で接続した有向グラフである。また、この例では破線矢印HP上の基本ブロックB1,B2,B4,B5,B7を順に遷移する実行経路をホットパスとして説明する。
図6に示すプログラムを参照して説明する。このプログラムにおいて図7に示すように、基本ブロックB4の中間コードS8を基本ブロックB2に移動させ、基本ブロックB3から基本ブロックB4へ遷移する場合を考慮して中間コードS8をコピーした中間コードS81を基本ブロックB3に挿入する。この操作によって、プログラムの整合性を保持しつつ、ホットパスHP上の基本ブロックB2を拡張することができる。
特開平8−314727号公報
しかしながら、図8に示すように、基本ブロックB5の中間コードS10を基本ブロックB2に移動させたとき、基本ブロックB1,B2,B4の順に遷移し、基本ブロックB4の分岐命令S9の判定が偽である場合に、基本ブロックB6の中間コードS12の変数aは、本来なら基本ブロックB1の中間コードS1の変数aの値を参照しなければならないが、移動させた中間コードS10の変数aの値を参照することになり、プログラムの整合性が保たれなくなる。
このように、最後に分岐命令を含む基本ブロックを跨って中間コードを移動させることにより元のプログラムのデータ依存関係が保たれなくなる場合、中間コードの移動が制限され、基本ブロックを拡張することができない。
したがって、本発明の主たる目的は、プログラムの整合性を保持しつつ、ある実行経路の基本ブロックを拡張することができるようにプログラムを変換するコンパイラ装置を提供することである。
(1)本発明によるコンパイラ装置は、分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラ装置であって、
実行経路指定器と、第1の実行経路コード生成器と、保証コード生成器と、部分コード生成器と、第1の分岐コード生成器と、第1の依存解析器と、並列化器とを備え、
前記実行経路指定器は、前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定するものであり、
前記第1の実行経路コード生成器は、前記実行経路指定器によって指定される実行経路上で定義されている変数であって当該指定される実行経路の入口において生存が必要とされる変数をその他の変数に置き換えてなる第1の実行経路コードを生成するものであり、
前記保証コード生成器は、前記第1の実行経路コード生成器によって置き換えられたその他の変数であって前記指定される実行経路の出口においても生存が必要とされるその他の変数を元の変数に復元する保証コードを生成するものであり、
前記部分コード生成器は、前記一部命令列に対応する部分コードを生成するものであり、
前記第1の分岐コード生成器は、前記指定される実行経路上の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記指定される実行経路上の条件分岐命令に、前記部分コードの始点に分岐する第1の分岐コードを生成するものであり、
前記第1の依存解析器は、前記指定される実行経路上の命令間の依存関係の解析に基づいて命令間の依存関係を算出するとともに、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する前記分岐コードとの間に依存を追加し、かつ、例外が発生しないように命令間の依存を付加するものであり、
前記並列化器は、前記第1の依存解析器が付加する前記命令間の依存に基づいて前記指定される実行経路中の命令の並び替えを行うものである。
以上の本発明の構成は、例外発生しないように依存を設定する態様のものである。この構成において、実行経路指定器は、途中に分岐命令を含む一部命令列において、いわゆるホットパスを指定する。第1の実行経路コード生成器は、パス置換対象変数(指定された実行経路の入口で生存が必要とされる変数でありかつ指定された実行経路上で定義されている変数)を他の変数に置き換えた実行経路コードを生成する。また、保証コード生成器は、置き換えた変数を元の変数に戻すために必要となる保証コードを前もって生成しておく。そして、部分コード生成器は、途中に分岐命令を含む一部命令列に対応する部分コードを生成する。第1の分岐コード生成器は、指定された実行経路を実行するための条件分岐命令について、まず、条件を指定された実行経路が実行されない場合の条件になるように調整したうえで、かつ実行経路の途中に分岐を含まない構成とするために、分岐先を部分コードの始点に分岐する分岐コードを生成する。これは、分岐条件が成立するときは高速化ブロック(実行経路)において処理を実行して高速処理を実現する一方、分岐条件が成立しないときは整合性を担保するために高速化ブロックを使用しない通常のシーケンスでの処理へ分岐させるために実施される。第1の依存解析器は、指定された実行経路上の命令間の依存関係を割り出し、保証コードが条件分岐命令より後になり、かつ、例外を発生させないように調整する。そして、並列化器は、得られた命令間の依存関係に従って実行経路中の命令の並び替えを行う。
この構成によれば、指定された実行経路の基本ブロックを拡張することができ、命令スケジューリングの対象範囲を広げることができるので、より効果的に最適化を行うことができる。またこの構成は、当該実行経路の命令文が優先的に実行されて実行経路の途中に分岐を含まない構成であるため、当該実行経路の実行確率が他の実行経路より高い場合に当該実行経路の実行速度を向上させることができる。
(2)上記(1)のコンパイラ装置において、当該コンパイラ装置は、前記ソースプログラムが有するループを一つの命令として扱うものであって、ループ単位処理器をさらに備え、
前記ループ単位処理器は、前記実行経路指定器と前記第1の実行経路コード生成器と前記保証コード生成器と前記第1の分岐コード生成器と前記第1の依存解析器と前記並列化器とを、前記ループの最内ループより外側のループに向かって起動するものである、という態様がある。
ループ単位処理器を備えることにより、最内ループから外側のループに向かって、繰り返し、実行経路の指定範囲を拡大できるのでより広い範囲でのプログラムの実行速度を向上させることができる。
(3)上記(1)のコンパイラ装置において、第1の実行経路変換判定器をさらに備え、
前記第1の実行経路変換判定器は、前記指定される実行経路の実行確率に基づいて、前記並列化器を実行した後のプログラムを目的コードとするか否かを判定するものである、という態様がある。
指定された実行経路の実行確率が低い条件下であるにもかかわらず、並列化器を実行した後のプログラムを目的コードとすることを常に行うのであれば、却って処理時間の延長化を招くという事態も想定される。そこで、上記の実行経路変換判定器を設ける。この実行経路変換判定器は、指定された実行経路の実行確率が所定の閾値よりも大きいときは、並列化器を実行した後のプログラムを目的コードとすることで処理時間の短縮化を図る。逆に、指定された実行経路の実行確率が所定の閾値以下のときは、並列化器は実行しない元のプログラムを目的コードとする。これにより、さらなる処理時間の短縮化を図ることができる。
(4)また上記(1)のコンパイラ装置において、第2の実行経路変換判定器をさらに備え、
前記第2の実行経路変換判定器は、
前記指定される実行経路の実行確率と前記部分コードの実行時間とに基づいて、前記部分コードの平均実行時間を算定し、
前記並列化器を実行した後の前記指定される実行経路における前記目的コードの実行時間と前記実行確率とに基づいて、前記指定される実行経路の平均実行時間を算定し、
前記部分コードの平均実行時間と前記指定される実行経路の平均実行時間との比較に基づいて、前記並列化器を実行した後のプログラムを前記目的コードの列とするか否かを判定する、という態様がある。
並列化器を実行した後のプログラムを目的コードとするか、並列化器は実行しない元のプログラムを目的コードとするかを判定する際において、単に指定された実行経路の実行確率の大小判定だけでは、処理時間の短縮化の正確性において不足が生じる場合がある。処理時間と確率とでは次元が異なるからである。そこで、時間の次元で比較判定を行うために前記第2の実行経路変換判定器を設ける。この実行経路変換判定器は、指定された実行経路における平均実行時間と部分コードにおける平均実行時間とをそれぞれ算定する。 そのうえで、実行経路変換判定器は、並列化器による実行経路の平均実行時間が部分コードの平均実行時間よりも短いときには、並列化器によるプログラムを目的コードとして設定する。その結果、処理時間の短縮化をより確実なものにすることができる。
(5)また上記(1)のコンパイラ装置において、戻り場所設定命令コード生成器と第2の依存解析器とをさらに備え、
前記戻り場所設定命令コード生成器は、前記指定される実行経路の実行中に例外が発生した際の戻り場所を特定する命令コードを前記指定される実行経路上に追加するものであり、
前記第2の依存解析器は、前記指定される実行経路上の命令間の依存関係の解析に基づいて、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する分岐コードとの間に依存を追加するものであり、
かつ、前記第2の依存解析器は、前記第1の依存解析器が実施する、例外が発生しないように命令間に付加する依存については、それを付加しない、
これは、例外時の戻り場所を設定するようにし、例外発生しないようにするための、依存を設定しない構成である。これについては、後述する実施の形態での変形例1を参照することができる。
ゼロ割算が発生すれば、プロセッサまたはオペレーティングシステムにおいて例外が発生する。また、変数がC言語におけるポインタ変数であり、かつ、その変数の間接参照があるときに、その変数が未実装のアドレスやアクセスが禁止されているようなメモリのアドレスを保持している場合には、プロセッサまたはオペレーティングシステムにおいて例外が発生する。この対応策として、上述した戻り場所設定命令コード生成器と依存解析器とを設ける。すなわち、例外時の戻り場所を設定するようにして、投機的に実行された命令において例外が発生した場合でも矛盾なくプログラムの実行を継続できるようにする。その結果、指定された実行経路上にある例外を発生する可能性のある命令も制限なく指定された実行経路上を移動できるので、より命令の並列実行化が促進され実行速度を向上させることができる。
(6)また上記(5)のコンパイラ装置において、割り込み発生時処理ルーチン付加器をさらに備え、
前記割り込み発生時処理ルーチン付加器は、例外が発生した際に、前記命令コードで指定する前記戻り場所に戻る処理ルーチンを前記目的コードに追加するものである、という態様がある。これは、例外発生時の処理を割り込みルーチン(ソフト的に)で実施することで、プログラムの実行を継続するものである。これについては、後述する実施の形態での変形例1を参照することができる。このように構成すれば、依存に起因して生じる可能性のある指定された実行経路での高速実行の障害を回避し、指定された実行経路上にある例外を発生する可能性のある命令も制限なく指定された実行経路上を移動させることができるようになる。これにより、命令の並列実行化がさらに促進されて実行速度が向上する。
(7)また上記(6)のコンパイラ装置において、第3の実行経路変換判定器をさらに備え、
前記第3の実行経路変換判定器は、前記指定される実行経路の実行確率と、前記並列化器を実行した後の実行経路上で例外が発生する確率とに基づいて、前記並列化器を実行した後のプログラムを前記目的コードとするか否かを判定するものである、という態様がある。
このように構成すれば、指定された実行経路上で例外が発生する確率を判定材料として追加するので、この例外の発生確率を加味しない場合に比べて、状況の変化に応じたよりきめの細かい処理時間の短縮化を進めることができる。
(8)また上記(7)のコンパイラ装置において、第4の実行経路変換判定器をさらに備え、
前記第4の実行経路変換判定器は、
前記指定される実行経路の実行確率と、前記指定される実行経路上で例外が発生する確率と、前記部分コードの実行時間とに基づいて、前記部分コードの平均実行時間を算定し、
前記指定される実行経路の実行確率と、前記例外が発生する確率と、前記並列化器を実行した後の実行経路における前記目的コードの実行時間と、前記割り込み発生時処理ルーチン付加器が付加する前記処理ルーチンにおける前記目的コードの実行時間とに基づいて、前記並列化器を実行した後の実行経路の平均実行時間と前記処理ルーチンの平均実行時間とを算定し、
前記並列化器を実行した後の実行経路の平均実行時間と前記処理ルーチンの平均実行時間との比較に基づいて、前記並列化器を実行した後のプログラムを目的コードとするか否かを判定するものである、という態様がある。
このように構成すれば、部分コードの平均実行時間を基準とする判定だけでなく、また、実行経路と処理ルーチンの平均実行時間を基準とした判定だけでもなく、両者の平均実行時間の比較に基づく判定を行う。このようにしていずれの選択肢を選ぶかを決定するので、処理時間の短縮化をより確実なものにすることができる。
(9)また上記(8)のコンパイラ装置において、第2の実行経路コード生成器をさらに備え、
前記第2の実行経路コード生成器は、前記指定される実行経路上で参照される変数が特定の値を保持することが多い場合には、当該変数を当該変数が保持する値に置き換え、当該変数が前記置き換えた値と異なる値を保持する場合には、前記指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を前記指定される実行経路中の先頭に挿入してなる第2の実行経路コードを生成するものであり、
当該コンパイラ装置は、前記第2の実行経路コード生成器が起動した後に、定数値に関する冗長性の削除最適化を行う、という態様がある。
このように構成すれば、変数が保持する値が特定の値に偏っている場合に、処理時間の短縮化をより確実なものにすることができる。
(10)また上記(9)のコンパイラ装置において、第5の実行経路変換判定器をさらに備え、
前記第5の実行経路変換判定器は、前記指定される実行経路の実行確率と、前記指定される実行経路上の変数が特定の値を保持する確率とに基づいて、前記第2の実行経路コード生成器を実行するか否かを判定するものである、という態様がある。
このように構成すれば、指定された実行経路上の変数が特定の値を保持する確率を加味するので、この確率を加味しない場合に比べて、状況の変化に応じたよりきめの細かい処理時間の短縮化を進めることができる。
(11)また上記(10)のコンパイラ装置において、第6の実行経路変換判定器をさらに備え、
前記第6の実行経路変換判定器は、前記指定される実行経路の実行確率と、前記指定される実行経路上の変数が特定の値を保持する確率と、前記並列化器を実行した後の実行経路における前記目的コードの実行時間とに基づいて、前記並列化器を実行した後の実行経路の平均実行時間を算定し、
前記並列化器を実行した後の実行経路の平均実行時間と前記部分コードの平均実行時間との比較に基づいて、前記並列化器を実行した後のプログラムを前記目的コードとするか否かを判定するものである、という態様がある。
このように構成すれば、部分コードの平均実行時間を基準とした判定だけでなく、また、実行経路上の変数が特定の値を保持する確率を関連付けた当該実行経路の平均実行時間を基準とした判定だけでもなく、これら両者の平均実行時間の比較に基づく判定を行って、いずれの選択肢を選ぶかを決定するので、処理時間の短縮化をより確実なものにすることができる。
(12)また(11)のコンパイラ装置において、第3の実行経路コード生成器と第2の分岐コード生成器とをさらに備え、
前記第3の実行経路コード生成器は、
前記指定される実行経路上で参照される変数が特定の値を保持することが多い場合には、当該指定される実行経路中の命令を複製したうえで、当該複製した実行経路において前記特定の値を保持することが多い変数を当該変数が保持する値に置き換え、前記指定される実行経路上で参照される変数が前記置き換えた値と異なる値を保持する場合には、当該指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を当該指定される実行経路中の先頭に挿入してなる第3の実行経路コードを生成するものであり、
前記第2の分岐コード生成器は、前記指定される実行経路中の条件分岐命令に前記複製した実行経路上の条件分岐命令の条件が成立しない場合には、前記複製した実行経路上の条件分岐命令に、前記指定される実行経路コードの始点に分岐する第2の分岐コードを生成するものである、という態様がある。
このように構成すれば、指定された実行経路上で参照される変数が置き換えた特定の値と異なる値を保持する場合でも、部分コードに比べて高速化されている他の高速化ブロックへ実行制御が遷移するので、処理時間の短縮化をより確実なものにすることができる。
(13)また(12)のコンパイラ装置において、第7の実行経路変換判定器をさらに備え、
前記第7の実行経路変換判定器は、
前記指定される実行経路上で参照される変数が特定の値を保持する確率に基づいて、または前記指定される実行経路の実行確率と前記指定される実行経路上で参照される変数が特定の値を保持する確率とに基づいて変形後のプログラムの平均実行時間を算出したうえで、
算出する前記変形後のプログラムの平均実行時間に基づいて、前記第3の実行経路コード生成器と前記第2の分岐コード生成器とを実行するか否かを判定するものである、という態様がある。
このように構成すれば、特定の値を保持する確率、またはこの確率と指定された実行経路の実行確率とにより算出される変形後のプログラムの平均実行時間に基づく判定を行って、いずれの選択肢を選ぶかを決定するので、処理時間の短縮化をより確実なものにすることができる。
(14)また、本発明によるコンパイラ装置は、
分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラ装置であって、
実行経路指定器と、実行経路コード生成器と、保証コード生成器と、部分コード生成器と、分岐コード生成器と、依存解析器と、並列化器とを備え、
前記実行経路指定器は、前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列に含まれる複数の実行経路から一つを指定するものであり、
前記実行経路コード生成器は、前記実行経路指定器によって指定される実行経路上で定義されている変数であって当該指定される実行経路の入口において生存が必要とされる変数をその他の変数に置き換えてなる実行経路コードを生成するものであり、
前記保証コード生成器は、前記実行経路コード生成器によって置き換えられた前記その他の変数であって前記指定される実行経路の出口においても生存が必要とされるその他の変数を元の変数に復元する保証コードを生成するものであり、
前記部分コード生成器は、前記一部命令列に対応する部分コードを生成するものであり、
前記分岐コード生成器は、前記指定される実行経路上の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記指定される実行経路上の条件分岐命令の分岐先が前記部分コード中の当該分岐条件が成立しない場合の分岐先になるように、分岐コードを生成するものであり、
前記依存解析器は、前記指定される実行経路中の命令間の依存関係の解析に基づいて、命令間の依存関係を算出するとともに、前記指定される実行経路中の命令であって制御が合流する基本ブロック中に存在する命令から、前記実行経路の終点方向に向かって最初に見つかる前記条件分岐命令を越えて処理移動ができないように、当該基本ブロック中に存在する命令と前記条件分岐命令との間に依存を付加し、かつ、前記指定される実行経路中の命令であって前記基本ブロック中に存在しない命令から、前記条件分岐命令を越えて処理移動できないように、当該命令と前記条件分岐命令との間に依存を付加するものであり、
前記並列化器は、前記依存解析器が付加する前記命令間の依存に基づいて前記指定される実行経路中の命令の並び替えを行うものである。
この構成によれば、前記指定された実行経路を実行するための分岐条件が成立しない場合に、前記部分コードの途中へ分岐するので、前記指定される実行経路を実行するための分岐条件が成立しない場合であっても、前記部分コードの始点から実行する場合に比較して実行速度を向上させることができる。
(15)また(14)のコンパイラ装置において、合流定義変数置換器と、合流定義変数保証コード生成器とをさらに備え、
前記合流定義変数置換器は、前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列において、制御が合流する基本ブロック中で定義される変数が存在する場合には、当該変数の定義箇所と参照箇所とをその他の変数に置き換えるものであり、
前記合流定義変数保証コード生成器は、前記合流定義変数置換器によって置き換えられたその他の変数であって前記一部命令列の出口で生存が必要とされるその他の変数を元の変数に復元する保証コードを、一部命令列の出口に生成するものである、という態様がある。
このように構成すれば、前記一部命令列において制御が合流する基本ブロック内に存在する命令が、制限なく指定された実行経路上を移動できるので、より命令の並列実行化が促進され実行速度を向上させることができる。
(16)また上記(15)のコンパイラ装置において、第1の実行経路変換判定器をさらに備え、
前記第1の実行経路変換判定器は、前記指定される実行経路の実行確率に基づいて、前記並列化器を実行した後のプログラムを目的コードとするか否かを判定するものである、という態様がある。
このように構成すれば、(3)の構成と同様に、指定される実行経路の実行確率が所定の閾値よりも大きいときは、並列化器を実行した後のプログラムを目的コードとして選択することで処理時間の短縮化を図ることができる。逆に、指定される実行経路の実行確率が所定の閾値以下のときは、並列化器は実行しない元のプログラムを目的コードとして選択することで、これも処理時間の短縮化を図ることができる。
(17)また上記(16)のコンパイラ装置において、第2の実行経路変換判定器をさらに備え、
前記第2の実行経路変換判定器は、
前記指定される実行経路の実行確率と前記部分コードの実行時間とに基づいて、前記部分コードの平均実行時間を算定し、
前記指定される実行経路の実行確率と前記並列化器を実行した後の実行経路における前記目的コードの実行時間とに基づいて、前記並列化器を実行した後の実行経路の平均実行時間を算定し、
前記部分コードの平均実行時間と前記並列化器を実行した後の実行経路の平均実行時間との比較に基づいて、前記並列化器を実行した後のプログラムを前記目的コードの列とするか否かを判定する、
ものである、という態様がある。
このように構成すれば、(4)の構成と同様に、並列化器による実行経路の平均実行時間が部分コードの平均実行時間よりも短いときには並列化器によるプログラムが目的コードとされることで、処理時間の短縮化をより確実なものにすることができる。
(18)また、本発明によるコンパイラ装置は、分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラ装置であって、
実行経路指定器と、第1の実行経路コード生成器と、第1の保証コード生成器と、第2の実行経路コード生成器と、合流定義変数置換器と、合流定義変数保証コード生成器と、第3の実行経路コード生成器と、第2の保証コード生成器と、部分コード生成器と、第1の分岐コード生成器と、第2の分岐コード生成器と、第3の分岐コード生成器と、依存解析器と、並列化器とを備え、
前記実行経路指定器は、前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定するものであり、
前記第1の実行経路コード生成器は、前記実行経路指定器によって指定される実行経路上における全命令列に対応する目的コードであって、前記指定される実行経路の入口において生存が必要とされかつ前記指定される実行経路上で定義されている変数が第1のその他の変数に置き換えられてなる第1の実行経路コードを生成するものであり、
前記第1の保証コード生成器は、前記第1のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第1のその他の変数を元の変数に復元する第1の保証コードを生成するものであり、
第2の実行経路コード生成器は、前記第1の実行経路コード生成器と前記第1の保証コード生成器とによって生成されるコード列で参照される変数が特定の値を保持することが多い場合には、当該コード列を複製したうえで、当該複製したコード列における前記特定の値を保持することが多い変数を当該変数が保持する値に置き換え、前記コード列で参照される変数が置き換えた値と異なる値を保持する場合には、前記指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を当該コード列の先頭に挿入してなる第2の実行経路コードを生成するものであり、
前記合流定義変数置換器は、前記一部命令列において制御が合流する基本ブロック中で定義される変数が存在する場合には、当該変数の定義箇所と参照箇所とを第2のその他の変数に置き換えるものであり、
前記合流定義変数保証コード生成器は、前記第2のその他の変数であって前記一部命令列の出口で生存が必要とされる第2のその他の変数については、当該第2のその他の変数を元の変数に復元する変数保証コードを一部命令列の出口に生成するものであり、
前記第3の実行経路コード生成器は、前記合流定義変数置換器と前記合流定義変数保証コード生成器とを実施した後の、前記指定される実行経路上における全命令列に対応する目的コードであって前記指定される実行経路の入口で生存が必要とされかつ当該指定される実行経路上で定義されている変数を第3のその他の変数に置き換えてなる第3の実行経路コードを生成するものであり、
前記第2の保証コード生成器は、前記第3のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第3のその他の変数を元の変数に復元する第2の保証コードを生成するものであり、
前記部分コード生成器は、前記合流定義変数置換器と前記合流定義変数保証コード生成器とを実施した後の、前記一部命令列に対応する部分コードを生成するものであり、
前記第1の分岐コード生成器は、前記第3の実行経路コードの条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第3の実行経路コード中の条件分岐命令の分岐先を、前記部分コード中の当該分岐条件が成立しない場合における分岐先になるように第1の分岐コードを生成するものであり、
前記第2の分岐コード生成器は、前記第1の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第1の実行経路コード中の分岐命令に、前記第3の実行経路コードの始点に分岐する第2の分岐コードを生成するものであり、
前記第3の分岐コード生成器は、前記第2の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第2の実行経路コード中の分岐命令に、前記第1の実行経路コードの始点に分岐する第3の分岐コードを生成するものであり、
前記依存解析器は、前記第1の実行経路コード生成器と、前記第1の保証コード生成器と、前記第2の実行経路コード生成器と、前記第3の実行経路コード生成器と、前記第2の保証コード生成器とで生成される各コード列中の命令間の依存関係を解析して、当該命令間の依存関係を算出するものであり、
前記並列化器は、前記依存解析器が算出する前記命令間の依存関係に基づいて前記指定される実行経路中の命令の並び替えを行うものである。
これは上述した複数の技術内容を組み合わせたものに相当し、処理時間の短縮化をほぼ理想的に進めることができる。
(19)本発明によるコンパイル方法は、上記(1)のコンパイラ装置に対応するもので、
分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイル方法であって、
前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定する実行経路指定ステップと、
前記実行経路指定ステップにおいて指定される実行経路上で定義されている変数であって当該指定される実行経路の入口において生存が必要とされる変数をその他の変数に置き換えてなる第1の実行経路コードを生成する第1の実行経路コード生成ステップと、
前記第1の実行経路コード生成ステップにおいて置き換えられたその他の変数であって前記指定される実行経路の出口においても生存が必要とされるその他の変数を元の変数に復元する保証コードを生成する保証コード生成ステップと、
前記一部命令列に対応する部分コードを生成する部分コード生成ステップと、
前記指定される実行経路上の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記指定される実行経路上の条件分岐命令に、前記部分コードの始点に分岐する第1の分岐コードを生成する第1の分岐コード生成ステップと、
前記指定される実行経路上の命令間の依存関係の解析に基づいて、命令間の依存関係を算出するとともに、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する前記分岐コードとの間に依存を追加し、かつ、例外が発生しないように命令間の依存を付加する第1の依存解析ステップと、
前記第1の依存解析ステップにおいて付加する前記命令間の依存に基づいて前記指定される実行経路中の命令の並び替えを行う並列化ステップと、
を含む。
(20)上記(19)のコンパイル方法において、前記指定される実行経路の実行中に例外が発生した際の戻り場所を特定する命令コードを前記指定される実行経路上に追加する戻り場所設定命令コード生成ステップと、
前記指定される実行経路上の命令間の依存関係の解析に基づいて、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する分岐コードとの間に依存を追加する第2の依存解析ステップと、
をさらに含み、
前記第2の依存解析ステップでは、前記第1の依存解析ステップが実施する、例外が発生しないように命令間に付加する依存については、それを付加しない、という態様がある。これは、上記(5)のコンパイラ装置に対応するものである。
(21)上記(20)のコンパイル方法において、例外が発生した際に、前記命令コードで指定する前記戻り場所に戻る処理ルーチンを前記目的コードに追加する割り込み発生時処理ルーチン付加ステップを、
さらに含む、という態様がある。これは、上記(6)のコンパイラ装置に対応するものである。
(22)また、本発明によるコンパイル方法は、
分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラ方法であって、
前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定する実行経路指定ステップと、
前記実行経路指定ステップにおいて指定される実行経路上における全命令列に対応する目的コードであって、前記指定される実行経路の入口において生存が必要とされかつ前記指定される実行経路上で定義されている変数が第1のその他の変数に置き換えられてなる第1の実行経路コードを生成する第1の実行経路コード生成ステップと、
前記第1のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第1のその他の変数を元の変数に復元する第1の保証コードを生成する第1の保証コード生成ステップと、
前記第1の実行経路コード生成ステップと前記第1の保証コード生成ステップとにおいて生成されるコード列で参照される変数が特定の値を保持することが多い場合には、当該コード列を複製したうえで、複製したコード列における前記特定の値を保持することが多い変数を当該変数が保持する値に置き換え、前記コード列で参照される変数が置き換えた値と異なる値を保持する場合には、前記指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を当該コード列の先頭に挿入してなる第2の実行経路コードを生成する第2の実行経路コード生成ステップと、
前記一部命令列において制御が合流する基本ブロック中で定義される変数が存在する場合には、当該変数の定義箇所と参照箇所とを第2のその他の変数に置き換える合流定義変数置換ステップと、
前記第2のその他の変数であって前記一部命令列の出口で生存が必要とされる第2のその他の変数については、当該第2のその他の変数を元の変数に復元する変数保証コードを一部命令列の出口に生成する合流定義変数保証コード生成ステップと、
前記合流定義変数置換ステップと前記合流定義変数保証コード生成ステップとを実施した後の、前記指定される実行経路上における全命令列に対応する目的コードであって前記指定される実行経路の入口で生存が必要とされかつ当該指定される実行経路上で定義されている変数を第3のその他の変数に置き換えてなる第3の実行経路コードを生成する第3の実行経路コード生成ステップと、
前記第3のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第3のその他の変数を元の変数に復元する第2の保証コードを生成する第2の保証コード生成ステップと、
前記合流定義変数置換ステップと前記合流定義変数保証コード生成ステップとを実施した後の、前記一部命令列に対応する部分コードを生成する部分コード生成ステップと、
前記第3の実行経路コードの条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第3の実行経路コード中の条件分岐命令の分岐先を、前記部分コード中の当該分岐条件が成立しない場合における分岐先になるように第1の分岐コードを生成する第1の分岐コード生成ステップと、
前記第1の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第1の実行経路コード中の分岐命令に、前記第3の実行経路コードの始点に分岐する第2の分岐コードを生成する第2の分岐コード生成ステップと、
前記第2の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第2の実行経路コード中の分岐命令に、前記第1の実行経路コードの始点に分岐する第3の分岐コードを生成する第3の分岐コード生成ステップと、
前記第1の実行経路コード生成ステップと、前記第1の保証コード生成ステップと、前記第2の実行経路コード生成ステップと、前記第3の実行経路コード生成ステップと、前記第2の保証コード生成ステップとで生成される各コード列中の命令間の依存関係を解析して、当該命令間の依存関係を算出する依存解析ステップと、
前記依存解析ステップが算出する前記命令間の依存関係に基づいて前記指定される実行経路中の命令の並び替えを行う並列化ステップと、
を含む。これは、上記(18)のコンパイラ装置に対応したものである。
(23)本発明によるコンパイラプログラムは、上記(19)のコンパイル方法に対応したもので、
分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラプログラムであって、
前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定する実行経路指定ステップと、
前記実行経路指定ステップにおいて指定される実行経路上で定義されている変数であって当該指定される実行経路の入口において生存が必要とされる変数をその他の変数に置き換えてなる第1の実行経路コードを生成する第1の実行経路コード生成ステップと、
前記第1の実行経路コード生成ステップにおいて置き換えられたその他の変数であって前記指定される実行経路の出口においても生存が必要とされるその他の変数を元の変数に復元する保証コードを生成する保証コード生成ステップと、
前記一部命令列に対応する部分コードを生成する部分コード生成ステップと、
前記指定される実行経路上の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記指定される実行経路上の条件分岐命令に、前記部分コードの始点に分岐する第1の分岐コードを生成する第1の分岐コード生成ステップと、
前記指定される実行経路上の命令間の依存関係の解析に基づいて、命令間の依存関係を算出するとともに、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する前記分岐コードとの間に依存を追加し、かつ、例外が発生しないように命令間の依存を付加する第1の依存解析ステップと、
前記第1の依存解析ステップにおいて付加する前記命令間の依存に基づいて前記指定される実行経路中の命令の並び替えを行う並列化ステップと、
をコンピュータに実行させるためのコンパイラプログラムである。
(24)上記(23)のコンパイラプログラムにおいて、コンピュータに実行させるためのステップとして、
前記指定される実行経路の実行中に例外が発生した際の戻り場所を特定する命令コードを前記指定される実行経路上に追加する戻り場所設定命令コード生成ステップと、
前記指定される実行経路上の命令間の依存関係の解析に基づいて、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する分岐コードとの間に依存を追加する第2の依存解析ステップと、
をさらに含み、
前記第2の依存解析ステップでは、前記第1の依存解析ステップが実施する、例外が発生しないように命令間に付加する依存については、それを付加しない、という態様がある。これは、上記(20)のコンパイル方法に対応したものである。
(25)上記(24)のコンパイラプログラムにおいて、コンピュータに実行させるためのステップとして、
例外が発生した際に、前記命令コードで指定する前記戻り場所に戻る処理ルーチンを前記目的コードに追加する割り込み発生時処理ルーチン付加ステップを、
さらに含む、という態様がある。これは、上記(21)のコンパイル方法に対応したものである。
(26)また本発明によるコンパイラプログラムは、
分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラプログラムであって、
前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定する実行経路指定ステップと、
前記実行経路指定ステップにおいて指定される実行経路上における全命令列に対応する目的コードであって、前記指定される実行経路の入口において生存が必要とされかつ前記指定される実行経路上で定義されている変数が第1のその他の変数に置き換えられてなる第1の実行経路コードを生成する第1の実行経路コード生成ステップと、
前記第1のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第1のその他の変数を元の変数に復元する第1の保証コードを生成する第1の保証コード生成ステップと、
前記第1の実行経路コード生成ステップと前記第1の保証コード生成ステップとにおいて生成されるコード列で参照される変数が特定の値を保持することが多い場合には、当該コード列を複製したうえで、当該複製したコード列における前記特定の値を保持することが多い変数を当該変数が保持する値に置き換え、前記コード列で参照される変数が置き換えた値と異なる値を保持する場合には、前記指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を当該コード列の先頭に挿入してなる第2の実行経路コードを生成する第2の実行経路コード生成ステップと、
前記一部命令列において制御が合流する基本ブロック中で定義される変数が存在する場合には、当該変数の定義箇所と参照箇所とを第2のその他の変数に置き換える合流定義変数置換ステップと、
前記第2のその他の変数であって前記一部命令列の出口で生存が必要とされる第2のその他の変数については、当該第2のその他の変数を元の変数に復元する変数保証コードを一部命令列の出口に生成する合流定義変数保証コード生成ステップと、
前記合流定義変数置換ステップと前記合流定義変数保証コード生成ステップとを実施した後の、前記指定される実行経路上における全命令列に対応する目的コードであって前記指定される実行経路の入口で生存が必要とされかつ当該指定される実行経路上で定義されている変数を第3のその他の変数に置き換えてなる第3の実行経路コードを生成する第3の実行経路コード生成ステップと、
前記第3のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第3のその他の変数を元の変数に復元する第2の保証コードを生成する第2の保証コード生成ステップと、
前記合流定義変数置換ステップと前記合流定義変数保証コード生成ステップとを実施した後の、前記一部命令列に対応する部分コードを生成する部分コード生成ステップと、
前記第3の実行経路コードの条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第3の実行経路コード中の条件分岐命令の分岐先を、前記部分コード中の当該分岐条件が成立しない場合における分岐先になるように第1の分岐コードを生成する第1の分岐コード生成ステップと、
前記第1の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第1の実行経路コード中の分岐命令に、前記第3の実行経路コードの始点に分岐する第2の分岐コードを生成する第2の分岐コード生成ステップと、
前記第2の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第2の実行経路コード中の分岐命令に、前記第1の実行経路コードの始点に分岐する第3の分岐コードを生成する第3の分岐コード生成ステップと、
前記第1の実行経路コード生成ステップと、前記第1の保証コード生成ステップと、前記第2の実行経路コード生成ステップと、前記第3の実行経路コード生成ステップと、前記第2の保証コード生成ステップとで生成される各コード列中の命令間の依存関係を解析して、当該命令間の依存関係を算出する依存解析ステップと、
前記依存解析ステップが算出する前記命令間の依存関係に基づいて前記定される実行経路中の命令の並び替えを行う並列化ステップと、
をコンピュータに実行させるためのコンパイラプログラム。これは、上記(21)のコンパイル方法に対応したものである。
また、本発明におけるコンパイラ装置は、前記ソースプログラムを逐次実行するインタプリタ機能を有し、前記インタプリタ機能により前記一部命令列における実行経路の情報を収集し、実行頻度が高い実行経路抽出する経路抽出器を備え、前記実行経路指定器は、前記抽出器によって抽出された実行経路を指定することとしてもよい。また、前記インタプリタ機能により実行頻度が高い実行経路上で参照される変数が保持する値の情報を収集し、出現頻度が高い値を抽出する値抽出器を備え、抽出された変数と値を前記実行経路コード生成器において使用してもよい。
このように構成すれば、より実行時の動作形態に合致したより正確な、実行頻度の高い実行経路と、変数の保持する値の情報をインタプリタより得られるので、ユーザが指定する場合や特定の経験値で情報をコンパイラに与える場合と比較して実行速度を向上させることができる。
本発明によれば、指定された実行経路の基本ブロックを拡張するとともに、命令スケジューリングの対象範囲を広げるので、より効果的に最適化を行うことができる。また、実行経路の命令文が優先的に実行され、実行経路の途中に分岐を含まない構成であるため、実行経路の実行確率が他の実行経路より高い場合に、当該実行経路の実行速度を向上させることができる。
また、ホットパス上にある例外を発生する可能性のある命令も制限なくホットパス上を移動できるので、より命令の並列実行化が促進され、実行速度を向上させることができる。
また、実行経路上の変数が定数に置き換えられ得るので、定数伝播最適化を実施する機会が増え、さらなる実行速度を向上させることができる。
また、指定された実行経路を実行するための分岐条件が成立しない場合に、一部コードの途中へ分岐するので、実行経路を実行するための分岐条件が成立しない場合に、部分コードの始点から実行する場合に比較して実行速度を向上させることができる。
また、より実行時の動作形態に合致したより正確な、実行頻度の高い実行経路と、変数の保持する値の情報をインタプリタより得られるので、ユーザが指定する場合や特定の経験値で情報をコンパイラに与える場合と比較して実行速度を向上させることができる。
以下、本発明の好ましい具体例について図面を参照して説明する。
<実施の形態>
本発明の実施の形態におけるコンパイラ装置は、ソースプログラムを読み込み、プログラムを字句列に分解する字句解析を行い、字句の列に基づいてプログラミング言語の構文木を構築する構文解析を行い、構文解析によって構築された構文木に基づいて装置内部の中間コードで記述された中間プログラムを生成し、中間プログラムについて命令スケジューリング等の最適化を行い、変数についてレジスタ等の資源割付を行った後の中間プログラムを実行形式プログラムに変換する。
<構成>
図1は、本発明の実施の形態におけるコンパイラ装置Aの全体構成を示す機能ブロック図である。コンパイラ装置Aは、構文解析部1,最適化部2,資源割付部3,および実行コード生成部4を備える。コンパイラ装置Aは、具体的には、マイクロプロセッサ,ROM(Read Only Memory),RAM(Random Access Memory),ハードディスク装置等を用いて実現されるコンピュータシステムである。ROMまたはハードディスク装置は、コンピュータプログラムを記憶している。図1に示したコンパイラ装置Aの各部の機能は、マイクロプロセッサがコンピュータプログラムを実行することにより実現される。また、情報の記憶および各部間での受け渡しは、RAMおよびハードディスク装置を用いて実現される。
以下、各部の機能について説明する。構文解析部1は、ソースプログラムF1を読み出し、構文解析を行ってソースプログラムF1中の制御構造を認識し、中間コード列である中間プログラムを生成し、コンパイラ装置A内に格納する。中間プログラムの制御構造は、ソースプログラムF1の制御構造と等価な制御構造となるように条件分岐の中間コードと、分岐の中間コードと、ラベルの中間コードとを用いて表現される。なお、条件分岐中間コードは、条件の判定を示す判定中間コード(例えば図11のS202のt1<=0)と、条件の判定が真である場合の分岐先を示す分岐中間コード(例えば図11のS203のgoto S1)とにより構成される。
最適化部2は、プログラム変換部2Aと中間コードスケジューリング部2Bを含んで構成され、構文解析部1で生成された中間プログラムの制御フロー解析およびデータフロー解析を行い、その解析結果を後述するプログラム変換部2Aへ送出する。ここで、制御フロー解析とは、中間プログラムの制御の流れを解析して中間プログラムを基本ブロックに分割することであり、データフロー解析とは、変数の生存区間、定義箇所および参照箇所を解析することである。
変数の定義および参照は以下のように定められる。中間コードにおいて変数が保持する値が更新される場合に、その中間コードにおいて変数が定義されるといい、その中間コードを変数の定義箇所と呼ぶ。また、中間コードにおいて変数が保持する値が使われる場合、その変数は、その中間コードで参照されるといい、その中間コードを変数の参照箇所と呼ぶ。
次に、プログラム変換部2Aについて説明する。プログラム変換部2Aは、変数情報算出部2a,実行経路中間コード生成部2b,判定中間コード生成部2c,保証中間コード生成部2d,および分岐中間コード生成部2eを備える。
プログラム変換部2Aは、装置外からホットパス情報F2が入力されるとプログラム変換部2Aの内部に格納し、ホットパスHPを含むサブルーチンプログラムについてプログラム変換を行う(実行経路指定)。
ここで、ホットパス情報F2は、ユーザによって予め定められた実行経路を表す情報がホットパス情報F2としてユーザによって入力される。なお、本実施の形態の説明において、ホットパスHPを含むサブルーチンプログラムを部分プログラムと呼び、部分プログラムはホットパスHPの始点と終点とを共通とする複数の実行経路を含む。また本実施の形態の説明において、部分プログラムに対応する中間コード列を部分中間コード列と呼ぶ。
変数情報算出部2aは、最適化部2から送出された解析結果に基づき各基本ブロックにおける変数の生存情報および定義情報を算出し、算出した生存情報、定義情報,およびホットパス情報F2に基づいてパス入力変数X1,パス出力変数X2,パス置換対象変数X3,およびパス保証変数X4(例えば図9B参照)を算出する(図2ステップn14参照)。また、変数情報算出部2aは、算出したパス置換対象変数X3を実行経路中間コード生成部2bへ送出し、パス保証変数X4を保証中間コード生成部2dへ送出する。
ここで、変数の生存情報は、制御フロー解析によって生成された各基本ブロックの始点である入口で生存している変数(以下「生存情報IN」という)と、各基本ブロックの終点である出口で生存している変数(以下「生存情報OUT」という)とを示す。生存情報INは、基本ブロックの入口以降で定義される前に参照される変数であり、生存情報OUTは基本ブロックの出口以降で定義される前に参照される変数である。また、変数の定義情報(以下「定義情報DEF」という)は各基本ブロックにおいて定義されている変数を示す。なお、変数の生存については前述した非特許文献2に記載されているものと同様である。
パス入力変数X1はホットパスHPの入口において生存している変数であってホットパスHPの始点となる基本ブロックにおける生存情報INを示す。パス出力変数X2はホットパスHPの出口において生存している変数であって、ホットパスHPの終点となる基本ブロックにおける生存情報OUTを示す。
パス置換対象変数X3は、パス入力変数X1でありかつホットパスHP上で定義されている変数を示し、パス保証変数X4は、パス置換対象変数X3でありかつパス出力変数X2である変数を示す。
実行経路中間コード生成部(第1の実行経路コード生成器)2bは、プログラム変換部2Aに格納されたホットパス情報F2と、コンパイラ装置A内に格納された中間プログラムとを読み出し、中間プログラムのホットパスHP上の中間コード列について、変数情報算出部2aから送出されたパス置換対象変数X3の識別子を置き換えた実行経路中間コード列を生成し、生成した実行経路中間コード列を判定中間コード生成部2cへ送出する(図2ステップn15、図4参照)。
ここで、パス置換対象変数X3の識別子の置換について説明する。実行経路中間コード生成部2bは、パス置換対象変数X3の識別子を、変数の識別子等の情報を表した変数名表には存在しない識別子に置き換え、変数の置き換えと同時にパス置換対象変数X3と置換した変数のペアを生成して、生成した変数のペアをプログラム変換部2A内部に格納する。変数名表は、字句解析の際にプログラム上で宣言されている変数の識別子と変数の型等の情報とを集めたものであり、コンパイラ装置A内に格納される。なお、パス置換対象変数X3の識別子の置き換えについては、図10のt1〜t3が参照される。また、置換した変数のペアについては、図9C、図4ステップn48が参照される。
判定中間コード生成部(部分コード生成器)2cは、実行経路中間コード生成部2bから送出された実行経路中間コード列に含まれる条件分岐中間コード中の判定中間コードを、ホットパスHPが実行されない条件となるように設定したうえで、変換後の実行経路中間コード列をプログラム変換部2Aの内部に格納する。なお、ホットパスHPが実行されない条件となるように設定する際には、図11に示すS202,S203からB1への移行が参照される。
保証中間コード生成部(保証コード生成器)2dは、変数情報算出部2aから送出されたパス保証変数X4に基づいて、パス保証変数X4の識別子を元の識別子に復元する中間コードの列である保証中間コード列を生成し、実行経路中間コード列の直後に配置し、プログラム変換部2Aの内部に格納する(図11のS301参照)。なお、ここで、実行経路中間コード列と保証中間コード列で構成される中間コード列を、高速化ブロックと呼ぶ(図11のH1参照)。高速化ブロックH1は、条件分岐中間コードにおいて、高速化ブロックH1の途中から高速化ブロックH1の外側に向けた分岐は存在するものの、高速化ブロックH1の中へ分岐することはないという特徴を有する。
分岐中間コード生成部(第1の分岐コード生成器)2eは、プログラム変換部2Aの実行経路中間コード列に含まれる条件分岐中間コードを読み出し、当該条件分岐中間コードの判定中間コードの条件が真である場合に、当該条件分岐中間コードの分岐中間コードを、部分中間コードの始点に分岐する分岐中間コードとして設定するとともに、当該実行経路中間コード列をプログラム変換部2Aの内部に格納する。また、分岐中間コード生成部2eは、コンパイラ装置A内に格納されている部分中間コード列をサブルーチン化する。すなわち、当該部分中間コード列の終点に、部分中間コード列の終点の直後の中間コードへ分岐する分岐中間コードを挿入する。さらに、分岐中間コード生成部2eは、プログラム変換部2Aの内部に格納されている高速化ブロックH1を、部分中間コード列の始点の直前の中間コードの直後と、部分中間コードの終点の直後の中間コードの直前との間に配置し、このように加工したもの(部分中間コード列)をコンパイラ装置A内に格納する。なお、これについては、図11のプログラム構成を参照することができる。部分中間コードの始点へ分岐することについては、図11のプログラム構成におけるgoto S1を参照することができる。また、部分中間コード列の終点の直後の中間コードへ分岐する分岐中間コードを挿入することについては、図11のプログラム構成におけるS151を参照することができる。
次に、中間コードスケジューリング部2Bについて説明する。中間コードスケジューリング部2Bは、コンパイラ装置A内に格納されている中間プログラムを読み出し、中間コード命令間の実行順番を決定するように中間コード依存解析部2fにて依存解析を行い、さらに、中間プログラムの中間コードを、並列実行可能となるように中間コード並列化部2gにて並べ換える。なお、依存解析については図12を参照することができる。また、中間コードの並べ換えについては図11の高速化ブロックH1から図13の高速化ブロックH1への変化を参照することができる。
ここでは特に、本発明に関係する高速化ブロックH1に対する中間コード依存解析部2fと中間コード並列化部2gとの処理について述べる。その他の部分に関しては非特許文献1に記載されている方法と同様である。
中間コード依存解析部(第1の依存解析器)2fは、高速化ブロックH1中の中間コード列における中間コード間の依存関係を解析し、解析結果である依存解析情報を中間コード並列化部2gへ送出する。なお、本発明では、上記解析等に基づいて中間コード間に特定の依存関係を設定することを依存の生成という。ここで、中間コード依存解析部2fは、通常の演算子に対しては、非特許文献1に記載されているものと同様の依存を生成させるが、一部の中間コードに関しては特別な依存を生成させる。以下、説明する。
まず、第一に、中間コード依存解析部2fは、高速化ブロックH1中の保証中間コードの実行に先だって、高速化ブロックH1中の分岐条件中間コードが実行されるように、分岐条件中間コードから保証中間コードへの依存を生成する。なお、これについては、図12において、S301より上位にS202,S203を置くことを参照することができる。
第二に、中間コード依存解析部2fは、例外を引き起こす可能性のある中間コードである例外発生中間コードと例外の発生原因となる例外発生変数とを特定する。さらに中間コード依存解析部2fは、特定した例外発生変数を参照して判定を行う判定中間コードが、例外発生中間コードより先に実行されるか否かを判定し、判定中間コードが、例外発生中間コードより先に実行されると判定する場合には、その実行順番を保つべく、判定中間コードから例外発生中間コードへの依存を生成する。なお、これについては、図12において、S102より上位にS203を置くことを参照することができる。また、例外を引き起こすとは、S102の代入文がS203より先行して実行される場合において除数fが0になること(ゼロ割算)により、例外、すなわち、処理不可能な状態が発生することをいう。
中間コード並列化部(並列化器)2gは、中間コード依存解析部2fから送出される依存解析情報を基にして、高速化ブロックH1中の中間コード列をスケジューリングして並列化する(図13参照)。ここで、スケジューリング方法としては、非特許文献1に記載されているリストスケジューリング法が適用可能である。
資源割付部3は、生成された全中間コードを読み出し、中間コードから実行コードを生成する際に、全中間コードにおける変数の生存情報に基づいて各変数に、レジスタ,メモリなどのハードウェア資源を割当てる。実行コード生成部4は、資源割付が行われた全中間コードについて、機械語である実行コードに変換し、コンパイラ装置外に出力する。
<データ>
本実施の形態のコンパイラ装置Aで用いるデータについて説明する。図9Aは、変数情報算出部2aが、図5Bに示す制御フローグラフの基本ブロック毎に、変数の生存情報であるIN12,OUT14と、定義情報であるDEF13とを算出した結果を示す。図9Bは、変数情報算出部2aが図9Aの算出結果に基づいて、パス入力変数X1,パス出力変数X2,パス置換対象変数X3,およびパス保証変数X4を算出した結果を示す。図9Cは、実行経路中間コード生成部2bが図5Bに示す制御フローグラフの各基本ブロックにおいて、パス置換対象変数X3と置き換えた変数のペアの生成履歴を示す。図10に示す制御フローグラフは、実行経路中間コード生成部2bが、図5BのホットパスHPの中間コードを複写し複写した中間コードについて変数置換処理を行うことで新たに生成する実行経路を示す。
<動作>
次に、本発明の特徴部分である最適化部2の内部の動作を中心に、図2に示す動作フローを説明する。まず、構文解析部1は、ソースプログラムF1が入力されると構文解析を行い、中間プログラムを生成し、コンパイラ装置Aの内部に格納する(ステップn11)。
次に、プログラム変換部2Aは、ホットパス情報F2(図1)が入力されると、ホットパス情報F2をプログラム変換部2Aの内部に格納する(ステップn12)。
ステップn12に続いて最適化部2は、中間プログラムを読み出したうえで、読み出した中間プログラムにおける制御フロー解析とデータフロー解析とを実施し、その解析結果を変数情報算出部2aへ送出する。変数情報算出部2aは、最適化部2による解析結果に基づいて部分プログラムの各基本ブロックにおける変数の生存情報(IN,OUT)と定義情報(DEF)とを算出する(ステップn13)。
次に、変数情報算出部2aはステップn13で算出された生存情報(IN,OUT),定義情報DEF,およびステップn12において入力されたホットパス情報F2に基づいて、部分中間コード列のパス入力変数X1,パス出力変数X2,パス置換対象変数X3,およびパス保証変数X4を算出する。変数情報算出部2aは、実行経路中間コード生成部2bへパス置換対象変数X3を送出し、保証中間コード生成部2dへパス保証変数X4を送出する(ステップn14)。
ステップn14に続いて、実行経路中間コード生成部2bは、ホットパス情報F2と部分中間コード列とを読み出したうえで、読み出した部分中間コード列におけるホットパスHPに対応する中間コード列を複製する。さらに実行経路中間コード生成部2bは、複製した中間コード列において、パス置換対象変数X3の識別子を置き換えた実行経路中間コード列を生成し、生成した実行経路中間コード列を判定中間コード生成部2cへ送出する(ステップn15)。なお、これについては図10のプログラムを参照することができる。パス置換対象変数X3の識別子の置き換えとは、c→t1,c→t2,d→t3に相当する。
次に、判定中間コード生成部2cは、実行経路中間コード列を受け取ると、実行経路中間コード列に含まれる条件分岐中間コード中の判定中間コードを、ホットパスHPが実行されない条件となるような判定中間コードに設定し、設定した判定中間コードをプログラム変換部2Aの内部に格納する(ステップn16)。
ここで、条件分岐中間コード中の判定中間コードとは、図10のプログラムにおける、
S32:If(t1>0)goto S4
S92:If(f>0)goto S10
に相当する。
ホットパスHPが実行されない条件となるような判定中間コードに設定するとは、図11のプログラムにおける、
S202:If(t1<=0)goto S1
S203:If(f<=0)goto S1
に相当する。
ここでは、判定条件の論理を反転させることにより、その行き先を下流からサブルーチンの部分中間コード列の先頭S1に変更している。その結果として、論理反転後の判定条件が肯定的となるときには、ホットパスHPが実行されないことになる。
次に、保証中間コード生成部2dは、変数情報算出部2aから受け取ったパス保証変数X4を復元する保証中間コード列を生成し、プログラム変換部2Aの内部に格納する。さらに、保証中間コード生成部2dは、保証中間コード列を実行経路中間コード列の後に配置し、高速化ブロックを構築し、プログラム変換部2Aの内部に格納する(ステップn17)。これについては、図11のプログラムおいて基本ブロックB103(S301:c=t2)を生成したうえで、生成した基本ブロックB103を基本ブロックB104の後ろに配置することで、高速化ブロックH1を構築することに相当する。
ステップn17に続いて、分岐中間コード生成部2eは、ステップn16で格納された実行経路中間コード列中の条件分岐中間コードを読み出し、当該条件分岐中間コード中の分岐中間コードを部分中間コードの始点から実行するように設定し、そのように設定した条件分岐中間コードをプログラム変換部2Aの内部に格納する。さらに、分岐中間コード生成部2eは、部分中間コード列をサブルーチン化し、結果をコンパイラ装置A内に格納する(ステップn18)。
これについては、図11のプログラムにおいて、条件分岐中間コードS202と条件分岐中間コードS203とのそれぞれの分岐中間コードを、部分プログラムの始点であるブロックB1の中間コードS1に分岐することが対応する。実行経路中間コード列は図11の左側の列に相当し、サブルーチン化された部分中間コードは図11の右側の列に相当する。
ステップn18に続いて最適化部2は、コンパイラ装置A内に格納されている中間プログラムの冗長削除処理を行う。最適化部2は、冗長削除処理を行った後の中間プログラムをコンパイラ装置A内に格納する(ステップn19)。ここで、冗長削除処理は、前述の非特許文献に記載されているものと同様であって例えば無駄な演算を削除する処理などが例に挙げられる。
ステップn19に続いて、中間コード依存解析部2fは、コンパイラ装置A内に格納されている中間プログラム中の中間コードの依存解析を行い(図12参照)、その解析結果である依存解析情報を中間コード並列化部2gに送出する。中間コード依存解析部2fは、特に高速化ブロックH1に、前述の例外発生中間コードを考慮した依存解析を行う(ステップn20)。
ステップn20に続いて、中間コード並列化部2gは、中間コード依存解析部2fから受け取った依存解析情報に基づいて、コンパイラ装置A内に格納されている中間プログラムを並列化する(ステップn21:図13参照)。
<変数情報算出処理>
次に、変数情報算出処理について図3を参照して説明する。これは、図2のステップn13,n14に相当する。ステップn31において、最適化部2は部分中間コードの制御フロー解析およびデータフロー解析を行う。次いでステップn32において、変数情報算出部2aは、制御フロー解析およびデータフロー解析の結果に基づいて部分プログラムの変数の生存情報(IN,OUT)、定義情報(DEF)を算出する。
続いて、変数情報算出部2aは、ステップn32において算出された生存情報INのうちホットパスHPの始点となる基本ブロックにおける生存情報INをパス入力変数X1として算定し、ステップn32において算定された生存情報OUTのうち、ホットパスHPの終点となる基本ブロックにおける生存情報OUTをパス出力変数X2として算定する(ステップn33)。
ステップn33に続いて、変数情報算出部2aは、ホットパスHPにおける定義情報DEFでありかつパス入力変数X1である変数を、パス置換対象変数X3として算定する(ステップn34)。
続いて、変数情報算出部2aはステップn34で算定したパス置換対象変数X3でありかつパス出力変数X2である変数をパス保証変数X4として算定し、実行経路中間コード生成部2bへパス保証変数X4およびパス置換対象変数X3を送出する(ステップn35)。
<変数置換処理>
実行経路中間コード生成部2bは、変数情報算出部2aから送出されたパス置換対象変数X3のデータを受け取ると、部分中間コードとホットパス情報F2とを読み出し、部分中間コードのホットパスHPに対応する中間コードを複製し、複製した中間コードのパス置換対象変数X3に変数置換処理を繰り返し実施する。以上の処理を行うことで、実行経路中間コード生成部2bは、パス置換対象変数X3と、変数置換処理により得られる置換後変数とのペア(以下「変数のペア」という)を生成する。これは、図2のステップn15に対応する。
以下、図4を参照して実行経路中間コード生成部2bが行う変数置換処理について説明する。複製した中間コードについて繰り返し変数置換処理を行う(ステップn41)。中間コードでパス置換対象変数X3が参照されているか否かを判断する(ステップn42)。ステップn42で参照されていないと判断する場合はステップn45へ進む。
ステップn42で参照されていると判断する場合は、既に生成された変数のペアに当該パス置換対象変数X3が含まれているか否かを判断する(ステップn43)。ステップn43で、含まれていないと判断する場合はステップn45へ進む。
ステップn43で、含まれていると判断する場合、当該命令文で参照されているパス置換対象変数X3の識別子をペアに含まれている変数に置き換えたうえで(ステップn44)、ステップn45へ進む。
以上の処理(ステップn42−ステップn44)を実施したのち、中間コードでパス置換対象変数X3が定義されているか否かを判断する(ステップn45)。ステップn45で、定義されていないと判断する場合は、ループn41−n49を抜ける。ステップn45で、定義されていると判断する場合は、既存の変数のペアに当該パス置換対象変数X3が含まれているか否かを判断する(ステップn46)。ステップn46で含まれていると判断する場合は、当該パス置換対象変数X3のペアを削除したうえで(ステップn47)、ステップn48へ進む。ステップn46で、含まれていないと判断する場合は、ステップn47を実施することなくステップn48へ進む。
ステップn48では、定義されているパス置換対象変数X3を置き換える変数を定めたうえで、定義されているパス置換対象変数X3を定めた変数に置き換える。そして、当該パス置換対象変数X3と置き換えた変数とのペアを新たに生成する。以上の処理を行ったのち、ループn41−n49を抜ける。
<動作例>
次に、図5AのソースプログラムF1の一部である部分プログラムを例にして、図2に示す動作フローの具体的な動作例を、図5,図9〜図12を参照して説明する。なお、この例における中間コードは、ソースプログラムF1に近い中間コードで表したものとする。
ステップn11において、構文解析部1は、部分プログラムを構文解析することで、部分中間コードを生成してコンパイラ装置Aの内部に格納する。次に、ステップn12において、プログラム変換部2Aは、制御フローグラフ(図5B参照)の基本ブロックB1,B2,B4,B5,B7の順に遷移する経路HPをホットパスとするホットパス情報F2が入力されると、当該ホットパス情報F2をプログラム変換部2A内に格納する。
ステップn13において、最適化部2は、制御フロー解析とデータフロー解析とを行い、変数情報算出部2aは、制御フローグラフ(図5B参照)の基本ブロックB1〜B7における生存情報IN,生存情報OUT,および定義情報DEFを算出する(図9A)。例えば、基本ブロックB1(図5B参照)の生存情報INは、図9AのブロックB1のIN12に含まれる変数であり、同ブロックの生存情報OUTは同図のブロックB1のOUT14に含まれる変数である。また、同基本ブロックにおける定義情報は同図の基本ブロックB1のDEF13に含まれている変数である。
次に、ステップn14において、変数情報算出部2aは、図9Aに示す生存情報および定義情報と、ステップn12で入力されたホットパス情報F2とに基づいてパス入力変数X1,パス出力変数X2,パス置換対象変数X3,およびパス保証変数X4を算出する(図9B参照)。
パス入力変数X1は、ホットパスHPの入口で生存する変数、すなわち基本ブロックB1(図5B参照)の生存情報INであり、図9AのブロックB1のIN12に含まれている変数である。パス出力変数X2は、ホットパスHPの出口で生存する変数、すなわち基本ブロックB7(図5B参照)の生存情報OUTであり、図9Aに示すブロックB7のOUT14に含まれる変数である。パス置換対象変数X3は、パス入力変数X1と、ホットパスHP上の基本ブロックB1,B2,B4,B5,B7におけるDEF13(図9A参照)に含まれる変数とを含む。パス保証変数X4は、パス出力変数X2とパス置換対象変数X3とに含まれる変数である。
この例では、図9Aに示すDEF13に含まれる変数が{a,c,d,f,x}であり、パス入力変数X1が{b,c,d,e,g,z,w,y}であるので、その積集合{c,d}がパス置換対象変数X3となり、パス出力変数X2が{a,c,e,f,z,w,x,y}であるので、{c}がパス保証変数X4となる。変数情報算出部2aは、算出したパス置換対象変数X3を実行経路中間コード生成部2bへ送出し、また算出したパス保証変数X4を保証中間コード生成部2dへ送出する。
次に、ステップn15において、実行経路中間コード生成部2bは、部分中間コードとホットパス情報F2とを読み出し、図5のホットパスHP上の中間コードS1〜S15を複製し、複製した中間コードを含む新たな基本ブロックB12〜B152を生成する。そして、複製した中間コードのパス置換対象変数X3の変数置換処理を行って、変数のペアを生成する。複製した中間コードに変数置換処理を行うことで新たに生成される実行経路を図10に示す。
ここで、図10の基本ブロックB12,B22を例に変数置換処理(図4)の動作を説明する。まず、変数置換処理前の基本ブロックB12に含まれる複製した中間コードは、図5Bに示す基本ブロックB1に含まれる中間コードと同じである。基本ブロックB12において複製された中間コードS12では、パス置換対象変数X3(=c)は参照されている(図4のステップn42:YES)が、変数cのペアが存在していない。すなわち、この段階ではまだ変数cのペアは生成されておらずステップn43の判断はNOとなる(生成されるのはステップn48)。したがって、実行経路中間コード生成部2bは、中間コードS12の変数cの変数置換処理を行わない。
また中間コードS12ではパス置換対象変数X3を“c”に定義されておらず、ここで定義されているのは“a”であってステップn45の判断はNOである。そのため、次に複製する中間コードS22における変数に注目する。実行経路中間コード生成部2bは、変数の置き換え前の中間コードS22において、パス置換対象変数X3(=c)が定義されており(ステップn45でYES)、変数cのペアが存在しないと判断する(図4ステップn46:NO)。以上の判断に基づいて実行経路中間コード生成部2bは、定義箇所の変数cの識別子を変数名表および変数のペアで使われていないt1に置き換えて、新たに変数のペア(c,t1)を生成する(ステップn48)。
次に中間コードS32ではパス置換対象変数の参照も定義も存在しないので実行経路中間コード生成部2bは、変数置換処理は行うことなく次の基本ブロックB22の実行文S42に注目する。なお、基本ブロックB12への変数置換処理を行った後のペアの生成状態は、図9CのB12の行の置換変数ペアの生成履歴50に示すとおりである。
引き続き、実行経路中間コード生成部2bは、変数の置き換え前の命令文S42において、パス置換対象変数X3(=c)が参照されており(ステップn42でYES)、図9CのB12に示すように変数cのペア(c,t1)が存在しているため、参照箇所の変数cの識別子をt1に置き換える。次に、実行経路中間コード生成部2bは、中間コードS42ではパス置換対象変数X3(=c)が定義もされており(ステップn45でYES)、変数cのペア(c,t1)が存在すると判断すると(ステップn46でYES)、ペア(c,t1)を削除したうえで(ステップn47)、定義箇所の変数cの識別子を、変数名表および変数のペアで使われていないt2に置き換えることで、新たに変数のペア(c,t2)を生成する(ステップn48)。
この例において、実行経路中間コード生成部2bが、基本ブロックB72の中間コードS152まで変数置換処理を繰り返し、生成された変数のペアの履歴50を図9Cに示す。
実行経路中間コード生成部2bは、図9Cに示すブロックB72の変数ペア(c,t2)および(d,t3)を保証中間コード生成部2dへ送出し、図10に示す実行経路中間コードの中間コードS12〜中間コードS152を判定中間コード生成部2cへ送出する。
次に、ステップn16において、判定中間コード生成部2cは、受け取った中間コード中の条件分岐中間コードS32(図10のif(t1>0)goto S4)と条件分岐中間コードS92(図10のif(f>0)goto S10)との判定条件を論理反転させることで、条件分岐中間コードS202(図11のif(t1<=0)goto S1)と条件分岐中間コードS203(図11のif(f<=0)goto S1)との判定中間コードを、ホットパスHPが実行されない条件を満たすように設定する。これにより基本ブロックB104が生成される。判定中間コード生成部2cは、このようにして作成した基本ブロックB104をプログラム変換部2A内に格納する。
次に、ステップn17において、保証中間コード生成部2dは、変数情報算出部2aから送出されたパス保証変数X4{c}と変数のペア(c,t2)とに基づいて、識別子t2を、変数cを示す識別子に戻す保証中間コードの中間コードS301を生成し、中間コードS301を含む基本ブロックB103を生成する(図11)。また、保証中間コード生成部2dは、プログラム変換部2A内の基本ブロックB104の直後に基本ブロックB103を配置する。ここで、高速化ブロックH1は、基本ブロックB104と基本ブロックB103とで構成されることになる(図11のH1)。
次に、ステップn18において、分岐中間コード生成部2eは、基本ブロックB104を読み出し、条件分岐中間コードS202と条件分岐中間コードS203とのそれぞれの分岐中間コードを、部分プログラムの始点であるブロックB1の中間コードS1に分岐する分岐中間コードに設定したうえで、設定した分岐中間コードをプログラム変換部2A内に格納する。
また、分岐中間コード生成部2eは、部分中間コードの中間コードS15から中間コードS16に分岐する分岐中間コードS151を生成したうえで、生成した分岐中間コードS151を命令文S15の直後(図11のS151)に配置してコンパイラ装置A内に格納する。さらに、分岐中間コード生成部2eは、図11のプログラムに示すように中間コードS0の直後に基本ブロックB104を配置し、中間コードS16の直前に基本ブロックB103を配置する。
次に、ステップn19において、最適化部2は、図11の中間プログラムに冗長削除処理を行う。なお、ステップn19の処理は本発明の主眼ではないので省略し、図11自体が当該ステップを行った後の中間プログラムであるとして以降の説明を行う。
次に、ステップn20において、中間コード依存解析部2fは、図11の高速化ブロックH1に、図12に示す依存解析を行う。中間コード依存解析部2fは、分岐条件中間コードS202および分岐条件中間コードS203が保証中間コードS301より先に実行されるように、分岐条件中間コードS202および分岐条件中間コードS203から保証中間コードS301への依存を生成する。また、図12において中間コード依存解析部2fは、例外を引き起こす例外発生中間コードS102と例外の発生原因となる例外発生変数fとを特定し(分母が0の除算は不可)、例外発生変数fに対応する判定中間コードS203が例外発生中間コードS102より先に実行されるように、判定中間コードS203から例外発生中間コードS102への依存を生成する。
ここで例外が発生する場合について述べる。もし、中間コードS102が判定中間コードS203より先に実行され、かつ、変数fの値がゼロである場合は、中間コードS102においてゼロ割算が発生するため、プロセッサまたはオペレーティングシステムにおいて例外が発生する。なお、それ以外の例外事象としては次のようなものがある。すなわち、変数fがC言語におけるポインタ変数であり、かつ、中間コードS102によって変数fの間接参照が発生すると仮定する。このとき、同様にもし、中間コードS102が判定中間コードS203より先に実行され、かつ、未実装のアドレスやアクセスが禁止されているようなメモリのアドレスを変数fが保持している状態である。このような状態においても、プロセッサまたはオペレーティングシステムにおいて例外が発生する。
次のステップn21において、中間コード並列化部2gは、図13に示すように、中間コード依存解析部2fから送出された依存解析情報(図12参照)から中間コード列をスケジューリングして並列化する。図13は図12の依存の深さ優先でリストスケジューリング法を適用したプログラムである。なお、“//”の表記は、この表記に後続する命令文が並列に実行されることを示す。
<変形例1>(例外発生許容:図14〜図17参照)
上述した実施の形態では、中間コード依存解析部2fが不正に例外が発生しないように、図12において判定中間コードS203から例外発生中間コードS102へ依存を生成したが、変形例1では、このような依存の生成は行われない。すなわち、実行経路中間コード生成部2bは、図14のプログラムに示すように中間コードS401を新規に生成したうえで、図15のプログラムに示すように中間コードS401から例外発生中間コードS102への依存を生成する。
つまり、実行経路中間コード生成部2bは、
・割り込みルーチンから復帰する際の復帰先アドレスを保持する特別な変数である復帰先保持変数を生成し、
・復帰先保持変数へ復帰先アドレスを格納させる中間コードである復帰用途中間コードを生成し(戻り場所設定命令コード生成器)、
これら生成した変数とコードとを実行経路中間コード列の先頭に挿入する。
また、中間コード依存解析部2fは、上述の例外発生変数に関連した判定中間コードと例外発生中間コードとの間の依存を生成しないようにしたうえで、復帰用途中間コードから例外発生中間コードへの依存を生成する(第2の依存解析器)。
以下、上記の処理について、図14〜図17を参照してさらに具体的に説明する。まず、ステップn15において実行経路中間コード生成部2bは、図14の中間コードS401に示すように、復帰先保持変数RAを生成し、かつ変数RAへ復帰先アドレスS1を格納させる復帰用途中間コードS401を実行経路中間コード列の先頭に挿入する。
次にステップn20において、中間コード依存解析部2fは、復帰用途中間コードS401から例外発生中間コードS102への依存を生成する。このとき、中間コード依存解析部2fは、図15に示すように、例外発生変数fに関係した判定中間コードS203と例外発生中間コードS102との間での依存を生成しない。
図16は図15の依存解析情報を利用して、中間コード並列化部2gがスケジューリングを行った結果を示す。図中、例外発生中間コードS102が、判定中間コードS203より先に実行されるようにスケジューリングされている。
図17は、例外発生中間コードS102で例外が発生した際のコンピュータシステム上での実行動作を示す図である。まず、一連の割り込み処理に加えて、割り込みの種類を判定したうえで、復帰先保持変数に保持されているアドレスへ分岐する割り込みルーチンを予めコンピュータシステムに用意しておく(割り込み発生時処理ルーチン付加器)。そして、例外発生中間コードS102において例外が発生した際には、プロセッサまたはオペレーティングシステムにより割り込み処理ルーチンに制御が遷移し(図17の点線A1参照)、割り込み処理ルーチンから復帰先保持変数RAに保持されているアドレスS1へと処理が分岐する(図17の点線A2参照)。なお、復帰先保持変数は資源割付部3にて、特定のメモリや特定のレジスタなどの記憶素子に割り付けられる。
上述の図16の高速化ブロックH2の例は、図13の高速化ブロックH1と比較して実行ステップ数に変化がなく、とりわけ性能改善は見られない。しかしながら、一般に、
・例外発生の確率が低い、
・図12のプログラム等によって生成される判定中間コードS203から例外発生中間コードS102への依存が生成される、
という条件の基では、高速化ブロックH1において更なる高速実行の障害が発生する場合がある。
このような不具合に対して本変形例では、その高速実行の障害になり得る依存自体を取りやめることもできるので、高速化ブロックの更なる高速化を実現することができる。
<変形例2>(定数伝播変形その1)
上述した実施の形態では、ホットパス情報F2(図1参照)は、ユーザによって予め定められた実行経路を表す情報の他に、ホットパスHP中で参照される変数が保持する値の情報である変数保持情報をホットパス情報F2としてユーザによって入力されてもよい。変数保持情報中の変数の値は、変数が保持する可能性が高い値のことである。
ホットパス情報F2中の変数保持情報を利用して、分岐中間コード生成部2eは、高速化ブロックH3中の変数の参照箇所を、変数保持情報が保持する値に置換し、かつ、変数の保持する値が、変数保持情報が保持する値と異なった場合に、部分中間コードの始点から実行するように条件分岐中間コード(定数値判定条件分岐中間コードと呼ぶ)を実行経路中間コード列の先頭に生成するようにしてもよい(第2の実行経路コード生成器)。
以下、上記の場合の処理について、図18〜図20を参照して説明する。図18は、ホットパス情報F2中の変数保持情報に変数bの値が「5」、変数eの値が「8」となっていた場合の分岐中間コード生成部2eでの処理結果を示す。図18では、図11において変数bと変数eの参照箇所とが、それぞれ値「5」,値「8」に置換されている。さらに、実行経路中間コード列の先頭に、変数bが保持する値が値「5」でなかった場合に、中間コードS1に分岐する定数値判定条件分岐中間コードS411が生成されている。また同様に変数eに対応して定数値判定条件分岐中間コードS412が生成されている。
ステップn18において、分岐中間コード生成部2eは、ホットパス情報F2中の変数保持情報を取り出して、高速化ブロックH3の変数の参照箇所を変数保持情報が保持する値で置換する。
図18は、変数保持情報中に変数bの値が「5」に、変数eの値が「8」にそれぞれなった状態を示す。図11と比較すれば分かるとおり図18では、変数bおよび変数eの参照箇所が、それぞれ値「5」,値「8」に置換されている。さらに、分岐中間コード生成部2eは、変数の保持する値が置換した値と異なる場合に、部分中間コードの始点から実行するように条件分岐中間コードを生成する。図18においては、まず、分岐中間コード生成部2eは、変数bが保持する値が「5」でなかった場合に、中間コードS1に分岐する定数値判定条件分岐中間コードS411を実行経路中間コード列の先頭に生成する。また同様に変数eに対応して、分岐中間コード生成部2eは、定数値判定条件分岐中間コードS412を生成する。
次のステップn19において最適化部2は、図18の中間プログラムに冗長性削除処理を行う。図19は冗長性削除処理を行った結果を示す。定数伝播最適化の効果により、中間コードS521と中間コードS82とが削除され、不要コード削除最適化により判定中間コード203が削除される。図20はステップn20,ステップn21を実施した結果を示す。図13と比較して実行ステップ数が1ステップ減少している。
上述のように、ホットパスHP中で参照される変数のうち、変数が保持する値が特定の値に偏っている場合に、更なる高速化ブロックの高速化を実現できる。
<変形例3>(定数伝播変形その2)
上述した変形例2では、分岐中間コード生成部2eは、高速化ブロックH1に、定数値への置換処理と、定数値判定条件分岐中間コードの生成処理とを実施した。しかしながら分岐中間コード生成部2eは、高速化ブロックH1を複製したうえで、複製した高速化ブロックH1に、定数値への置換処理と定数値判定条件分岐中間コードの生成処理とを実施してもよい。さらに、分岐中間コード生成部2eは、複製前の高速化ブロックH1の始点の直前に、ラベルのみのダミーの中間コードを生成したうえで、定数値判定条件分岐中間コードの分岐先をダミーの中間コードにしてもよい。またさらに、複製前の高速化ブロックH1の終了点の直後に、部分中間コードの終了点の直後の中間コードへ分岐する分岐中間コードを挿入してもよい。
以下、上記の場合の処理について、図21〜図22を参照して説明する。ステップn18において、分岐中間コード生成部2eは、高速化ブロックH1を複製し、複製した高速化ブロックH1中の変数に定数値への置き換え処理を実施する。図21では複製された高速化ブロックH4において、変数b,変数eの参照箇所をそれぞれ定数値「5」,定数値「8」に変換している。
さらに、分岐中間コード生成部2eは、複製前の高速化ブロックH1の前に、ラベルのみのダミーの中間コードを生成し、かつ複製前の高速化ブロックH1の後に部分中間コードの終了点の直後の中間コードへ分岐する分岐中間コードを生成する。図21では、中間コードS501がラベルのみの中間コードであり、分岐中間コードS502が部分中間コードの終了点の直後の中間コードである中間コードS16へ分岐する中間コードである(第2の分岐コード生成器)。
また、分岐中間コード生成部2eは、複製した高速化ブロックH1中の定数値判定条件分岐中間コードの分岐先を、生成したダミーの中間コードに設定する(第3の実行経路コード生成器)。図21では、定数値判定条件分岐中間コード413の分岐先を中間コードS501に設定し、同様に定数値判定条件分岐中間コード414の分岐先を中間コードS501に設定している。図22は、ステップn19,ステップn20,およびステップn21を実施した結果を示す。このようにプログラム変換することにより、変数が保持する値がホトパス情報F2に保持されている値と異なっている場合でも、部分中間コードに比べて高速化されている他の高速化ブロックへ実行制御が遷移されるので、ホットパスHPの高速実行が促進される。
<変形例4>(部分中間コード列の途中箇所への分岐)
上述した<動作例>では、図11の条件分岐中間コードS202,S203に示すように高速化ブロックH1から部分中間コード列の始点である中間コードS1に分岐するように分岐中間コードを設定した。しかしながら、部分中間コード列の途中箇所へ分岐するように高速化ブロックを構成することで、部分中間コード列の一部の実行を省略し、これによって部分プログラムの実行手順の短縮や部分中間コード列の削減を図ってもよい。
さらに、部分中間コード列にも変換を施して、部分中間コード列中で制御が合流する基本ブロック、例えば図11では基本ブロックB1,基本ブロックB4,および基本ブロックB7に存在する中間コードに対応する高速化ブロックH1中の中間コードを、条件分岐中間コードを跨って(超えて)移動できるようにしてもよい。以下ではさらに、本変換について詳細に説明する。
図23に示すように、図1のコンパイラ装置Aの全体構成に合流ブロック定義置換部2hを追加する。合流ブロック定義置換部2hは、まず、ホットパスHP上で制御が合流する基本ブロックである合流ブロックを算出する。正確にはホットパスHPの始点から終点に至る全ての経路に必ず含まれる基本ブロックが合流ブロックとなる(始点,終点を含む基本ブロックも合流ブロックである。)。
次に合流ブロックで定義される変数が存在する場合、当該変数の定義箇所からホットパスHPの出口に至る全パス中に存在する当該変数の定義箇所と参照箇所とにおける識別子に次の処理を実施する。すなわち、変数の識別子等の情報を表した変数名表を参照することで、当該変数の識別子を、この変数名表に存在しない識別子に置き換える。ただし、当該変数が保持する値の生存区間が複数存在する場合は、それぞれの生存区間毎に、生存区間中の当該変数の定義箇所と参照箇所とにおける変数の識別子を、変数の識別子等の情報を表した変数名表に存在しない識別子に置き換える(合流定義変数置換器)。
さらに、合流ブロックで定義される変数がホットパスHPの出口において生存している場合は、ホットパスHPの終点において、合流ブロックで定義される変数に識別子を元の識別子に復元する中間コードの列を生成する(合流定義変数保証コード生成器)。
なお、合流ブロック定義置換部2hは、変更のあった識別子のデータフロー情報を変更する。なお、データフロー情報を変更する際には、再度全ての変数に関してデータフロー情報更新しても構わない。
また、図23に示す分岐中間コード生成部2eは、次の処理を実施してもよい。すなわち、分岐中間コード生成部2eは、プログラム変換部2Aの実行経路中間コード列に含まれる条件分岐中間コードと、部分中間コード列上の条件分岐中間コードとを一組ずつ順番に読み出す。さらに分岐中間コード生成部2eは、読み出した条件分岐中間コードから、制御が遷移する中間コードであってかつホットパスHP上にない中間コードを抽出する。そのうえで分岐中間コード生成部2eは、前記条件分岐中間コードの分岐中間コードを、当該ホットパスHP上にない中間コードに設定する。これにより、実行経路中間コード列に含まれる条件分岐中間コードの条件が成立した場合には、本来、実行すべき部分中間コード列の途中の中間コードに分岐されるようになる。
また、図23に示す中間コード依存解析部2fは次の処理を実施してもよい。すなわち、中間コード依存解析部2fは、高速化ブロック中の中間コードのうち、合流ブロックから発生する中間コード(但し、条件分岐中間コードは除く)において、当該中間コードから高速ブロックの終点に向かって最初に見つかる条件分岐中間コードを抽出する。さらに中間コード依存解析部2fは、当該合流ブロックにおいて発生する中間コードから、上記抽出した条件分岐中間コードへの依存を生成する。これにより以下のような利点がある。
中間コード並列化部2gは、合流ブロックから発生する中間コードに対して、高速化ブロックの始点に向かって見つかる条件分岐中間コードを越えたスケジューリングを実施する可能性があるが、上記制御を実施することで、高速化ブロックの終点に向かって最初に見つかる条件分岐中間コードを越えたスケジューリングを実施することができなくなる。
また、図23に示す中間コード依存解析部2fは次の処理を実施してもよい。すなわち、中間コード依存解析部2fは、高速化ブロック中の中間コードのうち、合流ブロックでない基本ブロックから発生する中間コードにおいて、当該中間コードから高速化ブロックの始点に向かって最初に見つかる条件分岐中間コードを抽出する。さらに中間コード依存解析部2fは、抽出した条件分岐中間コードから、当該合流ブロックでない基本ブロックから発生する中間コードへの依存を生成する。
また、図23に示す中間コード依存解析部2fは次の処理を実施してもよい。すなわち、中間コード依存解析部2fは、高速化ブロック中の中間コードのうち、合流ブロックでない基本ブロックから発生する中間コードにおいて、当該中間コードから高速ブロックの終点に向かって最初に見つかる条件分岐中間コードを抽出する。さらに中間コード依存解析部2fは、当該合流ブロックでない基本ブロックから発生する中間コードから抽出した条件分岐中間コードへの依存を生成する。これにより、中間コード並列化部2gは、当該合流ブロックでない基本ブロックから発生する中間コードや条件分岐中間コードを越えたスケジューリングを実施することができなくなる。
以上の制御の改良に応じて図2の動作フローを改変する。すなわち、図24に示すように、図2の動作フローに、合流ブロック内で定義される変数の識別子を置き換えた中間コードを生成するステップn40を追加する。また、実行経路中間コード列の条件分岐中間コード中の分岐中間コードを、部分中間コードの途中で分岐するようにステップn18を変更する。さらに、合流ブロックから発生した中間コードのみが、条件分岐中間コードを跨ったスケジューリングが行われる対象となるように、高速化ブロックH4中の中間コードの間に依存が発生するようにステップn20を変更する。さらには、中間プログラムの並列化を実施した後に、再度、中間プログラムについて冗長性削除を行うステップn22を追加する。
これにより、合流ブロックから発生した中間コードおよび合流ブロックでない基本ブロックから発生した中間コードと、条件分岐中間コードとの間に依存を生成することにより、部分中間コード列の途中へ分岐するプログラム変換において、変換前と変換後のプログラムの等価性が保証されるようになる。
図25A,図25Bは、図5A,図5BのソースプログラムF1を一部変更したソースプログラムF1の例である。図5A,図5Bに示すプログラム構成から、中間コードS8と中間コードS9とが変更されている。以下では、図24の主要ステップについて図26〜図32を参照して説明する。
ステップn40では、図26に示すように図25A,図25Bの中間プログラムを更新する。つまり図25A,図25Bにおいて、変数aは合流ブロックB1の中間コードS1で定義される。また、変数aの定義である中間コードS1,中間コードS6において変数aに保存される値は、中間コードS12で参照され、かつ変数aは基本ブロックB7の出口でも生存しているので、当該変数aに保存される値は、基本ブロックB7以降でも参照される。さらに、変数aが基本ブロックB7の出口でも生存しているので、変数aの定義である中間コードS10において変数aに保存される値は基本ブロックB7以降でも参照される。
よって、
・中間コードS1から基本ブロックB2,基本ブロックB4,および基本ブロックB6を経て基本ブロックB7の出口に至る区間と、
・中間コードS6から、基本ブロックB4と基本ブロックB6とを経て基本ブロックB7の出口に至る区間と、
・中間コードS10から基本ブロックB7の出口に至る区間と
は、それぞれ変数aの同一の生存区間を構成するものとなる。
そのため、合流ブロック定義置換部2hは、変数aの定義箇所と参照箇所とを(共に変数aの生存区間中に存在する)、新たに発生した識別子t10に置き換えることになる。さらには、合流ブロック定義置換部2hは、ホットパスHPの終点において識別子t10を識別子aに復元する中間コードS151を生成することになる。
同様に、変数fにおいては、中間コードS8から基本ブロックB7の入口に至る区間と、中間コードS15から基本ブロックB7の少なくとも出口に至る区間とが、それぞれ異なる変数fの生存区間になる。
そのため、合流ブロック定義置換部2hは、
・中間コードS8から基本ブロックB7の入口に至る生存区間中に存在する変数fの定義箇所と参照箇所とを、新たに発生する識別子t12に置き換える、
・中間コードS15から基本ブロックB7の出口に至る生存区間中に存在する定義箇所を新たに発生する識別子t13に置き換える、
という処理を実施する。
さらに合流ブロック定義置換部2hは、ホットパスHPの終点において識別子t13を識別子fに復元する中間コードS153を生成する、
という処理を実施する。
また、合流ブロック定義置換部2hは、変数cに関しても同様に置き換える。さらに、合流ブロック定義置換部2hは、図27Aに示す変更が生じた識別子のデータフロー情報を変更する。
ステップn14では、図27Bに示すように、図26の中間プログラムから、パス入力変数X1,パス出力変数X2,パス置換対象変数X3,およびパス保証変数X4を算定する。但し、今回の例では、パス保証変数X4となるものは存在しない。
ステップn15では、図28の中間コードS52,中間コードS203や図27Cに示す、パス置換対象変数X3(=d)の識別子置換処理を行い、図28に示す実行経路中間コード列B200を生成する。
ステップn16では、図28の条件分岐中間コードS202や条件分岐中間コードS203に示すように、図26の条件分岐中間コードS3や条件分岐中間コードS9における判定中間コードの条件を論理反転した条件分岐中間コードを設定する。
ステップn18では、図28の条件分岐中間コードS202と条件分岐中間コードS203との分岐先を部分中間コード列の途中で分岐する位置に設定する。つまり、条件分岐中間コードS202の分岐中間コードを中間コードS6に設定し、条件分岐中間コードS203の分岐中間コードを中間コードS12に設定する。
ステップn19では、図28の中間プログラムに、冗長性削除最適化処理を実施する。図28では、基本ブロックB11と基本ブロックB21とに至るパスが存在しなくなるので、図29に示すように、プログラムの一部が削除される。
ステップn20では、高速化ブロックH4の依存解析が行われる。その際、通常のデータの依存解析(依存生成)の他に、合流ブロックから発生した中間コードに高速化ブロックの終点方向に見つかる条件分岐中間コードを越えたスケジューリングがされないように依存解析(依存生成)が実施される。例えば、図30に示すように、中間コードS12,中間コードS22,および中間コードS82は合流ブロックから生成される中間コードであるので、
・中間コードS12から条件分岐中間コードS202への依存と、
・中間コードS22から条件分岐中間コードS202への依存と、
・中間コードS82から条件分岐中間コードS203への依存とが、
それぞれ生成される。
なお、中間コードS22から条件分岐中間コードS202には変数t11に関連するデータ依存も存在する。また中間コードS82から条件分岐中間コードS203には変数t12に関連するデータ依存も存在する。
さらに、合流ブロックでない基本ブロックから発生した中間コードにおいては、条件分岐中間コードを越えたスケジューリングがされないように依存が生成される。例えば、図30に示すように、中間コードS42および中間コードS52は合流ブロックでない基本ブロックから発生する中間コードであるので、
・条件分岐中間コードS202から中間コードS42への依存と、
・条件分岐中間コードS202から中間コードS52への依存と、
・中間コードS42から条件分岐中間コードS203への依存と、
・中間コードS52から条件分岐中間コードS203への依存とが、
それぞれ生成される。なお、中間コードS52から条件分岐中間コードS203には変数t3に関連するデータ依存も存在する。
ステップn21では、図30の依存に従って、並列化ブロックH4では、図31に示すように中間コード列がスケジューリングされる。ステップn22では、さらに、図31の中間プログラムに、冗長性削除最適化が実施される。ここで、前述した特許文献1に例示される等価式集合を使った最適化処理により、図32の示すように、中間コードS8,中間コードS15,および中間コードS153が削除される。例えば、図31の中間コードS82から中間コードS8に至る経路には、変数d1を更新する中間コードも変数t12を更新する中間コードも存在しない。そのため、中間コードS8は冗長な計算であると判断されて削除される。また、図31の中間コードS15や中間コードS153は、中間コードS150や中間コードS1530より冗長な計算であると判断されて削除される。
<変形例5>(確率)
上述した実施の形態において、最適化部2は、ホットパスHP上の条件分岐中間コードの判定条件の成立の確率または非成立の確率や、例外が発生する確率、特定の変数が特定の値を保持する確率を基にして、変換の仕方を制御してもよい。なお、確率自体は、ホットパス情報F2より得られる。
例えば、図5A,図5Bのプログラムにおいて、条件分岐中間コードS3の判定が成立するときの確率がp1であり、また、条件分岐中間コードS9の判定が成立するときの確率がp2であるとする。そうするとホットパスHPが実行される確率は、確率p1と確率p2の乗算値p1*p2となる。このとき、ある特定の閾値T1を適切な値に設定し、閾値T1より乗算値p1*p2が大きいときには、図5A,図5Bに示すプログラムから、図13に示すプログラムに変換する(第1の実行経路変換判定器)。
また、図5A,図5Bに示す例外発生中間コードS10において例外が発生する確率がp3であるときに、ある特定の閾値T2を適切な値に設定した結果として、確率p3が閾値T2より大きいときには、図5A,図5Bに示すプログラムから図13に示すプログラムに変換し、小さいときには図5A,図5Bに示すプログラムから図16に示すプログラムに変換する(第3の実行経路変換判定器)。
また、図5A,図5Bに示す基本ブロックB1の入口において、変数b,変数eが保持する値が、それぞれ、「5」,「8」である確率がそれぞれp4,p5であるとする。このとき、ある特定の閾値T3を適切な値に設定した結果として、閾値T3より乗算値p1*p2*p4*p5の値が大きいときには、図5A,図5Bに示すプログラムから図20に示すプログラムに変換する(第5の実行経路変換判定器)。
なお、閾値T1,閾値T2,閾値T3は、ホットパス情報F2より得てもよいし、最適化部2が保持する値としてもよい。
<変形例6>(平均実行時間)
上述7した実施の形態において、最適化部2は、実行時間の平均時間を使用して、最終的に出力する中間コードを決定してもよい。例えば5A,図5Bにおいて、まず、条件分岐中間コードS3が真となるときの確率がp1であり、条件分岐中間コードS9が真となるときの確率がp2であるとすると、これらの確率は、ホットパス情報F2より得られる。
また、図5A,図5Bに示すプログラムにおいて、
・基本ブロックB1,基本ブロックB2,基本ブロックB4,基本ブロックB5,および基本ブロックB7を連続して実行する実行時間がT51である、
・基本ブロックB1,基本ブロックB2,基本ブロックB4,基本ブロックB6,および基本ブロックB7を連続して実行する実行時間がT52である、
・基本ブロックB1,基本ブロックB3,基本ブロックB4,基本ブロックB5,および基本ブロックB7を連続して実行する実行時間がT53である、
・基本ブロックB1,基本ブロックB3,基本ブロックB4,基本ブロックB6,および基本ブロックB7を連続して実行する実行時間がT54である、
とする。
このとき、図5A,図5Bに示すプログラムの平均実行時間は、
ET1=T51*p1*p2+T52*p1*(1-p2)+T53*(1-p1)*p2+T54*(1-p1)*(1-p2)…(式1)
となる。
さらに、
・図13における中間コードS52から中間コードS112までの実行時間がT131である、
・中間コードS52から中間コードS203までの実行時間がT132である、
・中間コードS52から中間コードS202までの実行時間がT133である、
とする。
このとき、図13に示すプログラムの平均実行時間は、
ET2 = T131*p1*p2+T132*(1-p2)+T52*p1*(1-p2)+T54*(1-p1)*(1-p2)
+T133*(1-p1)*p2+T53*(1-p1)*p2+T54*(1-p1)*(1-p2)…(式2)
となる。
このとき、平均実行時間ET2が平均実行時間ET1より小さいと判断すると、図5A,図5Bに示すプログラムから図13に示すプログラムに変換する処理を実施する(第2の実行経路変換判定器)。同様に、図16,図20,図22,図32に示すプログラムに変換する処理においても、平均実行時間を算定したうえで、平均実行時間の小さいプログラムへの変換を選択してもよい。
図16に示すプログラムにおいて、
・中間コードS12から中間コードS112までの実行時間がT161である、
・中間コードS12から中間コードS202までの実行時間がT162である、
・中間コードS12から中間コードS203までの実行時間がT163である、
・図5A,図5Bに示す中間コードS10において例外が発生する確率がp3である、
とする。
このとき、図16に示すプログラムの平均実行時間は、
ET3= [T161*p1*p2+T162*(1-p1)*p2+T53*(1-p1)*p2+T54*(1-p1)*(1-p2)
+T163*(1-p2)+T52*p1*(1-p2)+T54*(1-p1)*(1-p2)]*(1-p3)
+[T162+T52*p1*(1-p2)+T54*(1-p1)*(1-p2)]*p3…(式3)
となる(第4の実行経路変換判定器)。
また、図20に示すプログラムにおいて、
・中間コードS121から中間コードS152までの実行時間がT201である、
・中間コードS121から中間コードS411までの実行時間がT202である、
・中間コードS121から中間コードS412までの実行時間がT203である、
・中間コードS121から中間コードS202までの実行時間がT204である、
・図5の基本ブロックB1の入口において、変数b,変数eが保持する値がそれぞれ「5」,「8」である確率がそれぞれp4,p5である、
とする。
このとき、図20に示すプログラムの平均実行時間は、
ET4=T201*p1*p4*p5+(T202+ET1)*(1-p4)+(T203+ET1)*p4*(1-p5)
+[T204+T53*(1-p1)*p2+T54*(1-p1)*(1-p2)]*(1-p1)*p4*p5…(式4)
となる。
また、図22の示すプログラムにおいて、
・中間コードS121から中間コードS152までの実行時間がT221である、
・中間コードS121から中間コードS413までの実行時間がT222である、
・中間コードS121から中間コードS414までの実行時間がT223である、
・中間コードS121から中間コードS202までの実行時間がT224である、
・図5の基本ブロックB1の入口において、変数b,変数eが保持する値が、それぞれ、「5」,「8」である確率がそれぞれp4,p5である、
とする。
このとき、図22に示すプログラムの平均実行時間は、
ET5= T221*p1*p4*p5+(T222+ET2)*(1-p4)+(T223+ET2)*p4*(1-p5)
+[T224+T53*(1-p1)*p2+T54*(1-p1)*(1-p2)]*(1-p1)*p4*p5…(式5)
となる(第6の実行経路変換判定器)。
また、
・図32における基本ブロックB31,基本ブロックB41,基本ブロックB51,および基本ブロックB71を連続して実行する実行時間がT321である、
・基本ブロックB31,基本ブロックB41,基本ブロックB61,および基本ブロックB71を連続して実行する実行時間がT322である、
・基本ブロックB61,および基本ブロックB71を連続して実行する実行時間がT323である、
・中間コードS12から中間コードS151までの実行時間がT324である、
・中間コードS12から中間コードS202までの実行時間がT325である、
・中間コードS12から中間コードS203までの実行時間がT326である、とする。
このとき、図32に示すプログラムの平均実行時間は、
ET6=T324*p1*p2+T325*(1-p1)+T321*p2+T322*(1-p2)+
(T326+T322)*p1*(1-p2)…(式6)
となる。
以上、算出した平均実行時間ET1,平均実行時間ET2,平均実行時間ET3,平均実行時間ET4,平均実行時間ET5,および平均実行時間ET6に比較に基づいて最適化部2は変換処理を次のように制御する。すなわち、これらの平均実行時間の中で、平均実行時間ET1が最も小さい場合には、図5のまま変換なしの出力が実施され、その他の平均実行時間が最も小さい場合には、最も平均実行時間が小さい変換が最終的な中間コードとして出力される。
<補足>
以上、本発明におけるコンパイラ装置について、実施の形態および変形例に基づいて説明したが、本発明は実施の形態および変形例に限られないことは勿論である。
(1)<変形例2>においては、図11のプログラムに示すように、例外が発生しないことを条件にしてプログラム変換を行っているが、図14のプログラムに示すように、例外の発生を考慮してプログラム変換を行ってもよい。また、図29のプログラムに示すように、部分中間コード列の途中へ分岐することを条件にしてプログラム変換を行ってもよい。
(2)<変形例3>においては、図11のプログラムを基にして、図13に示す例外が発生しないプログラムに変換し、このようにして変換したプログラムにさらに図22のプログラムにおける基本ブロックB174を付加している。しかしながら、図14のプログラムを基にして、図16に示す例外の発生を考慮したプログラムに変換し、さらにこのようにして変換したプログラムにさらに図22のプログラムにおける基本ブロックB174を付加してもよい。
(3)本実施の形態では、<変形例2>と<変形例4>とを別々に説明したが、<変形例2>と<変形例4>を組み合わせてもよい。例えば、<変形例2>を行った後の図20のプログラムにおいて、さらに、基本ブロックB1〜B7に<変形例4>のプログラム変換を行うことによって、図33に示すプログラムに変換してもよい。
同様に、<変形例3>と<変形例4>とを組み合わせてもよい。例えば、<変形例3>を行った後の図22のプログラムにおいて、さらに、基本ブロックB1〜B7に<変形例4>のプログラム変換を行うことによって、図34,図35(両図でB201とB503は同じもの)に示すプログラムに変換してもよい。ただし、図34,図35のプログラムでは、高速化ブロックH7の途中から外に分岐する場合における処理は、図5のプログラムにおいてホットパスHPが実行されない場合の処理となる。よって、図34,図35のプログラムは、次に実行頻度が高いホットパスHPとして、基本ブロックB1,基本ブロックB3,ブロックB4,ブロックB5,およびブロックB7の経路を選んでこのパスを高速化したプログラムとなる。
その他、<実施の形態>および<変形例1>〜<変形例4>を組み合わせることにより、他の変形を行ってもよい。なお、<実施の形態>および<変形例1>〜<変形例4>を組み合わせた新たなコンパイラ装置は、実施の形態で示した方法から容易に構成できる。
(4)本実施の形態では、中間コードスケジューリング部2Bに引き続き資源割付部3を起動するようにしているが、逆に、先に資源割付部3を起動してから引き続き中間コードスケジューリング部2Bを起動してもよい。
(5)本実施の形態では、ループを含むホットパスについて述べていないが、最内ループやループ展開後のプログラムに、本実施の形態のプログラム変換を適用することや、ループ全体を一つの中間コードと同等であるとして本実施の形態のプログラム変換を適用することも可能である。また、最内ループから外側のループに向かって段階的に本実施の形態のプログラム変換を適用することも可能である。例えば、図36Aのプログラムにおいて、最内ループL1のホットパスが中間コードS1,中間コードS2,および中間コードS4を通る経路である場合において、本実施の形態のプログラム変換を適用してもよい。そうすれば、図36Bのプログラムに示されるように高速化ブロックH124が生成される。さらに、図36Cのプログラムに示すように、ループL1全体を新規の中間コードS20として扱い、例えば、ループL2内のホットパスが中間コードS6,中間コードS7,中間コードS20,中間コードS8,中間コードS9,および中間コードS11を通る経路である場合に、ループL1と同様に本実施の形態のプログラム変換を適用することが可能である。
(6)また、本発明は、前記プログラムまたは前記デジタル信号を記録したコンピュータ読取り可能な記録媒体、例えば、フレキシブルディスク,ハードディスク,CD−ROM,MO,DVD,DVD−ROM,DVD−RAM,半導体メモリ等であるとしてもよい。また、本発明は、電気通信回線,無線または有線通信回線,若しくはインターネットに代表されるネットワーク等を経由して伝送される前記コンピュータプログラムまたは前記デジタル信号であるとしてもよい。
発明のコンパイラ装置、コンパイル方法およびコンパイラプログラムは、複数の実行経路を含むプログラムにおいて実行頻度の高い実行経路の実行速度を上げるようにプログラム変換することが可能であり、デジタル家電製品等の情報処理装置に組み込んで使用することができる。
本発明の実施の形態におけるコンパイラ装置の機能構成図。 本発明の実施の形態におけるコンパイラ装置の動作フロー図。 変数情報算出部によってなされる変数情報算出処理のフロー図。 実行経路中間コード生成部によってなされる変数置換処理のフロー図。 本発明の実施の形態におけるコンパイラ装置の動作説明に使用する図(その1)。 本発明の実施の形態におけるコンパイラ装置の動作説明に使用する図(その2)。 背景技術および課題の説明に用いる図。 背景技術および課題の説明に用いる図。 背景技術および課題の説明に用いる図。 変数情報算出部によって算出される変数情報と、実行経路中間コード生成部によって生成される変数のペア生成履歴の構成と内容例を示す図(その1)。 変数情報算出部によって算出される変数情報と、実行経路中間コード生成部によって生成される変数のペア生成履歴の構成と内容例を示す図(その2)。 変数情報算出部によって算出される変数情報と、実行経路中間コード生成部によって生成される変数のペア生成履歴の構成と内容例を示す図(その3)。 本発明の実施の形態におけるコンパイラ装置の動作説明に使用する図。 本発明の実施の形態におけるコンパイラ装置の動作説明に使用する図。 中間コード依存解析部によって生成される依存解析情報の説明図。 中間コード並列化部によって命令スケジューリングがなされた実行経路中間コードを示す図。 変形例1におけるコンパイラ装置の動作説明に使用する図。 変形例1における中間コード依存解析部によって生成される依存解析情報の説明図。 変形例1における中間コード並列化部によって命令スケジューリングがなされた実行経路中間コードを示す図。 変形例1における例外発生時の目的プログラムの動作を示す図。 変形例2におけるコンパイラ装置の動作説明に使用する図。 変形例2における中間コード依存解析部によって生成される依存解析情報の説明図。 変形例2における中間コード並列化部によって命令スケジューリングがなされた実行経路中間コードを示す図。 変形例3におけるコンパイラ装置の動作説明に使用する図。 変形例3における中間コード並列化部によって命令スケジューリングがなされた実行経路中間コードを示す図。 変形例4におけるコンパイラ装置の機能構成図。 変形例4におけるコンパイラ装置の動作フロー図。 変形例4におけるコンパイラ装置の動作説明に使用する図(その1)。 変形例4におけるコンパイラ装置の動作説明に使用する図(その2)。 変形例4におけるコンパイラ装置の動作説明に使用する図。 変形例4におけるコンパイラ装置の変数情報算出部によって算出される変数情報と、実行経路中間コード生成部によって生成される変数のペア生成履歴の構成と内容例を示す図(その1)。 変形例4におけるコンパイラ装置の変数情報算出部によって算出される変数情報と、実行経路中間コード生成部によって生成される変数のペア生成履歴の構成と内容例を示す図(その2)。 変形例4におけるコンパイラ装置の変数情報算出部によって算出される変数情報と、実行経路中間コード生成部によって生成される変数のペア生成履歴の構成と内容例を示す図(その3)。 変形例4におけるコンパイラ装置の動作説明に使用する図。 変形例4におけるコンパイラ装置の動作説明に使用する図。 変形例4におけるコンパイラ装置の中間コード依存解析部によって生成される依存解析情報の説明図。 変形例4におけるコンパイラ装置の中間コード並列化部によって命令スケジューリングがなされた実行経路中間コードを示す図。 変形例4におけるコンパイラ装置の動作説明に使用する図。 本発明の実施の形態におけるコンパイラ装置の動作説明に使用する図。 本発明の実施の形態におけるコンパイラ装置の動作説明に使用する図。 本発明の実施の形態におけるコンパイラ装置の動作説明に使用する図。 本発明の変形例におけるコンパイラ装置の動作説明に使用する図(その1)。 本発明の変形例におけるコンパイラ装置の動作説明に使用する図(その2)。 本発明の変形例におけるコンパイラ装置の動作説明に使用する図(その3)。
符号の説明
A コンパイラ装置
1 構文解析部
2 最適化部
3 資源割付部
4 実行コード生成部
2A プログラム変換部
2B 中間コードスケジューリング部
2a 変数情報算出部
2b 実行経路中間コード生成部
2c 判定中間コード生成部
2d 保証中間コード生成部
2e 分岐中間コード生成部
2f 中間コード依存解析部
2g 中間コード並列化部
2h 合流ブロック定義置換部
F1 ソースプログラム
F2 ホットパス情報
F3 実行プログラム
H1〜H7 高速化ブロック

Claims (26)

  1. 分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラ装置であって、
    実行経路指定器と、第1の実行経路コード生成器と、保証コード生成器と、部分コード生成器と、第1の分岐コード生成器と、第1の依存解析器と、並列化器とを備え、
    前記実行経路指定器は、前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定するものであり、
    前記第1の実行経路コード生成器は、前記実行経路指定器によって指定される実行経路上で定義されている変数であって当該指定される実行経路の入口において生存が必要とされる変数をその他の変数に置き換えてなる第1の実行経路コードを生成するものであり、
    前記保証コード生成器は、前記第1の実行経路コード生成器によって置き換えられたその他の変数であって前記指定される実行経路の出口においても生存が必要とされるその他の変数を元の変数に復元する保証コードを生成するものであり、
    前記部分コード生成器は、前記一部命令列に対応する部分コードを生成するものであり、
    前記第1の分岐コード生成器は、前記指定される実行経路上の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記指定される実行経路上の条件分岐命令に、前記部分コードの始点に分岐する第1の分岐コードを生成するものであり、
    前記第1の依存解析器は、前記指定される実行経路上の命令間の依存関係の解析に基づいて命令間の依存関係を算出するとともに、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する前記分岐コードとの間に依存を追加し、かつ、例外が発生しないように命令間の依存を付加するものであり、
    前記並列化器は、前記第1の依存解析器が付加する前記命令間の依存に基づいて前記指定される実行経路中の命令の並び替えを行うものである、
    コンパイラ装置。
  2. 当該コンパイラ装置は、前記ソースプログラムが有するループを一つの命令として扱うものであって、ループ単位処理器をさらに備え、
    前記ループ単位処理器は、前記実行経路指定器と前記第1の実行経路コード生成器と前記保証コード生成器と前記第1の分岐コード生成器と前記第1の依存解析器と前記並列化器とを、前記ループの最内ループより外側のループに向かって起動するものである、
    請求項1のコンパイラ装置。
  3. 第1の実行経路変換判定器をさらに備え、
    前記第1の実行経路変換判定器は、前記指定される実行経路の実行確率に基づいて、前記並列化器を実行した後のプログラムを目的コードとするか否かを判定するものである、
    請求項1のコンパイラ装置。
  4. 第2の実行経路変換判定器をさらに備え、
    前記第2の実行経路変換判定器は、
    前記指定される実行経路の実行確率と前記部分コードの実行時間とに基づいて、前記部分コードの平均実行時間を算定し、
    前記並列化器を実行した後の前記指定される実行経路における前記目的コードの実行時間と前記実行確率とに基づいて、前記指定される実行経路の平均実行時間を算定し、
    前記部分コードの平均実行時間と前記指定される実行経路の平均実行時間との比較に基づいて、前記並列化器を実行した後のプログラムを前記目的コードの列とするか否かを判定する、
    ものである、
    請求項1のコンパイラ装置。
  5. 戻り場所設定命令コード生成器と第2の依存解析器とをさらに備え、
    前記戻り場所設定命令コード生成器は、前記指定される実行経路の実行中に例外が発生した際の戻り場所を特定する命令コードを前記指定される実行経路上に追加するものであり、
    前記第2の依存解析器は、前記指定される実行経路上の命令間の依存関係の解析に基づいて、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する分岐コードとの間に依存を追加するものであり、
    かつ、前記第2の依存解析器は、前記第1の依存解析器が実施する、例外が発生しないように命令間に付加する依存については、それを付加しない、
    請求項1のコンパイラ装置。
  6. 割り込み発生時処理ルーチン付加器をさらに備え、
    前記割り込み発生時処理ルーチン付加器は、例外が発生した際に、前記命令コードで指定する前記戻り場所に戻る処理ルーチンを前記目的コードに追加するものである、
    請求項5のコンパイラ装置。
  7. 第3の実行経路変換判定器をさらに備え、
    前記第3の実行経路変換判定器は、前記指定される実行経路の実行確率と、前記並列化器を実行した後の実行経路上で例外が発生する確率とに基づいて、前記並列化器を実行した後のプログラムを前記目的コードとするか否かを判定するものである、
    請求項6のコンパイラ装置。
  8. 第4の実行経路変換判定器をさらに備え、
    前記第4の実行経路変換判定器は、
    前記指定される実行経路の実行確率と、前記指定される実行経路上で例外が発生する確率と、前記部分コードの実行時間とに基づいて、前記部分コードの平均実行時間を算定し、
    前記指定される実行経路の実行確率と、前記例外が発生する確率と、前記並列化器を実行した後の実行経路における前記目的コードの実行時間と、前記割り込み発生時処理ルーチン付加器が付加する前記処理ルーチンにおける前記目的コードの実行時間とに基づいて、前記並列化器を実行した後の実行経路の平均実行時間と前記処理ルーチンの平均実行時間とを算定し、
    前記並列化器を実行した後の実行経路の平均実行時間と前記処理ルーチンの平均実行時間との比較に基づいて、前記並列化器を実行した後のプログラムを目的コードとするか否かを判定するものである、
    請求項7のコンパイラ装置。
  9. 第2の実行経路コード生成器をさらに備え、
    前記第2の実行経路コード生成器は、前記指定される実行経路上で参照される変数が特定の値を保持することが多い場合には、当該変数を当該変数が保持する値に置き換え、当該変数が前記置き換えた値と異なる値を保持する場合には、前記指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を前記指定される実行経路中の先頭に挿入してなる第2の実行経路コードを生成するものであり、
    当該コンパイラ装置は、前記第2の実行経路コード生成器が起動した後に、定数値に関する冗長性の削除最適化を行う、
    請求項8のコンパイラ装置。
  10. 第5の実行経路変換判定器をさらに備え、
    前記第5の実行経路変換判定器は、前記指定される実行経路の実行確率と、前記指定される実行経路上の変数が特定の値を保持する確率とに基づいて、前記第2の実行経路コード生成器を実行するか否かを判定するものである、
    請求項9のコンパイラ装置。
  11. 第6の実行経路変換判定器をさらに備え、
    前記第6の実行経路変換判定器は、前記指定される実行経路の実行確率と、前記指定される実行経路上の変数が特定の値を保持する確率と、前記並列化器を実行した後の実行経路における前記目的コードの実行時間とに基づいて、前記並列化器を実行した後の実行経路の平均実行時間を算定し、
    前記並列化器を実行した後の実行経路の平均実行時間と前記部分コードの平均実行時間との比較に基づいて、前記並列化器を実行した後のプログラムを前記目的コードとするか否かを判定するものである、
    請求項10のコンパイラ装置。
  12. 第3の実行経路コード生成器と第2の分岐コード生成器とをさらに備え、
    前記第3の実行経路コード生成器は、
    前記指定される実行経路上で参照される変数が特定の値を保持することが多い場合には、当該指定される実行経路中の命令を複製したうえで、当該複製した実行経路において前記特定の値を保持することが多い変数を当該変数が保持する値に置き換え、前記指定される実行経路上で参照される変数が前記置き換えた値と異なる値を保持する場合には、当該指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を当該指定される実行経路中の先頭に挿入してなる第3の実行経路コードを生成するものであり、
    前記第2の分岐コード生成器は、前記指定される実行経路中の条件分岐命令に前記複製した実行経路上の条件分岐命令の条件が成立しない場合には、前記複製した実行経路上の条件分岐命令に、前記指定される実行経路コードの始点に分岐する第2の分岐コードを生成するものである、
    請求項11のコンパイラ装置。
  13. 第7の実行経路変換判定器をさらに備え、
    前記第7の実行経路変換判定器は、
    前記指定される実行経路上で参照される変数が特定の値を保持する確率に基づいて、または前記指定される実行経路の実行確率と前記指定される実行経路上で参照される変数が特定の値を保持する確率とに基づいて変形後のプログラムの平均実行時間を算出したうえで、
    算出する前記変形後のプログラムの平均実行時間に基づいて、前記第3の実行経路コード生成器と前記第2の分岐コード生成器とを実行するか否かを判定するものである、
    請求項12のコンパイラ装置。
  14. 分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラ装置であって、
    実行経路指定器と、実行経路コード生成器と、保証コード生成器と、部分コード生成器と、分岐コード生成器と、依存解析器と、並列化器とを備え、
    前記実行経路指定器は、前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列に含まれる複数の実行経路から一つを指定するものであり、
    前記実行経路コード生成器は、前記実行経路指定器によって指定される実行経路上で定義されている変数であって当該指定される実行経路の入口において生存が必要とされる変数をその他の変数に置き換えてなる実行経路コードを生成するものであり、
    前記保証コード生成器は、前記実行経路コード生成器によって置き換えられた前記その他の変数であって前記指定される実行経路の出口においても生存が必要とされるその他の変数を元の変数に復元する保証コードを生成するものであり、
    前記部分コード生成器は、前記一部命令列に対応する部分コードを生成するものであり、
    前記分岐コード生成器は、前記指定される実行経路上の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記指定される実行経路上の条件分岐命令の分岐先が前記部分コード中の当該分岐条件が成立しない場合の分岐先になるように、分岐コードを生成するものであり、
    前記依存解析器は、前記指定される実行経路中の命令間の依存関係の解析に基づいて、命令間の依存関係を算出するとともに、前記指定される実行経路中の命令であって制御が合流する基本ブロック中に存在する命令から、前記実行経路の終点方向に向かって最初に見つかる前記条件分岐命令を越えて処理移動ができないように、当該基本ブロック中に存在する命令と前記条件分岐命令との間に依存を付加し、かつ、前記指定される実行経路中の命令であって前記基本ブロック中に存在しない命令から、前記条件分岐命令を越えて処理移動できないように、当該命令と前記条件分岐命令との間に依存を付加するものであり、
    前記並列化器は、前記依存解析器が付加する前記命令間の依存に基づいて前記指定される実行経路中の命令の並び替えを行うものである、
    コンパイラ装置。
  15. 合流定義変数置換器と、合流定義変数保証コード生成器とをさらに備え、
    前記合流定義変数置換器は、前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列において、制御が合流する基本ブロック中で定義される変数が存在する場合には、当該変数の定義箇所と参照箇所とをその他の変数に置き換えるものであり、
    前記合流定義変数保証コード生成器は、前記合流定義変数置換器によって置き換えられたその他の変数であって前記一部命令列の出口で生存が必要とされるその他の変数を元の変数に復元する保証コードを、一部命令列の出口に生成するものである、
    請求項14のコンパイラ装置。
  16. 第1の実行経路変換判定器をさらに備え、
    前記第1の実行経路変換判定器は、前記指定される実行経路の実行確率に基づいて、前記並列化器を実行した後のプログラムを目的コードとするか否かを判定するものである、
    請求項15のコンパイラ装置。
  17. 第2の実行経路変換判定器をさらに備え、
    前記第2の実行経路変換判定器は、
    前記指定される実行経路の実行確率と前記部分コードの実行時間とに基づいて、前記部分コードの平均実行時間を算定し、
    前記指定される実行経路の実行確率と前記並列化器を実行した後の実行経路における前記目的コードの実行時間とに基づいて、前記並列化器を実行した後の実行経路の平均実行時間を算定し、
    前記部分コードの平均実行時間と前記並列化器を実行した後の実行経路の平均実行時間との比較に基づいて、前記並列化器を実行した後のプログラムを前記目的コードの列とするか否かを判定する、
    ものである、
    請求項16のコンパイラ装置。
  18. 分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラ装置であって、
    実行経路指定器と、第1の実行経路コード生成器と、第1の保証コード生成器と、第2の実行経路コード生成器と、合流定義変数置換器と、合流定義変数保証コード生成器と、第3の実行経路コード生成器と、第2の保証コード生成器と、部分コード生成器と、第1の分岐コード生成器と、第2の分岐コード生成器と、第3の分岐コード生成器と、依存解析器と、並列化器とを備え、
    前記実行経路指定器は、前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定するものであり、
    前記第1の実行経路コード生成器は、前記実行経路指定器によって指定される実行経路上における全命令列に対応する目的コードであって、前記指定される実行経路の入口において生存が必要とされかつ前記指定される実行経路上で定義されている変数が第1のその他の変数に置き換えられてなる第1の実行経路コードを生成するものであり、
    前記第1の保証コード生成器は、前記第1のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第1のその他の変数を元の変数に復元する第1の保証コードを生成するものであり、
    第2の実行経路コード生成器は、前記第1の実行経路コード生成器と前記第1の保証コード生成器とによって生成されるコード列で参照される変数が特定の値を保持することが多い場合には、当該コード列を複製したうえで、当該複製したコード列における前記特定の値を保持することが多い変数を当該変数が保持する値に置き換え、前記コード列で参照される変数が置き換えた値と異なる値を保持する場合には、前記指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を当該コード列の先頭に挿入してなる第2の実行経路コードを生成するものであり、
    前記合流定義変数置換器は、前記一部命令列において制御が合流する基本ブロック中で定義される変数が存在する場合には、当該変数の定義箇所と参照箇所とを第2のその他の変数に置き換えるものであり、
    前記合流定義変数保証コード生成器は、前記第2のその他の変数であって前記一部命令列の出口で生存が必要とされる第2のその他の変数については、当該第2のその他の変数を元の変数に復元する変数保証コードを一部命令列の出口に生成するものであり、
    前記第3の実行経路コード生成器は、前記合流定義変数置換器と前記合流定義変数保証コード生成器とを実施した後の、前記指定される実行経路上における全命令列に対応する目的コードであって前記指定される実行経路の入口で生存が必要とされかつ当該指定される実行経路上で定義されている変数を第3のその他の変数に置き換えてなる第3の実行経路コードを生成するものであり、
    前記第2の保証コード生成器は、前記第3のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第3のその他の変数を元の変数に復元する第2の保証コードを生成するものであり、
    前記部分コード生成器は、前記合流定義変数置換器と前記合流定義変数保証コード生成器とを実施した後の、前記一部命令列に対応する部分コードを生成するものであり、
    前記第1の分岐コード生成器は、前記第3の実行経路コードの条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第3の実行経路コード中の条件分岐命令の分岐先を、前記部分コード中の当該分岐条件が成立しない場合における分岐先になるように第1の分岐コードを生成するものであり、
    前記第2の分岐コード生成器は、前記第1の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第1の実行経路コード中の分岐命令に、前記第3の実行経路コードの始点に分岐する第2の分岐コードを生成するものであり、
    前記第3の分岐コード生成器は、前記第2の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第2の実行経路コード中の分岐命令に、前記第1の実行経路コードの始点に分岐する第3の分岐コードを生成するものであり、
    前記依存解析器は、前記第1の実行経路コード生成器と、前記第1の保証コード生成器と、前記第2の実行経路コード生成器と、前記第3の実行経路コード生成器と、前記第2の保証コード生成器とで生成される各コード列中の命令間の依存関係を解析して、当該命令間の依存関係を算出するものであり、
    前記並列化器は、前記依存解析器が算出する前記命令間の依存関係に基づいて前記指定される実行経路中の命令の並び替えを行うものである、
    コンパイラ装置。
  19. 分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイル方法であって、
    前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定する実行経路指定ステップと、
    前記実行経路指定ステップにおいて指定される実行経路上で定義されている変数であって当該指定される実行経路の入口において生存が必要とされる変数をその他の変数に置き換えてなる第1の実行経路コードを生成する第1の実行経路コード生成ステップと、
    前記第1の実行経路コード生成ステップにおいて置き換えられたその他の変数であって前記指定される実行経路の出口においても生存が必要とされるその他の変数を元の変数に復元する保証コードを生成する保証コード生成ステップと、
    前記一部命令列に対応する部分コードを生成する部分コード生成ステップと、
    前記指定される実行経路上の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記指定される実行経路上の条件分岐命令に、前記部分コードの始点に分岐する第1の分岐コードを生成する第1の分岐コード生成ステップと、
    前記指定される実行経路上の命令間の依存関係の解析に基づいて、命令間の依存関係を算出するとともに、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する前記分岐コードとの間に依存を追加し、かつ、例外が発生しないように命令間の依存を付加する第1の依存解析ステップと、
    前記第1の依存解析ステップにおいて付加する前記命令間の依存に基づいて前記指定される実行経路中の命令の並び替えを行う並列化ステップと、
    を含むコンパイル方法。
  20. 前記指定される実行経路の実行中に例外が発生した際の戻り場所を特定する命令コードを前記指定される実行経路上に追加する戻り場所設定命令コード生成ステップと、
    前記指定される実行経路上の命令間の依存関係の解析に基づいて、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する分岐コードとの間に依存を追加する第2の依存解析ステップと、
    をさらに含み、
    前記第2の依存解析ステップでは、前記第1の依存解析ステップが実施する、例外が発生しないように命令間に付加する依存については、それを付加しない、
    請求項19のコンパイル方法。
  21. 例外が発生した際に、前記命令コードで指定する前記戻り場所に戻る処理ルーチンを前記目的コードに追加する割り込み発生時処理ルーチン付加ステップを、
    さらに含む、
    請求項20のコンパイル方法。
  22. 分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラ方法であって、
    前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定する実行経路指定ステップと、
    前記実行経路指定ステップにおいて指定される実行経路上における全命令列に対応する目的コードであって、前記指定される実行経路の入口において生存が必要とされかつ前記指定される実行経路上で定義されている変数が第1のその他の変数に置き換えられてなる第1の実行経路コードを生成する第1の実行経路コード生成ステップと、
    前記第1のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第1のその他の変数を元の変数に復元する第1の保証コードを生成する第1の保証コード生成ステップと、
    前記第1の実行経路コード生成ステップと前記第1の保証コード生成ステップとにおいて生成されるコード列で参照される変数が特定の値を保持することが多い場合には、当該コード列を複製したうえで、複製したコード列における前記特定の値を保持することが多い変数を当該変数が保持する値に置き換え、前記コード列で参照される変数が置き換えた値と異なる値を保持する場合には、前記指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を当該コード列の先頭に挿入してなる第2の実行経路コードを生成する第2の実行経路コード生成ステップと、
    前記一部命令列において制御が合流する基本ブロック中で定義される変数が存在する場合には、当該変数の定義箇所と参照箇所とを第2のその他の変数に置き換える合流定義変数置換ステップと、
    前記第2のその他の変数であって前記一部命令列の出口で生存が必要とされる第2のその他の変数については、当該第2のその他の変数を元の変数に復元する変数保証コードを一部命令列の出口に生成する合流定義変数保証コード生成ステップと、
    前記合流定義変数置換ステップと前記合流定義変数保証コード生成ステップとを実施した後の、前記指定される実行経路上における全命令列に対応する目的コードであって前記指定される実行経路の入口で生存が必要とされかつ当該指定される実行経路上で定義されている変数を第3のその他の変数に置き換えてなる第3の実行経路コードを生成する第3の実行経路コード生成ステップと、
    前記第3のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第3のその他の変数を元の変数に復元する第2の保証コードを生成する 第2の保証コード生成ステップと、
    前記合流定義変数置換ステップと前記合流定義変数保証コード生成ステップとを実施した後の、前記一部命令列に対応する部分コードを生成する部分コード生成ステップと、
    前記第3の実行経路コードの条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第3の実行経路コード中の条件分岐命令の分岐先を、前記部分コード中の当該分岐条件が成立しない場合における分岐先になるように第1の分岐コードを生成する第1の分岐コード生成ステップと、
    前記第1の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第1の実行経路コード中の分岐命令に、前記第3の実行経路コードの始点に分岐する第2の分岐コードを生成する第2の分岐コード生成ステップと、
    前記第2の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第2の実行経路コード中の分岐命令に、前記第1の実行経路コードの始点に分岐する第3の分岐コードを生成する第3の分岐コード生成ステップと、
    前記第1の実行経路コード生成ステップと、前記第1の保証コード生成ステップと、前記第2の実行経路コード生成ステップと、前記第3の実行経路コード生成ステップと、前記第2の保証コード生成ステップとで生成される各コード列中の命令間の依存関係を解析して、当該命令間の依存関係を算出する依存解析ステップと、
    前記依存解析ステップが算出する前記命令間の依存関係に基づいて前記指定される実行経路中の命令の並び替えを行う並列化ステップと、
    を含むコンパイル方法。
  23. 分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラプログラムであって、
    前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定する実行経路指定ステップと、
    前記実行経路指定ステップにおいて指定される実行経路上で定義されている変数であって当該指定される実行経路の入口において生存が必要とされる変数をその他の変数に置き換えてなる第1の実行経路コードを生成する第1の実行経路コード生成ステップと、
    前記第1の実行経路コード生成ステップにおいて置き換えられたその他の変数であって前記指定される実行経路の出口においても生存が必要とされるその他の変数を元の変数に復元する保証コードを生成する保証コード生成ステップと、
    前記一部命令列に対応する部分コードを生成する部分コード生成ステップと、
    前記指定される実行経路上の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記指定される実行経路上の条件分岐命令に、前記部分コードの始点に分岐する第1の分岐コードを生成する第1の分岐コード生成ステップと、
    前記指定される実行経路上の命令間の依存関係の解析に基づいて、命令間の依存関係を算出するとともに、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する前記分岐コードとの間に依存を追加し、かつ、例外が発生しないように命令間の依存を付加する第1の依存解析ステップと、
    前記第1の依存解析ステップにおいて付加する前記命令間の依存に基づいて前記指定される実行経路中の命令の並び替えを行う並列化ステップと、
    をコンピュータに実行させるためのコンパイラプログラム。
  24. コンピュータに実行させるためのステップとして、
    前記指定される実行経路の実行中に例外が発生した際の戻り場所を特定する命令コードを前記指定される実行経路上に追加する戻り場所設定命令コード生成ステップと、
    前記指定される実行経路上の命令間の依存関係の解析に基づいて、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する分岐コードとの間に依存を追加する第2の依存解析ステップと、
    をさらに含み、
    前記第2の依存解析ステップでは、前記第1の依存解析ステップが実施する、例外が発生しないように命令間に付加する依存については、それを付加しない、
    請求項23のコンパイラプログラム。
  25. コンピュータに実行させるためのステップとして、
    例外が発生した際に、前記命令コードで指定する前記戻り場所に戻る処理ルーチンを前記目的コードに追加する割り込み発生時処理ルーチン付加ステップを、
    さらに含む、
    請求項24のコンパイラプログラム。
  26. 分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラプログラムであって、
    前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定する実行経路指定ステップと、
    前記実行経路指定ステップにおいて指定される実行経路上における全命令列に対応する目的コードであって、前記指定される実行経路の入口において生存が必要とされかつ前記指定される実行経路上で定義されている変数が第1のその他の変数に置き換えられてなる第1の実行経路コードを生成する第1の実行経路コード生成ステップと、
    前記第1のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第1のその他の変数を元の変数に復元する第1の保証コードを生成する第1の保証コード生成ステップと、
    前記第1の実行経路コード生成ステップと前記第1の保証コード生成ステップとにおいて生成されるコード列で参照される変数が特定の値を保持することが多い場合には、当該コード列を複製したうえで、当該複製したコード列における前記特定の値を保持することが多い変数を当該変数が保持する値に置き換え、前記コード列で参照される変数が置き換えた値と異なる値を保持する場合には、前記指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を当該コード列の先頭に挿入してなる第2の実行経路コードを生成する第2の実行経路コード生成ステップと、
    前記一部命令列において制御が合流する基本ブロック中で定義される変数が存在する場合には、当該変数の定義箇所と参照箇所とを第2のその他の変数に置き換える合流定義変数置換ステップと、
    前記第2のその他の変数であって前記一部命令列の出口で生存が必要とされる第2のその他の変数については、当該第2のその他の変数を元の変数に復元する変数保証コードを一部命令列の出口に生成する合流定義変数保証コード生成ステップと、
    前記合流定義変数置換ステップと前記合流定義変数保証コード生成ステップとを実施した後の、前記指定される実行経路上における全命令列に対応する目的コードであって前記指定される実行経路の入口で生存が必要とされかつ当該指定される実行経路上で定義されている変数を第3のその他の変数に置き換えてなる第3の実行経路コードを生成する第3の実行経路コード生成ステップと、
    前記第3のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第3のその他の変数を元の変数に復元する第2の保証コードを生成する 第2の保証コード生成ステップと、
    前記合流定義変数置換ステップと前記合流定義変数保証コード生成ステップとを実施した後の、前記一部命令列に対応する部分コードを生成する部分コード生成ステップと、
    前記第3の実行経路コードの条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第3の実行経路コード中の条件分岐命令の分岐先を、前記部分コード中の当該分岐条件が成立しない場合における分岐先になるように第1の分岐コードを生成する第1の分岐コード生成ステップと、
    前記第1の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第1の実行経路コード中の分岐命令に、前記第3の実行経路コードの始点に分岐する第2の分岐コードを生成する第2の分岐コード生成ステップと、
    前記第2の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第2の実行経路コード中の分岐命令に、前記第1の実行経路コードの始点に分岐する第3の分岐コードを生成する第3の分岐コード生成ステップと、
    前記第1の実行経路コード生成ステップと、前記第1の保証コード生成ステップと、前記第2の実行経路コード生成ステップと、前記第3の実行経路コード生成ステップと、前記第2の保証コード生成ステップとで生成される各コード列中の命令間の依存関係を解析して、当該命令間の依存関係を算出する依存解析ステップと、
    前記依存解析ステップが算出する前記命令間の依存関係に基づいて前記指定される実行経路中の命令の並び替えを行う並列化ステップと、
    をコンピュータに実行させるためのコンパイラプログラム。
JP2007131506A 2006-05-26 2007-05-17 コンパイラ装置、コンパイル方法およびコンパイラプログラム Expired - Fee Related JP4884297B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2007131506A JP4884297B2 (ja) 2006-05-26 2007-05-17 コンパイラ装置、コンパイル方法およびコンパイラプログラム
US11/802,636 US20070277162A1 (en) 2006-05-26 2007-05-24 Compiler apparatus, compiler method, and compiler program

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2006146713 2006-05-26
JP2006146713 2006-05-26
JP2007131506A JP4884297B2 (ja) 2006-05-26 2007-05-17 コンパイラ装置、コンパイル方法およびコンパイラプログラム

Publications (2)

Publication Number Publication Date
JP2008004082A JP2008004082A (ja) 2008-01-10
JP4884297B2 true JP4884297B2 (ja) 2012-02-29

Family

ID=38750936

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007131506A Expired - Fee Related JP4884297B2 (ja) 2006-05-26 2007-05-17 コンパイラ装置、コンパイル方法およびコンパイラプログラム

Country Status (2)

Country Link
US (1) US20070277162A1 (ja)
JP (1) JP4884297B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11868912B2 (en) 2020-02-06 2024-01-09 Samsung Electronics Co., Ltd. Multi-device based inference method and apparatus

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8225295B2 (en) * 2007-09-21 2012-07-17 Jens Palsberg Register allocation by puzzle solving
WO2009098739A1 (ja) * 2008-02-05 2009-08-13 Panasonic Corporation プログラム最適化装置およびプログラム最適化方法
US7493610B1 (en) 2008-03-27 2009-02-17 International Business Machines Corporation Versioning optimization for dynamically-typed languages
JP2010039536A (ja) * 2008-07-31 2010-02-18 Panasonic Corp プログラム変換装置、プログラム変換方法およびプログラム変換プログラム
CA2675692C (en) * 2009-08-28 2012-03-13 Ibm Canada Limited - Ibm Canada Limitee Compiler-assisted program source code filter
CA2684441C (en) * 2009-09-22 2012-06-05 Ibm Canada Limited - Ibm Canada Limitee May-constant propagation
CN102893255A (zh) * 2010-02-22 2013-01-23 美国亚德诺半导体公司 用于概率计算机的超标量控制
US8656364B1 (en) * 2010-04-12 2014-02-18 Parasoft Corporation System and method for enforcement of business rules using static analysis
US8407322B1 (en) * 2010-08-24 2013-03-26 Adobe Systems Incorporated Runtime negotiation of execution blocks between computers
US8881124B2 (en) * 2010-12-21 2014-11-04 Panasonic Corporation Compiler device, compiler program, and loop parallelization method
US9575777B2 (en) * 2011-03-08 2017-02-21 Sony Corporation Information processing device for performing contactless communication with an external device using multiple communication standards
US8615745B2 (en) 2011-10-03 2013-12-24 International Business Machines Corporation Compiling code for an enhanced application binary interface (ABI) with decode time instruction optimization
US8756591B2 (en) 2011-10-03 2014-06-17 International Business Machines Corporation Generating compiled code that indicates register liveness
US8612959B2 (en) 2011-10-03 2013-12-17 International Business Machines Corporation Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization
US9239926B2 (en) * 2012-06-29 2016-01-19 International Business Machines Corporation Static analysis for discovery of timing attack vulnerabilities in a computer software application
US9250879B2 (en) 2012-07-02 2016-02-02 International Business Machines Corporation Strength reduction compiler optimizations
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US8997060B2 (en) * 2013-07-31 2015-03-31 International Business Machines Corporation Parallel program analysis and branch prediction
US9652208B2 (en) 2013-08-01 2017-05-16 Futurewei Technologies, Inc. Compiler and method for global-scope basic-block reordering
CN104077140B (zh) * 2014-07-04 2017-11-07 用友网络科技股份有限公司 用于持续集成的自动化编译方法和编译装置
EP3177990B1 (en) * 2014-08-29 2021-03-17 Huawei Technologies Co., Ltd. Method for compiling a source code
EP3086226A1 (en) * 2015-04-23 2016-10-26 Thomson Licensing Device and method for providing code blocks to a client during execution of software code
JP2019179417A (ja) * 2018-03-30 2019-10-17 株式会社デンソー スケジューリング方法、スケジューリング装置

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5437034A (en) * 1991-04-19 1995-07-25 Hitachi, Ltd. Method of generating from source program object program by which final values of variables for parallel execution are guaranteed
JPH06259262A (ja) * 1993-03-08 1994-09-16 Fujitsu Ltd 分岐確率を設定するコンパイラの処理方法および処理装置
JP3494489B2 (ja) * 1994-11-30 2004-02-09 株式会社ルネサステクノロジ 命令処理装置
US6170083B1 (en) * 1997-11-12 2001-01-02 Intel Corporation Method for performing dynamic optimization of computer code
US6070009A (en) * 1997-11-26 2000-05-30 Digital Equipment Corporation Method for estimating execution rates of program execution paths
US6092180A (en) * 1997-11-26 2000-07-18 Digital Equipment Corporation Method for measuring latencies by randomly selected sampling of the instructions while the instruction are executed
US6463582B1 (en) * 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
US6968542B2 (en) * 2000-06-16 2005-11-22 Hewlett-Packard Development Company, L.P. Method for dynamically identifying pseudo-invariant instructions and their most common output values on frequently executing program paths
GB2366879B (en) * 2000-09-16 2005-02-16 Ibm Tracing the execution path of a computer program
JP3870112B2 (ja) * 2002-03-13 2007-01-17 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイル方法、コンパイル装置、及びコンパイル用プログラム
US6986131B2 (en) * 2002-06-18 2006-01-10 Hewlett-Packard Development Company, L.P. Method and apparatus for efficient code generation for modulo scheduled uncounted loops
US7784039B2 (en) * 2004-09-22 2010-08-24 Panasonic Corporation Compiler, compilation method, and compilation program
JP4754909B2 (ja) * 2004-09-22 2011-08-24 パナソニック株式会社 コンパイラ装置、コンパイル方法、コンパイラプログラム
US7603546B2 (en) * 2004-09-28 2009-10-13 Intel Corporation System, method and apparatus for dependency chain processing

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11868912B2 (en) 2020-02-06 2024-01-09 Samsung Electronics Co., Ltd. Multi-device based inference method and apparatus

Also Published As

Publication number Publication date
JP2008004082A (ja) 2008-01-10
US20070277162A1 (en) 2007-11-29

Similar Documents

Publication Publication Date Title
JP4884297B2 (ja) コンパイラ装置、コンパイル方法およびコンパイラプログラム
US9733913B2 (en) Methods and systems to vectorize scalar computer program loops having loop-carried dependences
Karrenberg et al. Whole-function vectorization
US6243864B1 (en) Compiler for optimizing memory instruction sequences by marking instructions not having multiple memory address paths
US8555266B2 (en) Managing variable assignments in a program
US6289507B1 (en) Optimization apparatus and computer-readable storage medium storing optimization program
US20110119660A1 (en) Program conversion apparatus and program conversion method
US20020095667A1 (en) Optimizing compilation by forward store movement
JP6398725B2 (ja) コンパイルプログラム、コンパイル方法およびコンパイラ装置
US10698670B2 (en) Parallel program generating method and parallelization compiling apparatus
JP2005216177A (ja) コンフィグラブル・プロセッサの設計装置、設計方法、ライブラリの最適化方法、プロセッサ、及びプロセッサを備えた半導体装置の製造方法
JP2009187285A (ja) プログラム変換方法、プログラム変換装置およびプログラム
US10013244B2 (en) Apparatus and method to compile a variadic template function
JP3539613B2 (ja) ループ飛び出し文を含むループに対する配列サマリ解析方法
JPH04213118A (ja) プログラム翻訳装置およびプログラム翻訳方法
US10545741B2 (en) Information processing apparatus, method of compiling, and storage medium
JP4754909B2 (ja) コンパイラ装置、コンパイル方法、コンパイラプログラム
JP4719415B2 (ja) 情報処理システム及びコード生成方法
Saraiva et al. Data structure free compilation
US10108405B2 (en) Compiling apparatus and compiling method
JPWO2017204139A1 (ja) データ処理装置、データ処理方法、およびプログラム記録媒体
JPH0756745A (ja) 言語処理プログラムのコンパイラ処理方式
JP2008015665A (ja) プログラム解析方法及びプログラム解析装置
KR102207775B1 (ko) 네트워크 스위치 병렬화를 위한 데이터 의존성 기반의 데이터 평면 정적 분석 방법 및 이를 이용한 병렬화 장치
JP6600888B2 (ja) 並列化コンパイラ、並列化コンパイル装置、及び並列プログラムの生成方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20091217

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20111026

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

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111206

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

Free format text: PAYMENT UNTIL: 20141216

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees