(57)【特許請求の範囲】
【請求項１】
ソースプログラムに含まれる任意の複数のループ構造が１つのループ構造に融合可能であるか否かを判断するループ解析部と、
前記融合可能と判断された複数のループ構造を、前記複数のループ構造にそれぞれ指定された繰返し数のうち最大値を繰返し数（融合後繰返し数）とする１つのループ構造に融合するループ融合部と、
前記融合されたループ構造において、融合前の前記複数のループ構造にそれぞれ含まれていた処理に基づく命令を生成する命令生成部と、
前記融合されたループ構造において、融合前の前記複数のループ構造のうち繰返し数として前記融合後繰返し数より小さい値が指定されていたループ構造に含まれていた処理を、その時点までの繰返し数およびそのループ構造に指定されていた繰返し数に基づいて無効化する無効化情報を生成する無効化情報生成部と、
を備えた最適化装置。
【請求項２】
前記命令生成部は、融合前の前記複数のループ構造にそれぞれに含まれていた処理に基づく前記命令として、ＳＩＭＤ（single instruction multiple data）命令を生成し、
前記無効化情報生成部は、前記無効化情報として、前記ＳＩＭＤ命令の演算対象を制御するマスクを設定する命令を生成することを特徴とする請求項１に記載の最適化装置。
【請求項３】
ソースプログラムに含まれる任意の複数のループ構造が１つのループ構造に融合可能であるか否かを判断し、
前記融合可能と判断された複数のループ構造を、前記複数のループ構造にそれぞれ指定された繰返し数のうち最大値を繰返し数（融合後繰返し数）とする１つのループ構造に融合し、
前記融合されたループ構造において、融合前の前記複数のループ構造にそれぞれ含まれていた処理に基づく命令を生成し、
前記融合されたループ構造において、融合前の前記複数のループ構造のうち繰返し数として前記融合後繰返し数より小さい値が指定されていたループ構造に含まれていた処理を、その時点までの繰返し数およびそのループ構造に指定されていた繰返し数に基づいて無効化する無効化情報を生成する方法。
【請求項４】
前記融合されたループ構造において、融合前の前記複数のループ構造にそれぞれに含まれていた処理に基づく前記命令として、ＳＩＭＤ命令を生成し、
前記融合されたループ構造において、前記無効化情報として、前記ＳＩＭＤ命令の演算対象を制御するマスクを設定する命令を生成することを特徴とする請求項３に記載の方法。
【請求項５】
ソースプログラムに含まれる任意の複数のループ構造が１つのループ構造に融合可能であるか否かを判断するループ解析ステップと、
前記融合可能と判断された複数のループ構造を、前記複数のループ構造にそれぞれ指定された繰返し数のうち最大値を繰返し数（融合後繰返し数）とする１つのループ構造に融合するループ融合ステップと、
前記融合されたループ構造において、融合前の前記複数のループ構造にそれぞれ含まれていた処理に基づく命令を生成する命令生成ステップと、
前記融合されたループ構造において、融合前の前記複数のループ構造のうち繰返し数として前記融合後繰返し数より小さい値が指定されていたループ構造に含まれていた処理を、その時点までの繰返し数およびそのループ構造に指定されていた繰返し数に基づいて無効化する無効化情報を生成する無効化情報生成ステップと、
をコンピュータ装置に実行させるプログラム。
【請求項６】
前記命令生成ステップにおいて、融合前の前記複数のループ構造にそれぞれに含まれていた処理に基づく前記命令として、ＳＩＭＤ（single instruction multiple data）命令を生成し、
前記無効化情報生成ステップにおいて、前記無効化情報として、前記ＳＩＭＤ命令の演算対象を制御するマスクを設定する命令を生成することを特徴とする請求項５に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースプログラムに含まれるループ構造を最適化する技術に関する。
【背景技術】
【０００２】
ソースプログラムをオブジェクトプログラムに変換するコンパイラでは、プログラムを高速化するための種々の最適化が行われる。例えば、ループ構造に対する最適化として、ループ融合が知られている。ループ融合とは、複数のループ構造を１つのループ構造に変形する技法である。具体的には、ループ融合は、１つのループ構造の中に、複数のループ構造それぞれの処理を含める。これにより、ループ融合は、繰返しの制御文を共通化し、ループの繰返し数を削減する。さらに、ループ融合は、複数のループ構造において同一の配列が参照されていた場合、その配列のロード回数を削減することになる。ただし、ループ融合は、繰返し数が等しく、かつ、それぞれのループ構造に含まれる処理間に依存関係がない場合に可能である。
【０００３】
ループ融合の一例を図１１に示す。図１１は、ループ融合により、２つのループ構造ｌｏｏｐ１およびｌｏｏｐ２が１つのループ構造ｌｏｏｐ３に変形されることを表している。ループ構造ｌｏｏｐ１およびｌｏｏｐ２は、繰返し数がＭ（Ｍは正の整数）で互いに等しい。また、前段のループ構造ｌｏｏｐ１で計算される配列要素Ａは、後段のループ構造ｌｏｏｐ２で参照されていない。つまり、ループ構造ｌｏｏｐ１およびｌｏｏｐ２に含まれる処理間には、依存関係がない。そこで、これらのループ構造ｌｏｏｐ１およびｌｏｏｐ２は、それぞれの処理が含まれる１つのループ構造ｌｏｏｐ３に融合される。
【０００４】
一方、図１２に示すような、繰返し数が異なる複数のループ構造は、ループ融合に適していない。ここで、ループ構造ｌｏｏｐ４の繰返し数Ｍは、ループ構造ｌｏｏｐ５の繰返し数Ｎより大きいとする（Ｍ、Ｎは、正の整数）。仮に、これらを１つのループ構造に融合したとする。この場合、融合されたループ構造が実行される際に、その時点までの繰返し数がＮを超えると、配列要素ＸおよびＹの添字がその取りうる範囲より大きくなり、実行に問題が生じる可能性がある。
【０００５】
このように、一般的なループ融合は、繰返し数が異なる複数のループ構造に適用できないという問題がある。
【０００６】
このような問題に関連する技術の一例が、特許文献１に記載されている。この関連技術は、異なる繰返し数の複数のループ構造について、繰返し数の最大公約数を求める。そして、この関連技術は、各ループ構造に対して、繰返し数が最大公約数となるようループアンローリングを行う。そして、この関連技術は、繰返し数が互いに等しくなった複数のループ構造をループ融合する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平１１−２１２７９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１に記載された関連技術には、以下の課題がある。
【０００９】
この関連技術は、異なる繰返し数の複数のループ構造であっても、それらの繰返し数の最大公約数が１である場合には適用することができない。また、この関連技術は、ループアンローリングに適していない処理を含むループ構造には、適用することができない。
【００１０】
本発明は、上述の課題を解決するためになされたものである。すなわち、本発明は、複数のループ構造の繰返し数が異なる場合であっても、より適切に最適化する技術を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明の最適化装置は、ソースプログラムに含まれる任意の複数のループ構造が１つのループ構造に融合可能であるか否かを判断するループ解析部と、前記融合可能と判断された複数のループ構造を、前記複数のループ構造にそれぞれ指定された繰返し数のうち最大値を繰返し数（融合後繰返し数）とする１つのループ構造に融合するループ融合部と、前記融合されたループ構造において、融合前の前記複数のループ構造にそれぞれ含まれていた処理に基づく命令を生成する命令生成部と、前記融合されたループ構造において、融合前の前記複数のループ構造のうち繰返し数として前記融合後繰返し数より小さい値が指定されていたループ構造に含まれていた処理を、その時点までの繰返し数およびそのループ構造に指定されていた繰返し数に基づいて無効化する無効化情報を生成する無効化情報生成部と、を備える。
【００１２】
また、本発明の方法は、ソースプログラムに含まれる任意の複数のループ構造が１つのループ構造に融合可能であるか否かを判断し、前記融合可能と判断された複数のループ構造を、前記複数のループ構造にそれぞれ指定された繰返し数のうち最大値を繰返し数（融合後繰返し数）とする１つのループ構造に融合し、前記融合されたループ構造において、融合前の前記複数のループ構造にそれぞれ含まれていた処理に基づく命令を生成し、前記融合されたループ構造において、融合前の前記複数のループ構造のうち繰返し数として前記融合後繰返し数より小さい値が指定されていたループ構造に含まれていた処理を、その時点までの繰返し数およびそのループ構造に指定されていた繰返し数に基づいて無効化する無効化情報を生成する。
【００１３】
また、本発明のプログラムは、ソースプログラムに含まれる任意の複数のループ構造が１つのループ構造に融合可能であるか否かを判断するループ解析ステップと、前記融合可能と判断された複数のループ構造を、前記複数のループ構造にそれぞれ指定された繰返し数のうち最大値を繰返し数（融合後繰返し数）とする１つのループ構造に融合するループ融合ステップと、前記融合されたループ構造において、融合前の前記複数のループ構造にそれぞれ含まれていた処理に基づく命令を生成する命令生成ステップと、前記融合されたループ構造において、融合前の前記複数のループ構造のうち繰返し数として前記融合後繰返し数より小さい値が指定されていたループ構造に含まれていた処理を、その時点までの繰返し数およびそのループ構造に指定されていた繰返し数に基づいて無効化する無効化情報を生成する無効化情報生成ステップと、をコンピュータ装置に実行させる。
【発明の効果】
【００１４】
本発明は、複数のループ構造の繰返し数が異なる場合であっても、より適切に最適化する技術を提供することができる。
【図面の簡単な説明】
【００１５】
【図１】本発明の第１の実施の形態としての最適化装置の構成を示すブロック図である。
【図２】本発明の第１の実施の形態としての最適化装置のハードウェア構成の一例を示す図である。
【図３】本発明の第１の実施の形態としての最適化装置のループ融合動作を説明するフローチャートである。
【図４】本発明の第２の実施の形態としての最適化装置の構成を示すブロック図である。
【図５】ＳＩＭＤ命令を模式的に説明する図である。
【図６】本発明の第２の実施の形態において生成されるＳＩＭＤ命令を模式的に説明する図である。
【図７】本発明の第２の実施の形態において生成されるＳＩＭＤ命令のマスクを模式的に説明する図である。
【図８】本発明の第２の実施の形態としての最適化装置のループ融合動作を説明するフローチャートである。
【図９】本発明の第２の実施の形態としての最適化装置のループ融合動作の具体例を模式的に説明する図である。
【図１０】右図は、本発明の第２の実施の形態においてループ融合されたループ構造における命令列を説明する図である。左図は、ループ融合しない場合のループ構造における命令列を説明する図である。
【図１１】一般的なループ融合について説明する図である。
【図１２】一般的なループ融合の適用が難しいケースについて説明する図である。
【発明を実施するための形態】
【００１６】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【００１７】
（第１の実施の形態）
本発明の第１の実施の形態としての最適化装置１の機能ブロック構成を図１に示す。図１において、最適化装置１は、ループ解析部１１と、ループ融合部１２と、命令生成部１３と、無効化情報生成部１４とを備える。
【００１８】
ここで、最適化装置１は、図２に示すようなハードウェア要素によって構成可能である。図２において、最適化装置１は、ＣＰＵ（Central Processing Unit）１００１、メモリ１００２、出力装置１００３および入力装置１００４を含む。メモリ１００２は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、補助記憶装置（ハードディスク等）等によって構成される。出力装置１００３は、ディスプレイ装置やプリンタ等のように、情報を出力する装置によって構成される。入力装置１００４は、キーボードやマウス等のように、ユーザ操作の入力を受け付ける装置によって構成される。この場合、最適化装置１の各機能ブロックは、メモリ１００２に格納されるコンピュータ・プログラムを読み込んで実行するとともに出力装置１００３、入力装置１００４の各部を制御するＣＰＵ１００１によって構成される。なお、最適化装置１およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００１９】
次に、各機能ブロックの詳細について説明する。
【００２０】
ループ解析部１１は、ソースプログラムに含まれる任意の複数のループ構造が１つのループ構造に融合可能であるか否かを判断する。例えば、ループ解析部１１は、ソースプログラムに含まれる任意の複数のループ構造について、処理間に依存関係があるか否かを解析してもよい。そして、ループ解析部１１は、依存関係がない場合に、それらのループ構造が融合可能であると判断してもよい。これは、依存関係がある場合、ループ融合を行うと結果の値が変わってしまうなどの可能性があるためである。具体的には、ループ解析部１１は、連続または近接する２つ以上のループ構造について、前段のループ構造の計算結果を後段のループ構造で参照していない場合に、これらの処理の間には依存関係がなく、融合可能であると判断してもよい。
【００２１】
ループ融合部１２は、融合可能と判断された複数のループ構造を、１つのループ構造に融合する。具体的には、ループ融合部１２は、それらの複数のループ構造にそれぞれ指定された繰返し数のうち最大値を求める。そして、ループ融合部１２は、その最大値を繰返し数（融合後繰返し数）とする１つのループ構造を生成すればよい。
【００２２】
命令生成部１３は、融合されたループ構造において、融合前の複数のループ構造にそれぞれ含まれていた処理に基づく命令を生成する。なお、命令生成部１３は、融合前の複数のループ構造にそれぞれ含まれていた処理を、個別のループ構造で処理するよりも効率的に処理する命令を生成することが望ましい。
【００２３】
無効化情報生成部１４は、融合されたループ構造において、融合前の複数のループ構造のうち繰返し数が前述の融合後繰返し数より小さいループ構造に含まれていた処理を、所定条件に応じて無効化する無効化情報を生成する。ここで、所定条件とは、その時点までの繰返し数および融合前のそのループ構造に指定されていた繰返し数に基づく条件である。例えば、所定条件とは、その時点までの繰返し数が、融合後繰返し数より小さい繰返し数が指定されていた融合前のループ構造の繰返し数を超えることであってもよい。
【００２４】
なお、融合前の複数のループ構造にそれぞれ指定されていた繰返し数が等しい場合には、無効化情報生成部１４は、無効化情報を生成しなくてよい。
【００２５】
以上のように構成された最適化装置１のループ融合動作について、図３を参照して説明する。ここでは、最適化装置１は、入力装置１００４を介して入力される情報に基づいて、ソースプログラムが記述されたファイルをメモリ１００２から読み込む。そして、最適化装置１は、読み込んだソースプログラムを中間コードに変換した上で、以下のループ融合動作を行うものとする。
【００２６】
まず、ループ解析部１１は、ソースプログラムにおいて、任意の複数のループ構造を認識する（ステップＳ１）。
【００２７】
例えば、ループ解析部１１は、連続または近接する２つのループ構造を認識してもよい。
【００２８】
次に、ループ解析部１１は、ステップＳ１で認識された複数のループ構造が、１つのループ構造に融合可能であるか否かを判断する（ステップＳ２）。
【００２９】
ここで、ループ融合可能でないと判断された場合、最適化装置１は、ループ融合動作を終了する。
【００３０】
一方、ループ融合可能であると判断された場合、ループ融合部１２は、それらの複数のループ構造にそれぞれ指定された繰返し数のうち最大値を融合後繰返し数とする。そして、ループ融合部１２は、それらの複数のループ構造を、融合後繰返し数を繰返し数とする１つのループ構造に融合する（ステップＳ３）。
【００３１】
次に、命令生成部１３は、融合されたループ構造において、融合前の複数のループ構造にそれぞれ含まれていた処理に基づく命令を生成する（ステップＳ４）。
【００３２】
次に、無効化情報生成部１４は、融合されたループ構造において、融合前の複数のループ構造のうち繰返し数が融合後繰返し数より小さいループ構造に含まれていた処理を、所定条件に応じて無効化する無効化情報を生成する（ステップＳ５）。
【００３３】
前述のように、所定条件とは、その時点までの繰返し数が、融合後繰返し数より小さい繰返し数が指定されていた融合前のループ構造の繰返し数を超えることであってもよい。
【００３４】
以上で、最適化装置１は、ループ融合動作を終了する。
【００３５】
そして、最適化装置１は、ループ融合動作により融合されたループ構造を含む中間コードに基づいて、コンピュータ装置で実行可能なオブジェクトプログラムを生成し、メモリ１００２や出力装置１００３等に出力する。
【００３６】
次に、本発明の第１の実施の形態の効果について述べる。
【００３７】
本発明の第１の実施の形態としての最適化装置は、複数のループ構造の繰返し数が異なる場合であっても、より適切に最適化することができる。
【００３８】
その理由について説明する。本実施の形態では、ループ解析部が、ソースプログラムに含まれる任意の複数のループ構造について１つのループ構造に融合可能であるか否かを判断する。そして、ループ融合部が、融合可能と判断された複数のループ構造を、１つのループ構造に融合する。このとき、ループ融合部が、複数のループ構造に指定された繰返し数のうち最大値を繰返し数（融合後繰返し数）とする。そして、命令生成部が、融合されたループ構造において、複数のループ構造にそれぞれ含まれていた処理に基づく命令を生成する。そして、無効化情報生成部が、融合されたループ構造において、複数のループ構造のうち繰返し数として融合後繰返し数より小さい値が指定されていたループ構造に含まれていた処理を、所定条件に応じて無効化する無効化情報を生成するからである。このとき、無効化情報生成部は、所定条件として、その時点までの繰返し数、および、融合後繰返し数より小さい繰返し数が指定されていたループ構造の繰返し数に基づく条件を適用するからである。
【００３９】
これにより、本実施の形態は、異なる繰返し数のループ構造であってもループ融合を可能とする。そして、命令生成部が、複数のループ構造にそれぞれ含まれていた処理に基づいて、それらを個別のループ構造で処理するよりも効率的に処理する命令を生成することにより、本実施の形態は、ループ融合により最適化をより促進できる。
【００４０】
（第２の実施の形態）
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第１の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【００４１】
まず、本発明の第２の実施の形態としての最適化装置２の構成を図４に示す。図４において、最適化装置２は、本発明の第１の実施の形態としての最適化装置１に対して、ループ解析部１１に替えてループ解析部２１と、命令生成部１３に替えて命令生成部２３と、無効化情報生成部１４に替えて無効化情報生成部２４を備える点が異なる。なお、最適化装置２およびその各機能ブロックは、図２を参照して説明した本発明の第１の実施の形態としての最適化装置１と同一のハードウェア要素によって構成可能である。ただし、最適化装置２およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００４２】
次に、各機能ブロックの詳細について説明する。
【００４３】
ループ解析部２１は、ソースプログラムに含まれる任意の複数のループ構造が融合可能か否かを判断する条件の１つとして、任意の複数のループ構造にそれぞれ含まれる処理が、ＳＩＭＤ（single instruction multiple data）命令化可能であるか否かを判断する。
【００４４】
ここで、ＳＭＩＤ命令について説明する。ＳＭＩＤ命令とは、複数のデータに対する複数の処理を１つの命令で並列に行うものである。例えば、ＳＩＭＤ命令の一例を模式的に図５に示す。図５に示すＳＩＭＤ命令は、１つのレジスタに複数のデータを格納し、一度の加算命令で、複数の加算を実行する。以降、１つのレジスタに複数のデータを格納することを、データを「パックする」とも呼ぶ。なお、図５では、１つのレジスタに格納された４つのデータを示しているが、本発明の最適化装置がパックするデータの数を限定するものではない。
【００４５】
データのパックの一例を図６に示す。図６では、レジスタが６４ビット幅であることを想定している。この例では、１つのレジスタの上位３２ビットおよび下位３２ビットに、データがパックされる。また、図６では、ＳＩＭＤ命令は、パックされたデータが格納されたレジスタ１およびレジスタ２の上位同士および下位同士をそれぞれ演算し、レジスタ３の上位および下位にそれぞれ格納する。
【００４６】
例えば、ループ解析部２１は、複数のループ構造にそれぞれ含まれる処理が、同一の演算形式であるか否かに基づいて、ＳＩＭＤ命令化可能であるか否かを判断してもよい。同一の演算形式であるとは、例えば、演算の対象となるデータ数やデータ型、演算内容が同一であることであってもよい。例えば、複数のループ構造に、それぞれ、２つの配列要素の加算結果を１つの配列要素に代入する処理が含まれ、それらの型が同一である場合、ループ解析部２１は、それらの処理の演算形式は同一でありＳＩＭＤ命令化可能であると判断してもよい。
【００４７】
このように、ループ解析部２１は、任意の複数のループ構造にそれぞれ含まれる処理が、ＳＩＭＤ命令化可能であるか否かを条件の１つとして、それらがループ融合可能であるか否かを判断する。例えば、ループ解析部２１は、ソースプログラムにおいて連続または近接する複数のループ構造を認識し、それらのループ構造に含まれる各処理がＳＩＭＤ命令化可能であり、かつ、依存関係がない場合に、それらのループ構造が融合可能であると判断してもよい。
【００４８】
命令生成部２３は、融合されたループ構造において、融合前の複数のループ構造のそれぞれに含まれていた処理に基づいて、ＳＩＭＤ命令を生成する。
【００４９】
無効化情報生成部２４は、前述のＳＩＭＤ命令において、融合前の複数のループ構造のうち繰返し数が融合後繰返し数より小さいループ構造に含まれていた処理を、所定条件に応じて無効化するマスクを設定する命令を、無効化情報として生成する。なお、本実施の形態で適用するＳＩＭＤ命令は、演算対象を制御するマスクを指定可能であるものとする。また、所定条件とは、本発明の第１の実施の形態と同様に、その時点までの繰返し数、および、融合後繰返し数より小さい繰返し数が指定されていた融合前のループ構造の繰返し数に基づく条件である。
【００５０】
例えば、図６に示したように、ＳＩＭＤ命令が、２つのレジスタにそれぞれパックされたデータの上位同士および下位同士の加算を１つの命令で行うよう構成されていることを想定する。この場合、無効化情報生成部２４は、上位同士および下位同士の演算をそれぞれ行うのか否かを指定するマスクを設定する命令を生成する。
【００５１】
マスクの一例を図７に示す。図７の例では、ＳＩＭＤ命令は、マスクの値が「10」のとき、上位同士を加算して下位同士を演算しないよう構成される。また、この場合、ＳＩＭＤ命令は、マスクの値が「01」のとき、下位同士を演算して上位同士を演算しないよう構成されていてもよい。また、ＳＩＭＤ命令は、マスクの値が「１１」のとき、上位同士および下位同士ともに演算するよう構成されていてもよい。
【００５２】
つまり、無効化情報生成部２４は、融合されたループ構造において、その時点までの繰返し数と、融合前の各ループ構造に指定されていた繰返し数とを比較し、比較結果に応じたマスクを設定する命令を生成すればよい。
【００５３】
以上のように構成された最適化装置２のループ融合動作を、図８を参照して説明する。本発明の第１の実施の形態と同様に、最適化装置２は、入力装置１００４から入力される情報に基づいて、ソースプログラムが記述されたファイルをメモリ１００２から読み込む。そして、最適化装置２は、読み込んだソースプログラムを中間コードに変換した上で、以下のループ融合動作を行う。
【００５４】
まず、ループ解析部２１は、ソースプログラムにおいて、連続または近接する任意の複数のループ構造を認識する（ステップＳ２１）。
【００５５】
次に、ループ解析部２１は、ステップＳ２１で認識された任意の複数のループ構造にそれぞれ含まれる処理が、ＳＩＭＤ命令化可能であるか否かを判断する（ステップＳ２２）。
【００５６】
ここで、ＳＩＭＤ命令化可能でない場合、最適化装置２は、ループ融合動作を終了する。
【００５７】
一方、ＳＩＭＤ命令化可能である場合、ループ解析部２１は、それらの複数のループ構造にそれぞれ含まれる処理間に、依存関係があるか否かを判断する（ステップＳ２３）。
【００５８】
ここで、依存関係がある場合、最適化装置２は、ループ融合動作を終了する。
【００５９】
一方、依存関係がない場合、ループ解析部２１は、それらの複数のループ構造が融合可能であると判断する。そして、ループ融合部１２は、それらの複数のループ構造にそれぞれ指定された繰返し数のうち最大値を融合後繰返し数とする。そして、ループ融合部１２は、それらの複数のループ構造を、融合後繰返し数を繰返し数とする１つのループ構造に融合する（ステップＳ２４）。
【００６０】
次に、命令生成部２３は、融合されたループ構造において、融合前の複数のループ構造にそれぞれ含まれていた処理に基づいて、ＳＩＭＤ命令を生成する（ステップＳ２５）。
【００６１】
次に、無効化情報生成部２４は、融合されたループ構造において、その時点までの繰返し数と、融合後繰返し数より小さい繰返し数が指定されていた融合前のループ構造の繰返し数とを比較し、比較結果に応じたマスクを設定する命令を生成する（ステップＳ２６）。
【００６２】
具体的には、前述のように、無効化情報生成部２４は、その時点までの繰返し数と、融合前の複数のループ構造に指定されていた繰返し数のうち融合後繰返し数より小さい繰返し数とを比較する命令を生成する。そして、無効化情報生成部２４は、その時点までの繰返し数が該当する繰返し数を超えた場合に、融合前の該当するループ構造に含まれていた処理をＳＩＭＤ命令で演算しないようにするマスクを生成する。
【００６３】
以上で、最適化装置２は、ループ融合動作を終了する。
【００６４】
そして、最適化装置２は、ループ融合動作により融合されたループ構造を含む中間コードに基づいて、コンピュータ装置で実行可能なオブジェクトプログラムを生成し、メモリ１００２や出力装置１００３等に出力する。
【００６５】
最適化装置２によるループ融合動作の具体例を、図９に模式的に示す。
【００６６】
この例では、ループ解析部２１は、Ｆｏｒｔｒａｎで記述されたソースプログラム中に、連続するループ構造９１および９２を認識したとする（ステップＳ２１）。
【００６７】
ここで、Ａ、Ｂ、および、Ｃは、大きさＭの配列を示す。また、Ｘ、Ｙ、および、Ｚは、大きさＮの配列を示す。また、ＭおよびＮは共に１以上の整数である。
【００６８】
次に、ループ解析部２１は、ループ構造９１に含まれる処理「Ａ（Ｉ）＝Ｂ（Ｉ）＋Ｃ（Ｉ）」と、ループ構造９２に含まれる処理「Ｘ（Ｉ）＝Ｙ（Ｉ）＋Ｚ（Ｉ）」とは、演算形式が同一でありＳＭＩＤ命令化可能であると判断する（ステップＳ２２でＹｅｓ）。
【００６９】
次に、ループ解析部２１は、前段のループ構造９１の処理で算出されるＡ（Ｉ）が後段のループ構造９２で参照されていないので、これらの処理間に依存関係がないと判断する（ステップＳ２３でＮｏ）。
【００７０】
そこで、ループ解析部２１は、これらのループ構造９１および９２が融合可能であると判断する。
【００７１】
次に、ループ融合部１２は、ループ構造９１および９２を、それらの繰返し数ＭおよびＮのうち大きい方ＭＡＸ（Ｍ，Ｎ）を融合後繰返し数として、ループ構造９３に融合する（ステップＳ２４）。
【００７２】
次に、命令生成部２３は、ループ構造９３内に、ループ構造９１および９２に含まれる処理に基づいて、ＳＩＭＤ命令「Ａ（Ｉ）：Ｘ（Ｉ）＝Ｂ（Ｉ）：Ｙ（Ｉ）＋Ｃ（Ｉ）：Ｚ（Ｉ）」を生成する（ステップＳ２５）。ここでは、「Ａ：Ｘ」は、上位３２ビットにＡ、下位３２ビットにＸの値を持つようパックされたデータを表すものとする。つまり、この例では、６４ビット幅のレジスタ１〜３のそれぞれにおいて、上位３２ビットにループ構造９１の処理に関わるデータが格納され、下位３２ビットにループ構造９２の処理に関わるデータが格納されるものとする。
【００７３】
次に、無効化情報生成部２４は、ループ構造９３において、その時点までの繰返し数Ｉと、融合前のループ構造９１および９２のうち融合後繰返し数より小さい繰返し数ＭＩＮ（Ｍ，Ｎ）とを比較する命令を生成する。そして、無効化情報生成部２４は、繰返し数ＩがＭＩＮ（Ｍ，Ｎ）を超えた場合に、ＭがＮより大きかった場合には、マスクとして、ループ構造９２の処理を無効化する「１０」を設定する命令を生成する。また、無効化情報生成部２４は、繰返し数ＩがＭＩＮ（Ｍ，Ｎ）を超えた場合に、ＮがＭより大きかった場合には、マスクとして、ループ構造９１の処理を無効化する「０１」を設定する命令を生成する。
【００７４】
以上で、具体例の説明を終了する。
【００７５】
次に、図９に示した具体例についてループ融合を行った場合と、行わない場合とについて、最適化装置２によって生成される命令列の比較を図１０に示す。
なお、図１０では、ループの開始、終了処理といったループの繰返し制御のための命令列、マスクを設定する命令列、および、ループ融合の有無に関わらず共通であるアドレス計算処理のために生成される命令列の図示を省略している。
【００７６】
図１０において、命令列９０１は、ループ融合を行わない場合に生成される命令列を表す。また、命令列９０２は、ループ融合を行った場合に生成される命令列を表している。これらの命令列の命令コストを比較する。なお、図１０において、「ＬＤ」、「ＬＤＵ」および「ＬＤＬ」は、それぞれ、ロード命令、上位３２ビットロード命令、および下位３２ビットロード命令を表す。また、「ＳＴ」、「ＳＴＵ」および「ＳＴＬ」は、それぞれ、ストア命令、上位３２ビットストア命令および下位３２ビットストア命令を表す。また、「ＡＤＤ」および「ＳＡＤＤ」は、それぞれ、加算命令およびＡＤＤのＳＩＭＤ命令を表す。また、「ＯＲ」は、上位３２ビットおよび下位３２ビットをまとめる命令を表す。
＜ループ融合を行わない場合＞
命令列９０１の命令コストは、次式（１）で表される。
（ＬＤ＋ＬＤ＋ＡＤＤ＋ＳＴ）×（Ｍ＋Ｎ）・・・（１）
なお、式（１）において、「ＬＤ」、「ＡＤＤ」および「ＳＴ」は、それぞれ、その名称の命令に係るコストを表すものとする。
【００７７】
その他、ループ融合を行わない場合、ループ構造９１および９２についてそれぞれ繰返し制御のための命令列（加算、比較、分岐）が必要となる。
＜ループ融合を行う場合＞
命令列９０２の命令コストは、次式（２）で表される。
（ＬＤＵ＋ＬＤＬ＋ＯＲ＋ＬＤＵ＋ＬＤＬ＋ＯＲ＋ＳＡＤＤ＋ＳＴＵ＋ＳＴL）×Ｍ・・・（２）
なお、式（２）において、「ＬＤＵ」、「ＬＤＬ」、「ＯＲ」、「ＳＡＤＤ」、「ＳＴＵ」および「ＳＴＬ」は、それぞれ、その名称の命令に係るコストを表すものとする。
【００７８】
その他、ループ融合を行う場合、ループ構造９３について繰返し制御のための命令列（加算、比較、分岐）が必要となる。つまり、ループ融合を行う場合、ループ構造１つ分について繰返し制御のための命令列（加算、比較、分岐）が軽減される。しかしながら、ループ融合を行う場合、ループ中でマスクを切り替える処理（比較、分岐、代入）が入る。このため、繰返し制御の減少によるコストの低減は相殺される。つまり、ループ融合を行う場合の命令コストは、行わない場合に対して、式（１）から式（２）を引いた差が０より大きければ、その分だけ低減すると考えることができる。
【００７９】
ここで、ＬＤ＝ＬＤＵ＝ＬＤＬ、ＳＴ＝ＳＴＵ＝ＳＴＬ、ＡＤＤ＝ＳＡＤＤとすると、式（１）から式（２）を引いた命令コストの差は、次式（３）で表される。
（ＬＤ×２＋ＳＴ）×（Ｎ−Ｍ）＋ＡＤＤ×Ｎ−ＯＲ×Ｍ×２・・・（３）。
【００８０】
式（３）において、ＮがＭに近い値であれば、命令コストの差は、次式（４）に近づく。
ＡＤＤ−ＯＲ×２・・・（４）
なお、ループ中の演算が加算でない場合、式（４）における第１項を、他の演算命令のコストに置き換えればよい。いずれにしても、式（４）における第１項の大きさは、ループ中で扱われるデータの種類によっても変わるが、浮動小数点演算のように演算に必要なクロック数が大きい場合、第２項より大きくなると考えられる。したがって、式（４）で表される命令コスト差は、０より大きくなる。つまり、本実施の形態のループ融合によって、命令コストの削減が実現されたことになる。
【００８１】
次に、本発明の第２の実施の形態の効果について述べる。
【００８２】
本発明の第２の実施の形態としての最適化装置は、複数のループ構造の繰返し数が異なる場合であっても、より適切にループ融合して命令コストを削減することができる。
【００８３】
その理由について説明する。本実施の形態は、本発明の第１の実施の形態と同様の構成に加えて、次のように構成されるからである。すなわち、ループ解析部が、ソースプログラムに含まれる任意の複数のループ構造に含まれる各処理がＳＩＭＤ命令化可能であるか否かを条件の１つとして、それらがループ融合可能であるか否かを判断する。そして、命令生成部が、融合されたループ構造において、融合前の複数のループ構造にそれぞれ含まれていた処理に基づくＳＩＭＤ命令を生成する。そして、無効化情報生成部が、融合されたループ構造において、その時点までの繰返し数が、融合後繰返し数より小さい繰返し数が指定されていた融合前のループ構造の繰返し数を超えた場合に、ＳＩＭＤ命令のマスクを設定する命令を生成する。そのマスクは、融合後繰返し数より小さい繰返し数が指定されていた融合前のループ構造に含まれていた処理を演算しないよう制御する値に設定されるからである。
【００８４】
このように、本実施の形態は、複数のループ構造の繰返し数が異なる場合であっても、各ループ構造で処理されるデータをパックしてＳＩＭＤ命令を生成し、ＳＩＭＤ命令の演算対象を制御するマスクを設定する命令を生成することで、ループ融合を可能とする。
その結果、本実施の形態は、マスク制御機能付きのＳＩＭＤ命令をもつプロセッサに実行させるオブジェクトプログラムにおいて、ループ構造により処理される命令コストをより削減することができ、プログラムの高速化に寄与する。
【００８５】
なお、本実施の形態において、２つのループ構造を融合する例を中心に説明したが、本発明において融合されるループ構造の数を限定するものではない。
【００８６】
また、本実施の形態において、ループ解析部は、ＳＩＭＤ命令化可能であるか否か、および、処理間に依存関係があるか否か等に基づいて、ループ融合可能であるか否かを判断する例について説明した。これらの条件だけに限らず、ループ解析部は、その他の条件も含めてループ融合可能であるか否かを判断してもよい。
【００８７】
また、本実施の形態において、ＳＩＭＤ命令化する処理が加算である例を中心に説明したが、本実施の形態においてＳＩＭＤ命令化する処理の演算内容を限定するものではない。
【００８８】
また、本実施の形態として、命令生成部が生成する命令がＳＩＭＤ命令である例について説明した。これに限らず、命令生成部は、融合前の各ループ構造に含まれていた処理に基づく他の命令を生成してもよい。前述のように、この場合、生成する命令は、個々のループ構造で個別に処理するよりも命令コストを削減する命令であることが望ましい。
【００８９】
また、上述した本発明の各実施の形態において、最適化装置の各機能ブロックが、記憶装置またはＲＯＭに記憶されたコンピュータ・プログラムを実行するＣＰＵによって実現される例を中心に説明した。これに限らず、各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
【００９０】
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明した最適化装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置（記憶媒体）に格納しておく。そして、係るコンピュータ・プログラムを当該ＣＰＵが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
【００９１】
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
【００９２】
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
【符号の説明】
【００９３】
１、２    最適化装置
１１、２１    ループ解析部
１２    ループ融合部
１３、２３    命令生成部
１４、２４    無効化情報生成部
９１、９２、９３    ループ構造
９０１、９０２    命令列
１００１    ＣＰＵ
１００２    メモリ
１００３    出力装置
１００４    入力装置
【図１】
0006555005.tif 000002
【図２】
0006555005.tif 000003
【図３】
0006555005.tif 000004
【図４】
0006555005.tif 000005
【図５】
0006555005.tif 000006
【図６】
0006555005.tif 000007
【図７】
0006555005.tif 000008
【図８】
0006555005.tif 000009
【図９】
0006555005.tif 000010
【図１０】
0006555005.tif 000011
【図１１】
0006555005.tif 000012
【図１２】
0006555005.tif 000013