(57)【要約】【課題】  様々な最適化方式を追加可能なソースコードの最適化システムを提供する。【解決手段】  入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する。対象ソースに対してテンプレートを適用することにより、対象ソースを最適化したソースコードである最適化ソースを生成する。【選択図】  図１
2019139675.tif 000002
【特許請求の範囲】
【請求項１】
入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する、テンプレート生成手段と、
対象ソースに対して前記テンプレートを適用することにより、前記対象ソースを最適化したソースコードである最適化ソースを生成する、ソースコード最適化手段と
を備える、ソースコード最適化システム。
【請求項２】
前記テンプレート生成手段は、前記見本ソースに含まれるコメントに基づいて、一般化表現に置換すべきコードを選択する、請求項１に記載のソースコード最適化システム。
【請求項３】
前記ソースコード最適化手段は、前記対象ソースに含まれるプラグマに基づいて、予め生成した複数の前記テンプレートの中から、前記対象ソースに適用すべき１つのテンプレートを選択する、請求項１または請求項２に記載のソースコード最適化システム。
【請求項４】
前記ソースコード最適化手段は、テンプレートの適用に関してテンプレート毎に予め定められた条件に基づいて、予め生成した複数の前記テンプレートの中から、前記対象ソースに適用すべき１つのテンプレートを選択する、請求項１乃至請求項３のいずれかに記載のソースコード最適化システム。
【請求項５】
前記ソースコード最適化手段は、テンプレート毎に予め定められた優先度に基づいて、予め生成した複数の前記テンプレートの中から、前記対象ソースに適用すべき１つのテンプレートを選択する、請求項１乃至請求項４のいずれかに記載のソースコード最適化システム。
【請求項６】
前記テンプレート生成手段は、前記見本ソースからループ構造を検出し、該検出したループ構造を一般化表現に変換し、該変換したループ構造を含む前記テンプレートを生成する、請求項１乃至請求項５のいずれかに記載のソースコード最適化システム。
【請求項７】
請求項１乃至請求項６のいずれかに記載のソースコード最適化システムの前記テンプレート生成手段として動作する装置である、テンプレート生成装置。
【請求項８】
請求項１乃至請求項６のいずれかに記載のソースコード最適化システムの前記ソースコード最適化手段として動作する装置である、ソースコード最適化装置。
【請求項９】
入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する、テンプレート生成手段と、
対象ソースに対して前記テンプレートを適用することにより、前記対象ソースを最適化したソースコードである最適化ソースを生成する、ソースコード最適化手段と
のうち、少なくとも一方としてコンピュータを動作させるプログラム。
【請求項１０】
情報処理装置によって、入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する、テンプレート生成段階と、
情報処理装置によって、対象ソースに対して前記テンプレートを適用することにより、前記対象ソースを最適化したソースコードである最適化ソースを生成する、ソースコード最適化段階と
を含むソースコード最適化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はソースコードの最適化に関する。
【背景技術】
【０００２】
一般にソースコードの最適化は次のように行われる。ソースコードの最適化を行う者（以下、「最適化実施者」と呼ぶ）は、プログラム全体を理解した上で、ソースコードの各部分の処理内容を把握する（ソース理解）。次に、最適化実施者は、ソースコードに最適化方式を適用する。最終的に、最適化実施者は、ソースコード内の処理に対して、複数の最適化方式のうち好適なものをその処理に適用して、プログラムを書き換える（最適化適用）。
【０００３】
この技術分野において周知のように、コンパイラは、高水準言語で書かれたプログラム（すなわち、ソースコード）を入力し、アセンブリ言語または機械言語のプログラム（すなわち、マシンコード）を出力するトランスレータである。このようなコンパイラの中で、上述したソースコードの最適化を人の手によらず自動的に行うコンパイラが存在する。この種のコンパイラが行う最適化適用では、そのコンパイラの開発者が、そのコンパイラに組み込んだ最適化方式のみが適用される。このため、ソースコードに対して適用される最適化方式が限定される。
【０００４】
また、この種のコンパイラが行うソース理解、即ち、ソースコードの自動解析では、現在のところ複雑なソースコードを解析することができない。
【０００５】
ソースコードの最適化に関し、特許文献１には、コード記憶部にプログラムコードのテンプレートが記憶される旨（第００８５段落）が記載されている。また、特許文献１には、コード生成処理部は、特定条件の成立頻度に応じて、コード記憶部に記憶されたテンプレートを読み出して、その読み出したテンプレートに基づき、プログラムコードを生成する旨（第０１３１段落）も記載されている。
【０００６】
特許文献２には、置換先命令テンプレートの一例（第００２２段落）が記載されている。また、特許文献２には、命令列置換部は、置換対象パターンにおける変数ｖ０に対応する変数に置換すること、命令列置換部は、対象部分プログラム内の、メモリ内のデータが定数値に一致した場合に実行される命令列によって、置換先命令テンプレート内の一部の行を置換する旨（第００２３段落）も記載されている。
【０００７】
しかしながら、特許文献１、２は、ソースコードのテンプレートをどのようにして構築するかについては詳しく説明していない。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００８−００９８６９号公報
【特許文献２】特開２００８−０９７２４９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明はこのような状況を鑑みてなされたものであり、本発明が解決しようとする課題は、様々な最適化方式を追加可能なソースコードの最適化システムを提供することである。
【課題を解決するための手段】
【００１０】
上述の課題を解決するため、本発明は、その一態様として、入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する、テンプレート生成手段と、対象ソースに対して前記テンプレートを適用することにより、前記対象ソースを最適化したソースコードである最適化ソースを生成する、ソースコード最適化手段とを備える、ソースコード最適化システムを提供する。
【００１１】
また、本発明は、他の一態様として、入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する、テンプレート生成手段と、対象ソースに対して前記テンプレートを適用することにより、前記対象ソースを最適化したソースコードである最適化ソースを生成する、ソースコード最適化手段とのうち、少なくとも一方としてコンピュータを動作させるプログラムを提供する。
【００１２】
さらに、係るプログラムを記録するコンピュータが読み取り可能な記録媒体によっても実現される。
【００１３】
また、本発明は、他の一態様として、情報処理装置によって、入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する、テンプレート生成段階と、情報処理装置によって、対象ソースに対して前記テンプレートを適用することにより、前記対象ソースを最適化したソースコードである最適化ソースを生成する、ソースコード最適化段階とを含むソースコード最適化方法を提供する。
【発明の効果】
【００１４】
本発明によれば、様々な最適化方式を追加可能なソースコードの最適化システムを提供することができる。
【図面の簡単な説明】
【００１５】
【図１】本発明の第１の実施の形態であるソースコード最適化システムのブロック図である。
【図２】専門家が作成し、テンプレート化コンパイラに入力される見本ソースの一例である。
【図３】テンプレート生成コンパイラが出力するテンプレートの一例である。
【図４】一般ユーザが作成し、ソースコードコンパイラに入力される対象ソースの一例である。
【図５】ソースコード最適化ツールが出力する最適化ソースの一例の一部を抜粋したものである。
【図６】YAMLで記述した優先度ファイルの一例について説明するための図である。
【図７】テンプレートデータベースを構築する際のソースコード最適化システムの動作について説明するためのフローチャートである。
【図８】対象ソースを作成する際のソースコード最適化システムの動作について説明するためのフローチャートである。
【図９】対象ソースから最適化ソースを生成する際のソースコード最適化システムの動作について説明するためのフローチャートである。
【図１０】本発明の第２の実施の形態であるソースコード最適化システムのブロック図である。
【図１１】本発明の第２の実施の形態であるソースコード最適化システムのテンプレート生成部のブロック図である。
【図１２】本発明の第２の実施の形態であるソースコード最適化システムのソースコード最適化部のブロック図である。
【発明を実施するための形態】
【００１６】
（第１の実施の形態）
本発明の第１の実施の形態である、ソースコード最適化システム１について説明する。図１を参照すると、ソースコード最適化システム１は、コレクティブコンパイラ２、テンプレートデータベース（以下ＴＤＢとも記す）３を備える。コレクティブコンパイラ２、ＴＤＢ３は、いずれも、ひとつ或いは複数のコンピュータと、これらコンピュータ上で実行されるプログラムからなる。コンピュータとしては例えばデスクトップコンピュータ、ラップトップコンピュータ、ワークステーションが考えられるが、特に種類を問わない。また、コレクティブコンパイラ２、ＴＤＢ３を同一のコンピュータ上で実行することとしてもよい。コンピュータは適当なオペレーティングシステム（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ，ＯＳ）を実行する。コンピュータは、そのＯＳ上で、コレクティブコンパイラ２、ＴＤＢ３としてコンピュータを機能させるプログラムを実行する。
【００１７】
コレクティブコンパイラ２は、テンプレート化コンパイラ４、ソースコードコンパイラ５からなる。ソースコードコンパイラ５は、プラグマ情報抜出ツール６、およびソースコード最適化ツール７からなる。
【００１８】
テンプレート化コンパイラ４は、見本ソース８の入力を受け付けて、見本ソース８からテンプレート９を生成する。テンプレート化コンパイラ４は生成したテンプレート９をＴＤＢ３に格納する。
【００１９】
プログラムを高速化する手法に長けた者（以下、「専門家」と記す）が見本ソースコードを作成する。その際、専門家は、様々な最適化方式の中から適切な最適化方式を選択して、見本ソースコードに採用する。ここで専門家が作成した見本ソースコードを見本ソース８と呼ぶ。見本ソース８それ自体は、最適化がなされている点を除いて、一般的なソースコードと同じである。専門家は特定のパラメータを用いて見本ソース８を作成する。
【００２０】
テンプレート化コンパイラ４は、見本ソース８に記述されている特定のパラメータを、一般化したパラメータに置換することにより、テンプレート９を生成する。例えば、テンプレート化コンパイラ４は、図２の見本ソース８から図３のテンプレート９を生成する。図２、図３において、枠線の左側に並ぶ数字は行数を表している。
【００２１】
テンプレート９の生成は次のように行う。まず、テンプレート化コンパイラ４は見本ソース８に含まれるデータ型の宣言を一般化表現に置換する。図２の見本ソース８は、その冒頭で、uint8_t型のポインタ型変数*p、float型の変数norm, s, t、int型の変数lenを宣言している。これらの宣言のうち、変数型の宣言を示す、uint8_t、float、intを、図３のテンプレート９ではそれぞれ順に、一般化表現である$T0、$T1、$T2に置換している。
【００２２】
また、テンプレート化コンパイラ４は、見本ソース８に含まれる変数を一般化表現に置換する。図３のテンプレート９では、変数名を示す、*p、norm、lenを、それぞれ順に、一般化表現である$V0、$V1、$V2に変換している。図３のテンプレート９において、文字$は、文字$で始まる文字列が、特定のパラメータを一般化表現したものであることを示す。
【００２３】
更に、テンプレート化コンパイラ４は、見本ソース８を解析してループ構造を検出する。テンプレート化コンパイラ４は、検出したループ構造を一般化表現に変換し、変換したループ構造もテンプレート９に記述する。
【００２４】
図２の見本ソース８の第４−８行には、２段階にアンローリングしたループが記述されている。テンプレート化コンパイラ４は、見本ソース８を解析してこのループ構造を検出する。次に、テンプレート化コンパイラ４は、検出したループ構造の一般化表現を求める。図３のテンプレート９では、第４−８行にループの一般化表現が記述されている。図３のテンプレート９では、第５行の記載”%for”は、$Ｎを指定することにより、ループをアンローリングする段数を任意に変更可能であることを示している。
【００２５】
このように、見本ソース８のループ構造を一般化表現に変換してテンプレート９を生成することにより、同じループ構造を見本ソース８とは異なるアンローリング段数で最適化ソース１１に記述することができる。
【００２６】
ＴＤＢ３は、テンプレート化コンパイラ４から入力されたテンプレート９を格納するデータベースである。後述するように、ソースコードコンパイラ５によって対象ソース１０を最適化する。その前に、テンプレート化コンパイラ４によるテンプレート９の作成を行い、十分な種類のテンプレート９をＴＤＢ３に格納しておく。
【００２７】
ＴＤＢ３は、テンプレート９そのもの、そのテンプレート９のテンプレート種別、テンプレート名、ターゲットプロセッサ毎の優先度、テンプレート条件を関連付けて格納する。
【００２８】
テンプレート種別は、同種のテンプレート９をまとめたテンプレートのグループに対して予め付与される識別子である。例えば、様々なタイプの画像フィルタをまとめてひとつのテンプレート種別としてカテゴライズする。ひとつのテンプレート種別は一乃至複数のテンプレートを含む。テンプレート種別とテンプレート名とを組み合わせたものがひとつのテンプレートを指定するテンプレート指定となる。
【００２９】
優先度については、専門家がプロセッサ毎に定めることとしてもよい。または、優先度については、そのテンプレート９に基づいてオブジェクトコードを生成し、そのオブジェクトコードをプロセッサで実行したときの実行時間、或いは、その実行時間に基づいて定められる値を、そのプロセッサの優先度として定めることとしてもよい。後述するテンプレート選択では、小さい優先度を有するテンプレート９ほど優先的に選択される。
【００３０】
テンプレート条件は、対象ソース１０へのテンプレート９の適用に関連する条件である。例えば、テンプレート９が画像フィルタの場合、対称フィルタであることを条件として指定することが考えられる。対象ソース１０のプラグマ情報において、テンプレート条件として対称フィルタを指定したとする。このとき、ソースコード最適化ツール７は、ＴＤＢ３において、テンプレート条件として対称フィルタが関連付けられているテンプレートを、その対象ソース１０に適用するテンプレートの候補とする（後述する図９、ステップＳ２６を参照）。テンプレート条件を満たさないテンプレートについては、対象ソース１０に適用するテンプレートの候補から外す。
【００３１】
ここで、ソースコード最適化システム１を用いて最適化対象ソースコードの最適化を行う者を一般ユーザと呼ぶものとする。専門家と異なり、一般ユーザは通常の技量を有する者であれば十分である。対象ソース１０は一般ユーザが作成した最適化対象ソースコードである。一般ユーザは対象ソース１０をソースコードコンパイラ５に入力する。
【００３２】
上述のように、ソースコードコンパイラ５は、プラグマ情報抜出ツール６、ソースコード最適化ツール７を備える。ソースコードコンパイラ５に対象ソース１０を入力すると、プラグマ情報抜出ツール６は対象ソース１０からプラグマ情報を抜き出す。ソースコード最適化ツール７は、プラグマ情報抜出ツール６が抜き出したプラグマ情報、対象ソース１０に基づいて、最適化ソース１１を生成し、出力する。ここで、ソースコードコンパイラ５について説明する前に、対象ソース１０について説明する。
【００３３】
対象ソース１０の例を図４に示す。対象ソース１０は、ソースコードコンパイラ５に向けた記述１０Ａと、ソースコードコンパイラ５以外の通常のコンパイラにおいてコンパイルの対象となる、括弧１０Ｂ、１０Ｃで囲まれた記述とを含む。
【００３４】
ソースコード最適化システム１による最適化を希望するとき、一般ユーザは、対象ソース１０に図４、記述１０Ａのような記述を加える。記述１０Ａは、対象ソース１０を最適化する際に用いるテンプレート種別と、テンプレート中の一般化表現を置き換える特定表現をソースコードコンパイラ5に通知するための記述である。
【００３５】
図４の記述１０Ａでは、テンプレートを対象ソース１０に適用したとき、テンプレートで一般化表現した変数に対して当てはめるべき変数として、src(p, w, h), dst(q), kernel(k, ks)が記述されている。このように、一般ユーザは、一般化表現を置換するための特定表現を対象ソース１０に記述する。記述１０Ａでは、src(p, w, h), dst(q), kernel(k, ks)が特定表現に当たる。
【００３６】
記述１０Ａの文字列”filter2d”は、対象ソース１０を最適化する際に適用するテンプレート種別を指定している。また、テンプレート種別に続いて、特定表現src(p, w, h), dst(q), kernel(k, ks)を指定している。
【００３７】
テンプレート種別は同じ引数を用いるテンプレートの集合である。図４、記述１０Ａの汎用画像フィルタのテンプレート種別”filter2d”は、例えば以下のようなテンプレートを含む。 
・x方向のみをブロッキングする汎用画像フィルタ
・x,y方向をブロッキングする汎用画像フィルタ
・対称カーネルの場合に、x,y方向を分離してフィルタをかける汎用画像フィルタ
・カーネルサイズが定数の場合に、アンローリングしてループを削除した汎用画像フィルタ
【００３８】
後述するように、一般ユーザは、対象ソース１０を作成する際、TDB３に格納されているテンプレートのカタログを参照する。一般ユーザは、対象ソース１０の最適化に用いるテンプレート種別をカタログから選択し、対象ソース１０に記述する。テンプレート種別は同じ引数を用いるテンプレートの集合である。また、一般ユーザは、引数として用いる変数を対象ソース１０に記述する。
【００３９】
ソースコードコンパイラ５は、対象ソース１０に記述されたテンプレート種別の中からテンプレートをひとつ選択し、対象ソース１０に記述された変数を、選択したテンプレートの引数として用いて、対象ソース１０の一部を書き換えた最適化ソース１１を生成する。
【００４０】
図４の対象ソース１０では、テンプレート種別として汎用画像フィルタ”filter2d”が記述されている。テンプレート種別”filter2d”の引数は、汎用画像フィルタへの入力データ、出力データ、カーネル（フィルタ）、対称性、エラー時の戻り値である。括弧（）内において必須とあるのは必須の引数であり、オプションとあるのは省略可能な引数である。
【００４１】
（入力データ、必須）
src(p, w, h, s)
p: 画像データへのポインタ
w, h, s: 画像データの幅(width),高さ(height), ストライド(stride)。strideは省略可能であり、省略時はwを用いる。
【００４２】
（出力データ、必須）
dst(p, w, h, s)
p, w, h, sはsrcと同様である。w, h, sは省略可能であり、省略時はそれぞれsrcの対応する変数を用いる。尚、w, hをsrcと異なる変数を指定したときの動作は不定である。
【００４３】
（カーネル、必須）
kernel(p, w, h, s)
p, w, h, sはsrcと同様である。h, sは省略可能であり、省略時はwを用いる。
【００４４】
（対称性、オプション）
symmetric
kernelが対称であることを指定するテンプレート条件である。例えばカーネルがGaussian filterの場合に指定する。
【００４５】
（エラー時の戻り値、オプション）
error_return(code)
テンプレート種別”filter2d”から選ばれたテンプレートによって置換された部分でエラーが発生したときにreturn code; が実行される。指定しなかった場合は return; が実行される。
【００４６】
図４の対象ソース１０では、filter2dの引数として、src(p, w, h), dst(q), kernel(k, ks), error_return(1)を指定している。
【００４７】
src(p, w, h)は、入力データに関し、画像データへのポインタとして変数pを用い、幅として変数wを用い、高さとして変数hを用いることを指定している。ストライドは省略したため、変数wを用いる。
【００４８】
dst(q)は、出力データに関し、画像データへのポインタとして変数qを用いることを指定している。尚、出力データに関する幅、高さ、ストライドは省略したため、入力データの幅w、高さhを用いる。ストライドは変数wを用いる。
【００４９】
kernel(k, ks)は、カーネルに関し、画像データへのポインタとして変数kを用い、幅として変数ksを用いる。高さとストライドは指定していないので、幅に対応する変数ksを用いる。
【００５０】
カーネルが対称であると指定していないので、引数symmetricを指定していない。
【００５１】
error_return(1)はエラー時の戻り値を1とすることを指定している。
【００５２】
ここでソースコードコンパイラ５の説明に戻る。ソースコードコンパイラ５は、例えば、コマンドラインプログラムとして実行されたソースコード最適化ツール７と、ソースコード最適化ツール７から呼び出される別のコマンドラインプログラムであるプラグマ情報抜出ツール６として実行される。
【００５３】
記述１１Ｂの”//begin-coco”は記述１１Ｅの”//end-coco”と対になるコメントである。記述１１Ｂ、１１Ｅは、両者の間の部分をテンプレートに置き換えたことを示している。
【００５４】
記述１１Ｃはソースコードコンパイラ５が置き換えに用いたテンプレートを示すコメントである。図４の記述１０Ａにテンプレート種別filter2dが指定されている。ここでは、ソースコードコンパイラ５は、テンプレート種別filter2dに属するテンプレートの一つである、filter2d:blocking_xyを用いて、記述１１Ｂ、１１Ｅの間を置き換えている。ひとつのテンプレート種別に属する複数のテンプレートの中から、ソースコードコンパイラ５がテンプレートを選択する方法については後述する。
【００５５】
記述１１Ｄは、テンプレートfilter2d:blocking_xyに対し、対象ソース１０の記述１０Ａにて指定した引数を適用したものである。
【００５６】
尚、ソースコードコンパイラ５は、対象ソース１０の括弧１０Ｂから括弧１０Ｃの間の部分については、最適化ソース１１から削除している。これは、上述のように、括弧１０Ｂ、１０Ｃに囲まれた記述は、対象ソース１０を通常のコンパイラに入力したときにコンパイルの対象となる部分であり、テンプレートを用いた記述１１Ｄがあれば不要だからである。
【００５７】
次に、ソースコード最適化ツール７が行うテンプレート選択について説明する。
【００５８】
あるテンプレートに基づいてオブジェクトコードを生成し、そのオブジェクトコードをプロセッサにて実行したときの所要時間は、そのプロセッサの種類によって異なる。例えば、テンプレートＴ１に基づいてオブジェクトコードＯＢＪ１を生成し、互いに種類が異なるプロセッサＰ１、Ｐ２それぞれで実行したとする。また、テンプレートＴ２に基づいてオブジェクトコードＯＢＪ２を生成し、プロセッサＰ１、Ｐ２それぞれで実行したとする。このとき、プロセッサＰ１、Ｐ２それぞれにおいて、オブジェクトコードＯＢＪ１、ＯＢＪ２を実行する所要時間を比較すると、プロセッサＰ１ではオブジェクトコードＯＢＪ１の所要時間の方が短い一方、プロセッサＰ２ではオブジェクトコードＯＢＪ２の所要時間の方が短いといった場合がある。
【００５９】
こうした事情を反映して、テンプレートには、ターゲットプロセッサ毎に優先度が設定される。ＴＤＢ３は、テンプレート９のそれぞれに対して、ターゲットプロセッサ毎の優先度を関連付けて格納する。優先度として用いる値の一例として、そのテンプレートに基づくオブジェクトコードを、そのターゲットプロセッサで実行したときの所要時間が考えられる。この場合、ソースコード最適化ツール７は、優先度が小さいほどそのテンプレートを優先的に選択する。ＴＤＢ３の優先度は基本的には専門家が設定する。
【００６０】
これに対し、例えば一般ユーザが、ＴＤＢ３に設定された優先度とは異なる優先度を適用して、ソースコード最適化ツール７にテンプレート選択をさせたい場合がある。このような場合、一般ユーザ等は優先度ファイルを作成して、ソースコード最適化ツール７に入力する。
【００６１】
優先度ファイルは、そのテンプレートのテンプレート種別、テンプレート名、ターゲットプロセッサ毎の優先度を関連付けて記述したファイルである。優先度ファイルは例えばYAML(YAML Airn’t Markup Language)によって記述される。YAMLで記述する場合、例えば、［ターゲットプロセッサ名］［テンプレート種別］［テンプレート名］＝優先度を示す数値、といったハッシュ構造を取る。
【００６２】
図６に一例として優先度ファイル２０(filter2d_prio.yaml)を示す。本図では、ターゲットプロセッサ名はCORE-AVX2、AVXである。テンプレート種別はfilter2dである。テンプレート名はblocking_xy、blocking_x、noblocking、separate、simple、unrollである。テンプレート名の後、コロン”:”の後に続くのが、そのテンプレート名に対応するテンプレートの優先度である。尚、優先度ファイル２０の優先度は、そのテンプレートに基づいて生成したオブジェクトコードをそのターゲットプロセッサで実行したときの所要時間である。ターゲットプロセッサCORE-AVX2については、インテルのHaswellマイクロアーキテクチャのプロセッサで計測した所要時間を用いている。ターゲットプロセッサAVXについては、インテルのSandy Bridgeマイクロアーキテクチャのプロセッサで計測した所要時間を用いている。
【００６３】
ソースコード最適化ツール７は、優先度ファイルが指定されていない場合は、ＴＤＢ３に格納されている優先度に基づいて、テンプレートを選択する。一方、優先度ファイルが指定されている場合は、その優先度ファイルに設定された優先度を優先して用いつつ、優先度ファイルに設定されていない優先度についてはＴＤＢ３に格納されている優先度を用いて、テンプレートを選択する。
【００６４】
いずれの場合であっても、ソースコード最適化ツール７は、利用可能なテンプレートのうち、最も優先度が高いものを選択する。利用可能なテンプレートは、対象ソース１０中のプラグマ情報と、ソースコード最適化ツール７に対象ソース１０を入力する際に指定する条件とに応じて定められる。まず、対象ソース１０にプラグマ情報として記述されたテンプレート種別が、利用可能なテンプレートの最初の候補となる。この最初の候補の中から、対象ソース１０の入力と共に指定した条件に基づいて、利用可能なテンプレートを更に絞り込む。対象ソース１０のプラグマ情報と、対象ソース１０の入力と共に指定される条件によって、利用可能なテンプレートとなるテンプレートを、以下ではテンプレート候補と呼ぶものとする。つまり、ソースコード最適化ツール７は、テンプレート候補の中から最も優先度が高いテンプレートを選択する。
【００６５】
対象ソース１０の入力と共に行う条件指定は、例えば、ソースコード最適化ツール７を実行する際に行われる。ここで行う条件指定の例としては、ターゲットプロセッサの指定、テンプレートの個別指定、優先度ファイルの指定がある。
【００６６】
ターゲットプロセッサを指定した場合、対象ソース１０のプラグマ情報に記載のテンプレート種別であって、かつ、そのテンプレートに基づくオブジェクトコードが、指定されたターゲットプロセッサで実行可能なテンプレートがテンプレート候補となる。
【００６７】
テンプレートをただひとつ指定した場合、そのテンプレートが唯一のテンプレート候補となる。
【００６８】
優先度ファイルを指定した場合、その優先度ファイルに優先度の記載があるテンプレートについては、ＴＤＢ３においてそのテンプレートに関連付けて格納された優先度に代わり、優先度ファイルに記載の優先度を用いてテンプレートの選択を行う。
【００６９】
このようにして、ソースコード最適化ツール７は、対象ソース１０にプラグマ情報として記述されたテンプレート種別の中からテンプレート候補を選択する。次に、ソースコード最適化ツール７は、テンプレート候補の各テンプレートの優先度を比較して、最も高い優先度が付与されたテンプレートを選択する。
【００７０】
ここで、図４の対象ソース１０を入力したとき、ソースコード最適化ツール７が行うテンプレート選択を例に挙げて説明する。このとき、ターゲットプロセッサをCORE-AVX2と指定するものとする。また、このとき、図６の優先度ファイル２０を指定するものとする。図６の優先度ファイル２０、filter2d_prio.yamlには、ターゲットプロセッサCORE-AVX2及びAVXの両方について、テンプレート種別filter2dに属する全てのテンプレートの優先度が記述されているものとする。
【００７１】
図４の対象ソース１０のプラグマ情報には、テンプレート種別filter2dが記述されている。優先度ファイル２０には、ターゲットプロセッサCORE-AVX2について、テンプレート種別filter2dに属する全てのテンプレートの優先度が記述されているので、テンプレート選択の際に参照するのは、ＴＤＢ３に格納されている優先度ではなく、優先度ファイル２０に記述された優先度である。
【００７２】
優先度ファイル２０によれば、テンプレート種別がfilter2dであり、ターゲットプロセッサがCORE-AVX2であるときのテンプレート名、優先度が６組記述されている。テンプレート候補になるのはこれら６つのテンプレート名とテンプレート種別filter2dの組み合わせで表されるテンプレートである。
【００７３】
これら６組のうち、条件を満たすテンプレートの中で優先度が最も高い（優先度の値が最小）のは、テンプレート名blocking_xyである。従って、このとき、ソースコード最適化ツール７は、テンプレート種別filter2d、テンプレート名blocking_xyで表されるテンプレートを選択する。
【００７４】
優先度ファイルが指定されていない場合、ソースコード最適化ツール７は、ＴＤＢ３に格納されている各テンプレートの優先度に基づいて、テンプレートを選択する。
【００７５】
図４の対象ソース１０ではテンプレート条件が指定されていない。しかし、テンプレート条件が指定されている場合、ソースコード最適化ツール７は、、指定のテンプレート条件に該当するテンプレートのみをテンプレート候補として選択する。例えば、図４の対象ソース１０のプラグマ情報にプラグマ条件としてsymmetricが指定されていると仮定した場合、ソースコード最適化ツール７は、テンプレート条件symmetricが付与されたテンプレートをＴＤＢ３にて検索し、該当するテンプレートもテンプレート候補として選び、更に、テンプレート候補の各テンプレートの優先度に基づいて、対象ソース１０に適用するテンプレートを選択する。
【００７６】
対象ソース１０に指定する他のテンプレート条件の例として、特定のパラメータが定数であることを設定してもよい。こうしたテンプレート条件の一例としては、対象ソース１０のプラグマにおいて、kernel(p,w)と指定する場合に、wが定数であるという条件がある。この条件は、例えばkernel(p, 7)と指定された場合に成立する。
【００７７】
こうしてテンプレートを選択した後、ソースコード最適化ツール７は、選択したテンプレートの引数として、対象ソース１０のプラグマ情報に記述されている変数を適用することにより、最適化ソース１１を生成する。
【００７８】
次に、ソースコード最適化システム１の動作について説明する。ソースコード最適化システム１の動作は大きく分けて、ＴＤＢ３の構築、対象ソース１０の作成、最適化ソース１１の生成の三段階からなる。
【００７９】
図７を参照してＴＤＢ３の構築について説明する。ここでは、テンプレート化コンパイラ４を中心として、専門家が作成する見本ソース８に基づくテンプレートのデータベースを構築する。
【００８０】
専門家は見本ソース８を作成して、テンプレート化コンパイラ４に入力する（ステップＳ１）。
【００８１】
テンプレート化コンパイラ４は、入力された見本ソース８に基づいて、テンプレート９を生成する（ステップＳ２）。
【００８２】
ＴＤＢ３は、ステップＳ２で生成されたテンプレート９を格納する（ステップＳ３）。
【００８３】
専門家は、ステップＳ３でＴＤＢ３に格納されたテンプレート９に必要な関連付けを行う（ステップＳ４）。テンプレート９に関連付けるのは、例えば、そのテンプレートのテンプレート種別、テンプレート名、ターゲットプロセッサ毎の優先度、そのテンプレートに関する条件（テンプレート条件）である。
【００８４】
以上のステップＳ１〜Ｓ４を繰り返し行うことにより、最適化に十分な種類のテンプレートを予めＴＤＢ３に用意しておく。
【００８５】
次に、対象ソース１０の作成について説明する。一般ユーザは、最適化の対象となる対象ソース１０を作成する。その際、一般ユーザは、ＴＤＢ３のテンプレートに基づいて図８のようにして対象ソースを作成する。尚、対象ソース１０、優先度ファイル２０の作成は、例えば一般的なテキストエディターで行うことができる。
【００８６】
まず、一般ユーザは、ソースコードコンパイラ５に対し、ＴＤＢ３に格納されているテンプレートのリスト（テンプレートリスト）を表示するように命令する。これに応じて、ソースコードコンパイラ５はテンプレートリストを表示する（ステップＳ１１）。
【００８７】
一般ユーザは、ステップＳ１２で表示されたテンプレートリストを参照して、対象ソース１０にプラグマ情報を記述する（ステップＳ１２）。この記述は、図４の対象ソース１０では記述１０Ａに相当する。プラグマ情報には、テンプレート種別、テンプレートの引数として適用する変数、テンプレート条件等が含まれる。
【００８８】
対象ソース１０を作成する際、一般ユーザは、必要に応じて、一般的なコンパイラプログラムによるコンパイルの対象となるソースコードを対象ソース１０に記述することとしてもよい（ステップＳ１３）。このソースコードは、ソースコードコンパイラ５による最適化の対象とはならない。このソースコードを非対象ソースと呼ぶものとする。図４の対象ソース１０において、非対象ソースは、括弧１０Ｂから括弧１０Ｃの記述に相当する。
【００８９】
更に、ＴＤＢ３に格納されている優先度とは異なる優先度の適用を希望する場合、一般ユーザは、優先度ファイル２０を作成する（ステップＳ１４）。ＴＤＢ３に格納されている優先度をそのまま適用する場合には、優先度ファイル２０を作成する必要はない。
【００９０】
次に、最適化ソース１１の生成について説明する。最適化ソース１１の生成はソースコードコンパイラ５が中心となって行う。
【００９１】
ターゲットプロセッサを指定した最適化を希望する場合、一般ユーザは、ソースコードコンパイラ５に指定可能なターゲットプロセッサの表示を命令する（ステップＳ２１）。このとき、プラグマ情報抜出ツール６はターゲットプロセッサとして指定可能なプロセッサのリスト（プロセッサリスト）を表示する。プロセッサリストはＴＤＢ３に格納されているテンプレートに基づいて定められる。
【００９２】
一般ユーザは、対象ソース１０をソースコードコンパイラ５に入力する（ステップＳ２２）。このとき、優先度ファイル２０を作成した場合には、一般ユーザは、優先度ファイル２０もソースコードコンパイラ５に入力する（ステップＳ２３）。例えば、対象ソース１０を指定してプラグマ情報抜出ツール６を実行する。ターゲットプロセッサを指定する場合には、更にステップＳ２１で表示されたプロセッサリストの中からターゲットプロセッサをプラグマ情報抜出ツール６に対して指定する（ステップＳ２４）。
【００９３】
ソースコードコンパイラ５において、プラグマ情報抜出ツール６は、ステップＳ２２で入力された対象ソース１０から、ソースコードコンパイラ５宛のプラグマ情報を抜き出す（ステップＳ２５）。
【００９４】
ソースコード最適化ツール７は、ステップＳ２５で抜き出したプラグマ情報に記述されたテンプレート種別、テンプレート条件と、ステップＳ２４で指定されたターゲットプロセッサに基づいて、テンプレート候補を選択する（ステップＳ２６）。
【００９５】
ソースコード最適化ツール７は、ステップＳ２６で選択したテンプレート候補に含まれる各テンプレートの優先度を互いに比較して、優先度が最も高いテンプレートを選択する（ステップＳ２７）。
【００９６】
ステップＳ２２において優先度ファイル２０が入力され、かつ、その優先度ファイル２０にそのテンプレートの優先度が記述されている場合、ステップＳ２７では、そのテンプレートの優先度として優先度ファイル２０の値を用いてテンプレート選択を行う。
【００９７】
他方、ステップＳ２２において優先度ファイル２０が入力されていない場合、或いは、入力されたがそのテンプレートの優先度が記述されていない場合、ステップＳ２７では、そのテンプレートの優先度としてＴＤＢ３に格納されている値を用いてテンプレート選択を行う。
【００９８】
最後に、ソースコード最適化ツール７は、ステップＳ２５で選択したテンプレートの引数として、対象ソース１０のプラグマ情報にて指定した変数を適用して、最適化ソース１１を生成する（ステップＳ２８）。
【００９９】
本実施の形態によれば、専門家が作成する見本ソースからテンプレートを作成する。そのため、様々な最適化方式のテンプレートを随時テンプレートデータベースに追加することができる。一般ユーザは、様々なテンプレートを用いて対象ソースの最適化を図ることができる。
【０１００】
（第２の実施の形態）
本発明の第２の実施の形態であるソースコード最適化システム３０について図１０を参照して説明する。
【０１０１】
入力である見本ソース８、対象ソース１０と、出力である最適化ソース１１については第１の実施の形態と同様なので説明を省略する。ソースコード最適化システム３０は、テンプレート生成部３１、テンプレートデータベース（ＴＤＢ）３２、ソースコード最適化部３３を備える。
【０１０２】
テンプレート生成部３１、ＴＤＢ３２、ソースコード最適化部３３は、いずれも、ひとつ或いは複数のコンピュータと、これらコンピュータ上で実行されるプログラムからなる。テンプレート生成部３１、ＴＤＢ３２、ソースコード最適化部３３がすべて同一のコンピュータによって実現されてもよい。コンピュータは例えばデスクトップコンピュータ、ラップトップコンピュータ、ワークステーションが考えられるが、特に種類を問わない。コンピュータは適当なオペレーティングシステムを実行し、その上で、テンプレート生成部３１、ＴＤＢ３２、ソースコード最適化部３３としてコンピュータを機能させるプログラムを実行する。
【０１０３】
テンプレート生成部３１は、ソースコード最適化システム１におけるテンプレート化コンパイラ４に対応する。図１１に示すように、テンプレート生成部３１は、テンプレート範囲決定部３１Ａ、パラメータ決定部３１Ｂ、生成部３１Ｃを備える。
【０１０４】
テンプレート範囲決定部３１Ａは、見本ソース８からテンプレート化する部分を決定する。決定する際の基準としては見本ソース８に予め記述したコメントを用いることが考えられる。具体例としては、見本ソース８を記述する際に、専門家は、テンプレート化しようとする部分の直前に//! begin templateを記述し、その部分の直後に//!end templateを記述する。テンプレート範囲決定部３１Ａは、見本ソース８から//! begin templateと//!end templateの間に挟まれたコメントを抽出する。以下、専門家がテンプレート化しようとして見本ソース８に記述する部分をテンプレート化対象部分と呼ぶ。
【０１０５】
このように、テンプレート化対象部分をコメントとして見本ソース８に記述する代わりに、プラグマとして記述することとしてもよい。この場合、テンプレート範囲決定部３１Ａは、見本ソース８からプラグマを抽出する。
【０１０６】
パラメータ決定部３１Ｂは、テンプレート範囲決定部３１Ａが抽出したテンプレート化対象部分の中から、一般化表現に置き換える部分を決定する。一般化表現に置換する部分を一般化対象と呼ぶものとする。一般化対象は例えば変数、型である。
【０１０７】
パラメータ決定部３１Ｂが一般化対象として決定する際の基準としては、見本ソース８のコメントを用いることが考えられる。例えば、専門家は、見本ソース８を記述する際に、一般化対象とする変数、型の直前に、//! var-paramと記述することが考えられる。
【０１０８】
生成部３１Ｃは、テンプレート化対象部分の一般化対象を一般化表現に置換したもの、即ち、テンプレートを生成する。
【０１０９】
具体的には、生成部３１Ｃは、テンプレート範囲決定部３１Ａが出力するテンプレート化対象部分のうち、パラメータ決定部３１Ｂが決定した一般化対象を、例えば$T0や$v0といった一般化表現に変換したソースコードを生成し、そのソースコードをテンプレートとして出力する。
【０１１０】
尚、テンプレートにおいて一般化表現を記述する形式は、$T0や$v0といった形には限らない。
【０１１１】
ＴＤＢ３２はソースコード最適化システム１におけるＴＤＢ３に対応する。ＴＤＢ３２は、テンプレート生成部３１が生成したテンプレートを格納する。また、ＴＤＢ３２は、ソースコード最適化部３３からの要求に応じて、格納しているテンプレートをソースコード最適化部３３に渡す。
【０１１２】
次に説明するソースコード最適化部３３によって最適化を実行する前に、テンプレート生成部３１は、十分な種類のテンプレートを生成し、ＴＤＢ３に登録してあることが好ましい。
【０１１３】
ソースコード最適化部３３は、ソースコード最適化システム１におけるソースコードコンパイラ５に対応する。図１２に示すように、ソースコード最適化部３３は、テンプレート適用箇所決定部３３Ａ、テンプレート選択部３３Ｂ、コード生成部３３Ｃを備える。
【０１１４】
テンプレート適用箇所決定部３３Ａは、ソースコード最適化システム１におけるプラグマ情報抜出ツール６に対応する。テンプレート適用箇所決定部３３Ａは、外部から入力される対象ソース１０を読み込む。テンプレート適用箇所決定部３３Ａは、対象ソース１０の中から、テンプレートを適用することによって最適化の対象部分を決定する。
【０１１５】
対象ソース１０を記述する際のルールとして、最適化の対象部分を明示する書式を予め定義しておく。このルールに従って、一般ユーザは、対象ソース１０を作成する際、最適化の対象部分を明示する。テンプレート適用箇所決定部３３Ａは、このルールに従って、最適化の対象とする部分を抽出する。例えば、図４では、記述１０Ａのプラグマの直後に続く、括弧１０Ｂと括弧１０Ｃで囲まれた部分が、最適化の対象部分として予めルール化されている。
【０１１６】
最適化の対象部分の明示に関するルールには、他のルールも考えられる。例えば、対象ソース１０において、最適化の対象部分の前後に、所定の文字列をコメントとして記述するというルールが考えられる。この場合、一般ユーザは、最適化の対象部分の前後に所定文字列をコメントとして記述する。テンプレート適用箇所決定部３３Ａは所定文字列を目印として最適化の対象部分を抽出する。
【０１１７】
こうした最適化の対象部分の明示に関するルールを予め定める代わりに、テンプレート適用箇所決定部３３Ａが対象ソース１０を解析して、最適化の対象部分を決定することとしてもよい。
【０１１８】
テンプレート適用箇所決定部３３Ａの解析によって決定する場合、一般ユーザは、最適化の対象部分をテンプレート適用箇所決定部３３Ａに知らせるための記述、例えば上述のプラグマと括弧｛｝の組み合わせや、所定文字列のコメントの記述を行う必要はない。
【０１１９】
また、テンプレート適用箇所決定部３３Ａの解析によって決定する場合、最適化の対象部分の定義を予め定めておき、その定義をテンプレート適用箇所決定部３３Ａの記憶装置に予め格納しておく。テンプレート適用箇所決定部３３Ａは、対象ソース１０の中に、その定義に合致する部分があるか否かを解析する。合致する部分がある場合、テンプレート適用箇所決定部３３Ａは、その部分を最適化の対象部分として抽出する。
【０１２０】
テンプレート選択部３３Ｂは、ソースコード最適化システム１におけるソースコード最適化ツール７のステップＳ２６の動作に対応する。テンプレート選択部３３Ｂは、テンプレート適用箇所決定部３３Ａから最適化の対象部分を受け取ると、その対象部分に対し、ＴＤＢ３２に格納されているテンプレートの中で最適なテンプレートを選択する。
【０１２１】
テンプレートの選択手法には様々なものが考えられる。例えば、ソースコード最適化ツール７のステップＳ２６と同様に、最適化の対象部分に適用するテンプレート種別、テンプレート条件を、対象ソース１０にプラグマとして記述することを予めルールとして定めることが考えられる。この場合、一般ユーザは、対象ソース１０にプラグマとしてテンプレート種別、テンプレート条件を記述する。テンプレート選択部３３Ｂは、対象ソース１０のプラグマからテンプレート種別、テンプレート条件を抽出し、これらに該当するテンプレートをＴＤＢ３２から選択し、その選択したテンプレートの中で最も高い優先度を有するものを選択する。
【０１２２】
また、他のテンプレートの選択手法としては、ソースコード最適化部３３に対象ソース１０を入力する際に、その対象ソース１０に適用するテンプレートを一般ユーザが指定することが考えられる。例えば、ソースコード最適化部３３をコマンドラインプログラムとして実装する場合、一般ユーザは、コマンドライン引数として、対象ソース１０に適用するテンプレートを指定する。事前に、一般ユーザは、ＴＤＢ３３に格納されているテンプレートの中から、対象ソース１０に適用するテンプレートを選択しておく。
【０１２３】
コード生成部３３Ｃは、ソースコード最適化システム１におけるソースコード最適化ツール７のステップＳ２７の動作に対応する。コード生成部３３Ｃは、テンプレート適用箇所決定部３３Ａが選択した最適化の対象部分に対して、テンプレート選択部３３Ｂが選択したテンプレートを適用して、最適化ソース１１を生成し出力する。
【０１２４】
テンプレートの適用手法は、例えば、プラグマで記述された変数でテンプレート中の一般化表現を置き換える方法が考えられる。
【０１２５】
また、他のテンプレートの適用手法としては、コード生成部３３Ｃが対象ソース１０を解析して、適用しようとしているテンプレート中の一般化表現に対応する特定表現を決定することが考えられる。
【０１２６】
このようにして、ソースコード最適化システム３０では、専門家が作成した見本ソース８に基づいて、テンプレート生成部３１がテンプレートを生成することにより、ＴＤＢ３２に十分なテンプレートを格納する。その上で、ソースコード最適化部３３は、一般ユーザが作成した対象ソース１０に対して、ＴＤＢ３２に格納されているテンプレートを適用して、最適化ソース１１を生成する。
【０１２７】
上記の実施形態の一部又は全部は以下の付記のようにも記載されうるが、以下には限られない。
【０１２８】
（付記１）
入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する、テンプレート生成手段と、
対象ソースに対して前記テンプレートを適用することにより、前記対象ソースを最適化したソースコードである最適化ソースを生成する、ソースコード最適化手段と
を備える、ソースコード最適化システム。
【０１２９】
（付記２）
前記テンプレート生成手段は、前記見本ソースに含まれるコメントに基づいて、一般化表現に置換すべきコードを選択する、付記１に記載のソースコード最適化システム。
【０１３０】
（付記３）
前記ソースコード最適化手段は、前記対象ソースに含まれるプラグマに基づいて、予め生成した複数の前記テンプレートの中から、前記対象ソースに適用すべき１つのテンプレートを選択する、付記１または付記２に記載のソースコード最適化システム。
【０１３１】
（付記４）
前記ソースコード最適化手段は、テンプレートの適用に関してテンプレート毎に予め定められた条件に基づいて、予め生成した複数の前記テンプレートの中から、前記対象ソースに適用すべき１つのテンプレートを選択する、付記１乃至付記３のいずれかに記載のソースコード最適化システム。
【０１３２】
（付記５）
前記ソースコード最適化手段は、テンプレート毎に予め定められた優先度に基づいて、予め生成した複数の前記テンプレートの中から、前記対象ソースに適用すべき１つのテンプレートを選択する、付記１乃至付記４のいずれかに記載のソースコード最適化システム。
【０１３３】
（付記６）
前記テンプレート生成手段は、前記見本ソースからループ構造を検出し、該検出したループ構造を一般化表現に変換し、該変換したループ構造を含む前記テンプレートを生成する、付記１乃至付記５のいずれかに記載のソースコード最適化システム。
【０１３４】
（付記７）
付記１乃至付記６のいずれかに記載のソースコード最適化システムの前記テンプレート生成手段として動作する装置である、テンプレート生成装置。
【０１３５】
（付記８）
付記１乃至付記６のいずれかに記載のソースコード最適化システムの前記ソースコード最適化手段として動作する装置である、ソースコード最適化装置。
【０１３６】
（付記９）
入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する、テンプレート生成手段と、
対象ソースに対して前記テンプレートを適用することにより、前記対象ソースを最適化したソースコードである最適化ソースを生成する、ソースコード最適化手段と
のうち、少なくとも一方としてコンピュータを動作させるプログラム。
【０１３７】
（付記１０）
前記テンプレート生成手段は、前記見本ソースに含まれるコメントに基づいて、前記テンプレートとして一般化表現に置換すべき前記見本ソースコードを選択する、付記９に記載のプログラム。
【０１３８】
（付記１１）
前記テンプレート生成手段は、異なる種類の複数のテンプレートを生成し、
前記ソースコード最適化手段は、前記対象ソースに含まれるプラグマに基づいて、前記複数のテンプレートの中から、前記対象ソースに適用すべき１つのテンプレートを選択する、付記９または付記１０に記載のプログラム。
【０１３９】
（付記１２）
前記テンプレート生成手段は、異なる種類の複数のテンプレートを生成し、
前記ソースコード最適化手段は、テンプレートの適用に関してテンプレート毎に予め定められた条件に基づいて、前記複数のテンプレートの中から、前記対象ソースに適用すべき１つのテンプレートを選択する、付記９乃至付記１１のいずれかに記載のプログラム。
【０１４０】
（付記１３）
前記テンプレート生成手段は、異なる種類の複数のテンプレートを生成し、
前記ソースコード最適化手段は、テンプレート毎に予め定められた優先度に基づいて、前記複数のテンプレートの中から、前記対象ソースに適用すべき１つのテンプレートを選択する、付記９乃至付記１２のいずれかに記載のプログラム。
【０１４１】
（付記１４）
前記テンプレート生成手段は、前記見本ソースからループ構造を検出し、該検出したループ構造を一般化表現に変換し、該変換したループ構造をも前記テンプレートとして出力する、付記９乃至付記１３のいずれかに記載のプログラム。
【０１４２】
（付記１５）
情報処理装置によって、入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する、テンプレート生成段階と、
情報処理装置によって、対象ソースに対して前記テンプレートを適用することにより、前記対象ソースを最適化したソースコードである最適化ソースを生成する、ソースコード最適化段階と
を含むソースコード最適化方法。
【０１４３】
（付記１６）
前記テンプレート生成段階は、前記見本ソースに含まれるコメントに基づいて、前記テンプレートとして一般化表現に置換すべき前記見本ソースコードを選択する、付記１５に記載のソースコード最適化方法。
【０１４４】
（付記１７）
前記テンプレート生成段階は、異なる種類の複数のテンプレートを生成し、
前記ソースコード最適化段階は、前記対象ソースに含まれるプラグマに基づいて、前記複数のテンプレートの中から、前記対象ソースに適用すべき１つのテンプレートを選択する、付記１５または付記１６に記載のソースコード最適化方法。
【０１４５】
（付記１８）
前記テンプレート生成段階は、異なる種類の複数のテンプレートを生成し、
前記ソースコード最適化段階は、テンプレートの適用に関してテンプレート毎に予め定められた条件に基づいて、前記複数のテンプレートの中から、前記対象ソースに適用すべき１つのテンプレートを選択する、付記１５乃至付記１７のいずれかに記載のソースコード最適化方法。
【０１４６】
（付記１９）
前記テンプレート生成段階は、異なる種類の複数のテンプレートを生成し、
前記ソースコード最適化段階は、テンプレート毎に予め定められた優先度に基づいて、前記複数のテンプレートの中から、前記対象ソースに適用すべき１つのテンプレートを選択する、付記１５乃至付記１８のいずれかに記載のソースコード最適化方法。
【０１４７】
（付記２０）
前記テンプレート生成段階は、前記見本ソースからループ構造を検出し、該検出したループ構造を一般化表現に変換し、該変換したループ構造をも前記テンプレートとして生成する、付記１５乃至付記１９のいずれかに記載のソースコード最適化方法。
【０１４８】
（付記２１）
見本ソースコードを含む見本ソースに含まれる、データ型及び変数の少なくとも一部を一般化表現に置換したソースコードをテンプレートと呼ぶとき、複数の前記テンプレートからなるグループを指定する記述であるテンプレート種別を、最適化の対象となるソースコードである対象ソースから抜き出す情報抜出手段と、
前記抜き出したテンプレート種別によって指定される、前記グループに属する複数のテンプレートそれぞれに予め関連付けられた優先度に基づいて、前記複数のテンプレートのひとつを選択し、前記対象ソースに対して選択した前記テンプレートを適用することにより、前記対象ソースに基づく最適化ソースを生成する、最適化手段と
を備える、ソースコード最適化装置。
【０１４９】
（付記２２）
前記対象ソースは、一般化表現を置換する特定表現を含み、
前記情報抜出手段は、前記対象ソースから前記特定表現を抜き出し、
前記最適化手段は、前記選択したテンプレートの前記一般化表現を、前記情報抜出手段が抜き出した前記特定表現と置換する
付記２１に記載のソースコード最適化装置。
【０１５０】
（付記２３）
前記テンプレート種別は、前記ソースコード最適化手段に予め関連付けられたプラグマ情報として対象ソースに記述される、付記２１または付記２２に記載のソースコード最適化装置。
【０１５１】
（付記２４）
前記情報抜出手段は、前記テンプレートの適用に関連する条件であるテンプレート条件を指定する記述を、前記対象ソースから抜き出し、
前記最適化手段は、前記抜き出したテンプレート条件を指定する記述と、前記テンプレートに予め関連付けられた前記テンプレート条件とに基づいて、前記複数のテンプレートのひとつを選択する、
付記２１乃至付記２３のいずれかに記載のソースコード最適化装置。
【０１５２】
（付記２５）
前記テンプレートは、予めプロセッサ毎に優先度が関連付けられ、
前記最適化手段は、外部から指定されるターゲットプロセッサと、前記予め関連付けらた前記優先度とに基づいて、前記複数のテンプレートのひとつを選択する、
付記２１乃至付記２４のいずれかに記載のソースコード最適化装置。
【０１５３】
（付記２６）
予め作成された見本ソースコードを含む見本ソースに含まれる、データ型と変数の少なくとも一部を一般化表現に置換して、ソースコードの複数のテンプレートを生成するテンプレート化手段と、
前記複数のテンプレートを、それぞれ、そのテンプレートの優先度と関連付けて格納する記憶手段と、
付記２１乃至付記２５のいずれかに記載のソースコード最適化装置と
を備える、ソースコード最適化システム。
【０１５４】
（付記２７）
見本ソースコードを含む見本ソースに含まれる、データ型及び変数の少なくとも一部を一般化表現に置換したソースコードをテンプレートと呼ぶとき、複数の前記テンプレートからなるグループを指定する記述であるテンプレート種別を、最適化の対象となるソースコードである対象ソースから抜き出す情報抜出手段と、
前記抜き出したテンプレート種別によって指定される、前記グループに属する複数のテンプレートそれぞれに予め関連付けられた優先度に基づいて、前記複数のテンプレートのひとつを選択し、前記対象ソースに対して選択した前記テンプレートを適用することにより、前記対象ソースに基づく最適化ソースを生成する、最適化手段と
してコンピュータを機能させるプログラム。
【０１５５】
（付記２８）
前記対象ソースは、一般化表現を置換する特定表現を含み、
前記情報抜出手段は、前記対象ソースから前記特定表現を抜き出し、
前記最適化手段は、前記選択したテンプレートの前記一般化表現を、前記情報抜出手段が抜き出した前記特定表現と置換する
付記２７に記載のプログラム。
【０１５６】
（付記２９）
前記テンプレート種別は、前記ソースコード最適化手段に予め関連付けられたプラグマ情報として対象ソースに記述される、付記２７または付記２８に記載のプログラム。
【０１５７】
（付記３０）
前記情報抜出手段は、前記テンプレートの適用に関連する条件であるテンプレート条件を指定する記述を、前記対象ソースから抜き出し、
前記最適化手段は、前記情報抜出手段が抜き出した、前記テンプレート条件を指定する記述と、前記テンプレートに予め関連付けられた前記テンプレート条件とに基づいて、前記複数のテンプレートのひとつを選択する、
付記２７乃至付記２９のいずれかに記載のプログラム。
【０１５８】
（付記３１）
前記テンプレートは、予めプロセッサ毎に優先度が関連付けられ、
前記最適化手段は、外部から指定されるターゲットプロセッサと、前記予め関連付けらた前記優先度とに基づいて、前記複数のテンプレートのひとつを選択する、
付記２７乃至付記３０のいずれかに記載のプログラム。
【０１５９】
（付記３２）
見本ソースコードを含む見本ソースに含まれる、データ型及び変数の少なくとも一部を一般化表現に置換したソースコードをテンプレートと呼ぶとき、複数の前記テンプレートからなるグループを指定する記述であるテンプレート種別を、最適化の対象となるソースコードである対象ソースからコンピュータが抜き出す情報抜出段階と、
前記抜き出したテンプレート種別によって指定される、前記グループに属する複数のテンプレートそれぞれに予め関連付けられた優先度に基づいて、前記複数のテンプレートのひとつを選択し、前記対象ソースに対して選択した前記テンプレートを適用することにより、前記対象ソースに基づく最適化ソースをコンピュータが生成する、最適化段階と
を含むソースコード最適化方法。
【０１６０】
（付記３３）
前記対象ソースは、一般化表現を置換する特定表現を含み、
前記情報抜出段階は、前記対象ソースから前記特定表現を抜き出し、
前記最適化段階は、前記選択したテンプレートの前記一般化表現を、前記情報抜出段階が抜き出した前記特定表現と置換する
付記３２に記載のソースコード最適化方法。
【０１６１】
（付記３４）
前記テンプレート種別は、前記ソースコード最適化段階に予め関連付けられたプラグマ情報として対象ソースに記述される、付記３２または付記３３に記載のソースコード最適化方法。
【０１６２】
（付記３５）
前記情報抜出段階は、前記テンプレートの適用に関連する条件であるテンプレート条件を指定する記述を、前記対象ソースから抜き出し、
前記最適化段階は、前記抜き出したテンプレート条件を指定する記述と、前記テンプレートに予め関連付けられた前記テンプレート条件とに基づいて、前記複数のテンプレートのひとつを選択する、
付記３２乃至付記３４のいずれかに記載のソースコード最適化方法。
【０１６３】
（付記３６）
前記テンプレートは、予めプロセッサ毎に優先度が関連付けられ、
前記最適化段階は、外部から指定されるターゲットプロセッサと、前記予め関連付けらた前記優先度とに基づいて、前記複数のテンプレートのひとつを選択する、
付記３２乃至付記３５のいずれかに記載のソースコード最適化方法。
【符号の説明】
【０１６４】
１、３０  ソースコード最適化システム
２  コレクティブコンパイラ
３、３２  テンプレートデータベース（ＴＤＢ）
４  テンプレート化コンパイラ
５  ソースコードコンパイラ
６  プラグマ情報抜出ツール
７  ソースコード最適化ツール
８  見本ソース
９  テンプレート
１０  対象ソース
１１  最適化ソース
２０  優先度ファイル
３１  テンプレート生成部
３１Ａ  テンプレート範囲決定部
３１Ｂ  パラメータ決定部
３１Ｃ  生成部
３３  ソースコード最適化部
３３Ａ  テンプレート適用箇所決定部
３３Ｂ  テンプレート選択部
３３Ｃ  コード生成部
【図１】
2019139675.tif 000003
【図２】
2019139675.tif 000004
【図３】
2019139675.tif 000005
【図４】
2019139675.tif 000006
【図５】
2019139675.tif 000007
【図６】
2019139675.tif 000008
【図７】
2019139675.tif 000009
【図８】
2019139675.tif 000010
【図９】
2019139675.tif 000011
【図１０】
2019139675.tif 000012
【図１１】
2019139675.tif 000013
【図１２】
2019139675.tif 000014