JP2015194881A - コンパイル装置、コンパイラプログラム、コンパイル方法 - Google Patents

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

Info

Publication number
JP2015194881A
JP2015194881A JP2014072158A JP2014072158A JP2015194881A JP 2015194881 A JP2015194881 A JP 2015194881A JP 2014072158 A JP2014072158 A JP 2014072158A JP 2014072158 A JP2014072158 A JP 2014072158A JP 2015194881 A JP2015194881 A JP 2015194881A
Authority
JP
Japan
Prior art keywords
optimization
instruction
program
loop
application
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2014072158A
Other languages
English (en)
Inventor
正教 山中
Masanori Yamanaka
正教 山中
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2014072158A priority Critical patent/JP2015194881A/ja
Priority to US14/661,492 priority patent/US20150277876A1/en
Priority to EP15160215.8A priority patent/EP2963547A1/en
Publication of JP2015194881A publication Critical patent/JP2015194881A/ja
Pending legal-status Critical Current

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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/423Preprocessors

Landscapes

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

Abstract

【課題】プログラムのコンパイルにおけるプログラムの最適化に関し、コンパイラが実行する最適化の中間段階に対する指示に基づいて、プログラムに対する最適化の指示をコンパイラの使用者の負担なく行えるようにして、コンパイラが持つ最適化機能による実行性能の向上効果を引き出す。【解決手段】最適化適用対象の抽出部101は、ソースプログラムまたは最適化適用結果の中間プログラム110と、最適化指示ファイル120を入力とし、最適化指示を抽出する。最適化適用正当性の判定部102は、最適化指示の正当性を確認する。最適化適用妥当性の判定部103は、最適化指示を適用することによる実行性能向上の可能性を判断する。最適化指示ファイルによって、プログラムの最初の状態からの最適化指示を適用順に従って与えることにより、最初の状態には存在しない中間段階のプログラムの部分に対する最適化指示を与えることが可能となる。【選択図】図1

Description

