JP6555005B2 - 最適化装置、方法およびプログラム - Google Patents

最適化装置、方法およびプログラム Download PDF

Info

Publication number
JP6555005B2
JP6555005B2 JP2015163396A JP2015163396A JP6555005B2 JP 6555005 B2 JP6555005 B2 JP 6555005B2 JP 2015163396 A JP2015163396 A JP 2015163396A JP 2015163396 A JP2015163396 A JP 2015163396A JP 6555005 B2 JP6555005 B2 JP 6555005B2
Authority
JP
Japan
Prior art keywords
loop
instruction
repetitions
fusion
loop structure
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.)
Active
Application number
JP2015163396A
Other languages
English (en)
Other versions
JP2017041162A (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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP2015163396A priority Critical patent/JP6555005B2/ja
Publication of JP2017041162A publication Critical patent/JP2017041162A/ja
Application granted granted Critical
Publication of JP6555005B2 publication Critical patent/JP6555005B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

本発明は、ソースプログラムに含まれるループ構造を最適化する技術に関する。
ソースプログラムをオブジェクトプログラムに変換するコンパイラでは、プログラムを高速化するための種々の最適化が行われる。例えば、ループ構造に対する最適化として、ループ融合が知られている。ループ融合とは、複数のループ構造を1つのループ構造に変形する技法である。具体的には、ループ融合は、1つのループ構造の中に、複数のループ構造それぞれの処理を含める。これにより、ループ融合は、繰返しの制御文を共通化し、ループの繰返し数を削減する。さらに、ループ融合は、複数のループ構造において同一の配列が参照されていた場合、その配列のロード回数を削減することになる。ただし、ループ融合は、繰返し数が等しく、かつ、それぞれのループ構造に含まれる処理間に依存関係がない場合に可能である。
ループ融合の一例を図11に示す。図11は、ループ融合により、2つのループ構造loop1およびloop2が1つのループ構造loop3に変形されることを表している。ループ構造loop1およびloop2は、繰返し数がM(Mは正の整数)で互いに等しい。また、前段のループ構造loop1で計算される配列要素Aは、後段のループ構造loop2で参照されていない。つまり、ループ構造loop1およびloop2に含まれる処理間には、依存関係がない。そこで、これらのループ構造loop1およびloop2は、それぞれの処理が含まれる1つのループ構造loop3に融合される。
一方、図12に示すような、繰返し数が異なる複数のループ構造は、ループ融合に適していない。ここで、ループ構造loop4の繰返し数Mは、ループ構造loop5の繰返し数Nより大きいとする(M、Nは、正の整数)。仮に、これらを1つのループ構造に融合したとする。この場合、融合されたループ構造が実行される際に、その時点までの繰返し数がNを超えると、配列要素XおよびYの添字がその取りうる範囲より大きくなり、実行に問題が生じる可能性がある。
このように、一般的なループ融合は、繰返し数が異なる複数のループ構造に適用できないという問題がある。
このような問題に関連する技術の一例が、特許文献1に記載されている。この関連技術は、異なる繰返し数の複数のループ構造について、繰返し数の最大公約数を求める。そして、この関連技術は、各ループ構造に対して、繰返し数が最大公約数となるようループアンローリングを行う。そして、この関連技術は、繰返し数が互いに等しくなった複数のループ構造をループ融合する。
特開平11−212799号公報
しかしながら、特許文献1に記載された関連技術には、以下の課題がある。
この関連技術は、異なる繰返し数の複数のループ構造であっても、それらの繰返し数の最大公約数が1である場合には適用することができない。また、この関連技術は、ループアンローリングに適していない処理を含むループ構造には、適用することができない。
本発明は、上述の課題を解決するためになされたものである。すなわち、本発明は、複数のループ構造の繰返し数が異なる場合であっても、より適切に最適化する技術を提供することを目的とする。
本発明の最適化装置は、ソースプログラムに含まれる任意の複数のループ構造が1つのループ構造に融合可能であるか否かを判断するループ解析部と、前記融合可能と判断された複数のループ構造を、前記複数のループ構造にそれぞれ指定された繰返し数のうち最大値を繰返し数(融合後繰返し数)とする1つのループ構造に融合するループ融合部と、前記融合されたループ構造において、融合前の前記複数のループ構造にそれぞれ含まれていた処理に基づく命令を生成する命令生成部と、前記融合されたループ構造において、融合前の前記複数のループ構造のうち繰返し数として前記融合後繰返し数より小さい値が指定されていたループ構造に含まれていた処理を、その時点までの繰返し数およびそのループ構造に指定されていた繰返し数に基づいて無効化する無効化情報を生成する無効化情報生成部と、を備える。
また、本発明の方法は、ソースプログラムに含まれる任意の複数のループ構造が1つのループ構造に融合可能であるか否かを判断し、前記融合可能と判断された複数のループ構造を、前記複数のループ構造にそれぞれ指定された繰返し数のうち最大値を繰返し数(融合後繰返し数)とする1つのループ構造に融合し、前記融合されたループ構造において、融合前の前記複数のループ構造にそれぞれ含まれていた処理に基づく命令を生成し、前記融合されたループ構造において、融合前の前記複数のループ構造のうち繰返し数として前記融合後繰返し数より小さい値が指定されていたループ構造に含まれていた処理を、その時点までの繰返し数およびそのループ構造に指定されていた繰返し数に基づいて無効化する無効化情報を生成する。
また、本発明のプログラムは、ソースプログラムに含まれる任意の複数のループ構造が1つのループ構造に融合可能であるか否かを判断するループ解析ステップと、前記融合可能と判断された複数のループ構造を、前記複数のループ構造にそれぞれ指定された繰返し数のうち最大値を繰返し数(融合後繰返し数)とする1つのループ構造に融合するループ融合ステップと、前記融合されたループ構造において、融合前の前記複数のループ構造にそれぞれ含まれていた処理に基づく命令を生成する命令生成ステップと、前記融合されたループ構造において、融合前の前記複数のループ構造のうち繰返し数として前記融合後繰返し数より小さい値が指定されていたループ構造に含まれていた処理を、その時点までの繰返し数およびそのループ構造に指定されていた繰返し数に基づいて無効化する無効化情報を生成する無効化情報生成ステップと、をコンピュータ装置に実行させる。
本発明は、複数のループ構造の繰返し数が異なる場合であっても、より適切に最適化する技術を提供することができる。
本発明の第1の実施の形態としての最適化装置の構成を示すブロック図である。 本発明の第1の実施の形態としての最適化装置のハードウェア構成の一例を示す図である。 本発明の第1の実施の形態としての最適化装置のループ融合動作を説明するフローチャートである。 本発明の第2の実施の形態としての最適化装置の構成を示すブロック図である。 SIMD命令を模式的に説明する図である。 本発明の第2の実施の形態において生成されるSIMD命令を模式的に説明する図である。 本発明の第2の実施の形態において生成されるSIMD命令のマスクを模式的に説明する図である。 本発明の第2の実施の形態としての最適化装置のループ融合動作を説明するフローチャートである。 本発明の第2の実施の形態としての最適化装置のループ融合動作の具体例を模式的に説明する図である。 右図は、本発明の第2の実施の形態においてループ融合されたループ構造における命令列を説明する図である。左図は、ループ融合しない場合のループ構造における命令列を説明する図である。 一般的なループ融合について説明する図である。 一般的なループ融合の適用が難しいケースについて説明する図である。
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
(第1の実施の形態)
本発明の第1の実施の形態としての最適化装置1の機能ブロック構成を図1に示す。図1において、最適化装置1は、ループ解析部11と、ループ融合部12と、命令生成部13と、無効化情報生成部14とを備える。
ここで、最適化装置1は、図2に示すようなハードウェア要素によって構成可能である。図2において、最適化装置1は、CPU(Central Processing Unit)1001、メモリ1002、出力装置1003および入力装置1004を含む。メモリ1002は、RAM(Random Access Memory)、ROM(Read Only Memory)、補助記憶装置(ハードディスク等)等によって構成される。出力装置1003は、ディスプレイ装置やプリンタ等のように、情報を出力する装置によって構成される。入力装置1004は、キーボードやマウス等のように、ユーザ操作の入力を受け付ける装置によって構成される。この場合、最適化装置1の各機能ブロックは、メモリ1002に格納されるコンピュータ・プログラムを読み込んで実行するとともに出力装置1003、入力装置1004の各部を制御するCPU1001によって構成される。なお、最適化装置1およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
次に、各機能ブロックの詳細について説明する。
ループ解析部11は、ソースプログラムに含まれる任意の複数のループ構造が1つのループ構造に融合可能であるか否かを判断する。例えば、ループ解析部11は、ソースプログラムに含まれる任意の複数のループ構造について、処理間に依存関係があるか否かを解析してもよい。そして、ループ解析部11は、依存関係がない場合に、それらのループ構造が融合可能であると判断してもよい。これは、依存関係がある場合、ループ融合を行うと結果の値が変わってしまうなどの可能性があるためである。具体的には、ループ解析部11は、連続または近接する2つ以上のループ構造について、前段のループ構造の計算結果を後段のループ構造で参照していない場合に、これらの処理の間には依存関係がなく、融合可能であると判断してもよい。
ループ融合部12は、融合可能と判断された複数のループ構造を、1つのループ構造に融合する。具体的には、ループ融合部12は、それらの複数のループ構造にそれぞれ指定された繰返し数のうち最大値を求める。そして、ループ融合部12は、その最大値を繰返し数(融合後繰返し数)とする1つのループ構造を生成すればよい。
命令生成部13は、融合されたループ構造において、融合前の複数のループ構造にそれぞれ含まれていた処理に基づく命令を生成する。なお、命令生成部13は、融合前の複数のループ構造にそれぞれ含まれていた処理を、個別のループ構造で処理するよりも効率的に処理する命令を生成することが望ましい。
無効化情報生成部14は、融合されたループ構造において、融合前の複数のループ構造のうち繰返し数が前述の融合後繰返し数より小さいループ構造に含まれていた処理を、所定条件に応じて無効化する無効化情報を生成する。ここで、所定条件とは、その時点までの繰返し数および融合前のそのループ構造に指定されていた繰返し数に基づく条件である。例えば、所定条件とは、その時点までの繰返し数が、融合後繰返し数より小さい繰返し数が指定されていた融合前のループ構造の繰返し数を超えることであってもよい。
なお、融合前の複数のループ構造にそれぞれ指定されていた繰返し数が等しい場合には、無効化情報生成部14は、無効化情報を生成しなくてよい。
以上のように構成された最適化装置1のループ融合動作について、図3を参照して説明する。ここでは、最適化装置1は、入力装置1004を介して入力される情報に基づいて、ソースプログラムが記述されたファイルをメモリ1002から読み込む。そして、最適化装置1は、読み込んだソースプログラムを中間コードに変換した上で、以下のループ融合動作を行うものとする。
まず、ループ解析部11は、ソースプログラムにおいて、任意の複数のループ構造を認識する(ステップS1)。
例えば、ループ解析部11は、連続または近接する2つのループ構造を認識してもよい。
次に、ループ解析部11は、ステップS1で認識された複数のループ構造が、1つのループ構造に融合可能であるか否かを判断する(ステップS2)。
ここで、ループ融合可能でないと判断された場合、最適化装置1は、ループ融合動作を終了する。
一方、ループ融合可能であると判断された場合、ループ融合部12は、それらの複数のループ構造にそれぞれ指定された繰返し数のうち最大値を融合後繰返し数とする。そして、ループ融合部12は、それらの複数のループ構造を、融合後繰返し数を繰返し数とする1つのループ構造に融合する(ステップS3)。
次に、命令生成部13は、融合されたループ構造において、融合前の複数のループ構造にそれぞれ含まれていた処理に基づく命令を生成する(ステップS4)。
次に、無効化情報生成部14は、融合されたループ構造において、融合前の複数のループ構造のうち繰返し数が融合後繰返し数より小さいループ構造に含まれていた処理を、所定条件に応じて無効化する無効化情報を生成する(ステップS5)。
前述のように、所定条件とは、その時点までの繰返し数が、融合後繰返し数より小さい繰返し数が指定されていた融合前のループ構造の繰返し数を超えることであってもよい。
以上で、最適化装置1は、ループ融合動作を終了する。
そして、最適化装置1は、ループ融合動作により融合されたループ構造を含む中間コードに基づいて、コンピュータ装置で実行可能なオブジェクトプログラムを生成し、メモリ1002や出力装置1003等に出力する。
次に、本発明の第1の実施の形態の効果について述べる。
本発明の第1の実施の形態としての最適化装置は、複数のループ構造の繰返し数が異なる場合であっても、より適切に最適化することができる。
その理由について説明する。本実施の形態では、ループ解析部が、ソースプログラムに含まれる任意の複数のループ構造について1つのループ構造に融合可能であるか否かを判断する。そして、ループ融合部が、融合可能と判断された複数のループ構造を、1つのループ構造に融合する。このとき、ループ融合部が、複数のループ構造に指定された繰返し数のうち最大値を繰返し数(融合後繰返し数)とする。そして、命令生成部が、融合されたループ構造において、複数のループ構造にそれぞれ含まれていた処理に基づく命令を生成する。そして、無効化情報生成部が、融合されたループ構造において、複数のループ構造のうち繰返し数として融合後繰返し数より小さい値が指定されていたループ構造に含まれていた処理を、所定条件に応じて無効化する無効化情報を生成するからである。このとき、無効化情報生成部は、所定条件として、その時点までの繰返し数、および、融合後繰返し数より小さい繰返し数が指定されていたループ構造の繰返し数に基づく条件を適用するからである。
これにより、本実施の形態は、異なる繰返し数のループ構造であってもループ融合を可能とする。そして、命令生成部が、複数のループ構造にそれぞれ含まれていた処理に基づいて、それらを個別のループ構造で処理するよりも効率的に処理する命令を生成することにより、本実施の形態は、ループ融合により最適化をより促進できる。
(第2の実施の形態)
次に、本発明の第2の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第1の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
まず、本発明の第2の実施の形態としての最適化装置2の構成を図4に示す。図4において、最適化装置2は、本発明の第1の実施の形態としての最適化装置1に対して、ループ解析部11に替えてループ解析部21と、命令生成部13に替えて命令生成部23と、無効化情報生成部14に替えて無効化情報生成部24を備える点が異なる。なお、最適化装置2およびその各機能ブロックは、図2を参照して説明した本発明の第1の実施の形態としての最適化装置1と同一のハードウェア要素によって構成可能である。ただし、最適化装置2およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
次に、各機能ブロックの詳細について説明する。
ループ解析部21は、ソースプログラムに含まれる任意の複数のループ構造が融合可能か否かを判断する条件の1つとして、任意の複数のループ構造にそれぞれ含まれる処理が、SIMD(single instruction multiple data)命令化可能であるか否かを判断する。
ここで、SMID命令について説明する。SMID命令とは、複数のデータに対する複数の処理を1つの命令で並列に行うものである。例えば、SIMD命令の一例を模式的に図5に示す。図5に示すSIMD命令は、1つのレジスタに複数のデータを格納し、一度の加算命令で、複数の加算を実行する。以降、1つのレジスタに複数のデータを格納することを、データを「パックする」とも呼ぶ。なお、図5では、1つのレジスタに格納された4つのデータを示しているが、本発明の最適化装置がパックするデータの数を限定するものではない。
データのパックの一例を図6に示す。図6では、レジスタが64ビット幅であることを想定している。この例では、1つのレジスタの上位32ビットおよび下位32ビットに、データがパックされる。また、図6では、SIMD命令は、パックされたデータが格納されたレジスタ1およびレジスタ2の上位同士および下位同士をそれぞれ演算し、レジスタ3の上位および下位にそれぞれ格納する。
例えば、ループ解析部21は、複数のループ構造にそれぞれ含まれる処理が、同一の演算形式であるか否かに基づいて、SIMD命令化可能であるか否かを判断してもよい。同一の演算形式であるとは、例えば、演算の対象となるデータ数やデータ型、演算内容が同一であることであってもよい。例えば、複数のループ構造に、それぞれ、2つの配列要素の加算結果を1つの配列要素に代入する処理が含まれ、それらの型が同一である場合、ループ解析部21は、それらの処理の演算形式は同一でありSIMD命令化可能であると判断してもよい。
このように、ループ解析部21は、任意の複数のループ構造にそれぞれ含まれる処理が、SIMD命令化可能であるか否かを条件の1つとして、それらがループ融合可能であるか否かを判断する。例えば、ループ解析部21は、ソースプログラムにおいて連続または近接する複数のループ構造を認識し、それらのループ構造に含まれる各処理がSIMD命令化可能であり、かつ、依存関係がない場合に、それらのループ構造が融合可能であると判断してもよい。
命令生成部23は、融合されたループ構造において、融合前の複数のループ構造のそれぞれに含まれていた処理に基づいて、SIMD命令を生成する。
無効化情報生成部24は、前述のSIMD命令において、融合前の複数のループ構造のうち繰返し数が融合後繰返し数より小さいループ構造に含まれていた処理を、所定条件に応じて無効化するマスクを設定する命令を、無効化情報として生成する。なお、本実施の形態で適用するSIMD命令は、演算対象を制御するマスクを指定可能であるものとする。また、所定条件とは、本発明の第1の実施の形態と同様に、その時点までの繰返し数、および、融合後繰返し数より小さい繰返し数が指定されていた融合前のループ構造の繰返し数に基づく条件である。
例えば、図6に示したように、SIMD命令が、2つのレジスタにそれぞれパックされたデータの上位同士および下位同士の加算を1つの命令で行うよう構成されていることを想定する。この場合、無効化情報生成部24は、上位同士および下位同士の演算をそれぞれ行うのか否かを指定するマスクを設定する命令を生成する。
マスクの一例を図7に示す。図7の例では、SIMD命令は、マスクの値が「10」のとき、上位同士を加算して下位同士を演算しないよう構成される。また、この場合、SIMD命令は、マスクの値が「01」のとき、下位同士を演算して上位同士を演算しないよう構成されていてもよい。また、SIMD命令は、マスクの値が「11」のとき、上位同士および下位同士ともに演算するよう構成されていてもよい。
つまり、無効化情報生成部24は、融合されたループ構造において、その時点までの繰返し数と、融合前の各ループ構造に指定されていた繰返し数とを比較し、比較結果に応じたマスクを設定する命令を生成すればよい。
以上のように構成された最適化装置2のループ融合動作を、図8を参照して説明する。本発明の第1の実施の形態と同様に、最適化装置2は、入力装置1004から入力される情報に基づいて、ソースプログラムが記述されたファイルをメモリ1002から読み込む。そして、最適化装置2は、読み込んだソースプログラムを中間コードに変換した上で、以下のループ融合動作を行う。
まず、ループ解析部21は、ソースプログラムにおいて、連続または近接する任意の複数のループ構造を認識する(ステップS21)。
次に、ループ解析部21は、ステップS21で認識された任意の複数のループ構造にそれぞれ含まれる処理が、SIMD命令化可能であるか否かを判断する(ステップS22)。
ここで、SIMD命令化可能でない場合、最適化装置2は、ループ融合動作を終了する。
一方、SIMD命令化可能である場合、ループ解析部21は、それらの複数のループ構造にそれぞれ含まれる処理間に、依存関係があるか否かを判断する(ステップS23)。
ここで、依存関係がある場合、最適化装置2は、ループ融合動作を終了する。
一方、依存関係がない場合、ループ解析部21は、それらの複数のループ構造が融合可能であると判断する。そして、ループ融合部12は、それらの複数のループ構造にそれぞれ指定された繰返し数のうち最大値を融合後繰返し数とする。そして、ループ融合部12は、それらの複数のループ構造を、融合後繰返し数を繰返し数とする1つのループ構造に融合する(ステップS24)。
次に、命令生成部23は、融合されたループ構造において、融合前の複数のループ構造にそれぞれ含まれていた処理に基づいて、SIMD命令を生成する(ステップS25)。
次に、無効化情報生成部24は、融合されたループ構造において、その時点までの繰返し数と、融合後繰返し数より小さい繰返し数が指定されていた融合前のループ構造の繰返し数とを比較し、比較結果に応じたマスクを設定する命令を生成する(ステップS26)。
具体的には、前述のように、無効化情報生成部24は、その時点までの繰返し数と、融合前の複数のループ構造に指定されていた繰返し数のうち融合後繰返し数より小さい繰返し数とを比較する命令を生成する。そして、無効化情報生成部24は、その時点までの繰返し数が該当する繰返し数を超えた場合に、融合前の該当するループ構造に含まれていた処理をSIMD命令で演算しないようにするマスクを生成する。
以上で、最適化装置2は、ループ融合動作を終了する。
そして、最適化装置2は、ループ融合動作により融合されたループ構造を含む中間コードに基づいて、コンピュータ装置で実行可能なオブジェクトプログラムを生成し、メモリ1002や出力装置1003等に出力する。
最適化装置2によるループ融合動作の具体例を、図9に模式的に示す。
この例では、ループ解析部21は、Fortranで記述されたソースプログラム中に、連続するループ構造91および92を認識したとする(ステップS21)。
ここで、A、B、および、Cは、大きさMの配列を示す。また、X、Y、および、Zは、大きさNの配列を示す。また、MおよびNは共に1以上の整数である。
次に、ループ解析部21は、ループ構造91に含まれる処理「A(I)=B(I)+C(I)」と、ループ構造92に含まれる処理「X(I)=Y(I)+Z(I)」とは、演算形式が同一でありSMID命令化可能であると判断する(ステップS22でYes)。
次に、ループ解析部21は、前段のループ構造91の処理で算出されるA(I)が後段のループ構造92で参照されていないので、これらの処理間に依存関係がないと判断する(ステップS23でNo)。
そこで、ループ解析部21は、これらのループ構造91および92が融合可能であると判断する。
次に、ループ融合部12は、ループ構造91および92を、それらの繰返し数MおよびNのうち大きい方MAX(M,N)を融合後繰返し数として、ループ構造93に融合する(ステップS24)。
次に、命令生成部23は、ループ構造93内に、ループ構造91および92に含まれる処理に基づいて、SIMD命令「A(I):X(I)=B(I):Y(I)+C(I):Z(I)」を生成する(ステップS25)。ここでは、「A:X」は、上位32ビットにA、下位32ビットにXの値を持つようパックされたデータを表すものとする。つまり、この例では、64ビット幅のレジスタ1〜3のそれぞれにおいて、上位32ビットにループ構造91の処理に関わるデータが格納され、下位32ビットにループ構造92の処理に関わるデータが格納されるものとする。
次に、無効化情報生成部24は、ループ構造93において、その時点までの繰返し数Iと、融合前のループ構造91および92のうち融合後繰返し数より小さい繰返し数MIN(M,N)とを比較する命令を生成する。そして、無効化情報生成部24は、繰返し数IがMIN(M,N)を超えた場合に、MがNより大きかった場合には、マスクとして、ループ構造92の処理を無効化する「10」を設定する命令を生成する。また、無効化情報生成部24は、繰返し数IがMIN(M,N)を超えた場合に、NがMより大きかった場合には、マスクとして、ループ構造91の処理を無効化する「01」を設定する命令を生成する。
以上で、具体例の説明を終了する。
次に、図9に示した具体例についてループ融合を行った場合と、行わない場合とについて、最適化装置2によって生成される命令列の比較を図10に示す。
なお、図10では、ループの開始、終了処理といったループの繰返し制御のための命令列、マスクを設定する命令列、および、ループ融合の有無に関わらず共通であるアドレス計算処理のために生成される命令列の図示を省略している。
図10において、命令列901は、ループ融合を行わない場合に生成される命令列を表す。また、命令列902は、ループ融合を行った場合に生成される命令列を表している。これらの命令列の命令コストを比較する。なお、図10において、「LD」、「LDU」および「LDL」は、それぞれ、ロード命令、上位32ビットロード命令、および下位32ビットロード命令を表す。また、「ST」、「STU」および「STL」は、それぞれ、ストア命令、上位32ビットストア命令および下位32ビットストア命令を表す。また、「ADD」および「SADD」は、それぞれ、加算命令およびADDのSIMD命令を表す。また、「OR」は、上位32ビットおよび下位32ビットをまとめる命令を表す。
<ループ融合を行わない場合>
命令列901の命令コストは、次式(1)で表される。
(LD+LD+ADD+ST)×(M+N)・・・(1)
なお、式(1)において、「LD」、「ADD」および「ST」は、それぞれ、その名称の命令に係るコストを表すものとする。
その他、ループ融合を行わない場合、ループ構造91および92についてそれぞれ繰返し制御のための命令列(加算、比較、分岐)が必要となる。
<ループ融合を行う場合>
命令列902の命令コストは、次式(2)で表される。
(LDU+LDL+OR+LDU+LDL+OR+SADD+STU+STL)×M・・・(2)
なお、式(2)において、「LDU」、「LDL」、「OR」、「SADD」、「STU」および「STL」は、それぞれ、その名称の命令に係るコストを表すものとする。
その他、ループ融合を行う場合、ループ構造93について繰返し制御のための命令列(加算、比較、分岐)が必要となる。つまり、ループ融合を行う場合、ループ構造1つ分について繰返し制御のための命令列(加算、比較、分岐)が軽減される。しかしながら、ループ融合を行う場合、ループ中でマスクを切り替える処理(比較、分岐、代入)が入る。このため、繰返し制御の減少によるコストの低減は相殺される。つまり、ループ融合を行う場合の命令コストは、行わない場合に対して、式(1)から式(2)を引いた差が0より大きければ、その分だけ低減すると考えることができる。
ここで、LD=LDU=LDL、ST=STU=STL、ADD=SADDとすると、式(1)から式(2)を引いた命令コストの差は、次式(3)で表される。
(LD×2+ST)×(N−M)+ADD×N−OR×M×2・・・(3)。
式(3)において、NがMに近い値であれば、命令コストの差は、次式(4)に近づく。
ADD−OR×2・・・(4)
なお、ループ中の演算が加算でない場合、式(4)における第1項を、他の演算命令のコストに置き換えればよい。いずれにしても、式(4)における第1項の大きさは、ループ中で扱われるデータの種類によっても変わるが、浮動小数点演算のように演算に必要なクロック数が大きい場合、第2項より大きくなると考えられる。したがって、式(4)で表される命令コスト差は、0より大きくなる。つまり、本実施の形態のループ融合によって、命令コストの削減が実現されたことになる。
次に、本発明の第2の実施の形態の効果について述べる。
本発明の第2の実施の形態としての最適化装置は、複数のループ構造の繰返し数が異なる場合であっても、より適切にループ融合して命令コストを削減することができる。
その理由について説明する。本実施の形態は、本発明の第1の実施の形態と同様の構成に加えて、次のように構成されるからである。すなわち、ループ解析部が、ソースプログラムに含まれる任意の複数のループ構造に含まれる各処理がSIMD命令化可能であるか否かを条件の1つとして、それらがループ融合可能であるか否かを判断する。そして、命令生成部が、融合されたループ構造において、融合前の複数のループ構造にそれぞれ含まれていた処理に基づくSIMD命令を生成する。そして、無効化情報生成部が、融合されたループ構造において、その時点までの繰返し数が、融合後繰返し数より小さい繰返し数が指定されていた融合前のループ構造の繰返し数を超えた場合に、SIMD命令のマスクを設定する命令を生成する。そのマスクは、融合後繰返し数より小さい繰返し数が指定されていた融合前のループ構造に含まれていた処理を演算しないよう制御する値に設定されるからである。
このように、本実施の形態は、複数のループ構造の繰返し数が異なる場合であっても、各ループ構造で処理されるデータをパックしてSIMD命令を生成し、SIMD命令の演算対象を制御するマスクを設定する命令を生成することで、ループ融合を可能とする。
その結果、本実施の形態は、マスク制御機能付きのSIMD命令をもつプロセッサに実行させるオブジェクトプログラムにおいて、ループ構造により処理される命令コストをより削減することができ、プログラムの高速化に寄与する。
なお、本実施の形態において、2つのループ構造を融合する例を中心に説明したが、本発明において融合されるループ構造の数を限定するものではない。
また、本実施の形態において、ループ解析部は、SIMD命令化可能であるか否か、および、処理間に依存関係があるか否か等に基づいて、ループ融合可能であるか否かを判断する例について説明した。これらの条件だけに限らず、ループ解析部は、その他の条件も含めてループ融合可能であるか否かを判断してもよい。
また、本実施の形態において、SIMD命令化する処理が加算である例を中心に説明したが、本実施の形態においてSIMD命令化する処理の演算内容を限定するものではない。
また、本実施の形態として、命令生成部が生成する命令がSIMD命令である例について説明した。これに限らず、命令生成部は、融合前の各ループ構造に含まれていた処理に基づく他の命令を生成してもよい。前述のように、この場合、生成する命令は、個々のループ構造で個別に処理するよりも命令コストを削減する命令であることが望ましい。
また、上述した本発明の各実施の形態において、最適化装置の各機能ブロックが、記憶装置またはROMに記憶されたコンピュータ・プログラムを実行するCPUによって実現される例を中心に説明した。これに限らず、各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明した最適化装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置(記憶媒体)に格納しておく。そして、係るコンピュータ・プログラムを当該CPUが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
1、2 最適化装置
11、21 ループ解析部
12 ループ融合部
13、23 命令生成部
14、24 無効化情報生成部
91、92、93 ループ構造
901、902 命令列
1001 CPU
1002 メモリ
1003 出力装置
1004 入力装置

Claims (6)

  1. ソースプログラムに含まれる任意の複数のループ構造が1つのループ構造に融合可能であるか否かを判断するループ解析部と、
    前記融合可能と判断された複数のループ構造を、前記複数のループ構造にそれぞれ指定された繰返し数のうち最大値を繰返し数(融合後繰返し数)とする1つのループ構造に融合するループ融合部と、
    前記融合されたループ構造において、融合前の前記複数のループ構造にそれぞれ含まれていた処理に基づく命令を生成する命令生成部と、
    前記融合されたループ構造において、融合前の前記複数のループ構造のうち繰返し数として前記融合後繰返し数より小さい値が指定されていたループ構造に含まれていた処理を、その時点までの繰返し数およびそのループ構造に指定されていた繰返し数に基づいて無効化する無効化情報を生成する無効化情報生成部と、
    を備えた最適化装置。
  2. 前記命令生成部は、融合前の前記複数のループ構造にそれぞれに含まれていた処理に基づく前記命令として、SIMD(single instruction multiple data)命令を生成し、
    前記無効化情報生成部は、前記無効化情報として、前記SIMD命令の演算対象を制御するマスクを設定する命令を生成することを特徴とする請求項1に記載の最適化装置。
  3. ソースプログラムに含まれる任意の複数のループ構造が1つのループ構造に融合可能であるか否かを判断し、
    前記融合可能と判断された複数のループ構造を、前記複数のループ構造にそれぞれ指定された繰返し数のうち最大値を繰返し数(融合後繰返し数)とする1つのループ構造に融合し、
    前記融合されたループ構造において、融合前の前記複数のループ構造にそれぞれ含まれていた処理に基づく命令を生成し、
    前記融合されたループ構造において、融合前の前記複数のループ構造のうち繰返し数として前記融合後繰返し数より小さい値が指定されていたループ構造に含まれていた処理を、その時点までの繰返し数およびそのループ構造に指定されていた繰返し数に基づいて無効化する無効化情報を生成する方法。
  4. 前記融合されたループ構造において、融合前の前記複数のループ構造にそれぞれに含まれていた処理に基づく前記命令として、SIMD命令を生成し、
    前記融合されたループ構造において、前記無効化情報として、前記SIMD命令の演算対象を制御するマスクを設定する命令を生成することを特徴とする請求項3に記載の方法。
  5. ソースプログラムに含まれる任意の複数のループ構造が1つのループ構造に融合可能であるか否かを判断するループ解析ステップと、
    前記融合可能と判断された複数のループ構造を、前記複数のループ構造にそれぞれ指定された繰返し数のうち最大値を繰返し数(融合後繰返し数)とする1つのループ構造に融合するループ融合ステップと、
    前記融合されたループ構造において、融合前の前記複数のループ構造にそれぞれ含まれていた処理に基づく命令を生成する命令生成ステップと、
    前記融合されたループ構造において、融合前の前記複数のループ構造のうち繰返し数として前記融合後繰返し数より小さい値が指定されていたループ構造に含まれていた処理を、その時点までの繰返し数およびそのループ構造に指定されていた繰返し数に基づいて無効化する無効化情報を生成する無効化情報生成ステップと、
    をコンピュータ装置に実行させるプログラム。
  6. 前記命令生成ステップにおいて、融合前の前記複数のループ構造にそれぞれに含まれていた処理に基づく前記命令として、SIMD(single instruction multiple data)命令を生成し、
    前記無効化情報生成ステップにおいて、前記無効化情報として、前記SIMD命令の演算対象を制御するマスクを設定する命令を生成することを特徴とする請求項5に記載のプログラム。
JP2015163396A 2015-08-21 2015-08-21 最適化装置、方法およびプログラム Active JP6555005B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2015163396A JP6555005B2 (ja) 2015-08-21 2015-08-21 最適化装置、方法およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015163396A JP6555005B2 (ja) 2015-08-21 2015-08-21 最適化装置、方法およびプログラム

Publications (2)

Publication Number Publication Date
JP2017041162A JP2017041162A (ja) 2017-02-23
JP6555005B2 true JP6555005B2 (ja) 2019-08-07

Family

ID=58206620

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015163396A Active JP6555005B2 (ja) 2015-08-21 2015-08-21 最適化装置、方法およびプログラム

Country Status (1)

Country Link
JP (1) JP6555005B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111325243B (zh) * 2020-02-03 2023-06-16 天津大学 一种基于区域注意力学习机制的视觉关系检测方法

Also Published As

Publication number Publication date
JP2017041162A (ja) 2017-02-23

Similar Documents

Publication Publication Date Title
US9383999B2 (en) Conditional compare instruction
JP2004038225A (ja) コンパイラプログラムおよびコンパイル処理方法
Grippo et al. A class of derivative-free nonmonotone optimization algorithms employing coordinate rotations and gradient approximations
JP6666554B2 (ja) 情報処理装置、変換プログラム、及び変換方法
KR20180035211A (ko) 벡터 산술 명령
JP6555005B2 (ja) 最適化装置、方法およびプログラム
JP2018521422A (ja) ベクトル長クエリ命令
KR20200094771A (ko) 벡터 자리올림이 있는 가산 명령
JP2020527797A (ja) データ処理装置におけるベクトル・インタリーブ
JP6547466B2 (ja) コンパイラ装置、コンパイル方法およびコンパイラプログラム
JP2008015589A (ja) Vliw型プロセッサおよび命令発行方法
JP6175306B2 (ja) 制御プログラム分割装置、制御プログラム分割方法及びその記録媒体
JP2019185486A (ja) コード変換装置、コード変換方法、及びコード変換プログラム
WO2020116025A1 (ja) コンパイル装置、コンパイル方法、及び非一時的なコンピュータ可読媒体
KR20150105209A (ko) 데이터 처리장치 및 벡터 스캔 연산의 수행방법
JP5215813B2 (ja) プログラム変換方法及びプログラム変換装置
JP6974722B2 (ja) コンパイラプログラム、コンパイル方法及びコンパイルする情報処理装置
JP2013182420A (ja) ベクトル処理装置およびベクトル処理方法
US10572233B2 (en) Vectorization device, vectorization method, and recording medium on which vectorization program is stored
US20230342117A1 (en) Program generation apparatus, program generation method and program
JP2018049461A (ja) コンパイル装置、コンパイル方法、および、コンパイルプログラム
Singh et al. Optimization Techniques in C â [euro]" A Survey
JP2009076002A (ja) 制御タイミング調整方法、コンパイルプログラム、コンパイル装置、及び情報処理装置
JP5304307B2 (ja) ソートキー比較コード生成装置、ソート処理装置及びソートキー比較コード生成方法
JP2009211491A (ja) プログラム作成方法およびその装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180713

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190522

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190624

R150 Certificate of patent or registration of utility model

Ref document number: 6555005

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150