JP4719415B2 - 情報処理システム及びコード生成方法 - Google Patents

情報処理システム及びコード生成方法 Download PDF

Info

Publication number
JP4719415B2
JP4719415B2 JP2003432643A JP2003432643A JP4719415B2 JP 4719415 B2 JP4719415 B2 JP 4719415B2 JP 2003432643 A JP2003432643 A JP 2003432643A JP 2003432643 A JP2003432643 A JP 2003432643A JP 4719415 B2 JP4719415 B2 JP 4719415B2
Authority
JP
Japan
Prior art keywords
loop
fold
directive
loops
strip mining
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
JP2003432643A
Other languages
English (en)
Other versions
JP2005190302A (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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2003432643A priority Critical patent/JP4719415B2/ja
Priority to US10/975,437 priority patent/US20050144605A1/en
Publication of JP2005190302A publication Critical patent/JP2005190302A/ja
Application granted granted Critical
Publication of JP4719415B2 publication Critical patent/JP4719415B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level

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)

Description

本発明は、ソースプログラムに含まれる複数のループのストリップマイニング処理の効率化を図る技術に関する。
非特許文献1の350〜352頁には、単一のループを二重ループに変換するストリップマイニングが記載されている。
一方、非特許文献2には、複数のループを「256」でストリップマインする技術が記載されている。このストリップマイニングによれば、繰返し数を「256」とした全ループを囲む、ステップ256の外側ループが生成され、キャッシュヒットの可能性の向上、及び、参照される配列サイズの抑制が図れる。
Michael Wolfe: High Performance Compilers for Parallel Computing, AddisonWesley Publishing Company, 1996.
Cray T3E Fortran Optimization Guide, Cray Research Inc., Document Number 004-2518-002, 1999, p.98.
ところが、ソースプログラムに複数のループが含まれていると、コンパイラが、そのソースプログラムの解析結果に基づきストリップマイニングを実行しても、その結果は、必ずしも、ユーザの意図通りであるとは限らない。
そこで、本発明は、情報処理システムにおいて、複数のループに対するストリップマイニングを、ユーザの意図通りに効率的に実行させることを目的とする。
上記課題を解決するため、本発明においては、第1ストリップマイニング対象ループを有するN重ループ(Nは自然数)と第2ストリップマイニング対象ループを有するM重ループ(Mは自然数)とを含むストリップマイニング適用範囲を示す第1指示文をソースプログラムに含ませておき、情報処理システムにおいて、そのソースプログラムについて、第1指示文が示すストリップマイニング適用範囲が、N重及びM重ループ内において第1及び第2のストリップマイニング対象ループの繰返し回数を設定値で置き換えた2つの内側ループと、これら2つの内側ループを囲む、設定数分のステップ数の外側ループとに変換されるようにした。
本発明によれば、情報処理システムにおいて、複数のループに対するストリップマイニングを、ユーザの意図通りに効率的に実行することができる。
以下、添付の図面を参照しながら、本発明に係る実施の形態について説明する。
最初に、本実施の形態に係るコンパイル処理の対象となるソースプログラムについて説明しておく。ここでは、Fortran言語により記述されたソースプログラムを具体例としてあげる。
図4(a)に、ソースプログラム206の記述例を示す。このソースプログラム206には、ストリップマイニングの適用範囲を指定するための1対のストリップマイニング指示文401,402が記述されている。
これらのストリップマイニング指示文401,402のうち、一方のストリップマイニング指示文401「*option STRIPMINE_START(100)」は、ストリップマイニングの適用範囲の開始位置を指定するものであり、ストリップマイニングの適用範囲の直前に挿入されている。ここで、start指示文中の括弧内に指定されているパラメータ値「100」は、ストリップマイニング後の内側ループのループ回数(以下、ブロックサイズと呼ぶ)であり、ストリップマイニング後の内側ループにおいて参照されるメモリサイズがキャッシュサイズ以下となるように定められている。以下、このようなストリップマイニング指示文をstart指示文と呼ぶ。
他方のストリップマイニング指示文402「*option STRIPMINE_END」は、ストップマイニング範囲の終了位置を指定するものであり、ストリップマイニング適用範囲の直後に挿入されている。以下、このようなストリップマイニング指示文をend指示文と呼ぶ。
なお、ここでは、以下の説明の便宜上、1対のstart指示文401及びend指示文402が記述されたプログラム例を挙げたが、本実施の形態に係るコンパイル処理の対象となるソースプログラムには、start指示文及びend指示文を1対以上含めることもできる。
つぎに、図2により、本実施の形態に係るコンパイル処理を実行する計算機システムの構成を説明する。
本計算機システムは、情報処理装置200、ユーザから入力されたコマンド(コンパイル処理の対象となるソースプログラム名を含むコンパイラ起動命令等)を情報処理装置200に与えるキーボード等の入力装置203、情報処理装置200の出力情報(コンパイラ終了メッセージ、エラーメッセージ等)を表示するディスプレイ装置202、を有している。
情報処理装置200は、コンパイラ208がインストールされた外部記憶装置205、主記憶装置204、外部記憶装置205から主記憶装置204にロードしたコンパイラ208を実行するCPU201、入力装置203及び表示装置202が接続される入出力インタフェース212、光ディスク等の記憶媒体とのデータ転送を制御するドライブ(不図示)、ネットワークインタフェース等を有している。
コンパイラ208によるコンパイル処理の対象となる前述のソースプログラム206は、通常、外部記憶装置205に格納されている。そして、コンパイル処理の実行中には、ソースプログラム206のコンパイル過程で生成されるデータ(中間コード209、ループ表210、ストリップマイニング登録表211)が主記憶装置204上に保存され、コンパイル処理が終了すると、コンパイル処理により生成されたオブジェクトプログラム207が外部記憶装置205に格納される。
なお、コンパイラ208は、記憶媒体から外部記憶装置205にインストールされたものであってもよいし、ネットワークを介して外部記憶装置205にインストールされたものであってもよい。
つぎに、図2の計算機システムにおいて、コンパイラ208の実行により実現するコンパイル処理について説明する。
図3は、コンパイラ208が実行するコンパイル処理のフローチャートである。
起動されたコンパイラ208は、まず、ユーザにより指定されたソースプログラム206を外部記憶装置205から読み出して、そのソースプログラム206の構文解析を行い、解析結果に基づいて中間コード209を生成する(S301)。これにより生成される中間コード209は、ソースプログラムにおける制御の流れを表す制御フローグラフとして表現される。図4(a)のソースプログラム206から生成された制御フローグラフを図5に示す。この制御フローグラフは、分岐及び合流のない基本ブロック(先頭から順次実行される一連のコード文)B0〜B11をノードとして、各ノード間の遷移経路をエッジ500により表したグラフである。なお、以降の処理の説明を簡略化するため、図5の制御フローグラフにおいては、end指示文を含む基本ブロックB2とstart指示文を含む基本ブロックB10とには他のコード文を含めていない。
つぎに、コンパイラ208は、この中間コード209を最適化するストリップマイニング最適化処理(S302)、最適化した中間コード209の各ノードにレジスタを割り付けるレジスタ割り付け処理(S303)、レジスタ割付後の中間コード209をオブジェクトプログラム207に変換するコード生成処理(S304)を、順次実行する。
これら一連の処理のうち、ストリップマイニング最適化処理S302において、コンパイラ208は、図1に示す処理S101〜S103を実行する。具体的には、(1)中間コード209に含まれているループの集合を求め、各ループに関する情報をループ表210に記録するループ解析処理(S101)、(2)ストリップマイニング指示文を解析することによってストリップマイニング登録表211を生成するストリップマイニング指示解析処理(S102)、(3)ストリップマイニング登録表211に基づくストリップマイニング変換処理(S103)、が実行される。以下、これら各処理S101〜S103の詳細について説明する。
(1)ループ解析処理(S101)
コンパイラ208は、例えば、非特許文献1の第67頁に記載されているループ解析方法にしたがって中間コード209のループ解析を行い、その解析結果をループ表210に登録する。ループ表210のデータ構造例として、図5の中間コードの解析により得られたループ表を図6に示す。このループ表には、図5の中間コードに含まれる2つのループ1,2について、それぞれ、ループ識別情報601、ループ入口の基本ブロック(以下、ループヘッダブロック)の識別情報(ループヘッダ情報)602、ループレベルを表すループレベル情報(最内側ループから数えて何重目のループであるかを表す情報:例えば、最内側ループならループレベル「1」、2重ループの外側ループならループレベル「2」)603、ループの制御変数(以下、第1ループ制御変数と呼ぶ)の初期化文604、第1ループ制御変数の増分値605、第1ループ制御変数の初期値606、第1ループ制御変数の上限値607が登録されている。
(2)ストリップマイニング指示解析処理(S102)
ストリップマイニング指示解析処理S102の詳細な処理のフローチャートを図8に示す。ここでは、コンパイラ208は、中間コード209内の基本ブロックを、先頭基本ブロックから順番に処理対象基本ブロックとしていくこととする。
コンパイラ208は、中間コード209に未処理の基本ブロックが残されているか否かをチェックし(S801)、中間コード209に未処理の基本ブロックが存在していなければ、ストリップマイニング変換処理(S103)を実行する。一方、中間コード209に未処理の基本ブロックが存在していたら、コンパイラ208は、前回の処理対象ブロックのつぎの基本ブロックを処理対象基本ブロックとして中間コード209から取り出し(S802)、この処理対象基本ブロックにstart指示文が含まれているか否かを調べる(S803)。
その結果、処理対象基本ブロックにstart指示文が含まれていなかった場合には、コンパイラ208は、S801以降の処理を再度実行する。
また、処理対象基本ブロックにstart指示文が含まれていた場合には、コンパイラ208は、処理対象基本ブロックと等価な基本ブロックを後方に向かって順に辿って、処理対象基本ブロックのstart指示文と対になるend指示文を検索する(S804)。ここで、処理対象基本ブロックAと等価な基本ブロックBとは、中間コードの入口から基本ブロックBに至る全パスが処理対象基本ブロックAを通り、かつ、処理対象基本ブロックAから中間コード出口に至る全パスが基本ブロックBを通る、という条件を満たす基本ブロックのことである。
さて、処理対象基本ブロックのstart指示文と対になるend指示文が得られたら、コンパイラ208は、さらに、以下の処理を実行する。
まず、コンパイラ208は、ストリップマイニング登録表211に新たなエントリを追加する。このとき、ストリップマイニング表が存在していなければ、コンパイラ206は、ストリップマイニング表を生成する。ストリップマイニング表のエントリには、図7に示すように、エントリ番号が登録されるフィールド701、start指示文を含む基本ブロックの識別情報が登録されるフィールド702、end指示文を含む基本ブロックの識別情報が登録されるフィールド703、ストリップマイニング適用範囲に含まれるループの識別情報が登録されるフィールド704、start指示文のパラメータ値(ブロックサイズ)が登録されるフィールド705が含まれている。
つぎに、コンパイラ208は、ストリップマイニング表の新たなエントリのフィールド701〜703,705に、新たなエントリ番号、処理対象基本ブロックの識別情報、S804で得られたend指示文を含む基本ブロックの識別情報、処理対象基本ブロックのstart指示文のパラメータ値(ブロックサイズ)を登録する(S805)。
つぎに、コンパイラ208は、処理対象基本ブロックと、S804で得られたend指示文を含む基本ブロックとの間の基本ブロックのうち、ループヘッダブロックであるか否かのチェック対象となっていない基本ブロックを1つ抽出し(S806)、その基本ブロックの識別情報が、ループ表210にループヘッダ情報として登録されているか否か、すなわち、その基本ブロックがループヘッダブロックであるか否かをチェックする(S807)。
その結果、S806で抽出した基本ブロックの識別情報がループ表210にループヘッダ情報として登録されていなければ、コンパイラ208は、処理対象基本ブロックと、S804で得られたend指示文を含むとの間に、ループヘッダブロックであるか否かのチェック対象となっていない基本ブロックが存在しているか否かをチェックする(S812)。コンパイラ208は、そのような基本ブロックが存在していれば、その基本ブロックがループヘッダブロックであるか否かをチェックするため、S806以降の処理を再度実行し、その反対に、そのような基本ブロックが存在していなければ、次のstart指示文を探すため、S801以降の処理を再度実行する。
一方、S806で抽出した基本ブロックの識別情報がループ表210にループヘッダ情報として登録されていれば、コンパイラ208は、そのループヘッダ情報に対応付けられたループレベル情報をループ表210から読み出し、そのループレベル情報が、ストリップマイニング対象ループのループレベルとして予め定められ値(以下、ストリップマイニング対象レベルと呼ぶ)を示しているか否かをチェックする(S808)。例えば、ストリップマイニング対象レベルが「1」である場合には、ここで、コンパイラ208は、ループ表210から読み出したループレベル情報が「1」であるか否かをチェックする。
そして、ループ表210から読み出したループレベル情報がストリップマイニング対象レベルを示していない場合、すなわち、S806で抽出した基本ブロックをヘッダとするループのループレベルがストリップマイニング対象レベルではない場合には、コンパイラ208は、処理対象基本ブロックと、S804で得られたend指示文を含む基本ブロックとの間に、ループヘッダブロックであるか否かのチェック対象となっていない基本ブロックが存在しているか否かをチェックするため、S812以降の処理を実行する。
これとは反対に、ループ表210から読み出したループレベル情報がストリップマイニング対象レベルを示している場合、すなわち、S806で抽出した基本ブロックをヘッダとするループのループレベルがストリップマイニング対象レベルである場合には、コンパイラ208は、そのループが他のストリップマイニング適用条件を満たすか否かをチェックする(S809)。例えば、ストリップマイニング適用条件が「第1ループ制御変数の増分値=1」である場合には、S806で抽出した基本ブロックの識別情報に対応付けられた増分値をループ表210から読み出し、その増分値が「第1ループ制御変数の増分値=1」を満たしているか否かをチェックする。また、他のストリップマイニング対象ループとの依存条件、他のストリップマイニング対象ループとの第1ループ制御変数の初期値または上限値の一致等がストリップマイニング適用条件として定められている場合には、それらの条件を満たすか否かをチェックする。
その結果、S806で抽出した基本ブロックをヘッダとするループがストリップマイニング適用条件を満たしていない場合には、S803及びS804で得られたstart指示文及びend指示文で指定されたストップマイニング適用範囲にストリップマイニングを適用することができないため、コンパイラ208は、S810で新たに追加したエントリをストリップマイニング登録表211から削除してから(S810)、次のstart指示文を探すべく、S801以降の処理を再度実行する。
また、S806で抽出した基本ブロックをヘッダとするループがストリップマイニング適用条件を満たしている場合には、コンパイラ208は、S806で抽出した基本ブロックの識別情報に対応付けられたループ識別情報をループ表210から取り出して、そのループ識別情報を、S805でストリップマイニング登録表211に追加したエントリのフィールド704に登録してから(S811)、S812以降の処理を再度実行する。
このようなストリップマイニング指示解析処理S102において、図5の中間コードは、以下のように処理される。なお、ストリップマイニング対象ループのループレベルは「1」、ストリップマイニング適用条件は「第1ループ制御変数の増分値=1」とする。
まず、S801〜S803の繰り返し処理によって、基本ブロックB0から順番に基本ブロック内のコード文が順次チェックされ、基本ブロックB2のチェックでstart指示文が見つけられる。つぎに、基本ブロックB2と等価な基本ブロックB3,B7,B10内のコード文が順次チェックされ、その結果、基本ブロックB2のstart指示文に対応するend指示文が、基本ブロックB10のチェックで見つけられる(S804)。つぎに、ストリップマイニング登録表211にエントリが追加され、このエントリのフィールド701〜703,705に、新たなエントリ番号「1」、start指示文を含む基本ブロックの識別情報「B2」、指示文を含む基本ブロックの識別情報「B10」、start指示文内のパラメータ値(ブロックサイズ)「100」が登録される(S804)。
その後、S806〜S812の繰り返し処理によって、基本ブロックB2,B10間の基本ブロックB3〜B9のうち、まず、基本ブロックB5をヘッダとするループが、ストリップマイニング適用条件を満たすストリップマイニング対象ループであると判定され、このループの識別情報「ループ1」が、ストリップマイニング登録表211に追加されたエントリのフィールド704に登録される。つぎに、基本ブロックB8をヘッダとするループが、ストリップマイニング適用条件を満たすストリップマイニング対象ループであると判定され、このループの識別情報「ループ2」が、ストリップマイニング登録表211に追加されたエントリのフィールド704に追加登録される。
図5の中間コードにはストリップマイニング指示文が1組しか含まれていないため、S801〜S802の繰返し処理が実行された後、ストリップマイニング指示解析処理S102は終了して、ストリップマイニング変換処理(S103)が実行される。
(3)ストリップマイニング変換処理(S103)
ストリップマイニング変換処理S103の詳細な処理のフローチャートを図9に示す。ここでは、コンパイラ208は、ストリップマイニング登録表211内のエントリを、エントリ番号の順番に処理対象エントリとしていくこととする。
コンパイラ208は、ストリップマイニング登録表211に未処理エントリがあるか否かをチェックし、未処理エントリが存在していなければ、レジスタ割付処理(S303)を実行する。
一方、未処理エントリを存在していたら、コンパイラ208は、前回の処理対象エントリのつぎのエントリを、処理対象エントリとしてストリップマイニング登録表211から取り出す(S901)。その後、コンパイラ208は、処理対象エントリのフィールド704に登録されているループ識別情報に対応する初期値をループ表210から取り出し、その初期値をループ制御変数(以下、第2ループ制御変数k)に代入する、第2ループ制御変数kの初期化文「k=初期値」を生成する。ここで、処理対象エントリのフィールド704に複数のループ識別情報が登録されている場合には、コンパイラ208は、各ループ識別情報に対応付けられた初期値をそれぞれループ表210から取り出し、それらの初期値のなかの最小値を第2ループ制御変数kに代入する、第2ループ制御変数kの初期化文を生成する。このようにして生成した、第2ループ制御変数kの初期化文を、コンパイラ208は、処理対象エントリのフィールド702に登録されているブロック識別情報が示す基本ブロックの直前の先行基本ブロック内に挿入する(S902)。
さらに、コンパイラ208は、処理対象エントリのフィールド704に登録されているループ識別情報に対応付けられた上限値をループ表210から取り出し、第2ループ制御変数kがその上限値以下であることを条件とするループ判定文「if(k<=上限値)」を生成する。ここで、処理対象エントリのフィールド704に複数のループ識別情報が登録されている場合には、コンパイラ208は、各ループ識別情報に対応付けられた上限値をそれぞれループ表210から取り出し、ループ制御変数kが、それらの上限値のなかの最大値以下であることを条件とするループ判定文を生成する。コンパイラ208は、処理対象エントリのフィールド702に登録されているループ識別情報が示す基本ブロック内のstart指示文を、このようにして生成したループ判定文で置換する(S903)。
つぎに、コンパイラ208は、処理対象エントリのフィールド705に登録されているブロックサイズ(Bとする)で第2ループ制御変数kをインクリメントする、第2ループ制御変数kの更新文「k=k+B」を生成し、処理対象エントリのフィールド703に登録されているループ識別情報が示す基本ブロック内のend指示文を、この更新文で置換する(S904)。
そして、コンパイラ208は、end指示文が制御変数kの更新文で置換された基本ブロックから、start指示文がループ判定文で置換されたブロックへと、ループバックエッジを張り(S905)、さらに、end指示文が制御変数kの更新文で置換された基本ブロックから、start指示文がループ判定文で置換されたブロックの直後の後続基本ブロックへと、ループ出口エッジを張る(S906)。
以上の処理によって、処理対象エントリのフィールド704に登録されているループ識別情報が示すループを取り囲む外側ループの中間コードが生成される。
その後、コンパイラ208は、処理対象エントリのフィールド704に登録されているループ識別情報が示すループを順次変換する。
具体的には、コンパイラ208は、処理対象エントリのフィールド704に登録されているすべてのループ識別情報が示すループの変換処理が行われた否かをチェックし(S907)、変換処理が行われていないループが存在していなければ、次の処理対象エントリをストリップマイニング登録表211から見つけるべくS901以降の処理を再度実行し、変換処理が行われていないループが1または複数存在していれば、そのようなループの1つを変換対象として以下の処理を実行する。
コンパイラ208は、変換対象の第1ループ制御変数の初期化文をループ表210から取り出し、その初期化文と一致する文を含む基本ブロックを、変換対象のループヘッダブロックの先行基本ブロックから探す。その結果得られた基本ブロックに含まれている、変換対象の第1ループ制御変数の初期化文中の初期値(Lとする)を、引数の最大値を返す関数「max(L,k)」の出力値で置換し(S908)、変換対象のループヘッダブロックに含まれている、変換対象のループ判定文中のループ制御変数上限値(Nとする)を、引数の最小値を返す関数「min(k+B−1,N)」の出力値で置換する(S909)。その後、コンパイラ208は、つぎの変換対象を見つけるべく、S901以降の処理を再度実行する。
このようなストリップマイニング変換処理S102によって、図5の中間コードは、ストリップマイニング登録表211及びループ表210に基づき、以下のように処理される。
まず、S901〜S906において、図5の中間コードが以下のように処理される。
2つのループ(ループ1、ループ2)の制御変数初期値「1」「1」のうちの最小値「1」を第2ループ制御変数kに代入する、第2ループ制御変数kの初期化文「k=1」が生成され、この初期化文「k=1」が、start指示文ブロックB2の直前の先行基本ブロックB1内に挿入される(S901〜902)。つぎに、2つのループ(ループ1、ループ2)の第1ループ制御変数の上限値(「N」「N」)の最大値「N」が第2ループ制御変数kの上限値であることを条件とするループ判定文「if(k<=N)」で、基本ブロックB2内のstart指示文が置換され、第2ループ制御変数kをブロックサイズでインクリメントする更新文「k=k+100」で、基本ブロックB10内のend指示文が置換される(S903〜S904)。さらに、基本ブロックB10から基本ブロックB2へとループバックエッジが張られ、基本ブロックB2から基本ブロックB11へとエッジが張られる(S905〜S906)。
つぎに、S907〜S909の繰り返し処理により、中間コードが以下のように処理される。
2つのループ(ループ1、ループ2)のうち、一方のループ(ループ1)が変換対象とされて、この変換対象の制御変数の初期化文「i=1」及びループ判定文「if(i<=N)」がそれぞれ「i=k」及び「if(i<=max(k+99,N))」で置換される(S908〜S909)。さらに、他方のループ(ループ2)を変換対象されて同様な処理が実行される。このようにして変換した中間コードを図10に示し、この中間コードのソースイメージを図4(b)に示す。
このように、本実施の形態に係るストリップマイニング最適化処理S302によれば、コンパイラは、ソースプログラムに挿入されているストリップマイニング指示文が示すストリップマイニング適用範囲に含まれている複数のループを、ソースプログラム内のストリップマイニング指示文で指定されたブロックサイズでストリップマインする。このため、ユーザは、ストリップマイニング対象とすべき複数のループを含むストリップマイニング適用範囲とストリップマイニングに用いるべきブロックサイズとを示すストリップマイニング指示文をソースプログラムに挿入しておくことにより、コンパイラに、ユーザの意図通りのストリップマイニング処理を効率的に実行させることができる。
また、最適なブロックサイズを見つけるためのプログラムチューニングを行う場合、実行対象マシンに応じてブロックサイズを変更する場合等には、ソースプログラム内のストリップマイニング指示文だけを修正すればよいので、ユーザによるプログラム修正の作業負担が軽減される。
以上においては、ストリップマイニング指示文で指定されたブロックサイズと、予め定められたストリップマイニング対象レベルとを用いてストリップマイニング最適化処理を実行するようにしているが、必ずしも、このようにする必要なない。
例えば、図13に示すように、コンパイラの起動コマンド1300のオプションでストリップマイニング対象レベル及びブロックサイズを指定できるようにしてもよい。図13においては、コンパイラの起動コマンドに続く−Oオプションで、ブロックサイズ「100」1301、ストリップマイニング対象レベル「2」1302が指定されている。このような起動コマンドを用いる場合には、コンパイラ208は、オプションで指定されたブロックサイズ及びストリップマイニング対象レベルを用いて上述のストリップマイニング最適化処理を実行する必要がある。
図13には、コマンドオプションでブロックサイズ及びストリップマイニング対象レベルの双方を指定する場合におけるコマンドライン入力例を示したが、ブロックサイズ及びストリップマイニング対象レベルのいずれか一方をコマンドオプションで指定するようにしてもよい。例えば、ストリップマイニング指示文にブロックサイズの指定が含められており、コマンドオプションでストリップマイニング対象レベルのみが指定された場合には、コンパイラ208は、ストリップマイニング指示文で指定されたブロックサイズ及びコマンドオプションで指定されたストリップマイニング対象レベルを用いて上述のストリップマイニング最適化処理を実行すればよい。また、予めストリップマイニング対象レベルが定められており、コマンドオプションでブロックサイズのみが指定された場合には、コンパイラ208は、予め定められたストリップマイニング対象レベル及びコマンドオプションで指定されたブロックサイズを用いて上述のストリップマイニング最適化処理を実行すればよい。
また、start指示文によってブロックサイズ及びストリップマイニング対象レベルの双方を指定できるようにしてもよい。図11(a)に、ブロックサイズ及びストリップマイニング対象レベルを引数とするstart指示文が記述されたソースプログラムの例を示す。
このソースプログラムには2つの二重ループが含まれている。そして、ブロックサイズ「100」及びストリップマイニング対象レベル「2」を第1引数及び第2引数とするstart指示文401aが記述されている。このようなstart指示文が記述されたソースプログラムがコンパイル対象として指定された場合には、コンパイラ208は、start指示文401aの第1及び第2引数で指定されたブロックサイズ「100」及びストリップマイニング対象レベル「2」を用いて上述のストリップマイニング最適化処理を実行する必要がある。例えば図11(a)のソースプログラムをコンパイルした場合には、2つの二重ループの外側ループ1,3(ループレベル「2」)がブロックサイズ「100」でストリップマインされ、その結果、図11(b)に示すようなソースイメージで表される中間コードが生成される。
なお、図11には、ブロックサイズ及びストリップマイニング対象レベルを引数とするstart指示文が記述されたソースプログラムの例を示したが、ストリップマイニング対象レベルのみを引数としてstart指示文に与えておき、ブロックサイズは、コマンドオプションで指定するようにしてもよい。
また、以上においては、コンパイラ208が、ループヘッダブロックのループレベルに基づきストリップマイニング対象ループを抽出しているが、必ずしも、このようにする必要はない。例えば、以下に示すように、ストリップマイニング対象ループを指定する指示文でソースプログラムに記述しておくようにしてもよい。
図12(a)に、そのようなソースプログラムの記述例を示す。このソースプログラムには、2つの二重ループが含まれている。さらに、ストリップマイニング対象ループを指定する指示文「*option STRIPMINE_LOOP」1202,1203が記述されている。これらの指示文1202,1203は、各二重ループに含まれるループのうちの、ストリップマイニング対象ループとなるループ2,3の直前に記述されている。このようなソースプログラムをコンパイル対象とする場合には、コンパイラ208は、ループヘッダブロックのループレベルがストリップマイニング対象レベルであるか否かの判定を行う代わりに、S809において、ループヘッダブロック直前の先行基本ブロックにプ指示文「*option STRIPMINE_LOOP」が含まれているか否かを判定することによって、ストリップマイニング対象ループとなるループヘッダブロックを抽出する必要がある。例えば図12(a)のソースプログラムをコンパイルした場合、一方の二重ループの内側ループ2(ループレベル「1」)及び他方の二重ループの外側ループ3(ループレベル「2」)がブロックサイズ「100」でストリップマインされ、その結果、図11(b)に示すようなソースイメージで表される中間コードが生成される。
なお、指示文「*option STRIPMINE_LOOP」によるストリップマイニング対象ループ指定と、ストリップマイニング対象レベルを用いたストリップマイニング対象ループ決定とを併用することも可能である。具体的には、ストリップマイニング適用範囲に指示文「*option STRIPMINE_LOOP」が含まれていれば、その指示文によって指定されたループをストリップマイニング対象ループとしてストリップマイニング最適化処理S302が実行され、ストリップマイニング適用範囲に指示文「*option STRIPMINE_LOOP」が含まれていなければ、ストリップマイニング対象レベルのループをストリップマイニング対象ループとしてストリップマイニング最適化処理S302が実行されるようにしてもよい。
以上、コンパイラへの適用例を挙げて説明したが、本発明は、ループを最適化する処理を実行する他のプログラム(例えば、トランスレータ)にも適用可能である。
本発明の実施の一形態に係るストリップマイニング最適化処理のフローチャートである。 本発明の実施の一形態に係るコンパイラが実装される計算機システムの構成例を示した図である。 本発明の実施の一形態に係るコンパイラが実行するコンパイル処理のフローチャートである。 (a)は、本発明の実施の一形態に係るコンパイラのコンパイル対象となるソースプログラムの記述例を示した図であり、(b)は、そのソースプログラムのコンパイルにより生成されたオブジェクトプログラムのイメージを示した図である。 図4(a)のソースプログラムから生成された中間コードの一例を示した図である。 本発明の実施の一形態に係るループ表のデータ構造を概念的に示した図である。 本発明の実施の一形態に係るストリップマイニング登録表のデータ構造を概念的に示した図である。 図1のストリップマイニング指示解析処理S102で実行される処理のフローチャートである。 図1のストリップマイニング変換処理S103で実行される処理のフローチャートである。 ストリップマイニング変換処理後の中間コードの例を示した図である。 ストリップマイニング指示文を含むソースプログラムの記述例を示した図である。 ストリップマイニング指示文を含むソースプログラムの記述例を示した図である。 コマンドラインへの入力例を示した図である。
符号の説明
200…情報処理装置、201…CPU、203…入力装置、204…主記憶装置、205…外部記憶装置、206…ソースプログラム、207…オブジェクトプログラム、208…コンパイラ、209…中間コード、210…ループ表、211…ストリップマイニング登録表、212…入出力インタフェース、401,402,401A…ストリップマイニング指示文、1202,1203…指示文