プログラムのコンパイルにおけるプログラムの最適化に関する。
従来、プログラムの最初の状態に対して、特定の部分に最適化指示行を挿入して特定の最適化を指示する手段が、一般的なコンパイラにおいて知られている。
最適化の効率を向上させる従来技術として、次のような技術が知られている(例えば特許文献1に記載の技術)。この従来技術は、基本最適化機能のいずれとも異なる第二の最適化機能を有する第二最適化単機能処理手段を備える。最適化単機能履歴情報生成手段はさらに、第二最適化単機能処理手段が行った最適化に関する履歴情報を、基本最適化機能を組み合わせた形式で生成する第二最適化単機能履歴情報生成手段を含む。
最適化の効率を向上させる他の従来技術として、次のような技術が知られている(例えば特許文献2に記載の技術)。最適化命令と非最適化命令(通常命令)とを含むプログラム中のある命令が最適化命令か否かを判別し、最適化命令の場合にのみ最適化処理を行ない、最適化命令のみに対するポインタの集合からなる最適化命令テーブルを作成する。最適化処理でサイズの変化した命令があると、最適化命令テーブルに最適化命令が残っていない状態になるまで、最適化命令テーブルを用いて再度最適化処理を行なう。最適化処理でサイズの変化した命令がなくなると、つまり、サイズの変化が収束すると最適化処理を終了する。
最適化の効率を向上させるさらに他の従来技術として、次のような技術が知られている(例えば特許文献3に記載の技術)。評価プログラム生成部は、ループ処理を含む計算機用プログラム部分に適用する最適化指示文を、複数の最適化指示文の中から一つずつ選択して、各ループ(プログラム部分)の直前に挿入する。これと共に、評価プログラム生成部は、各ループの実行時間を計測するためのコードを生成し、評価プログラムを作成する。コンパイル・実行部は、この評価プログラムをコンパイル、実行し、各ループの実行時間を計測する。最適オプション決定部は、計測結果に基づきループ毎に最高速となる最適化指示文を検出する。最適化指示文挿入部109は、最適化指示文を各ループの直前に挿入したプログラムを生成する。
特開平10−21086号公報 特開2004−21498号公報 特開2003−173262号公報
しかし、上述の従来技術では、コンパイラが持つ最適化機能による実行性能の向上効果を十分に引き出せなかった。
そこで、本発明の1つの側面では、コンパイラが実行する最適化の中間段階に対する指示に基づいて、コンパイラが持つ最適化機能による実行性能のさらなる向上効果を引き出すことを目的とする。
態様の一例では、最適化指示ファイルからプログラム最適化の中間段階に対する最適化指示を抽出する最適化指示抽出部と、最適化指示の正当性を確認する最適化適用正当性の判定部と、最適化指示を適用することによる実行性能向上の可能性を判断する最適化適用妥当性の判定部と、を備える。
コンパイラが実行する最適化の中間段階に対する指示に基づいて、コンパイラが持つ最適化機能による実行性能のさらなる向上効果を引き出すことが可能となる。
本発明によるコンパイル装置の実施形態の構成を示す図である。 最適化適用対象の抽出処理プログラムの処理例を示すフローチャートである。 最適化適用正当性の判定処理の詳細例を示すフローチャートである。 データ依存関係の解析処理の説明図(その1)である。 データ依存関係の解析処理の説明図(その2)である。 最適化適用条件シナリオテーブルの例を示す図である。 適用条件が「内側ループで配列アクセスが連続になること」である場合における動作例の説明図である。 最適化適用妥当性の判定処理の詳細例を示すフローチャートである。 ソースプログラムのイメージの例を示した図(その1)である。 最適化指示ファイル120(図1)の記述例を示す図である。 最適化動作の説明図(その1)である。 最適化動作の説明図(その2)である。 最適化動作の説明図(その3)である。 ソースプログラムのイメージの例を示した図(その2)である。 最適化動作の説明図(その4)である。 各ループ操作指示に対する最適化動作の説明図(その1)である。 各ループ操作指示に対する最適化動作の説明図(その2)である。 最適化指示によって実行性能が改善するソースプログラムの例を示す図である。 図18のソースプログラムに対するループ融合指示後の最適化の状態を示す図である。 図19の中間段階のソースプログラムイメージに対するループ分割指示後の最適化の状態を示す図である。 本実施形態による最適化の効果を示す図である。 ループと識別子の対応の例を示す図である。 本実施形態によるコンパイラプログラムを実行可能なコンピュータのハードウェア構成例を示す図である。
以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。
通常のコンパイラの最適化技術では、コンパイラが行った最適化の特定の部分に対して、さらなる最適化を指示して行うことができない。また、プログラムの最初の状態からの最適化を指示する場合においても、1回以上の最適化を適用した後の最初の状態に存在しない部分に対して、部分を特定した最適化を指示することができない。具体例としては、コンパイラが自動的な判断でループ融合の最適化を適用した場合、その最適化に引き続いて、融合した位置とは別の位置でループを分割する最適化を使用者が行いたい場合でも、この最適化を指示することができない。
上述のような行いたい最適化の指示ができないことによって、コンパイラが持つ最適化機能による実行性能の向上効果を引き出せない可能性がある。
さらに、コンパイラの使用者が、最適化した結果が正しいこと及び最適化を適用した方が実行性能が向上することを確認した上で最適化を指示することは使用者の負担である。
以下に説明するコンパイラの実施形態では、コンパイラが持つ最適化機能による実行性能のさらなる向上効果を引き出すことを可能とするものである。
図1は、本発明によるコンパイル装置100の実施形態の構成を示す図である。コンパイル装置100は、最適化適用対象の抽出部101、最適化適用正当性の判定部102、最適化適用妥当性の判定部103、および最適化適用処理部104を備える。これらの機能によって、コンパイラが構成される。以下の説明において、単に「コンパイラ」というときは、コンパイル装置100が上記の各機能を実行することによって実現される機能またはプログラムを指す。
最適化適用対象の抽出部101は、ソースプログラムまたは最適化適用結果の中間プログラム(以下「プログラム」と記載する)110と、最適化指示ファイル120を入力とし、最適化指示を抽出する。例えば、最適化適用対象の抽出部101は、最適化指示ファイル120から最適化を適用する部分と最適化の内容を抽出する。これにより、最適化適用対象の抽出部101は、最適化指示ファイル120とプログラム110の部分との対応付けを行う。最適化適用対象の抽出部101は、最適化指示ファイル120によって、コンパイラが行う最適化の中間段階に対する指示及び、プログラム110の最初の状態に存在しない部分に対して、部分を特定して最適化を指示することができる。ここで、最適化の中間段階とは、コンパイラがプログラムに対して1回以上の最適化を行った後であってまだ最適化が完了していない段階をいう。より具体的には、最適化適用対象の抽出部101は、最適化指示ファイル120によって、コンパイラが自動で行う最適化適用後の状態に対して、さらなる最適化を指示することが可能である。最適化適用対象の抽出部101は特に、最適化指示ファイル120によって、プログラム110中のループに対して適用したい最適化の順番および組合せを任意に指示することを可能とする。ループに対して指示可能とする最適化は例えば、ループ融合、ループ分割、ループ逆転、ループ交換、ループ傾斜、ループ細分(ストリップマイニング)、ループタイル化である。これらの最適化の詳細については、後述する。
最適化適用正当性の判定部102は、最適化指示による最適化の結果、プログラム110が正しく実行されるか否か、すなわち最適化指示の正当性を確認する。例えば、最適化適用正当性の判定部102は、最適化適用対象の抽出部101が抽出した最適化指示に基づいてプログラム110に対して最適化の指示を仮適用する。ここで、仮適用とは、最適化の指示を取り消すことができるように元のプログラム110の状態をメモリ等に退避させた上で、最適化の指示を適用することをいう。最適化適用正当性の判定部102は、その仮適用の結果、プログラム110内のデータの依存関係が変化したか否かを判定する。最適化適用正当性の判定部102は、プログラム110内のデータの依存関係が変化しない場合にプログラム110が正しく実行されて最適化が正当と判定し、データの依存関係が変化した場合にプログラム110が正しく実行されず最適化が不当と判定する。最適化適用正当性の判定部102は、最適化が不当であると判定した場合には、プログラム110に対する最適化の仮適用を取り消して、プログラム110の状態を最適化適用前の状態に戻す。
最適化適用妥当性の判定部103は、最適化指示を適用することによる実行性能向上の可能性を判断する。例えば、最適化適用妥当性の判定部103は、最適化指示の適用においてその最適化指示に対応するプログラム110の部分が満たすべき適用条件の充足度を判定することによりプログラム110の部分ごとに実行性能向上の可能性(例えば実行時間の短縮化)を判断する。
最適化適用処理部104は、最適化適用妥当性の判定部103で所定の充足度が満たされた仮適用された最適化を正式な最適化適用結果130として、プログラム110に反映させて出力する。
以上により、最適化指示ファイル120を用いて記述を行うことにより、コンパイラが実行する最適化の中間段階に対する指示を最初から行うことができる。すなわち、コンパイラが行った最適化の特定部分に対してさらなる最適化の指示を行うことができる。これにより、プログラムに対する最適化の指示をコンパイラの使用者の負担なく行えるようになった上に、コンパイラが持つ最適化機能による実行性能のさらなる向上効果を引き出すことが可能となる。
図2は、コンピュータのCPU(中央演算処理装置)が、図1の最適化適用対象の抽出部101の機能を実現するために、例えば外部記憶装置からメモリに読み出して実行する最適化適用対象の抽出処理プログラムの処理例を示すフローチャートである。
まず、例えば外部記憶装置から最適化指示ファイル120がメモリに読み込まれ、最適化指示ファイル120の先頭が取り出し位置とされる(ステップS201)。
次に、最適化指示ファイル120から最適化の指示対象が取り出される(ステップS202)。最適化の指示対象は例えば、最適化を実行すべきプログラム110内の特定のループ処理である。
次に、最適化指示ファイル120から、ステップS202の最適化の指示対象に続いて記述されている最適化の種類と適用内容が取り出される(ステップS203)。最適化の種類は、ステップS202の最適化の指示対象に対してどのような処理を実行するかを示す処理内容であり、例えば、ループ融合、ループ分割、ループ交換、ループ逆転、ループ傾斜、ループタイル化などである。これらの詳細については、後述する。最適化の適用内容は、ステップS202の最適化の指示対象に対して上記最適化の種類の処理を実行するときの具体的な内容であり、例えば、上記最適化の種類の処理が実行されるときの、最適化の指示対象に対する相手となるプログラム110内の特定のループ処理である。より具体的には、例えば最適化の指示対象がプログラム110内の「ループ1」で、最適化の種類が「ループ融合」であった場合に、融合される相手としてのプログラム110内の「ループ2」が最適化の適用内容である。
次に、ステップS202の最適化の指示対象に対応するプログラム110の部分が取り出される(ステップS204)。
その後、最適化適用正当性の判定処理が実行される(ステップS205)。この処理では、図2の最適化適用正当性の判定部102の機能と、そこから呼び出される最適化適用妥当性の判定部103の機能および最適化適用処理部104の機能が実行され、プログラム110に対する最適化適用結果130(図1)が出力される。
その後、最適化指示ファイル120の取り出し位置が1行進められる(ステップS206)。
そして、最適化指示ファイル120の末尾に到達したか否かが判定される(ステップS207)。
ステップS207の判定がNOならば、ステップS202で最適化指示ファイル120から取り出された最適化の指示対象に対する指示が終了したか否かが判定される(ステップS208)。
ステップS208の判定がNOならば、ステップS203の処理に戻って、次の最適化の種類と適用内容が取り出され、プログラム110に最適化が適用されてゆく。
最適化の指示対象に対する指示が終了しステップS208の判定がYESになると、ステップS202の処理に戻り、最適化指示ファイル120から次の最適化の指示対象が取り出され、その指示対象に対して最適化が適用されてゆく。次の最適化の指示対象は例えば、最初の「ループ1」に対するプログラム110の最適化結果の中間段階における「ループ1」あるいは別の「ループ2」などである。
最適化指示ファイル120からの読み出しが末尾に到達しステップS207の判定がNOになると、図2の最適化適用対象の抽出処理が終了する。
図3は、図2のステップS205の最適化適用正当性の判定処理の詳細例を示すフローチャートである。
まず、図2のステップS204でプログラム110から取り出されたステップS202の最適化の指示対象に対応するプログラム110の部分に対して、ステップS203で取り出された最適化の種類と適用内容に対応する最適化が仮適用される(ステップS301)。このとき、最適化前の状態がメモリ等に退避される。
次に、最適化適用後のプログラム110の部分の状態に対して、データ依存関係が解析される(ステップS302)。
ステップS302の処理の結果、データ依存関係が変化したか否かが判定される(ステップS203)。
データ依存関係が変化せずステップS203の判定がNOならば、最適化は正当であると判定されて(ステップS304)、最適化適用妥当性の判定処理へ進む(ステップS305)。この処理では、図1の最適化適用妥当性の判定部103の機能および最適化適用処理部104の機能が実行される。この処理の後、図3のフローチャートの処理が終了し、図2のステップS205の最適化適用正当性の判定処理が終了する。
データ依存関係が変化してステップS303の判定がYESになると、最適化は不当であると判定される(ステップS306)。そして、図2のステップS204のプログラム110の部分の状態が、ステップS301でメモリ等に保存してあった最適化前の状態に戻される(ステップS307)。その後、図3のフローチャートの処理が終了し、図2のステップS205の最適化適用正当性の判定処理が終了する。
上述した図3のフローチャートで示される最適化適用正当性の判定処理において、ステップS302で実行されるデータの依存関係の解析の処理について説明する。
図4は、データ依存関係の解析処理の説明図(その1)である。図4(a)に示されるプログラムの部分に対して、ループ分割の最適化をして図4(b)に示されるようにする場合を例に説明する。ここで、「ループ分割」とは、プログラムの部分中の1つのループ処理を複数のループ処理に変換する最適化をいう。図4(a)のプログラムの部分におけるデータ依存関係は、「文2でA[i]を定義した後に、文1でA[i-1]を参照する。」である。これに対して、最適化後の図4(b)のプログラムの部分におけるデータ依存関係は、「文1でA[i-1]を参照した後に、文2でA[i]を定義する。」となる。この場合、図4(a)と図4(b)とでは、明らかにデータ依存関係が変化してしまうため、この最適化(ループ分割)は不当であると判定される。
データ依存関係が存在する場合、2つの実行順序を変更するとデータ依存関係が変化して、実行結果が変化する可能性があるため、そのようなプログラム変換をコンパイラが行ってはならない。
図5は、データ依存関係の解析処理の説明図(その2)である。
図5(a)に例示されるプログラムの部分の中のForループにおけるデータ依存関係は、文1の「A[a*i+b]」(「*」は乗算の演算を示す)と文2の「A[c*i+d]」がメモリ上の同じ場所である時に発生する。「A[a*i+b]」と「A[c*i+d]」がメモリ上の同じ場所になるのは、これらの添字が等しい場合である。これを式で表すと、以下の関係になる。
a*s+b = c*t+d ・・・(1)
上記(1)式のs,tの整数解がForループによるループ範囲(1<=s,t<N)の中に存在するかどうかを解析することが、データ依存関係の解析である。解が存在すればデータ依存関係あり、解が存在しなければデータ依存関係なしと判定することができる。
データ依存解析の対象の配列変数が多次元配列の場合には、次元毎に方程式を立て、連立方程式を解く必要がある。このような連立方程式は、例えば、下記文献に記載の多面体解析を用いた解法を採用することができる。
Nixolas Vasilache, “Violated Dependence Analysis”, ICS06, 2006
データ依存関係の解析処理の簡単な例について、図5(b)のプログラムの部分の例を用いて説明する。この例において、左辺側の配列変数A[i]の添字iをsとし、右辺側の配列変数A[i−1]の添字i−1をt−1としたとき、A[i]とA[i−1]がメモリ上の同じ場所となるのはこれらの添字が等しい場合であるとする。ここで、添字iは、実際にはメモリ上に確保されている変数であるが、以後の説明では単に「添字」と呼ぶことにする。この場合、データ依存関係の解析の連立方程式は、次式となる。
s=t-1
2<=s<=10
2<=t<=10
・・・(2)
上記(2)を解くと、
s=k
t=k+1
2<=k<=9
・・・(3)
となる。この結果、2<=k<=9であるループの繰返し値kで定義される配列変数A[k]と、値k+1で参照される配列変数A[k]との間にデータ依存解が存在することがわかる。
図6は、図3のステップS305の最適化適用妥当性の判定処理において参照される、例えば外部記憶装置からメモリに読み出されて記憶される最適化適用条件シナリオテーブルの例を示す図である。図1の説明で前述したように、最適化適用正当性の判定処理が実行する最適化適用正当性の判定部102の機能では、最適化指示の適用においてその最適化指示に対応するプログラム110の部分が満たすべき適用条件の充足度が判定される。これにより、プログラム110の部分ごとに実行性能向上の可能性が判断される。そこで、本実施形態では、最適化指示に対応するプログラム110の部分ごとに、その部分に対して適用される、最適化の種類とその種類に対応する適用条件の組の羅列が、図6に例示される最適化適用条件シナリオテーブルとして、外部記憶装置またはメモリ等に記憶される。
図6の例において、「No」列の数値1、2、3、4、5が、或るプログラム110の部分に対して適用されるシナリオを構成する最適化の種類ごとの適用条件である。
「最適化の種類」列には、「ループ融合」「ループ分割」「ループ交換」「ループ細分」「ループタイル化」「ループ逆転」「ループ傾斜」等の最適化の種類が登録される。「ループ融合」は、複数のループを1つのループにする最適化である。「ループ分割」は、1つのループを複数のループにする最適化である。「ループ交換」は、多重ループの入れ子の順序を入れ替える最適化である。「ループ細分(ストリップマイニング)」は、回転数nのループをmに細分して(n>m)、それを(n/m)回繰り返すようにする最適化である。「ループタイル化」は、多重ループに対してループ細分をする最適化である。「ループ逆転」は、ループの繰返しの順序を逆にする最適化である。「ループ傾斜」は、外側ループの制御変数を内側ループの制御変数に加える最適化である。
「適用条件」列には、「最適化の種類」列に登録される上記最適化の種類ごとに、その最適化の種類を適用できるための適用条件が登録される。
最適化の種類が「ループ融合」の場合には、適用条件は「融合後にキャッシュサイズに納まること、もしくは、ループ間にデータ依存があること」である。キャッシュサイズに納まるか否かは例えば、コンパイルされるプログラム110が実行される対象となるコンピュータ(ターゲットマシン)により決まるキャッシュサイズと、ループ内でアクセスされる配列変数の範囲とが比較されることにより、判定される。ループ間にデータ依存があるか否かは例えば、前述した図3のステップS302と同様のデータ依存関係の解析処理が実行されることにより、判定される。「融合後にキャッシュサイズに納まる」という適用条件が満たされることにより、プログラムの実行時にもっぱらキャッシュに対するアクセス頻度が高くなり、主記憶メモリに対するアクセス頻度が低くなる。この結果、プログラム110の実行時間が短くなって実行性能が向上する。「ループ間にデータ依存があること」という適用条件が満たされることにより、ループ融合によってデータ依存があるデータ同士が1つのループにまとめられる。この結果、それらのデータが例えばキャッシュに納まる可能性が高くなったりアクセスの連続性が高まったりして、プログラム110の実行時間が短くなって実行性能が向上する。
最適化の種類が「ループ分割」の場合には、適用条件は「ループ内の配列アクセスがキャッシュサイズに納まること。ループ内で配列の再利用があること」である。ループ内で再利用される配列をそれぞれ別々のループ内に入れることにより、それぞれのループ実行時に、それぞれのループ内のデータが例えばキャッシュに納まる可能性が高くなったりアクセスの連続性が高まったりする。この結果、プログラム110の実行時間が短くなって実行性能が向上する。
最適化の種類が「ループ交換」の場合には、適用条件は「内側ループで配列アクセスが連続になること」である。配列アクセスが連続か否かは例えば、配列変数がメモリ上にどのように配置されているかと、ループ内でどのような順番でアクセスされるかとが比較されて、判定される。例えば、C言語で記述されたプログラムの場合、2次元の配列変数A[10][5]は、メモリ上にA[1][1],A[1][2],A[1][3],A[1][4],A[1][5],A[2][1],A[2][2],・・・のような順番に配置される。このケースの場合、例えば図7(a)に示されるプログラムの部分では、内側のForループにおいて、配列変数A[i][j]の、上述のようにメモリ上で連続するほうの添字「j」が順次インクリメントされてゆくので、連続アクセスと判定される。一方、例えば図7(b)に示されるプログラムの部分では、内側のForループにおいて、配列変数A[j][i]の、上述のようにメモリ上で連続していないほうの添字「j」が順次インクリメントされてゆくので、連続アクセスではないと判定される。内側ループ内での配列アクセスが連続になることにより、例えばメモリアクセスにおけるアクセス領域が連続となってメモリアクセスが高速化される可能性が高くなり、プログラム110の実行時間が短くなって実行性能が向上する。
最適化の種類が「ループ細分」または「ループタイル化」の場合には、適用条件は「内側ループでの配列アクセスがキャッシュサイズに納まること」である。キャッシュサイズに納まるか否かの判定は、「ループ融合」の場合と同様である。
「ループ逆転」または「ループ傾斜」の場合には、適用条件は「変換後にデータ依存がなくなること」である。データ依存がなくなるか否かの判定は、「ループ融合」の場合と同様である。
図8は、図3のステップS305の最適化適用妥当性の判定処理の詳細例を示すフローチャートである。この処理では、メモリ上等に記憶される図6に例示される最適化適用条件シナリオテーブルを用いた制御動作が実行される。
まず、図2のステップS203の最適化の種類ごとに、図6に例示される最適化適用条件シナリオテーブルが参照される。この結果、最適化についての適用条件がコンパイラ内部(メモリ)から取り出される。このときの最適化の種類ごとの適用条件の数をDn、各適用条件をD(i)、i=1〜Dnとする(以上、ステップS801)。
次に、メモリ上の変数iの初期値が0に設定される(ステップS802)。
次に、プログラム110の部分が適用条件D(i+1)を満たすか否かが判定される(ステップS803)。
ステップS803の判定がYESならば、添字iの値が+1される(ステップS804)。
その後、添字iの値がDnに等しくなったか否かが判定される(ステップS805)。
ステップS805の判定がNOならば、ステップS803の処理に戻って、処理が繰り返される。
上述の繰り返しにおいて、プログラム110の部分が適用条件D(i+1)を満たさなくなりステップS803の判定がNOになると、その時点で繰り返し処理が打ち切られてステップS808に移行する。
添字iの値がDnに等しくなってステップS805の判定がYESになると、プログラム110の部分が適用条件D(i)を全て満たすか否かが判定される(ステップS806)。
ステップS806の判定がYESならば、図2のステップS203の最適化の種類と適用内容に対応する最適化が実施される(ステップS807)。すなわち、プログラム110の部分が、最適化指示ファイル120によって最適化条件D(i)で指定された全ての適用条件を満たすとき、その適用条件に対応する最適化種類の最適化が実施される。その後、図8のフローチャートの処理が終了し、図3のステップS305の最適化適用妥当性の判定処理が終了する。
ステップS806の判定がNOとなるか、ステップS803の判定がNOとなると、コンパイラの使用者が値Xをオプション指定し、かつ、適用条件D(i+1)を満たした数iの値をDnで割って100を乗算したパーセント値が算出される。そして、そのパーセント値がオプション指定された値X以上であるか否かが判定される(以上、ステップS808)。ここで、使用者がオプション指定する値Xは、Dn個の適用条件をどれだけ満たすかという充足率(パーセント)を表す。例えば、Dn個の適用条件のうちm個が満たされる場合は、m÷Dn×100(パーセント)の値がX以上であるか否かが判定される。
ステップS808の判定がYESならば、図2のステップS203の最適化の種類と適用内容に対応する最適化が実施される(ステップS807)。その後、図8のフローチャートの処理が終了し、図3のステップS305の最適化適用妥当性の判定処理が終了する。
ステップS808の判定がNOならば、最適化は実施されず(ステップS809)、図8のフローチャートの処理が終了し、図3のステップS305の最適化適用妥当性の判定処理が終了する。
以上説明した図2、図3、および図8のフローチャートによって示される本実施形態によるコンパイラの動作例について、以下に説明する。
ソースプログラムまたは最適化適用結果である中間プログラムに対して、部分を特定して指示された最適化について、上述のフローチャートによる処理によって、最適化を適用した結果が正しいと判定され、かつ、最適化を適用した方が実行性能が向上すると判定された場合に、最適化が適用される。
図9は、ソースプログラムのイメージの例を示した図である。このソースプログラム例に対して、以下のような最適化をしたい場合を例に説明する。
・ループ融合指示: ループ1とループ2を融合する。
・ループ分割指示: ループ融合指示で融合したループの実行文2と実行文3の間で分割する。
・ループ交換指示: ループ分割指示で分割された2番目のループの入れ子を交換する。
図10は、上述の最適化を指示するための最適化指示ファイル120(図1)の記述例を示す図である。図10において、「@Loop1」や「@Loop2」は、図2のステップS202で取り出される最適化の指示対象である。
「Fusion(@Loop2)」はループ融合指示を示す最適化指示である。図2のステップS203において、「Fusion」が認識されることにより、「ループ融合」という最適化の種類が取り出される。また、括弧内の「@Loop2」が認識されることにより、ループ2をループ1に融合するという適用内容が取り出される。
「Fission(@2)」はループ分割指示を示す最適化指示である。図2のステップS203において、「Fission」が認識されることにより「ループ分割」という最適化の種類が取り出される。また、括弧内の「@2」が認識されることによって、ループ融合後の2番目の文の後で2つループに分割するという適用内容が取り出される。
「Interchange(@1,@2)」はループ交換指示を示す最適化指示である。図2のステップS203において、「Interchange」が認識されることにより「ループ交換」という最適化の種類が取り出される。また、括弧内の「@1,@2」が認識されることによって、指定されている最適化の指示対象内の1番目の入れ子のループ(@1)と2番目の入れ子のループ(@2)を交換するという適用内容が取り出される。
上述の最適化指示のうち、ループ融合指示は、従来技術により、例えば図9のソースプログラム上に記述することが可能である。しかし、ループ分割指示およびループ交換指示は、ループ融合指示の結果に対する指示であるため、従来技術では、図9のソースプログラム上に記述することはできなかった。これに対して本実施形態では、図10の最適化指示ファイル120に最初からループ分割指示およびループ交換指示を記述することが可能となる。本実施形態では、最適化を指示するための最適化指示ファイル120を用いて最適化指示をした後のさらなる最適化指示を行えるようになる。これにより、プログラムに対する最適化の指示をコンパイラの使用者の負担なく行えるようになった上に、コンパイラが持つ最適化機能による実行性能のさらなる向上効果を引き出すことが可能となる。
コンパイラの使用者は、図6に例示した最適化適用条件シナリオテーブルの設定内容の裏返しとして、最適化指示ファイル120に各ループ操作指示を記述する。すなわち例えば、ソースプログラム内のループが大きくてキャッシュに収まりそうになければ、ループ分割を指示する。また、或る内側ループで配列が連続アクセスとなりそうになければ、ループ交換を指示する。さらに、内側ループでキャッシュに納まらりそうになければ、ループ細分やループタイル化を指示する。
前述した図2のフローチャートの最適化適用対象の抽出処理によって、図10に例示される最適化指示ファイル120から、最適化の指示対象と、最適化の種類および適用内容が、順次取り出される。
まず、図10に例示される最適化指示ファイル120から、図11(a)に示される最適化指示の部分が取り出される。この最適化指示の部分に基づいて、前述した図3のフローチャートの最適化適用正当性の判定処理および図8のフローチャートの最適化適用妥当性の判定処理が実行されることにより、ループ1とループ2が融合される。すなわち、最適化指示の仮適用の結果、図8のステップS801で取り出された最適化条件D(i)で指定された全ての適用条件を満たすとき、あるいは一定の割合以上を満たすときに、その適用条件に対応する最適化種類の最適化が確定する。この結果、図9に示されるソースプログラムイメージは、図11(b)に示される中間段階のソースプログラムイメージに最適化される。すなわち、ループ2内で実行されていた実行文2が、ループ1内で実行文1とともに実行されるように最適化される。
次に、図10に例示される最適化指示ファイル120から、さらに最適化指示の部分が取り出されて、図12(a)に示される如くとなる。この最適化指示の部分に基づいて、図11(b)の融合結果において、2番目の文(@2)の後でループ2とループ3という2つの2重ループに分割されて、その2重ループ内で実行文3が実行されるように最適化される。この結果、図11(b)に示される中間段階のソースプログラムイメージは、図12(b)に示される中間段階のソースプログラムイメージに最適化される。
最後に、図10に例示される最適化指示ファイル120から、さらに最適化指示の部分が取り出されて、図13(a)に示される如くとなる。この最適化指示の部分に基づいて、図12(b)の分割結果において、2番目のループ2の1番目の入れ子(@1)のループ2と2番目の入れ子(@2)のループ3が交換される。この結果、図12(b)に示される中間段階のソースプログラムイメージは、図13(b)に示される最終段階のソースプログラムイメージに最適化される。
以上のようにして、図10に例示される最適化指示ファイル120によって、図9に例示されるソースプログラムイメージが、図13(b)に例示される最終段階のソースプログラムイメージに最適化される。
図14は、ソースプログラムのイメージのより具体的な例を示した図である。このソースプログラムイメージに対して、前述した図10の最適化指示ファイル120による最適化が実行される場合の動作について、説明する。
まず、図10に例示される最適化指示ファイル120から、図11(a)に示される最適化指示の部分が取り出される。
この最適化指示の部分に基づいて、前述した図3のフローチャートの最適化適用正当性の判定処理および図4のフローチャートの最適化適用妥当性の判定処理が実行されることにより、図14の1番目のForループと2番目のForループが融合される。この結果、図14に示されるソースプログラムイメージは、図15(a)に示される中間段階のソースプログラムイメージに最適化される。すなわち、図14において2番目のForループ内で実行されていた配列変数B[i]への代入文が、図15(a)では、配列変数A[i]への代入文とともに1番目のForループ内で実行されるように最適化される。
次に、図10に例示される最適化指示ファイル120から、さらに最適化指示の部分が取り出されて、図12(a)に示される如くとなる。この最適化指示の部分に基づいて、図15(a)の融合結果において、2番目のForループ文(@2)の後で2つの2重Forループに分割されて、その2重Forループ内で配列変数C[j][i]への代入文が実行されるように最適化される。この結果、図15(a)に示される中間段階のソースプログラムイメージは、図15(b)に示される中間段階のソースプログラムイメージに最適化される。
最後に、図10に例示される最適化指示ファイル120から、さらに最適化指示の部分が取り出されて、図13(a)に示される如くとなる。この最適化指示の部分に基づいて、図15(b)の分割結果において、2番目のForループの1番目の入れ子(@1)のForループと2番目の入れ子(@2)のForループが交換される。この結果、図15(b)に示される中間段階のソースプログラムイメージは、図15(c)に示される最終段階のソースプログラムイメージに最適化される。
以上のようにして、図10に例示される最適化指示ファイル120によって、図14に例示されるソースプログラムイメージが、図15(c)に例示される最終段階のソースプログラムイメージに最適化される。
図10に例示される最適化指示ファイル120によって、図14のソースプログラムイメージに対して、以下に示される最適化効果が得られる。まず、ループ融合指示によって、配列変数Aを同一ループ内で使用することによるキャッシュの効率化を図ることが可能となる。また、ループ分割指示によって、配列Cによって配列変数A,Bがキャッシュから追い出されることを防ぐことが可能となる。さらに、ループ交換指示によって、最内ループにおける配列変数Cのアクセスが連続になることによる処理の高速化を図ることが可能となる。
従来のコンパイラおいては、ループ融合指示相当の最適化がコンパイラによる判断で自動的に行われる場合でも,その後にループ分割する最適化指示を与えることができなかった。これに対して、本実施形態によるコンパイラにおける最適化指示方式では、図10に例示されるループ分割指示によって、ループ融合後にループ分割という最適化指示を与えることができる。さらにその後の最適化指示として、ループ交換指示のように与えることができるようになる。このような指示が可能になることによって、上記のような最適化効果を狙って、コンパイラの最適化を動作させることができるようになる。
図16と図17は、図10で説明したループ融合,ループ分割,ループ交換以外に本実施形態のコンパイラが実施可能な、ループ逆転、ループ傾斜、ループ細分(ストリップマイニング)、ループタイル化等の各ループ操作指示に対する最適化動作の説明図である。
図16(a)は、ループ逆転の最適化指示に対する最適化動作の説明図である。ループ逆転指示により、Forループの繰返し順序が逆転される最適化が実行される。
図16(b)は、ループ傾斜の最適化指示に対する最適化動作の説明図である。ループ傾斜指示により、外側のForループの変数iが内側のForループの変数jに加えられる最適化が実行される。
図17(c)は、ループ細分(ストリップマイニング)の最適化指示に対する最適化動作の説明図である。ループ細分(ストリップマイニング)指示により、Forループの回転が大きさkに細分化される最適化が実行される。
図17(d)は、ループタイル化の最適化指示に対する最適化動作の説明図である。ループタイル化指示により、内側ループでk1×k2の範囲をアクセスするように2重ループそれぞれをループ細分する最適化が実行される。
図18は、最適化指示によって実行性能が改善するソースプログラムの例を示す図である。また、図19は、図18のソースプログラムに対するループ融合指示後の最適化の状態を示す図である。さらに、図20は、図19の中間段階のソースプログラムイメージに対するループ分割指示後の最適化の状態を示す図である。
図18から図20において、ループ内で使われる配列変数x1,x2,x3,x4,x5,y1,y2の要素数は、各々N=524288個である。各配列変数はdouble型なので、1要素の大きさは8バイトとなる。従って、個々の配列変数のサイズは、N×8=494304バイト=4メガバイトとなる。図18で、配列変数x1〜x5を含むループでアクセスされるデータサイズは、4×5=20メガバイトである。
これに対して、ループ融合された図19のループ内でアクセスされる配列変数のデータサイズは、4×7=28メガバイトになる。キャッシュサイズが20メガバイトの場合、図19のループ内でアクセされる配列変数は、キャッシュに乗り切らずにあふれてしまい(キャッシュミス)、キャッシュに乗り切る場合よりも実行性能が低下する。
これを、図20のようにループ分割すると、いずれのループもキャッシュに乗り切るので、性能が改善する。なお、元の図18の場合は、1番目のループでキャッシュに乗せたデータを2番目のループであふれさせれしまっているので、図20の最適化結果よりも性能が悪い。よって、本実施形態のコンパイラにより、図18、図19、図20の順で最適化を行うことにより、プログラムの実行性能を向上させることが可能となる。
図21は、本実施形態による最適化の効果を示す図である。或る計算機(キャッシュメモリ20MB)での実行において、実行時間は図21に示されるようになる。従来のコンパイラによって自動最適化でループ融合だけを行った場合よりも、本実施形態のコンパイラによってループ融合後にループ分割を行った場合の方が、実行性能が改善することが可能となる。
本実施形態のコンパイラにおける最適化指示方式は、指示する最適化機能の種別を限定するものではないが、特にループ対する最適化を制御可能にするために、最適化対象のループを特定することが可能な最適化指示ファイルの形式とする。図10で例示した最適化指示ファイルのデータ構成例では、@Loop1,@Loop2のようにループ毎に追番を付けたラベルでループが特定されている。
このほか、最適化指示ファイルは、ループの出現位置が特定できる識別子を備えればよく、例えばループの深さだけの桁数を持ち、同じ深さにおけるループの出現順序(0,1,2,…)を値としてもつ数値によっても識別可能である。図22は、このような識別子とループとの対応の例を示す図である。
識別子0および1は、1番目の階層の1番目および2番目の各Forループを示している。
識別子00および01は、1番目の階層の1番目のForループ内の、2番目の階層の1番目および2番目の各Forループを示している。同様に、識別子10は、1番目の階層の2番目のForループ内の、2番目の階層の1番目のForループを示している。
識別子010および011は、1番目の階層の2番目のForループ内の、3番目の階層の1番目および2番目の各Forループを示している。同様に、識別子100は、1番目の階層の1番目のForループ内の、3番目の階層の1番目のForループを示している。
ループ対する最適化の制御を特に考慮する理由は、一般にプログラムにおいて実行時間の比率が高い部分はループであるからである。
図23は、本実施形態によるコンパイラプログラムを実行可能なコンピュータのハードウェア構成例を示す図である。
図23に示されるコンピュータは、CPU2301、メモリ2302、入力装置2303、出力装置2304、外部記憶装置2305、可搬記録媒体2309が挿入される可搬記録媒体駆動装置2306、及び通信インタフェース2307を有し、これらがバス2308によって相互に接続された構成を有する。同図に示される構成は図1の機能を備えるコンパイル装置100を実現できるコンピュータの一例であり、そのようなコンピュータはこの構成に限定されるものではない。
CPU2301は、当該コンピュータ全体の制御を行う。メモリ2302は、プログラムの実行、データ更新等の際に、外部記憶装置2305(或いは可搬記録媒体2309)に記憶されているプログラム又はデータを一時的に格納するRAM等のメモリである。CUP2301は、プログラムをメモリ2302に読み出して実行することにより、全体の制御を行う。
入力装置2303は、ユーザによるキーボードやマウス等による入力操作を検出し、その検出結果をCPU2301に通知する。
出力装置2304は、CPU2301の制御によって送られてくるデータを表示装置や印刷装置に出力する。
外部記憶装置2305は、例えばハードディスク記憶装置である。主に各種データやプログラムの保存に用いられる。
可搬記録媒体駆動装置2306は、光ディスクやSDRAM、コンパクトフラッシュ(登録商標)等の可搬記録媒体2309を収容するもので、外部記憶装置2305の補助の役割を有する。
通信インターフェース2307は、例えばLAN(ローカルエリアネットワーク)又はWAN(ワイドエリアネットワーク)の通信回線を接続するための装置である。
本実施形態によるシステムは、図2、図3、および図8のフローチャート等で実現される機能を搭載したプログラムをCPU2301が実行することで実現される。そのプログラムは、例えば外部記憶装置2305や可搬記録媒体2309に記録して配布してもよく、或いは通信インタフェース2307によりネットワークから取得できるようにしてもよい。
従来は、最適化によってソースプログラム上に存在しない部分が生成された場合に、ソースプログラム上に”存在しない部分”に対する最適化指示をソースプログラム上に記述することが困難であった。これに対して、本実施形態では、最適化指示ファイルによって、プログラムの最初の状態からの最適化指示を適用順に従って与えることにより、最初の状態には存在しない部分に対する最適化指示を与えることが可能となる。
なお、本実施形態では、コンパイラによって「1回以上の最適化」が自動に適用された後の状態に対して最適化を指示する場合は、コンパイル前の予測した状態になっている場合に最適化が適用される。
以上説明したようにして、本実施形態によれば、コンパイル装置が行う最適化の中間段階に対する指示に基づいて、プログラムに対する最適化を適用することで、コンパイル装置が持つ最適化機能による実行性能の向上効果を引き出すことが可能となる。
また、最適化の適用が正しいかどうか及び最適化を適用した方が実行性能が向上するかどうかを判断する手段を備えたことによって、コンパイル装置の使用者が最適化の指示の妥当性を考慮する負担をなくすことが可能となる。
さらに、コンパイル装置が持つ自動最適化機能を強化することなく、既存の最適化機能の適用方法を制御する手段によって、実行性能の向上効果を引き出すことが可能となる。
以上の実施形態に関して、更に以下の付記を開示する。
(付記1)
最適化指示ファイルからプログラム最適化の中間段階に対する最適化指示を抽出する最適化指示抽出部と、
前記最適化指示の正当性を確認する最適化適用正当性の判定部と、
前記最適化指示を適用することによる実行性能向上の可能性を判断する最適化適用妥当性の判定部と、
を備えることを特徴とするコンパイル装置。
(付記2)
前記最適化適用妥当性の判定部は、前記最適化指示の適用において当該最適化指示に対応する前記プログラム最適化の中間段階のプログラムの部分が満たすべき適用条件の充足度を判定することにより前記プログラムの部分ごとに前記実行性能向上の可能性を判断する、
ことを特徴とする付記1に記載のコンパイル装置。
(付記3)
前記最適化適用対象の抽出部は、前記プログラムと前記最適化指示ファイルを入力し、当該最適化指示ファイルから最適化を適用する部分と最適化の種類および内容を抽出して、前記プログラムの部分との対応付けを行う、
ことを特徴とする付記1または2のいずれかに記載のコンパイル装置。
(付記4)
前記最適化適用正当性の判定部は、前記最適化指示に基づいて前記プログラムに対して最適化の指示を仮適用し、当該仮適用の結果前記プログラム内のデータの依存関係が変化しないか否かを解析することにより、前記仮適用した最適化の指示により前記プログラムが正しく実行されるか否かを判定する、
ことを特徴とする付記1ないし3のいずれかに記載のコンパイル装置。
(付記5)
前記最適化の適用条件は、最適化の仮適用の結果に対応する前記プログラムの部分が、キャッシュのサイズに納まること、または前記プログラムの部分を構成するループ処理間にデータ依存があることのいずれかの条件を含む、
ことを特徴とする付記2ないし4のいずれかに記載のコンパイル装置。
(付記6)
前記最適化の適用条件は、最適化の仮適用の結果に対応する前記プログラムの部分内の配列変数データに対するアクセスがキャッシュのサイズに納まること、または当該プログラムの部分内で前記配列変数データの再利用があることのいずれかの条件を含む、
ことを特徴とする付記2ないし5のいずれかに記載のコンパイル装置。
(付記7)
前記最適化の適用条件は、最適化の仮適用の結果に対応する前記プログラムの部分内の配列変数データに対するアクセスが連続になることの条件を含む、
ことを特徴とする付記2ないし6のいずれかに記載のコンパイル装置。
(付記8)
前記最適化の適用条件は、最適化の仮適用の結果に対応する前記プログラムの部分内でデータ依存がなくなることの条件を含む、
ことを特徴とする付記2ないし7のいずれかに記載のコンパイル装置。
(付記9)
前記最適化の適用条件は、前記最適化の指示の種類ごとに予め設定され、前記最適化の指示の種類は、ループ融合指示、ループ分割指示、ループ交換指示、ループ逆転指示、ループ傾斜指示、ループ細分指示、ループタイル化指示の少なくとも1つを含む、
ことを特徴とする付記2ないし8のいずれかに記載のコンパイル装置。
(付記10)
最適化指示ファイルからプログラム最適化の中間段階に対する最適化指示を抽出する最適化指示抽出処理と、
前記最適化指示の正当性を確認する最適化適用正当性の判定処理と、
前記最適化指示を適用することによる実行性能向上の可能性を判断する最適化適用妥当性の判定処理と、
をコンピュータに実行させるためのコンパイラプログラム。
(付記11)
最適化指示ファイルからプログラム最適化の中間段階に対する最適化指示を抽出する最適化指示抽出処理と、
前記最適化指示の正当性を確認する最適化適用正当性の判定処理と、
前記最適化指示を適用することによる実行性能向上の可能性を判断する最適化適用妥当性の判定処理と、
をコンピュータに実行させるためのコンパイル方法。
100 コンパイル装置
101 最適化適用対象の抽出部
102 最適化適用正当性の判定部
103 最適化適用妥当性の判定部
104 最適化適用処理部
110 プログラム
120 最適化指示ファイル
130 最適化適用結果
2301 CPU
2302 メモリ
2303 入力装置
2304 出力装置
2305 外部記憶装置
2306 可搬記録媒体駆動装置
2307 通信インタフェース
2308 バス
2309 可搬記録媒体

