特許第6366033号(P6366033)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

<>
  • 特許6366033-プログラム中のIF文の最適化方法 図000002
  • 特許6366033-プログラム中のIF文の最適化方法 図000003
  • 特許6366033-プログラム中のIF文の最適化方法 図000004
  • 特許6366033-プログラム中のIF文の最適化方法 図000005
  • 特許6366033-プログラム中のIF文の最適化方法 図000006
  • 特許6366033-プログラム中のIF文の最適化方法 図000007
  • 特許6366033-プログラム中のIF文の最適化方法 図000008
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6366033
(24)【登録日】2018年7月13日
(45)【発行日】2018年8月1日
(54)【発明の名称】プログラム中のIF文の最適化方法
(51)【国際特許分類】
   G06F 8/41 20180101AFI20180723BHJP
【FI】
   G06F8/41 130
【請求項の数】9
【全頁数】10
(21)【出願番号】特願2014-98069(P2014-98069)
(22)【出願日】2014年5月9日
(65)【公開番号】特開2015-215756(P2015-215756A)
(43)【公開日】2015年12月3日
【審査請求日】2017年4月11日
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
(74)【代理人】
【識別番号】100108501
【弁理士】
【氏名又は名称】上野 剛史
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】川人 基弘
【審査官】 坂庭 剛史
(56)【参考文献】
【文献】 特開平02−151973(JP,A)
【文献】 特開平07−160499(JP,A)
【文献】 特開2006−120124(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/41
(57)【特許請求の範囲】
【請求項1】
プログラム中のIF文を最適化するための方法であって、コンピュータが実行する、
プログラム中の複数のIF文の各条件式について、包含関係にある条件式の集合を求めるステップと、
前記集合の各々について、包含関係にある条件式の移動先として、前記プログラム中の実行頻度が小さい位置を当該条件式が含まれる前記集合の情報を用いて算出するステップと、
算出された前記条件式の移動先に当該条件式を移動させるステップと、を含む方法。
【請求項2】
前記集合を求めるステップは、
前記包含関係にある条件式の各々において、肯定条件と否定条件を設定し、各条件について、部分集合である条件式の数と条件式が成立する確率とからコストを求めるステップを含む、請求項1に記載の方法。
【請求項3】
前記条件式を移動させるステップは、
副作用を起こさない条件式を前記プログラム中の当該条件式が実行される可能性がある領域中の実行頻度が最小となる位置に移動させるステップと、
副作用を起こし得る条件式を前記プログラム中の当該条件式が必ず実行されかつ移動による副作用が起こらない領域中の実行頻度が最小となる位置に移動させるステップと、を含む請求項1に記載の方法。
【請求項4】
前記条件式を移動させるステップは、
前記条件式の結果が変数にキャッシュされていない場合、前記包含関係にある条件式に関するIF文を生成しその結果を新たな変数にキャッシュするステップと、
前記条件式の結果が変数にキャッシュされている場合、前記包含関係にある条件式の条件演算子を論理演算子に置き換えた後に当該条件式の結果を新たな変数にキャッシュするステップと、を含む請求項に記載の方法。
【請求項5】
前記包含関係にある条件式に関するIF文を生成しその結果を新たな変数にキャッシュするステップは、前記肯定条件と前記否定条件の前記コストの合計値が小さい順に当該IF文を生成しその結果を新たな変数にキャッシュすることを含む、請求項4に記載の方法。
【請求項6】
前記プログラム中の実行頻度が小さい位置を当該条件式が含まれる前記集合の情報を用いて算出するステップは、前記集合の情報として、前記肯定条件と否定条件を用いてデータフロー解析を行うことを含む、請求項2に記載の方法。
【請求項7】
前記コストは、各条件式について前記条件式の数と前記条件式が成立する確率との積として計算される、請求項2に記載の方法。
【請求項8】
前記条件式を移動させるステップは、移動前の条件式の実行コストと移動後に設定される条件式の実行コストとを比較した結果、実行速度が向上する場合に実施される、請求項1〜7のいずれか1項に記載の方法。
【請求項9】
請求項1〜8のいずれか1項の方法の各ステップをコンピュータに実行させるためのコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラム中のIF文を最適化するための方法に関し、より具体的には、プログラム中のIF文の条件式の包含関係を考慮して条件式の変形(移動、変数へのキャッシュ等)を含むIF文の最適化を図るための方法に関する。
【背景技術】
【0002】
プログラムが機械生成される場合等において同じIF文が繰り返し生成される場合がある。その場合、同じIF文が繰り返し実行される分だけプログラムの処理パフォーマンス(速度)が遅くなってしまう。したがって、何らかの方法でIF文を最適化して、プログラム中の同じIF文が繰り返し実行されるような事態を避けることが望まれる。
【0003】
IF文の最適化に関連して、特許文献1には、自動作成されたコードの第1の中間表現を最適化手法により第2の中間表現に変換する方法において、コードの部分をそのコードが実行される位置に移動させること、複数のループ(IF文等)を単一のループに結合させることにより第1の中間表現の最適化を行って、ループの実行回数(メモリアクセス回数など)を低減することが開示されている。
【0004】
特許文献2には、オリジナルコードから抽出された関数コール箇所にif文のブロックが存在し、そのif文の条件式に関数コールが使用されている場合に、その条件式をif文の前に移動して“local_cond1”に仮代入し、if文の条件式内では仮代入した“local_cond1”に置換し、if文内の条件式から関数コールを除去することを特徴とするプログラムコードの構造変換装置が開示されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】米国特許出願公開2007/0169039
【特許文献2】特開2012−014526
【発明の概要】
【発明が解決しようとする課題】
【0006】
特許文献1、2の方法では、IF文の条件式に包含関係がある場合についてIF分の最適化を図るための対応が採られておらず、また、IF文の条件式の移動に伴う利益(コスト)予測も十分に考慮されていない。
したがって、本発明の目的は、プログラムのIF文の条件式に包含関係がある場合について、その条件式の移動に伴う利益(コスト)予測をも行いながら、IF文の最適化によりプログラムの処理パフォーマンス(速度)を向上させることである。
【課題を解決するための手段】
【0007】
本発明は、プログラム中のIF文を最適化するための方法を提供する。その方法は、(a)プログラム中の複数のIF文の各条件式について、包含関係にある条件式の集合を求めるステップと、(b)集合の各々について、包含関係にある条件式の移動先として、プログラム中の実行頻度が小さい位置を当該条件式が含まれる集合の情報を用いて算出するステップと、(c)算出された条件式の移動先に当該条件式を移動させるステップとを含む。
【0008】
本発明の一態様では、集合を求めるステップ(a)は、包含関係にある条件式の各々において、肯定条件と否定条件を設定し、各条件について、部分集合である条件式の数と条件式が成立する確率とからコストを求めるステップを含む。そのコストは、例えば、各条件式について条件式の数と条件式が成立する確率との積として計算することができる。
【0009】
本発明の一態様では、条件式を移動させるステップ(c)は、(c1)副作用を起こさない条件式を前記プログラム中の当該条件式が実行される可能性がある領域中の実行頻度が最小となる位置に移動させるステップと、(c2)副作用を起こし得る条件式をプログラム中の当該条件式が必ず実行されかつ移動による副作用が起こらない領域中の実行頻度が最小となる位置に移動させるステップと、を含む。
【0010】
本発明の一態様では、条件式を移動させるステップ(c)は、(c3)条件式の結果が変数にキャッシュされていない場合、包含関係にある条件式に関するIF文を生成しその結果を新たな変数にキャッシュするステップと、(c4)条件式の結果が変数にキャッシュされている場合、包含関係にある条件式の条件演算子を論理演算子に置き換えた後に当該条件式の結果を新たな変数にキャッシュするステップとを含む。
【0011】
本発明の一態様では、包含関係にある条件式に関するIF文を生成しその結果を新たな変数にキャッシュするステップ(c3)は、肯定条件と否定条件のコストの合計値が小さい順に当該IF文を生成しその結果を新たな変数にキャッシュすることを含む。
【0012】
本発明の一態様では、プログラム中の実行頻度が小さい位置を当該条件式が含まれる集合の情報を用いて算出するステップ(b)は、集合の情報として、肯定条件と否定条件を用いてデータフロー解析を行うことを含む。
【0013】
本発明の一態様では、条件式を移動させるステップ(c)は、移動前の条件式の実行コストと移動後に設定される条件式の実行コストとを比較した結果、実行速度が向上する場合に実施される。
【図面の簡単な説明】
【0014】
図1】本発明の方法を実行するコンピュータの構成例を示すブロック図である。
図2】本発明の方法のフローを示す図である。
図3】本発明の一実施例の条件式の集合を示す図である。
図4】本発明の一実施例の条件式の集合を示す図である。
図5】本発明の一実施例の条件式の集合を示す図である。
図6図5の集合におけるコード(条件式)の移動の実施例を示す図である。
図7】本発明の一実施例の包含関係があるIF文の作成を示す図である。
【発明を実施するための形態】
【0015】
図面を参照しながら本発明の実施の形態を説明する。図1は、本発明の方法を実施するコンピュータの構成例を示すブロック図である。コンピュータ100は、バス30を介して相互に接続された演算処理装置(CPU)10、記憶手段20、各種I/F40を含む。各種I/F40は、入力I/F、出力I/F、外部記憶I/F、外部通信I/F等を含む総称として用いられ、各I/Fが、それぞれ対応するキーボード、マウス等の入力手段50、CRT、LCD等の表示手段60、USB接続の半導体メモリやHDD等の外部記憶手段70等に接続する。記憶手段20は、RAM、ROM等の半導体メモリ、HDD等を含むことができる。本発明の方法は、コンピュータ100が例えば記憶手段20、70に格納された所定のソフトウェア呼び出して実行することにより実施される。本発明の方法は、プログラムのデバッグ時あるいはコンパイル時に実行される。
【0016】
図2を参照しながら本発明の方法のフローについて説明する。図2は、本発明の方法の基本的なフローを示す図である。図2のステップS11において、編集対象となるプログラム中の複数のIF文の各条件式について、包含関係にある条件式の集合を求める。この集合を求める際に、包含関係にある条件式の各々において、肯定条件と否定条件を設定し、各条件について、部分集合である条件式の数と条件式が成立する確率とからコストを求める。
【0017】
図3図4に、ステップS11で求める集合の例を示す。図3の例では、肯定条件として、I=5、I=20、I=40の3つの等号(=)を含む条件式を設定し、それらの否定条件として、I!=5、I!=20、I!=40の3つの条件式を設定している。ここで、例えば“I!=5”は、Iが5に等しくないことを意味する。ここでの条件式の包含関係は、肯定条件の式同志の間では存在せず、肯定条件と否定条件の式間において存在する。例えば、否定条件のI!=5は、肯定条件のI=20とI=40の2式を包含する関係となる。同様に、否定条件のI!=20、I!=40は、それぞれ肯定条件のI=5及びI=40の2式、I=5及びI=20の2式を包含する関係となる。図3中の否定条件の行下の“部分集合である式の数”は、各否定条件式が包含する条件式の数である2を示している。上述したように、各肯定条件には包含関係が存在しないので肯定条件の行下の“部分集合である式の数”はいずれもゼロになる。
【0018】
図3中の仮コストは、“条件式が成り立つ確率”Pに“部分集合である式の数”Nを乗算して(P*Nとして)求めることができる。例えば、否定条件I!=5の仮コストは、0.96*2=1.92となる。他の条件式についても同様に計算して求めることができる。仮コスト合計は、肯定条件と否定条件のセットにおける合算値として求めることができる。例えば、I=5とI!=5の仮コスト合計は、0+1.92=1.92となる。他の条件式のセットについても同様に計算して求めることができる。なお、後述するように、この仮コスト合計値は、コード(IF文)の移動先においてIF文を生成する際のその生成順序(優先度)の判断基準となる。
【0019】
図4を参照すると、ここでは各条件式が不等号を含む式となっている点を除いて、基本的に図3の等号を含む条件式の場合と同様な手順で集合を求めることができる。例えば、肯定条件のDD>29は、肯定条件のDD>30とDD>31の2式を包含する関係となるので、その“部分集合である式の数”は2となる。同様に、例えば、否定条件のDD≦29は、否定条件のDD≦28の1式を包含する関係となるので、その“部分集合である式の数”は1となる。他の条件式についても同様にして求めることができる。仮コスト及び仮コスト合計も図3の場合と同様に求めることができ、例示した肯定条件DD>29と否定条件DD≦29のセットの場合は、2つの仮コストを合算して仮コスト合計は、0.12+0.94=1.06となる。
【0020】
図2に戻って、次のステップS12において、ステップS11で取得された集合の各々について、包含関係にある条件式の移動先として、プログラム中の実行頻度が小さい位置を当該条件式が含まれる集合の情報を用いて算出する。その際、集合の情報として、上述した肯定条件と否定条件の各式を用いて、データフロー解析を行うことによりプログラム中の実行頻度が小さい位置を求めることができる。例えば、従来からあるデータフロー解析のアルゴリズム(“Lazy Code Motion”等)を用いて求めることができる。また、同じ実行頻度の中で最後の位置を求めるときに、従来は各条件式をデータフロー方程式で使うGEN集合に登録していたところを、当該条件式に対応する上述した肯定条件と否定条件の集合をGEN集合に組み入れて計算する。なお、この同じ実行頻度の中で最後の位置は、後述するコード(IF文、条件式)の移動先の候補となる。
【0021】
次のステップS13において、算出された条件式の移動先に当該条件式を移動させる。この移動させるステップでは、プログラムの処理パフォーマンス(速度)が実際に向上するように、下記の(a)〜(c)に示すように、各場合(条件)において対応する適切な処理を行う。
【0022】
(a)移動させるステップにおいて、条件式が副作用を起こさない条件式である場合、その条件式をプログラム中の当該条件式が実行される可能性がある領域中の実行頻度が最小となる位置に移動させる。その後、条件式を実行してその結果(0か1)を変数にキャッシュ(保管)する。実行頻度が最小となる位置は、上述したデータフロー方程式を用いた計算によって求める。ここで、副作用とは、一般に、プログラム中のある機能がコンピュータの論理的な状態を変化させ、それ以降で得られる結果に影響を与えることを意味する。代表的な例は、変数への値の代入におおいてその値が変化してしまう場合が該当する。条件式が副作用を起こし得る場合は、その条件式をプログラム中の当該条件式が必ず実行されかつ移動による副作用が起こらない領域中の実行頻度が最小となる位置に移動させる。その後、条件式を実行してその結果(0か1)を変数にキャッシュ(保管)する。
【0023】
(b)条件式を移動させるステップにおいて、移動する条件式の結果が変数にキャッシュされていない場合において、その条件式が包含関係にある条件式を持っているときは、その包含関係にある条件式に関するIF文を生成しその結果を新たな変数にキャッシュする。その際、集合中の肯定条件と前記否定条件の仮コスト合計値が小さい順に当該IF文を生成しその結果を新たな変数にキャッシュする。一方、条件式の結果が変数にキャッシュされている場合、包含関係にある条件式の条件演算子(Conditional AND、 OR、 XOR)を論理演算子(Logical AND、 OR、 XOR)に置き換えた後に当該条件式の結果を新たな変数にキャッシュする。
【0024】
(c)条件式を移動させるステップは、移動前の条件式の実行コストと移動後に設定される条件式の実行コストとを比較した結果、実行速度が向上する場合に実施することができる。すなわち、移動に伴い最適化が行われる条件式について、コスト利益(Cost-Benefit)計算を行い、ある利益(Benefit)が所定の閾値よりも大きい場合に、その条件式を計算で求めた変数またはキャッシュした変数で置き換える。そうでなければ、上記(a)及び(b)における変形(条件式の移動、作成、変数へのキャッシュ)は行わない。したがって、上記(a)及び(b)における変形は、実際にはコスト計算及び評価が行われるまでは実行せずに、その変形の情報をメモリに記憶しておくという方法を採用することができる。
【0025】
コスト利益(Cost-Benefit)計算が必要な理由は以下のように説明することができる。すなわち、計算式の最適化と違いIF文の最適化は、最適化後も完全に条件式を削除できない場合が多く、遅くなる場合があるため、コストを計算する必要がある。速くなるかどうかは、最適化された条件式の合計の実行頻度、条件式のコスト、挿入する条件式の合計の実行頻度、キャッシュされた変数のアクセスコスト、によって決まる。例えば、次に示すように計算式の最適化と違いIF文の最適化で違いが生じる。
【0026】
(A)計算式の最適化の場合:
(1) 元のプログラム(2) 最適化後
T = b + c
a = b + c a = T
: :
d = b + c d = T
(B)IF文の最適化の場合:
(1) 元のプログラム (2) 最適化後
T = (cond)
if cond IF T
: :
if cond IF T
条件式condのコストをC1、TのメモリアクセスコストをC2としたとき、(1)のコストはC1*2、(2)のコストはC1+C2*3、利益はC1−C2*3となる。その利益が所定の閾値以上のときに最適化を行う。
【実施例1】
【0027】
図5図6において、上述した図2の処理フローに基づく条件式の包含関係を考慮したコード(条件式)移動の実施例を示す。図5は、条件式A<1及びA<5に対する集合を示す。集合内の各パラメータの意味は、図3図4を参照しながら説明した通りである。図6は、図5の集合についてのコード移動の例を示す。図6の(a)は、従来のコード移動アルゴリズムによるコード移動の例であり、(b)は、本発明によるコード移動の例である。(a)の従来例では、2つの条件式(A<1及びA<5)は最適化されない、すなわちその処理量(速度)が低減されない。一方、(b)の本発明の例では、新たなコード(IF文)の作成(1)〜(3)により、2つの条件式(A<1及びA<5)を最適化することができる。
【0028】
なお、図6の例では、AへのメモリアクセスコストをC1、TへメモリアクセスコストをC2、A<1が成り立つときの確率を50%、 左のパスが実行される確率を50%としたとき、

元のコスト:1.5*C1
最適化後のコスト:1.25*C1+2*C2
最適化による利益:0.25*C1−2*C2

となる。その最適化による利益(0.25*C1−2*C2)の値が所定の閾値よりも大きい場合に変形を行うようにすることができる。
【実施例2】
【0029】
図7に上述した図2の処理フローに基づく、包含関係があるIF文の作成例を示す。図7(a)は、元のプログラムにおけるコードであり、(b)は本発明による最適化(移動、変形)後のコードである。この場合も、TXNFL―DATE―DDとの比較コストをC1、 一時変数のメモリアクセスコストをC2とした場合、

(a)の場合のコスト:4*C1
(b)の場合のコスト:1.11*c1+8*C2
最適化による利益:2.89*C1−8*C2

となる。したがって、その最適化による利益(2.89*C1−8*C2)の値が所定の閾値よりも大きい場合に変形(コード移動)を行うようにすることができる。
【実施例3】
【0030】
1.副作用を起こさない条件式の最適化の例
次のIF文が4つある場合の最適化例は下記のようになる。

IF R-RESTOCK-01 OF REPORT-RESTOCK OF REPORT-BMO5=SPACE
OR R-RESTOCK-01 OF REPORT-RESTOCK OF REPORT-BMO5=LOW-VALUE

上記のIF文は次のような命令列が生成されている。この場合、メモリアクセスが多くそのコストが高い。

L 4,312(0,9)
CLC 304(12,4),12(12)
BC 8,2612(0,11)
CLI 304(4),X'00'
BC 7,2620(0,11)
CLC 305(11,4),304(4)
BC 7,2620(0,11)

これに含まれる2つの条件式は副作用を起こさず、IF文間で値は変わらないものとする。本発明の方法では、次のように変形される。

Cond1 = (R-RESTOCK-01 OF REPORT-RESTOCK OF REPORT-BMO5 = SPACE)
Cond2 = (R-RESTOCK-01 OF REPORT-RESTOCK OF REPORT-BMO5 = LOW-VALUE)
Cond3 = Cond1 | Cond2 // Conditional ORをLogical ORで高速化

この場合の最適化による利益が所定の閾値よりも大きいと判定され、4つのIF文を上記のCond3の条件式で置き換える。

IF Cond3 処理1
処理2
IF Cond3 処理3
処理4
IF Cond3 処理5
処理6
IF Cond3 処理7
【0031】
2.副作用を起こし得る条件式の最適化の例
上記1.のIF文の2つ目の条件式(R−RESTOCK・・・)がアクセス例外を起こし得るとする。その場合、上記(b)の移動ステップでは次のように変形される。

Cond1 = (R-RESTOCK-01 OF REPORT-RESTOCK OF REPORT-BMO5 = SPACE)
IF Cond1 OR
R-RESTOCK-01 OF REPORT-RESTOCK OF REPORT-BMO5 = LOW-VALUE
Cond3 = 1
ELSE
Cond3 = 0
END-IF
【実施例4】
【0032】
図7の包含関係があるIF文の作成例について、元のプログラムと最適化後のプログラムをソースコードレベルで作成し、両者の処理(実行)速度を調べた結果、最適化後のプログラムは元のプログラムよりも約40%程度の速度を向上させることができることを確認した。
【0033】
本発明の実施形態について、図を参照しながら説明をした。しかし、本発明はこれらの実施形態に限られるものではない。本発明はその趣旨を逸脱しない範囲で当業者の知識に基づき種々なる改良、修正、変形を加えた態様で実施できるものである。
【符号の説明】
【0034】
30 バス
100 コンピュータ
図1
図2
図3
図4
図5
図6
図7