Claims (8)

  1. 入力受付手段と演算処理手段とを有し、N重ループ(Nは自然数)と、M重ループ(Mは自然数)とを含むソースプログラムに対しストリップマイニング処理を実行して、内側ループと外側ループとする情報処理システムであって、
    前記ソースプログラムには、前記N重ループを構成するループと、前記M重ループを構成するループとの各々の、ループの繰り返し回数を示す制御値が含まれ、さらに、前記N重ループと前記M重ループとを含むストリップマイニング処理対象範囲を示す第1指示文が含まれており、
    ストリップマイニング後の内側ループのループ回数を示す設定値と、前記N重ループ及び前記M重ループ各々の、何重目のループかを示すレベル情報とが、前記入力受付手段から入力される、または、前記ソースプログラムに含まれており、
    前記情報処理システムは、
    前記入力受付手段が、ソースプログラムの識別情報の入力を受け付け、
    前記演算処理手段が、
    前記入力受付手段が受け付けた前記識別情報に対応するソースプログラムについて、前記第1指示文に示される範囲内において、前記N重ループを構成するループのうち該N重ループの前記レベル情報に示されるループ(以下、第1ストリップマイニング対象ループ)の制御値、および、前記M重ループを構成するループのうち該M重ループの前記レベル情報に示されるループ(以下、第2ストリップマイニング対象ループ)の制御値を、前記設定値で置き換え、該制御値を置き換えた第1ストリップマイニング対象ループおよび第2ストリップマイニング対象ループを2つの内側ループとし、さらに、当該2つの内側ループを含み、かつ、前記第1指示文で示される範囲を、前記設定値分のステップ数の外側ループで囲む変換処理を行うことを特徴とする情報処理システム。
  2. 請求項1記載の情報処理システムであって、
    前記第1指示文は、
    前記設定値、及び、前記M重ループ及び前記N重ループ各々前記レベル情報の少なくとも一方を指定情報として含み、
    前記演算処理手段は、前記第1指示文に含まれた前記指定情報を用いて前記第1指示文で示される範囲における前記変換を実行することを特徴とする情報処理システム。
  3. 請求項1又は2に記載の情報処理システムであって、
    前記ソースプログラムは、前記第1及び第2のストリップマイニング対象ループとなるループをそれぞれ指定する第2指示文を含み、
    前記設定値が、前記入力受付手段から入力される、または、前記ソースプログラムに含まれており、
    前記演算処理手段は、前記第2指示文で指示される前記第1ストリップマイニング対象ループの制御値、および、前記第2指示文で指示される前記第2ストリップマイニング対象ループの制御値を、前記設定値で置き換えることを特徴とする情報処理システム。
  4. 入力受付手段と演算処理手段とを有する情報処理装置に、N重ループ(Nは自然数)と、M重ループ(Mは自然数)とを含むソースプログラムに対しストリップマイニング処理を実行させて、内側ループと外側ループとするプログラムであって、
    前記ソースプログラムには、前記N重ループを構成するループと、前記M重ループを構成するループとの各々の、ループの繰り返し回数を示す制御値が含まれ、さらに、前記N重ループと前記M重ループとを含むストリップマイニング処理対象範囲を示す第1指示文が含まれており、
    ストリップマイニング後の内側ループのループ回数を示す設定値と、前記N重ループ及び前記M重ループの各々の、何重目のループかを示すレベル情報とが、前記入力受付手段から入力される、または、前記ソースプログラムに含まれており、
    前記演算処理手段に、
    前記入力受付手段から、ソースプログラムの識別情報の入力を受け付ける入力受付け処理と、
    前記入力受付手段が受け付けた前記識別情報に対応するソースプログラムについて、前記第1指示文に示される範囲内において、前記N重ループを構成するループのうち該N重ループの前記レベル情報に示されるループ(以下、第1ストリップマイニング対象ループ)の制御値、および、前記M重ループを構成するループのうち該M重ループの前記レベル情報に示されるループ(以下、第2ストリップマイニング対象ループ)の制御値を、前記設定値で置き換え、該制御値を置き換えた第1ストリップマイニング対象ループおよび第2ストリップマイニング対象ループを2つの内側ループとし、さらに、当該2つの内側ループを含み、かつ、前記第1指示文で示される範囲を、前記設定値分のステップ数の外側ループで囲むループ変換処理と、を実行させること
    を特徴とするプログラム。
  5. 請求項記載のプログラムであって、
    前記第1指示文は、
    前記設定値、及び、前記M重ループ及び前記N重ループ各々前記レベル情報の少なくとも一方を指定情報として含み、
    前記ループ変換処理において、前記演算処理手段に、前記第1指示文に含まれる前記指定情報を用いて前記第1指示文で示される範囲における前記変換を実行させることを特徴とするプログラム。
  6. 請求項4又は5に記載のプログラムであって、
    前記ソースプログラムは、前記第1及び第2のストリップマイニング対象ループを指定する第2指示文を含み、
    前記設定値が、前記入力受付手段から入力される、または、前記ソースプログラムに含まれており、
    前記ループ変換処理において、前記演算処理手段に、前記第2指示文で指示される前記第1ストリップマイニング対象ループの制御値、および、前記第2指示文で指示される前記第2ストリップマイニング対象ループの制御値を、前記設定値で置き換えさせること
    を特徴とするプログラム。
  7. 請求項4、5及びのうちいずれか1項に記載のプログラムが記録されたことを特徴とする、コンピュータ読み取り可能な記憶媒体。
  8. 入力受付手段と演算処理手段とを有する情報処理装置に、N重ループ(Nは自然数)と、M重ループ(Mは自然数)とを含むソースプログラムに対しストリップマイニング処理を実行させて、内側ループと外側ループとするコード生成方法であって、
    前記N重ループを構成するループと、前記M重ループを構成するループとの各々には、ループの繰り返し回数を示す制御値が設定され、前記N重ループと前記M重ループとを含むストリップマイニング処理対象範囲が、第1指示文で示されており、
    ストリップマイニング後の内側ループのループ回数を示す設定値と、前記N重ループ及び前記M重ループの各々の、何重目のループかを示すレベル情報とが、前記入力受付手段から入力される、または、前記ソースプログラムに含まれており、
    前記演算処理手段
    前記入力受付手段からの、ソースプログラムの識別情報の入力を受け付ける入力受付け処理と、
    前記入力受付手段が受け付けた前記識別情報に対応するソースプログラムについて、前記第1指示文に示される範囲内において、前記N重ループを構成するループのうち該N重ループの前記レベル情報に示されるレベルのループ(以下、第1ストリップマイニング対象ループ)の制御値、および、前記M重ループを構成するループのうち該M重ループの前記レベル情報に示されるレベルのループ(以下、第2ストリップマイニング対象ループ)の制御値を、前記設定値で置き換え、該制御値を置き換えた第1ストリップマイニング対象ループおよび第2ストリップマイニング対象ループを2つの内側ループとし、さらに、当該2つの内側ループを含み、かつ、前記第1指示文で示される範囲を、前記設定値分のステップ数の外側ループで囲むループ変換処理と、を実行すること
    を特徴とするコード生成方法。