Claims (11)

  1. 最適化指示ファイルからプログラム最適化の中間段階に対する最適化指示を抽出する最適化指示抽出部と、
    前記最適化指示の正当性を確認する最適化適用正当性の判定部と、
    前記最適化指示を適用することによる実行性能向上の可能性を判断する最適化適用妥当性の判定部と、
    を備えることを特徴とするコンパイル装置。
  2. 前記最適化適用妥当性の判定部は、前記最適化指示の適用において当該最適化指示に対応する前記プログラム最適化の中間段階のプログラムの部分が満たすべき適用条件の充足度を判定することにより前記プログラムの部分ごとに前記実行性能向上の可能性を判断する、
    ことを特徴とする請求項1に記載のコンパイル装置。
  3. 前記最適化適用対象の抽出部は、前記プログラムと前記最適化指示ファイルを入力し、当該最適化指示ファイルから最適化を適用する部分と最適化の種類および内容を抽出して、前記プログラムの部分との対応付けを行う、
    ことを特徴とする請求項1または2のいずれかに記載のコンパイル装置。
  4. 前記最適化適用正当性の判定部は、前記最適化指示に基づいて前記プログラムに対して最適化の指示を仮適用し、当該仮適用の結果前記プログラム内のデータの依存関係が変化しないか否かを解析することにより、前記仮適用した最適化の指示により前記プログラムが正しく実行されるか否かを判定する、
    ことを特徴とする請求項1ないし3のいずれかに記載のコンパイル装置。
  5. 前記最適化の適用条件は、最適化の仮適用の結果に対応する前記プログラムの部分が、キャッシュのサイズに納まること、または前記プログラムの部分を構成するループ処理間にデータ依存があることのいずれかの条件を含む、
    ことを特徴とする請求項2ないし4のいずれかに記載のコンパイル装置。
  6. 前記最適化の適用条件は、最適化の仮適用の結果に対応する前記プログラムの部分内の配列変数データに対するアクセスがキャッシュのサイズに納まること、または当該プログラムの部分内で前記配列変数データの再利用があることのいずれかの条件を含む、
    ことを特徴とする請求項2ないし5のいずれかに記載のコンパイル装置。
  7. 前記最適化の適用条件は、最適化の仮適用の結果に対応する前記プログラムの部分内の配列変数データに対するアクセスが連続になることの条件を含む、
    ことを特徴とする請求項2ないし6のいずれかに記載のコンパイル装置。
  8. 前記最適化の適用条件は、最適化の仮適用の結果に対応する前記プログラムの部分内でデータ依存がなくなることの条件を含む、
    ことを特徴とする請求項2ないし7のいずれかに記載のコンパイル装置。
  9. 前記最適化の適用条件は、前記最適化の指示の種類ごとに予め設定され、前記最適化の指示の種類は、ループ融合指示、ループ分割指示、ループ交換指示、ループ逆転指示、ループ傾斜指示、ループ細分指示、ループタイル化指示の少なくとも1つを含む、
    ことを特徴とする請求項2ないし8のいずれかに記載のコンパイル装置。
  10. 最適化指示ファイルからプログラム最適化の中間段階に対する最適化指示を抽出する最適化指示抽出処理と、
    前記最適化指示の正当性を確認する最適化適用正当性の判定処理と、
    前記最適化指示を適用することによる実行性能向上の可能性を判断する最適化適用妥当性の判定処理と、
    をコンピュータに実行させるためのコンパイラプログラム。
  11. 最適化指示ファイルからプログラム最適化の中間段階に対する最適化指示を抽出する最適化指示抽出処理と、
    前記最適化指示の正当性を確認する最適化適用正当性の判定処理と、
    前記最適化指示を適用することによる実行性能向上の可能性を判断する最適化適用妥当性の判定処理と、
    をコンピュータに実行させるためのコンパイル方法。
JP2014072158A 2014-03-31 2014-03-31 コンパイル装置、コンパイラプログラム、コンパイル方法 Pending JP2015194881A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2014072158A JP2015194881A (ja) 2014-03-31 2014-03-31 コンパイル装置、コンパイラプログラム、コンパイル方法
US14/661,492 US20150277876A1 (en) 2014-03-31 2015-03-18 Compiling device, compiling method, and storage medium storing compiler program
EP15160215.8A EP2963547A1 (en) 2014-03-31 2015-03-23 Compiling device, compiling method, and storage medium storing compiler program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014072158A JP2015194881A (ja) 2014-03-31 2014-03-31 コンパイル装置、コンパイラプログラム、コンパイル方法

Publications (1)

Publication Number Publication Date
JP2015194881A true JP2015194881A (ja) 2015-11-05

Family

ID=54190456

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014072158A Pending JP2015194881A (ja) 2014-03-31 2014-03-31 コンパイル装置、コンパイラプログラム、コンパイル方法

Country Status (3)

Country Link
US (1) US20150277876A1 (ja)
EP (1) EP2963547A1 (ja)
JP (1) JP2015194881A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018067167A (ja) * 2016-10-20 2018-04-26 富士通株式会社 コード生成装置、コード生成方法及びコード生成プログラム
JP2019028540A (ja) * 2017-07-26 2019-02-21 富士通株式会社 情報処理装置、コンパイル方法及びコンパイルプログラム
US11226798B2 (en) 2019-02-04 2022-01-18 Fujitsu Limited Information processing device and information processing method

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102063966B1 (ko) 2015-10-21 2020-01-09 엘에스산전 주식회사 Plc 명령어 컴파일 최적화 방법
US9547484B1 (en) * 2016-01-04 2017-01-17 International Business Machines Corporation Automated compiler operation verification
JP6730587B2 (ja) * 2016-06-13 2020-07-29 富士通株式会社 キャッシュミス推定プログラム、キャッシュミス推定方法及び情報処理装置
US10241811B2 (en) * 2016-11-23 2019-03-26 Significs And Elements, Llc Systems and methods for automatic data management for an asynchronous task-based runtime
US11256489B2 (en) * 2017-09-22 2022-02-22 Intel Corporation Nested loops reversal enhancements
US10866790B2 (en) * 2018-11-30 2020-12-15 Advanced Micro Devices, Inc. Transforming loops in program code based on a capacity of a cache
JP7230719B2 (ja) * 2019-07-19 2023-03-01 富士通株式会社 情報処理装置及び情報処理方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1021086A (ja) 1996-06-28 1998-01-23 Matsushita Electric Ind Co Ltd プログラム変換装置とデバッグ装置
JP2003173262A (ja) 2001-12-06 2003-06-20 Hitachi Ltd プログラムチューニングシステムとプログラムチューニング方法およびプログラムと記録媒体
JP2004021498A (ja) 2002-06-14 2004-01-22 Matsushita Electric Ind Co Ltd プログラム最適化方法
US7318223B2 (en) * 2004-08-26 2008-01-08 International Business Machines Corporation Method and apparatus for a generic language interface to apply loop optimization transformations

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018067167A (ja) * 2016-10-20 2018-04-26 富士通株式会社 コード生成装置、コード生成方法及びコード生成プログラム
JP2019028540A (ja) * 2017-07-26 2019-02-21 富士通株式会社 情報処理装置、コンパイル方法及びコンパイルプログラム
US11226798B2 (en) 2019-02-04 2022-01-18 Fujitsu Limited Information processing device and information processing method

Also Published As

Publication number Publication date
US20150277876A1 (en) 2015-10-01
EP2963547A1 (en) 2016-01-06

Similar Documents

Publication Publication Date Title
JP2015194881A (ja) コンパイル装置、コンパイラプログラム、コンパイル方法
US20070277162A1 (en) Compiler apparatus, compiler method, and compiler program
US20100199269A1 (en) Program optimization device and program optimization method
JP4778286B2 (ja) コンパイラ装置
US9182960B2 (en) Loop distribution detection program and loop distribution detection method
US11068463B2 (en) System and method for managing log data
JP4905480B2 (ja) プログラム難読化プログラム及びプログラム難読化装置
US9141357B2 (en) Computer-readable recording medium, compiling method, and information processing apparatus
JP4184900B2 (ja) 変数の統計処理を行うコンパイル処理プログラム、およびその記録媒体、およびその処理方法ならびにその処理装置
JP4719415B2 (ja) 情報処理システム及びコード生成方法
US11449360B2 (en) Information processing apparatus, non-transitory computer-readable storage medium for storing information processing program, and information processing method
KR20160098794A (ko) 디바이스 프로그램 구조 모델링 기반 골격코드 생성 장치 및 방법
US20170115973A1 (en) Operating method of semiconductor device and semiconductor system
JPWO2017204139A1 (ja) データ処理装置、データ処理方法、およびプログラム記録媒体
US10140538B2 (en) Computing control device, computing control method, and computer readable medium
JP5215813B2 (ja) プログラム変換方法及びプログラム変換装置
WO2018150588A1 (ja) 情報処理装置、情報処理方法及び情報処理プログラム
Leung et al. Run-time versus compile-time instruction scheduling in superscalar (RISC) processors: Performance and trade-off
JP2009169862A (ja) プログラム変換装置、方法、プログラムおよび記録媒体
KR20160121037A (ko) 자바스크립트 어플리케이션의 최적화된 수행 방법
US9928045B2 (en) Information processing apparatus, compile method and non-transitory recording medium storing compile program
JP6187264B2 (ja) 計算方法、計算プログラム、および計算装置
WO2013128519A1 (ja) 限界実行時間解析装置及び限界実行時間解析方法並びにプログラムを格納した非一時的なコンピュータ可読媒体
JP5509694B2 (ja) コンパイル方法、プログラム実行方法及びプログラム
JP3686303B2 (ja) 実行不要命令の削除方法、実行不要命令の削除装置及び記録媒体