JP2003432643A 2003-12-26 2003-12-26 情報処理システム及びコード生成方法 Expired - Fee Related JP4719415B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2003432643A JP4719415B2 (ja) 2003-12-26 2003-12-26 情報処理システム及びコード生成方法
US10/975,437 US20050144605A1 (en) 2003-12-26 2004-10-29 Information processing system and code generation method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003432643A JP4719415B2 (ja) 2003-12-26 2003-12-26 情報処理システム及びコード生成方法

Publications (2)

Publication Number Publication Date
JP2005190302A JP2005190302A (ja) 2005-07-14
JP4719415B2 true JP4719415B2 (ja) 2011-07-06

Family

ID=34697693

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003432643A Expired - Fee Related JP4719415B2 (ja) 2003-12-26 2003-12-26 情報処理システム及びコード生成方法

Country Status (2)

Country Link
US (1) US20050144605A1 (ja)
JP (1) JP4719415B2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7395419B1 (en) * 2004-04-23 2008-07-01 Apple Inc. Macroscalar processor architecture
US7617496B2 (en) 2004-04-23 2009-11-10 Apple Inc. Macroscalar processor architecture
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
US8490073B2 (en) * 2007-03-30 2013-07-16 International Business Machines Corporation Controlling tracing within compiled code
US8527656B2 (en) * 2008-03-26 2013-09-03 Avaya Inc. Registering an endpoint with a sliding window of controllers in a list of controllers of a survivable network
US8533392B2 (en) 2009-03-04 2013-09-10 Hewlett-Packard Development Company, L.P. Cache hit management
US20100318980A1 (en) * 2009-06-13 2010-12-16 Microsoft Corporation Static program reduction for complexity analysis
CN103959238B (zh) * 2011-11-30 2017-06-09 英特尔公司 使用gpu/cpu体系结构的rsa的高效实现

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5802375A (en) * 1994-11-23 1998-09-01 Cray Research, Inc. Outer loop vectorization
US6059841A (en) * 1997-06-19 2000-05-09 Hewlett Packard Company Updating data dependencies for loop strip mining
US7086038B2 (en) * 2002-10-07 2006-08-01 Hewlett-Packard Development Company, L.P. System and method for creating systolic solvers

Also Published As

Publication number Publication date
JP2005190302A (ja) 2005-07-14
US20050144605A1 (en) 2005-06-30

Similar Documents

Publication Publication Date Title
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
JPH11242597A (ja) Javaバイトコードデータのフローグラフの生成方法
US20150277864A1 (en) Compiler, compile method and compile apparatus
JP3651774B2 (ja) コンパイラ及びそのレジスタ割付方法
JP2015201119A (ja) コンパイルプログラム、コンパイル方法およびコンパイル装置
CN115017516A (zh) 一种基于符号执行的模糊测试方法
US6301652B1 (en) Instruction cache alignment mechanism for branch targets based on predicted execution frequencies
JP4719415B2 (ja) 情報処理システム及びコード生成方法
JPH0926884A (ja) バイナリ操作を必要とするタスク中に必要なフロー情報を使用可能とする方法および装置
JP2000132404A (ja) 命令列最適化装置
Ebner et al. Generalized instruction selection using SSA-graphs
JP3539613B2 (ja) ループ飛び出し文を含むループに対する配列サマリ解析方法
JP2008276735A (ja) プログラムコード変換装置及びプログラムコード変換方法
JP2006107339A (ja) プログラム処理装置
US7120905B2 (en) System and method for transformation of assembly code for conditional execution
JP6160232B2 (ja) コンパイルプログラムおよびコンパイル方法
Goss Machine code optimization-improving executable object code
Osmialowski How the Flang frontend works: Introduction to the interior of the open-source fortran frontend for LLVM
JP5932707B2 (ja) 計算機、プログラム及びデータ生成方法
JP2009265708A (ja) コンパイラ及びそのコード生成方法
JP2014099108A (ja) 実行時間算出装置、実行時間算出方法、およびプログラム
JP2019067117A (ja) コード生成装置、コード生成方法及びコード生成プログラム
JPS62169272A (ja) ベクトル演算列ル−プアンロ−リング処理方式
US20040045018A1 (en) Using address space bridge in postoptimizer to route indirect calls at runtime
Lin et al. Vector data flow analysis for SIMD optimizations on OpenCL programs

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050721

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080122

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080430

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080630

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20080729

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080828

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081021

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20081024

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20081128

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

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

Free format text: PAYMENT UNTIL: 20140408

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees