JP2019139675A - ソースコード最適化装置、プログラムおよび方法 - Google Patents

ソースコード最適化装置、プログラムおよび方法 Download PDF

Info

Publication number
JP2019139675A
JP2019139675A JP2018024768A JP2018024768A JP2019139675A JP 2019139675 A JP2019139675 A JP 2019139675A JP 2018024768 A JP2018024768 A JP 2018024768A JP 2018024768 A JP2018024768 A JP 2018024768A JP 2019139675 A JP2019139675 A JP 2019139675A
Authority
JP
Japan
Prior art keywords
template
source
source code
target
optimization
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.)
Pending
Application number
JP2018024768A
Other languages
English (en)
Inventor
一久 石坂
Kazuhisa Ishizaka
一久 石坂
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 JP2018024768A priority Critical patent/JP2019139675A/ja
Publication of JP2019139675A publication Critical patent/JP2019139675A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】 様々な最適化方式を追加可能なソースコードの最適化システムを提供する。【解決手段】 入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する。対象ソースに対してテンプレートを適用することにより、対象ソースを最適化したソースコードである最適化ソースを生成する。【選択図】 図1

Description

本発明はソースコードの最適化に関する。
一般にソースコードの最適化は次のように行われる。ソースコードの最適化を行う者(以下、「最適化実施者」と呼ぶ)は、プログラム全体を理解した上で、ソースコードの各部分の処理内容を把握する(ソース理解)。次に、最適化実施者は、ソースコードに最適化方式を適用する。最終的に、最適化実施者は、ソースコード内の処理に対して、複数の最適化方式のうち好適なものをその処理に適用して、プログラムを書き換える(最適化適用)。
この技術分野において周知のように、コンパイラは、高水準言語で書かれたプログラム(すなわち、ソースコード)を入力し、アセンブリ言語または機械言語のプログラム(すなわち、マシンコード)を出力するトランスレータである。このようなコンパイラの中で、上述したソースコードの最適化を人の手によらず自動的に行うコンパイラが存在する。この種のコンパイラが行う最適化適用では、そのコンパイラの開発者が、そのコンパイラに組み込んだ最適化方式のみが適用される。このため、ソースコードに対して適用される最適化方式が限定される。
また、この種のコンパイラが行うソース理解、即ち、ソースコードの自動解析では、現在のところ複雑なソースコードを解析することができない。
ソースコードの最適化に関し、特許文献1には、コード記憶部にプログラムコードのテンプレートが記憶される旨(第0085段落)が記載されている。また、特許文献1には、コード生成処理部は、特定条件の成立頻度に応じて、コード記憶部に記憶されたテンプレートを読み出して、その読み出したテンプレートに基づき、プログラムコードを生成する旨(第0131段落)も記載されている。
特許文献2には、置換先命令テンプレートの一例(第0022段落)が記載されている。また、特許文献2には、命令列置換部は、置換対象パターンにおける変数v0に対応する変数に置換すること、命令列置換部は、対象部分プログラム内の、メモリ内のデータが定数値に一致した場合に実行される命令列によって、置換先命令テンプレート内の一部の行を置換する旨(第0023段落)も記載されている。
しかしながら、特許文献1、2は、ソースコードのテンプレートをどのようにして構築するかについては詳しく説明していない。
特開2008−009869号公報 特開2008−097249号公報
本発明はこのような状況を鑑みてなされたものであり、本発明が解決しようとする課題は、様々な最適化方式を追加可能なソースコードの最適化システムを提供することである。
上述の課題を解決するため、本発明は、その一態様として、入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する、テンプレート生成手段と、対象ソースに対して前記テンプレートを適用することにより、前記対象ソースを最適化したソースコードである最適化ソースを生成する、ソースコード最適化手段とを備える、ソースコード最適化システムを提供する。
また、本発明は、他の一態様として、入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する、テンプレート生成手段と、対象ソースに対して前記テンプレートを適用することにより、前記対象ソースを最適化したソースコードである最適化ソースを生成する、ソースコード最適化手段とのうち、少なくとも一方としてコンピュータを動作させるプログラムを提供する。
さらに、係るプログラムを記録するコンピュータが読み取り可能な記録媒体によっても実現される。
また、本発明は、他の一態様として、情報処理装置によって、入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する、テンプレート生成段階と、情報処理装置によって、対象ソースに対して前記テンプレートを適用することにより、前記対象ソースを最適化したソースコードである最適化ソースを生成する、ソースコード最適化段階とを含むソースコード最適化方法を提供する。
本発明によれば、様々な最適化方式を追加可能なソースコードの最適化システムを提供することができる。
本発明の第1の実施の形態であるソースコード最適化システムのブロック図である。 専門家が作成し、テンプレート化コンパイラに入力される見本ソースの一例である。 テンプレート生成コンパイラが出力するテンプレートの一例である。 一般ユーザが作成し、ソースコードコンパイラに入力される対象ソースの一例である。 ソースコード最適化ツールが出力する最適化ソースの一例の一部を抜粋したものである。 YAMLで記述した優先度ファイルの一例について説明するための図である。 テンプレートデータベースを構築する際のソースコード最適化システムの動作について説明するためのフローチャートである。 対象ソースを作成する際のソースコード最適化システムの動作について説明するためのフローチャートである。 対象ソースから最適化ソースを生成する際のソースコード最適化システムの動作について説明するためのフローチャートである。 本発明の第2の実施の形態であるソースコード最適化システムのブロック図である。 本発明の第2の実施の形態であるソースコード最適化システムのテンプレート生成部のブロック図である。 本発明の第2の実施の形態であるソースコード最適化システムのソースコード最適化部のブロック図である。
(第1の実施の形態)
本発明の第1の実施の形態である、ソースコード最適化システム1について説明する。図1を参照すると、ソースコード最適化システム1は、コレクティブコンパイラ2、テンプレートデータベース(以下TDBとも記す)3を備える。コレクティブコンパイラ2、TDB3は、いずれも、ひとつ或いは複数のコンピュータと、これらコンピュータ上で実行されるプログラムからなる。コンピュータとしては例えばデスクトップコンピュータ、ラップトップコンピュータ、ワークステーションが考えられるが、特に種類を問わない。また、コレクティブコンパイラ2、TDB3を同一のコンピュータ上で実行することとしてもよい。コンピュータは適当なオペレーティングシステム(Operating System,OS)を実行する。コンピュータは、そのOS上で、コレクティブコンパイラ2、TDB3としてコンピュータを機能させるプログラムを実行する。
コレクティブコンパイラ2は、テンプレート化コンパイラ4、ソースコードコンパイラ5からなる。ソースコードコンパイラ5は、プラグマ情報抜出ツール6、およびソースコード最適化ツール7からなる。
テンプレート化コンパイラ4は、見本ソース8の入力を受け付けて、見本ソース8からテンプレート9を生成する。テンプレート化コンパイラ4は生成したテンプレート9をTDB3に格納する。
プログラムを高速化する手法に長けた者(以下、「専門家」と記す)が見本ソースコードを作成する。その際、専門家は、様々な最適化方式の中から適切な最適化方式を選択して、見本ソースコードに採用する。ここで専門家が作成した見本ソースコードを見本ソース8と呼ぶ。見本ソース8それ自体は、最適化がなされている点を除いて、一般的なソースコードと同じである。専門家は特定のパラメータを用いて見本ソース8を作成する。
テンプレート化コンパイラ4は、見本ソース8に記述されている特定のパラメータを、一般化したパラメータに置換することにより、テンプレート9を生成する。例えば、テンプレート化コンパイラ4は、図2の見本ソース8から図3のテンプレート9を生成する。図2、図3において、枠線の左側に並ぶ数字は行数を表している。
テンプレート9の生成は次のように行う。まず、テンプレート化コンパイラ4は見本ソース8に含まれるデータ型の宣言を一般化表現に置換する。図2の見本ソース8は、その冒頭で、uint8_t型のポインタ型変数*p、float型の変数norm, s, t、int型の変数lenを宣言している。これらの宣言のうち、変数型の宣言を示す、uint8_t、float、intを、図3のテンプレート9ではそれぞれ順に、一般化表現である$T0、$T1、$T2に置換している。
また、テンプレート化コンパイラ4は、見本ソース8に含まれる変数を一般化表現に置換する。図3のテンプレート9では、変数名を示す、*p、norm、lenを、それぞれ順に、一般化表現である$V0、$V1、$V2に変換している。図3のテンプレート9において、文字$は、文字$で始まる文字列が、特定のパラメータを一般化表現したものであることを示す。
更に、テンプレート化コンパイラ4は、見本ソース8を解析してループ構造を検出する。テンプレート化コンパイラ4は、検出したループ構造を一般化表現に変換し、変換したループ構造もテンプレート9に記述する。
図2の見本ソース8の第4−8行には、2段階にアンローリングしたループが記述されている。テンプレート化コンパイラ4は、見本ソース8を解析してこのループ構造を検出する。次に、テンプレート化コンパイラ4は、検出したループ構造の一般化表現を求める。図3のテンプレート9では、第4−8行にループの一般化表現が記述されている。図3のテンプレート9では、第5行の記載”%for”は、$Nを指定することにより、ループをアンローリングする段数を任意に変更可能であることを示している。
このように、見本ソース8のループ構造を一般化表現に変換してテンプレート9を生成することにより、同じループ構造を見本ソース8とは異なるアンローリング段数で最適化ソース11に記述することができる。
TDB3は、テンプレート化コンパイラ4から入力されたテンプレート9を格納するデータベースである。後述するように、ソースコードコンパイラ5によって対象ソース10を最適化する。その前に、テンプレート化コンパイラ4によるテンプレート9の作成を行い、十分な種類のテンプレート9をTDB3に格納しておく。
TDB3は、テンプレート9そのもの、そのテンプレート9のテンプレート種別、テンプレート名、ターゲットプロセッサ毎の優先度、テンプレート条件を関連付けて格納する。
テンプレート種別は、同種のテンプレート9をまとめたテンプレートのグループに対して予め付与される識別子である。例えば、様々なタイプの画像フィルタをまとめてひとつのテンプレート種別としてカテゴライズする。ひとつのテンプレート種別は一乃至複数のテンプレートを含む。テンプレート種別とテンプレート名とを組み合わせたものがひとつのテンプレートを指定するテンプレート指定となる。
優先度については、専門家がプロセッサ毎に定めることとしてもよい。または、優先度については、そのテンプレート9に基づいてオブジェクトコードを生成し、そのオブジェクトコードをプロセッサで実行したときの実行時間、或いは、その実行時間に基づいて定められる値を、そのプロセッサの優先度として定めることとしてもよい。後述するテンプレート選択では、小さい優先度を有するテンプレート9ほど優先的に選択される。
テンプレート条件は、対象ソース10へのテンプレート9の適用に関連する条件である。例えば、テンプレート9が画像フィルタの場合、対称フィルタであることを条件として指定することが考えられる。対象ソース10のプラグマ情報において、テンプレート条件として対称フィルタを指定したとする。このとき、ソースコード最適化ツール7は、TDB3において、テンプレート条件として対称フィルタが関連付けられているテンプレートを、その対象ソース10に適用するテンプレートの候補とする(後述する図9、ステップS26を参照)。テンプレート条件を満たさないテンプレートについては、対象ソース10に適用するテンプレートの候補から外す。
ここで、ソースコード最適化システム1を用いて最適化対象ソースコードの最適化を行う者を一般ユーザと呼ぶものとする。専門家と異なり、一般ユーザは通常の技量を有する者であれば十分である。対象ソース10は一般ユーザが作成した最適化対象ソースコードである。一般ユーザは対象ソース10をソースコードコンパイラ5に入力する。
上述のように、ソースコードコンパイラ5は、プラグマ情報抜出ツール6、ソースコード最適化ツール7を備える。ソースコードコンパイラ5に対象ソース10を入力すると、プラグマ情報抜出ツール6は対象ソース10からプラグマ情報を抜き出す。ソースコード最適化ツール7は、プラグマ情報抜出ツール6が抜き出したプラグマ情報、対象ソース10に基づいて、最適化ソース11を生成し、出力する。ここで、ソースコードコンパイラ5について説明する前に、対象ソース10について説明する。
対象ソース10の例を図4に示す。対象ソース10は、ソースコードコンパイラ5に向けた記述10Aと、ソースコードコンパイラ5以外の通常のコンパイラにおいてコンパイルの対象となる、括弧10B、10Cで囲まれた記述とを含む。
ソースコード最適化システム1による最適化を希望するとき、一般ユーザは、対象ソース10に図4、記述10Aのような記述を加える。記述10Aは、対象ソース10を最適化する際に用いるテンプレート種別と、テンプレート中の一般化表現を置き換える特定表現をソースコードコンパイラ5に通知するための記述である。
図4の記述10Aでは、テンプレートを対象ソース10に適用したとき、テンプレートで一般化表現した変数に対して当てはめるべき変数として、src(p, w, h), dst(q), kernel(k, ks)が記述されている。このように、一般ユーザは、一般化表現を置換するための特定表現を対象ソース10に記述する。記述10Aでは、src(p, w, h), dst(q), kernel(k, ks)が特定表現に当たる。
記述10Aの文字列”filter2d”は、対象ソース10を最適化する際に適用するテンプレート種別を指定している。また、テンプレート種別に続いて、特定表現src(p, w, h), dst(q), kernel(k, ks)を指定している。
テンプレート種別は同じ引数を用いるテンプレートの集合である。図4、記述10Aの汎用画像フィルタのテンプレート種別”filter2d”は、例えば以下のようなテンプレートを含む。
・x方向のみをブロッキングする汎用画像フィルタ
・x,y方向をブロッキングする汎用画像フィルタ
・対称カーネルの場合に、x,y方向を分離してフィルタをかける汎用画像フィルタ
・カーネルサイズが定数の場合に、アンローリングしてループを削除した汎用画像フィルタ
後述するように、一般ユーザは、対象ソース10を作成する際、TDB3に格納されているテンプレートのカタログを参照する。一般ユーザは、対象ソース10の最適化に用いるテンプレート種別をカタログから選択し、対象ソース10に記述する。テンプレート種別は同じ引数を用いるテンプレートの集合である。また、一般ユーザは、引数として用いる変数を対象ソース10に記述する。
ソースコードコンパイラ5は、対象ソース10に記述されたテンプレート種別の中からテンプレートをひとつ選択し、対象ソース10に記述された変数を、選択したテンプレートの引数として用いて、対象ソース10の一部を書き換えた最適化ソース11を生成する。
図4の対象ソース10では、テンプレート種別として汎用画像フィルタ”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; が実行される。
図4の対象ソース10では、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とすることを指定している。
ここでソースコードコンパイラ5の説明に戻る。ソースコードコンパイラ5は、例えば、コマンドラインプログラムとして実行されたソースコード最適化ツール7と、ソースコード最適化ツール7から呼び出される別のコマンドラインプログラムであるプラグマ情報抜出ツール6として実行される。
記述11Bの”//begin-coco”は記述11Eの”//end-coco”と対になるコメントである。記述11B、11Eは、両者の間の部分をテンプレートに置き換えたことを示している。
記述11Cはソースコードコンパイラ5が置き換えに用いたテンプレートを示すコメントである。図4の記述10Aにテンプレート種別filter2dが指定されている。ここでは、ソースコードコンパイラ5は、テンプレート種別filter2dに属するテンプレートの一つである、filter2d:blocking_xyを用いて、記述11B、11Eの間を置き換えている。ひとつのテンプレート種別に属する複数のテンプレートの中から、ソースコードコンパイラ5がテンプレートを選択する方法については後述する。
記述11Dは、テンプレートfilter2d:blocking_xyに対し、対象ソース10の記述10Aにて指定した引数を適用したものである。
尚、ソースコードコンパイラ5は、対象ソース10の括弧10Bから括弧10Cの間の部分については、最適化ソース11から削除している。これは、上述のように、括弧10B、10Cに囲まれた記述は、対象ソース10を通常のコンパイラに入力したときにコンパイルの対象となる部分であり、テンプレートを用いた記述11Dがあれば不要だからである。
次に、ソースコード最適化ツール7が行うテンプレート選択について説明する。
あるテンプレートに基づいてオブジェクトコードを生成し、そのオブジェクトコードをプロセッサにて実行したときの所要時間は、そのプロセッサの種類によって異なる。例えば、テンプレートT1に基づいてオブジェクトコードOBJ1を生成し、互いに種類が異なるプロセッサP1、P2それぞれで実行したとする。また、テンプレートT2に基づいてオブジェクトコードOBJ2を生成し、プロセッサP1、P2それぞれで実行したとする。このとき、プロセッサP1、P2それぞれにおいて、オブジェクトコードOBJ1、OBJ2を実行する所要時間を比較すると、プロセッサP1ではオブジェクトコードOBJ1の所要時間の方が短い一方、プロセッサP2ではオブジェクトコードOBJ2の所要時間の方が短いといった場合がある。
こうした事情を反映して、テンプレートには、ターゲットプロセッサ毎に優先度が設定される。TDB3は、テンプレート9のそれぞれに対して、ターゲットプロセッサ毎の優先度を関連付けて格納する。優先度として用いる値の一例として、そのテンプレートに基づくオブジェクトコードを、そのターゲットプロセッサで実行したときの所要時間が考えられる。この場合、ソースコード最適化ツール7は、優先度が小さいほどそのテンプレートを優先的に選択する。TDB3の優先度は基本的には専門家が設定する。
これに対し、例えば一般ユーザが、TDB3に設定された優先度とは異なる優先度を適用して、ソースコード最適化ツール7にテンプレート選択をさせたい場合がある。このような場合、一般ユーザ等は優先度ファイルを作成して、ソースコード最適化ツール7に入力する。
優先度ファイルは、そのテンプレートのテンプレート種別、テンプレート名、ターゲットプロセッサ毎の優先度を関連付けて記述したファイルである。優先度ファイルは例えばYAML(YAML Airn’t Markup Language)によって記述される。YAMLで記述する場合、例えば、[ターゲットプロセッサ名][テンプレート種別][テンプレート名]=優先度を示す数値、といったハッシュ構造を取る。
図6に一例として優先度ファイル20(filter2d_prio.yaml)を示す。本図では、ターゲットプロセッサ名はCORE-AVX2、AVXである。テンプレート種別はfilter2dである。テンプレート名はblocking_xy、blocking_x、noblocking、separate、simple、unrollである。テンプレート名の後、コロン”:”の後に続くのが、そのテンプレート名に対応するテンプレートの優先度である。尚、優先度ファイル20の優先度は、そのテンプレートに基づいて生成したオブジェクトコードをそのターゲットプロセッサで実行したときの所要時間である。ターゲットプロセッサCORE-AVX2については、インテルのHaswellマイクロアーキテクチャのプロセッサで計測した所要時間を用いている。ターゲットプロセッサAVXについては、インテルのSandy Bridgeマイクロアーキテクチャのプロセッサで計測した所要時間を用いている。
ソースコード最適化ツール7は、優先度ファイルが指定されていない場合は、TDB3に格納されている優先度に基づいて、テンプレートを選択する。一方、優先度ファイルが指定されている場合は、その優先度ファイルに設定された優先度を優先して用いつつ、優先度ファイルに設定されていない優先度についてはTDB3に格納されている優先度を用いて、テンプレートを選択する。
いずれの場合であっても、ソースコード最適化ツール7は、利用可能なテンプレートのうち、最も優先度が高いものを選択する。利用可能なテンプレートは、対象ソース10中のプラグマ情報と、ソースコード最適化ツール7に対象ソース10を入力する際に指定する条件とに応じて定められる。まず、対象ソース10にプラグマ情報として記述されたテンプレート種別が、利用可能なテンプレートの最初の候補となる。この最初の候補の中から、対象ソース10の入力と共に指定した条件に基づいて、利用可能なテンプレートを更に絞り込む。対象ソース10のプラグマ情報と、対象ソース10の入力と共に指定される条件によって、利用可能なテンプレートとなるテンプレートを、以下ではテンプレート候補と呼ぶものとする。つまり、ソースコード最適化ツール7は、テンプレート候補の中から最も優先度が高いテンプレートを選択する。
対象ソース10の入力と共に行う条件指定は、例えば、ソースコード最適化ツール7を実行する際に行われる。ここで行う条件指定の例としては、ターゲットプロセッサの指定、テンプレートの個別指定、優先度ファイルの指定がある。
ターゲットプロセッサを指定した場合、対象ソース10のプラグマ情報に記載のテンプレート種別であって、かつ、そのテンプレートに基づくオブジェクトコードが、指定されたターゲットプロセッサで実行可能なテンプレートがテンプレート候補となる。
テンプレートをただひとつ指定した場合、そのテンプレートが唯一のテンプレート候補となる。
優先度ファイルを指定した場合、その優先度ファイルに優先度の記載があるテンプレートについては、TDB3においてそのテンプレートに関連付けて格納された優先度に代わり、優先度ファイルに記載の優先度を用いてテンプレートの選択を行う。
このようにして、ソースコード最適化ツール7は、対象ソース10にプラグマ情報として記述されたテンプレート種別の中からテンプレート候補を選択する。次に、ソースコード最適化ツール7は、テンプレート候補の各テンプレートの優先度を比較して、最も高い優先度が付与されたテンプレートを選択する。
ここで、図4の対象ソース10を入力したとき、ソースコード最適化ツール7が行うテンプレート選択を例に挙げて説明する。このとき、ターゲットプロセッサをCORE-AVX2と指定するものとする。また、このとき、図6の優先度ファイル20を指定するものとする。図6の優先度ファイル20、filter2d_prio.yamlには、ターゲットプロセッサCORE-AVX2及びAVXの両方について、テンプレート種別filter2dに属する全てのテンプレートの優先度が記述されているものとする。
図4の対象ソース10のプラグマ情報には、テンプレート種別filter2dが記述されている。優先度ファイル20には、ターゲットプロセッサCORE-AVX2について、テンプレート種別filter2dに属する全てのテンプレートの優先度が記述されているので、テンプレート選択の際に参照するのは、TDB3に格納されている優先度ではなく、優先度ファイル20に記述された優先度である。
優先度ファイル20によれば、テンプレート種別がfilter2dであり、ターゲットプロセッサがCORE-AVX2であるときのテンプレート名、優先度が6組記述されている。テンプレート候補になるのはこれら6つのテンプレート名とテンプレート種別filter2dの組み合わせで表されるテンプレートである。
これら6組のうち、条件を満たすテンプレートの中で優先度が最も高い(優先度の値が最小)のは、テンプレート名blocking_xyである。従って、このとき、ソースコード最適化ツール7は、テンプレート種別filter2d、テンプレート名blocking_xyで表されるテンプレートを選択する。
優先度ファイルが指定されていない場合、ソースコード最適化ツール7は、TDB3に格納されている各テンプレートの優先度に基づいて、テンプレートを選択する。
図4の対象ソース10ではテンプレート条件が指定されていない。しかし、テンプレート条件が指定されている場合、ソースコード最適化ツール7は、、指定のテンプレート条件に該当するテンプレートのみをテンプレート候補として選択する。例えば、図4の対象ソース10のプラグマ情報にプラグマ条件としてsymmetricが指定されていると仮定した場合、ソースコード最適化ツール7は、テンプレート条件symmetricが付与されたテンプレートをTDB3にて検索し、該当するテンプレートもテンプレート候補として選び、更に、テンプレート候補の各テンプレートの優先度に基づいて、対象ソース10に適用するテンプレートを選択する。
対象ソース10に指定する他のテンプレート条件の例として、特定のパラメータが定数であることを設定してもよい。こうしたテンプレート条件の一例としては、対象ソース10のプラグマにおいて、kernel(p,w)と指定する場合に、wが定数であるという条件がある。この条件は、例えばkernel(p, 7)と指定された場合に成立する。
こうしてテンプレートを選択した後、ソースコード最適化ツール7は、選択したテンプレートの引数として、対象ソース10のプラグマ情報に記述されている変数を適用することにより、最適化ソース11を生成する。
次に、ソースコード最適化システム1の動作について説明する。ソースコード最適化システム1の動作は大きく分けて、TDB3の構築、対象ソース10の作成、最適化ソース11の生成の三段階からなる。
図7を参照してTDB3の構築について説明する。ここでは、テンプレート化コンパイラ4を中心として、専門家が作成する見本ソース8に基づくテンプレートのデータベースを構築する。
専門家は見本ソース8を作成して、テンプレート化コンパイラ4に入力する(ステップS1)。
テンプレート化コンパイラ4は、入力された見本ソース8に基づいて、テンプレート9を生成する(ステップS2)。
TDB3は、ステップS2で生成されたテンプレート9を格納する(ステップS3)。
専門家は、ステップS3でTDB3に格納されたテンプレート9に必要な関連付けを行う(ステップS4)。テンプレート9に関連付けるのは、例えば、そのテンプレートのテンプレート種別、テンプレート名、ターゲットプロセッサ毎の優先度、そのテンプレートに関する条件(テンプレート条件)である。
以上のステップS1〜S4を繰り返し行うことにより、最適化に十分な種類のテンプレートを予めTDB3に用意しておく。
次に、対象ソース10の作成について説明する。一般ユーザは、最適化の対象となる対象ソース10を作成する。その際、一般ユーザは、TDB3のテンプレートに基づいて図8のようにして対象ソースを作成する。尚、対象ソース10、優先度ファイル20の作成は、例えば一般的なテキストエディターで行うことができる。
まず、一般ユーザは、ソースコードコンパイラ5に対し、TDB3に格納されているテンプレートのリスト(テンプレートリスト)を表示するように命令する。これに応じて、ソースコードコンパイラ5はテンプレートリストを表示する(ステップS11)。
一般ユーザは、ステップS12で表示されたテンプレートリストを参照して、対象ソース10にプラグマ情報を記述する(ステップS12)。この記述は、図4の対象ソース10では記述10Aに相当する。プラグマ情報には、テンプレート種別、テンプレートの引数として適用する変数、テンプレート条件等が含まれる。
対象ソース10を作成する際、一般ユーザは、必要に応じて、一般的なコンパイラプログラムによるコンパイルの対象となるソースコードを対象ソース10に記述することとしてもよい(ステップS13)。このソースコードは、ソースコードコンパイラ5による最適化の対象とはならない。このソースコードを非対象ソースと呼ぶものとする。図4の対象ソース10において、非対象ソースは、括弧10Bから括弧10Cの記述に相当する。
更に、TDB3に格納されている優先度とは異なる優先度の適用を希望する場合、一般ユーザは、優先度ファイル20を作成する(ステップS14)。TDB3に格納されている優先度をそのまま適用する場合には、優先度ファイル20を作成する必要はない。
次に、最適化ソース11の生成について説明する。最適化ソース11の生成はソースコードコンパイラ5が中心となって行う。
ターゲットプロセッサを指定した最適化を希望する場合、一般ユーザは、ソースコードコンパイラ5に指定可能なターゲットプロセッサの表示を命令する(ステップS21)。このとき、プラグマ情報抜出ツール6はターゲットプロセッサとして指定可能なプロセッサのリスト(プロセッサリスト)を表示する。プロセッサリストはTDB3に格納されているテンプレートに基づいて定められる。
一般ユーザは、対象ソース10をソースコードコンパイラ5に入力する(ステップS22)。このとき、優先度ファイル20を作成した場合には、一般ユーザは、優先度ファイル20もソースコードコンパイラ5に入力する(ステップS23)。例えば、対象ソース10を指定してプラグマ情報抜出ツール6を実行する。ターゲットプロセッサを指定する場合には、更にステップS21で表示されたプロセッサリストの中からターゲットプロセッサをプラグマ情報抜出ツール6に対して指定する(ステップS24)。
ソースコードコンパイラ5において、プラグマ情報抜出ツール6は、ステップS22で入力された対象ソース10から、ソースコードコンパイラ5宛のプラグマ情報を抜き出す(ステップS25)。
ソースコード最適化ツール7は、ステップS25で抜き出したプラグマ情報に記述されたテンプレート種別、テンプレート条件と、ステップS24で指定されたターゲットプロセッサに基づいて、テンプレート候補を選択する(ステップS26)。
ソースコード最適化ツール7は、ステップS26で選択したテンプレート候補に含まれる各テンプレートの優先度を互いに比較して、優先度が最も高いテンプレートを選択する(ステップS27)。
ステップS22において優先度ファイル20が入力され、かつ、その優先度ファイル20にそのテンプレートの優先度が記述されている場合、ステップS27では、そのテンプレートの優先度として優先度ファイル20の値を用いてテンプレート選択を行う。
他方、ステップS22において優先度ファイル20が入力されていない場合、或いは、入力されたがそのテンプレートの優先度が記述されていない場合、ステップS27では、そのテンプレートの優先度としてTDB3に格納されている値を用いてテンプレート選択を行う。
最後に、ソースコード最適化ツール7は、ステップS25で選択したテンプレートの引数として、対象ソース10のプラグマ情報にて指定した変数を適用して、最適化ソース11を生成する(ステップS28)。
本実施の形態によれば、専門家が作成する見本ソースからテンプレートを作成する。そのため、様々な最適化方式のテンプレートを随時テンプレートデータベースに追加することができる。一般ユーザは、様々なテンプレートを用いて対象ソースの最適化を図ることができる。
(第2の実施の形態)
本発明の第2の実施の形態であるソースコード最適化システム30について図10を参照して説明する。
入力である見本ソース8、対象ソース10と、出力である最適化ソース11については第1の実施の形態と同様なので説明を省略する。ソースコード最適化システム30は、テンプレート生成部31、テンプレートデータベース(TDB)32、ソースコード最適化部33を備える。
テンプレート生成部31、TDB32、ソースコード最適化部33は、いずれも、ひとつ或いは複数のコンピュータと、これらコンピュータ上で実行されるプログラムからなる。テンプレート生成部31、TDB32、ソースコード最適化部33がすべて同一のコンピュータによって実現されてもよい。コンピュータは例えばデスクトップコンピュータ、ラップトップコンピュータ、ワークステーションが考えられるが、特に種類を問わない。コンピュータは適当なオペレーティングシステムを実行し、その上で、テンプレート生成部31、TDB32、ソースコード最適化部33としてコンピュータを機能させるプログラムを実行する。
テンプレート生成部31は、ソースコード最適化システム1におけるテンプレート化コンパイラ4に対応する。図11に示すように、テンプレート生成部31は、テンプレート範囲決定部31A、パラメータ決定部31B、生成部31Cを備える。
テンプレート範囲決定部31Aは、見本ソース8からテンプレート化する部分を決定する。決定する際の基準としては見本ソース8に予め記述したコメントを用いることが考えられる。具体例としては、見本ソース8を記述する際に、専門家は、テンプレート化しようとする部分の直前に//! begin templateを記述し、その部分の直後に//!end templateを記述する。テンプレート範囲決定部31Aは、見本ソース8から//! begin templateと//!end templateの間に挟まれたコメントを抽出する。以下、専門家がテンプレート化しようとして見本ソース8に記述する部分をテンプレート化対象部分と呼ぶ。
このように、テンプレート化対象部分をコメントとして見本ソース8に記述する代わりに、プラグマとして記述することとしてもよい。この場合、テンプレート範囲決定部31Aは、見本ソース8からプラグマを抽出する。
パラメータ決定部31Bは、テンプレート範囲決定部31Aが抽出したテンプレート化対象部分の中から、一般化表現に置き換える部分を決定する。一般化表現に置換する部分を一般化対象と呼ぶものとする。一般化対象は例えば変数、型である。
パラメータ決定部31Bが一般化対象として決定する際の基準としては、見本ソース8のコメントを用いることが考えられる。例えば、専門家は、見本ソース8を記述する際に、一般化対象とする変数、型の直前に、//! var-paramと記述することが考えられる。
生成部31Cは、テンプレート化対象部分の一般化対象を一般化表現に置換したもの、即ち、テンプレートを生成する。
具体的には、生成部31Cは、テンプレート範囲決定部31Aが出力するテンプレート化対象部分のうち、パラメータ決定部31Bが決定した一般化対象を、例えば$T0や$v0といった一般化表現に変換したソースコードを生成し、そのソースコードをテンプレートとして出力する。
尚、テンプレートにおいて一般化表現を記述する形式は、$T0や$v0といった形には限らない。
TDB32はソースコード最適化システム1におけるTDB3に対応する。TDB32は、テンプレート生成部31が生成したテンプレートを格納する。また、TDB32は、ソースコード最適化部33からの要求に応じて、格納しているテンプレートをソースコード最適化部33に渡す。
次に説明するソースコード最適化部33によって最適化を実行する前に、テンプレート生成部31は、十分な種類のテンプレートを生成し、TDB3に登録してあることが好ましい。
ソースコード最適化部33は、ソースコード最適化システム1におけるソースコードコンパイラ5に対応する。図12に示すように、ソースコード最適化部33は、テンプレート適用箇所決定部33A、テンプレート選択部33B、コード生成部33Cを備える。
テンプレート適用箇所決定部33Aは、ソースコード最適化システム1におけるプラグマ情報抜出ツール6に対応する。テンプレート適用箇所決定部33Aは、外部から入力される対象ソース10を読み込む。テンプレート適用箇所決定部33Aは、対象ソース10の中から、テンプレートを適用することによって最適化の対象部分を決定する。
対象ソース10を記述する際のルールとして、最適化の対象部分を明示する書式を予め定義しておく。このルールに従って、一般ユーザは、対象ソース10を作成する際、最適化の対象部分を明示する。テンプレート適用箇所決定部33Aは、このルールに従って、最適化の対象とする部分を抽出する。例えば、図4では、記述10Aのプラグマの直後に続く、括弧10Bと括弧10Cで囲まれた部分が、最適化の対象部分として予めルール化されている。
最適化の対象部分の明示に関するルールには、他のルールも考えられる。例えば、対象ソース10において、最適化の対象部分の前後に、所定の文字列をコメントとして記述するというルールが考えられる。この場合、一般ユーザは、最適化の対象部分の前後に所定文字列をコメントとして記述する。テンプレート適用箇所決定部33Aは所定文字列を目印として最適化の対象部分を抽出する。
こうした最適化の対象部分の明示に関するルールを予め定める代わりに、テンプレート適用箇所決定部33Aが対象ソース10を解析して、最適化の対象部分を決定することとしてもよい。
テンプレート適用箇所決定部33Aの解析によって決定する場合、一般ユーザは、最適化の対象部分をテンプレート適用箇所決定部33Aに知らせるための記述、例えば上述のプラグマと括弧{}の組み合わせや、所定文字列のコメントの記述を行う必要はない。
また、テンプレート適用箇所決定部33Aの解析によって決定する場合、最適化の対象部分の定義を予め定めておき、その定義をテンプレート適用箇所決定部33Aの記憶装置に予め格納しておく。テンプレート適用箇所決定部33Aは、対象ソース10の中に、その定義に合致する部分があるか否かを解析する。合致する部分がある場合、テンプレート適用箇所決定部33Aは、その部分を最適化の対象部分として抽出する。
テンプレート選択部33Bは、ソースコード最適化システム1におけるソースコード最適化ツール7のステップS26の動作に対応する。テンプレート選択部33Bは、テンプレート適用箇所決定部33Aから最適化の対象部分を受け取ると、その対象部分に対し、TDB32に格納されているテンプレートの中で最適なテンプレートを選択する。
テンプレートの選択手法には様々なものが考えられる。例えば、ソースコード最適化ツール7のステップS26と同様に、最適化の対象部分に適用するテンプレート種別、テンプレート条件を、対象ソース10にプラグマとして記述することを予めルールとして定めることが考えられる。この場合、一般ユーザは、対象ソース10にプラグマとしてテンプレート種別、テンプレート条件を記述する。テンプレート選択部33Bは、対象ソース10のプラグマからテンプレート種別、テンプレート条件を抽出し、これらに該当するテンプレートをTDB32から選択し、その選択したテンプレートの中で最も高い優先度を有するものを選択する。
また、他のテンプレートの選択手法としては、ソースコード最適化部33に対象ソース10を入力する際に、その対象ソース10に適用するテンプレートを一般ユーザが指定することが考えられる。例えば、ソースコード最適化部33をコマンドラインプログラムとして実装する場合、一般ユーザは、コマンドライン引数として、対象ソース10に適用するテンプレートを指定する。事前に、一般ユーザは、TDB33に格納されているテンプレートの中から、対象ソース10に適用するテンプレートを選択しておく。
コード生成部33Cは、ソースコード最適化システム1におけるソースコード最適化ツール7のステップS27の動作に対応する。コード生成部33Cは、テンプレート適用箇所決定部33Aが選択した最適化の対象部分に対して、テンプレート選択部33Bが選択したテンプレートを適用して、最適化ソース11を生成し出力する。
テンプレートの適用手法は、例えば、プラグマで記述された変数でテンプレート中の一般化表現を置き換える方法が考えられる。
また、他のテンプレートの適用手法としては、コード生成部33Cが対象ソース10を解析して、適用しようとしているテンプレート中の一般化表現に対応する特定表現を決定することが考えられる。
このようにして、ソースコード最適化システム30では、専門家が作成した見本ソース8に基づいて、テンプレート生成部31がテンプレートを生成することにより、TDB32に十分なテンプレートを格納する。その上で、ソースコード最適化部33は、一般ユーザが作成した対象ソース10に対して、TDB32に格納されているテンプレートを適用して、最適化ソース11を生成する。
上記の実施形態の一部又は全部は以下の付記のようにも記載されうるが、以下には限られない。
(付記1)
入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する、テンプレート生成手段と、
対象ソースに対して前記テンプレートを適用することにより、前記対象ソースを最適化したソースコードである最適化ソースを生成する、ソースコード最適化手段と
を備える、ソースコード最適化システム。
(付記2)
前記テンプレート生成手段は、前記見本ソースに含まれるコメントに基づいて、一般化表現に置換すべきコードを選択する、付記1に記載のソースコード最適化システム。
(付記3)
前記ソースコード最適化手段は、前記対象ソースに含まれるプラグマに基づいて、予め生成した複数の前記テンプレートの中から、前記対象ソースに適用すべき1つのテンプレートを選択する、付記1または付記2に記載のソースコード最適化システム。
(付記4)
前記ソースコード最適化手段は、テンプレートの適用に関してテンプレート毎に予め定められた条件に基づいて、予め生成した複数の前記テンプレートの中から、前記対象ソースに適用すべき1つのテンプレートを選択する、付記1乃至付記3のいずれかに記載のソースコード最適化システム。
(付記5)
前記ソースコード最適化手段は、テンプレート毎に予め定められた優先度に基づいて、予め生成した複数の前記テンプレートの中から、前記対象ソースに適用すべき1つのテンプレートを選択する、付記1乃至付記4のいずれかに記載のソースコード最適化システム。
(付記6)
前記テンプレート生成手段は、前記見本ソースからループ構造を検出し、該検出したループ構造を一般化表現に変換し、該変換したループ構造を含む前記テンプレートを生成する、付記1乃至付記5のいずれかに記載のソースコード最適化システム。
(付記7)
付記1乃至付記6のいずれかに記載のソースコード最適化システムの前記テンプレート生成手段として動作する装置である、テンプレート生成装置。
(付記8)
付記1乃至付記6のいずれかに記載のソースコード最適化システムの前記ソースコード最適化手段として動作する装置である、ソースコード最適化装置。
(付記9)
入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する、テンプレート生成手段と、
対象ソースに対して前記テンプレートを適用することにより、前記対象ソースを最適化したソースコードである最適化ソースを生成する、ソースコード最適化手段と
のうち、少なくとも一方としてコンピュータを動作させるプログラム。
(付記10)
前記テンプレート生成手段は、前記見本ソースに含まれるコメントに基づいて、前記テンプレートとして一般化表現に置換すべき前記見本ソースコードを選択する、付記9に記載のプログラム。
(付記11)
前記テンプレート生成手段は、異なる種類の複数のテンプレートを生成し、
前記ソースコード最適化手段は、前記対象ソースに含まれるプラグマに基づいて、前記複数のテンプレートの中から、前記対象ソースに適用すべき1つのテンプレートを選択する、付記9または付記10に記載のプログラム。
(付記12)
前記テンプレート生成手段は、異なる種類の複数のテンプレートを生成し、
前記ソースコード最適化手段は、テンプレートの適用に関してテンプレート毎に予め定められた条件に基づいて、前記複数のテンプレートの中から、前記対象ソースに適用すべき1つのテンプレートを選択する、付記9乃至付記11のいずれかに記載のプログラム。
(付記13)
前記テンプレート生成手段は、異なる種類の複数のテンプレートを生成し、
前記ソースコード最適化手段は、テンプレート毎に予め定められた優先度に基づいて、前記複数のテンプレートの中から、前記対象ソースに適用すべき1つのテンプレートを選択する、付記9乃至付記12のいずれかに記載のプログラム。
(付記14)
前記テンプレート生成手段は、前記見本ソースからループ構造を検出し、該検出したループ構造を一般化表現に変換し、該変換したループ構造をも前記テンプレートとして出力する、付記9乃至付記13のいずれかに記載のプログラム。
(付記15)
情報処理装置によって、入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する、テンプレート生成段階と、
情報処理装置によって、対象ソースに対して前記テンプレートを適用することにより、前記対象ソースを最適化したソースコードである最適化ソースを生成する、ソースコード最適化段階と
を含むソースコード最適化方法。
(付記16)
前記テンプレート生成段階は、前記見本ソースに含まれるコメントに基づいて、前記テンプレートとして一般化表現に置換すべき前記見本ソースコードを選択する、付記15に記載のソースコード最適化方法。
(付記17)
前記テンプレート生成段階は、異なる種類の複数のテンプレートを生成し、
前記ソースコード最適化段階は、前記対象ソースに含まれるプラグマに基づいて、前記複数のテンプレートの中から、前記対象ソースに適用すべき1つのテンプレートを選択する、付記15または付記16に記載のソースコード最適化方法。
(付記18)
前記テンプレート生成段階は、異なる種類の複数のテンプレートを生成し、
前記ソースコード最適化段階は、テンプレートの適用に関してテンプレート毎に予め定められた条件に基づいて、前記複数のテンプレートの中から、前記対象ソースに適用すべき1つのテンプレートを選択する、付記15乃至付記17のいずれかに記載のソースコード最適化方法。
(付記19)
前記テンプレート生成段階は、異なる種類の複数のテンプレートを生成し、
前記ソースコード最適化段階は、テンプレート毎に予め定められた優先度に基づいて、前記複数のテンプレートの中から、前記対象ソースに適用すべき1つのテンプレートを選択する、付記15乃至付記18のいずれかに記載のソースコード最適化方法。
(付記20)
前記テンプレート生成段階は、前記見本ソースからループ構造を検出し、該検出したループ構造を一般化表現に変換し、該変換したループ構造をも前記テンプレートとして生成する、付記15乃至付記19のいずれかに記載のソースコード最適化方法。
(付記21)
見本ソースコードを含む見本ソースに含まれる、データ型及び変数の少なくとも一部を一般化表現に置換したソースコードをテンプレートと呼ぶとき、複数の前記テンプレートからなるグループを指定する記述であるテンプレート種別を、最適化の対象となるソースコードである対象ソースから抜き出す情報抜出手段と、
前記抜き出したテンプレート種別によって指定される、前記グループに属する複数のテンプレートそれぞれに予め関連付けられた優先度に基づいて、前記複数のテンプレートのひとつを選択し、前記対象ソースに対して選択した前記テンプレートを適用することにより、前記対象ソースに基づく最適化ソースを生成する、最適化手段と
を備える、ソースコード最適化装置。
(付記22)
前記対象ソースは、一般化表現を置換する特定表現を含み、
前記情報抜出手段は、前記対象ソースから前記特定表現を抜き出し、
前記最適化手段は、前記選択したテンプレートの前記一般化表現を、前記情報抜出手段が抜き出した前記特定表現と置換する
付記21に記載のソースコード最適化装置。
(付記23)
前記テンプレート種別は、前記ソースコード最適化手段に予め関連付けられたプラグマ情報として対象ソースに記述される、付記21または付記22に記載のソースコード最適化装置。
(付記24)
前記情報抜出手段は、前記テンプレートの適用に関連する条件であるテンプレート条件を指定する記述を、前記対象ソースから抜き出し、
前記最適化手段は、前記抜き出したテンプレート条件を指定する記述と、前記テンプレートに予め関連付けられた前記テンプレート条件とに基づいて、前記複数のテンプレートのひとつを選択する、
付記21乃至付記23のいずれかに記載のソースコード最適化装置。
(付記25)
前記テンプレートは、予めプロセッサ毎に優先度が関連付けられ、
前記最適化手段は、外部から指定されるターゲットプロセッサと、前記予め関連付けらた前記優先度とに基づいて、前記複数のテンプレートのひとつを選択する、
付記21乃至付記24のいずれかに記載のソースコード最適化装置。
(付記26)
予め作成された見本ソースコードを含む見本ソースに含まれる、データ型と変数の少なくとも一部を一般化表現に置換して、ソースコードの複数のテンプレートを生成するテンプレート化手段と、
前記複数のテンプレートを、それぞれ、そのテンプレートの優先度と関連付けて格納する記憶手段と、
付記21乃至付記25のいずれかに記載のソースコード最適化装置と
を備える、ソースコード最適化システム。
(付記27)
見本ソースコードを含む見本ソースに含まれる、データ型及び変数の少なくとも一部を一般化表現に置換したソースコードをテンプレートと呼ぶとき、複数の前記テンプレートからなるグループを指定する記述であるテンプレート種別を、最適化の対象となるソースコードである対象ソースから抜き出す情報抜出手段と、
前記抜き出したテンプレート種別によって指定される、前記グループに属する複数のテンプレートそれぞれに予め関連付けられた優先度に基づいて、前記複数のテンプレートのひとつを選択し、前記対象ソースに対して選択した前記テンプレートを適用することにより、前記対象ソースに基づく最適化ソースを生成する、最適化手段と
してコンピュータを機能させるプログラム。
(付記28)
前記対象ソースは、一般化表現を置換する特定表現を含み、
前記情報抜出手段は、前記対象ソースから前記特定表現を抜き出し、
前記最適化手段は、前記選択したテンプレートの前記一般化表現を、前記情報抜出手段が抜き出した前記特定表現と置換する
付記27に記載のプログラム。
(付記29)
前記テンプレート種別は、前記ソースコード最適化手段に予め関連付けられたプラグマ情報として対象ソースに記述される、付記27または付記28に記載のプログラム。
(付記30)
前記情報抜出手段は、前記テンプレートの適用に関連する条件であるテンプレート条件を指定する記述を、前記対象ソースから抜き出し、
前記最適化手段は、前記情報抜出手段が抜き出した、前記テンプレート条件を指定する記述と、前記テンプレートに予め関連付けられた前記テンプレート条件とに基づいて、前記複数のテンプレートのひとつを選択する、
付記27乃至付記29のいずれかに記載のプログラム。
(付記31)
前記テンプレートは、予めプロセッサ毎に優先度が関連付けられ、
前記最適化手段は、外部から指定されるターゲットプロセッサと、前記予め関連付けらた前記優先度とに基づいて、前記複数のテンプレートのひとつを選択する、
付記27乃至付記30のいずれかに記載のプログラム。
(付記32)
見本ソースコードを含む見本ソースに含まれる、データ型及び変数の少なくとも一部を一般化表現に置換したソースコードをテンプレートと呼ぶとき、複数の前記テンプレートからなるグループを指定する記述であるテンプレート種別を、最適化の対象となるソースコードである対象ソースからコンピュータが抜き出す情報抜出段階と、
前記抜き出したテンプレート種別によって指定される、前記グループに属する複数のテンプレートそれぞれに予め関連付けられた優先度に基づいて、前記複数のテンプレートのひとつを選択し、前記対象ソースに対して選択した前記テンプレートを適用することにより、前記対象ソースに基づく最適化ソースをコンピュータが生成する、最適化段階と
を含むソースコード最適化方法。
(付記33)
前記対象ソースは、一般化表現を置換する特定表現を含み、
前記情報抜出段階は、前記対象ソースから前記特定表現を抜き出し、
前記最適化段階は、前記選択したテンプレートの前記一般化表現を、前記情報抜出段階が抜き出した前記特定表現と置換する
付記32に記載のソースコード最適化方法。
(付記34)
前記テンプレート種別は、前記ソースコード最適化段階に予め関連付けられたプラグマ情報として対象ソースに記述される、付記32または付記33に記載のソースコード最適化方法。
(付記35)
前記情報抜出段階は、前記テンプレートの適用に関連する条件であるテンプレート条件を指定する記述を、前記対象ソースから抜き出し、
前記最適化段階は、前記抜き出したテンプレート条件を指定する記述と、前記テンプレートに予め関連付けられた前記テンプレート条件とに基づいて、前記複数のテンプレートのひとつを選択する、
付記32乃至付記34のいずれかに記載のソースコード最適化方法。
(付記36)
前記テンプレートは、予めプロセッサ毎に優先度が関連付けられ、
前記最適化段階は、外部から指定されるターゲットプロセッサと、前記予め関連付けらた前記優先度とに基づいて、前記複数のテンプレートのひとつを選択する、
付記32乃至付記35のいずれかに記載のソースコード最適化方法。
1、30 ソースコード最適化システム
2 コレクティブコンパイラ
3、32 テンプレートデータベース(TDB)
4 テンプレート化コンパイラ
5 ソースコードコンパイラ
6 プラグマ情報抜出ツール
7 ソースコード最適化ツール
8 見本ソース
9 テンプレート
10 対象ソース
11 最適化ソース
20 優先度ファイル
31 テンプレート生成部
31A テンプレート範囲決定部
31B パラメータ決定部
31C 生成部
33 ソースコード最適化部
33A テンプレート適用箇所決定部
33B テンプレート選択部
33C コード生成部

Claims (10)

  1. 入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する、テンプレート生成手段と、
    対象ソースに対して前記テンプレートを適用することにより、前記対象ソースを最適化したソースコードである最適化ソースを生成する、ソースコード最適化手段と
    を備える、ソースコード最適化システム。
  2. 前記テンプレート生成手段は、前記見本ソースに含まれるコメントに基づいて、一般化表現に置換すべきコードを選択する、請求項1に記載のソースコード最適化システム。
  3. 前記ソースコード最適化手段は、前記対象ソースに含まれるプラグマに基づいて、予め生成した複数の前記テンプレートの中から、前記対象ソースに適用すべき1つのテンプレートを選択する、請求項1または請求項2に記載のソースコード最適化システム。
  4. 前記ソースコード最適化手段は、テンプレートの適用に関してテンプレート毎に予め定められた条件に基づいて、予め生成した複数の前記テンプレートの中から、前記対象ソースに適用すべき1つのテンプレートを選択する、請求項1乃至請求項3のいずれかに記載のソースコード最適化システム。
  5. 前記ソースコード最適化手段は、テンプレート毎に予め定められた優先度に基づいて、予め生成した複数の前記テンプレートの中から、前記対象ソースに適用すべき1つのテンプレートを選択する、請求項1乃至請求項4のいずれかに記載のソースコード最適化システム。
  6. 前記テンプレート生成手段は、前記見本ソースからループ構造を検出し、該検出したループ構造を一般化表現に変換し、該変換したループ構造を含む前記テンプレートを生成する、請求項1乃至請求項5のいずれかに記載のソースコード最適化システム。
  7. 請求項1乃至請求項6のいずれかに記載のソースコード最適化システムの前記テンプレート生成手段として動作する装置である、テンプレート生成装置。
  8. 請求項1乃至請求項6のいずれかに記載のソースコード最適化システムの前記ソースコード最適化手段として動作する装置である、ソースコード最適化装置。
  9. 入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する、テンプレート生成手段と、
    対象ソースに対して前記テンプレートを適用することにより、前記対象ソースを最適化したソースコードである最適化ソースを生成する、ソースコード最適化手段と
    のうち、少なくとも一方としてコンピュータを動作させるプログラム。
  10. 情報処理装置によって、入力された見本ソースの少なくとも一部のコードを一般化表現に置換し、該置換したコードを含むテンプレートを生成する、テンプレート生成段階と、
    情報処理装置によって、対象ソースに対して前記テンプレートを適用することにより、前記対象ソースを最適化したソースコードである最適化ソースを生成する、ソースコード最適化段階と
    を含むソースコード最適化方法。
JP2018024768A 2018-02-15 2018-02-15 ソースコード最適化装置、プログラムおよび方法 Pending JP2019139675A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2018024768A JP2019139675A (ja) 2018-02-15 2018-02-15 ソースコード最適化装置、プログラムおよび方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018024768A JP2019139675A (ja) 2018-02-15 2018-02-15 ソースコード最適化装置、プログラムおよび方法

Publications (1)

Publication Number Publication Date
JP2019139675A true JP2019139675A (ja) 2019-08-22

Family

ID=67694168

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018024768A Pending JP2019139675A (ja) 2018-02-15 2018-02-15 ソースコード最適化装置、プログラムおよび方法

Country Status (1)

Country Link
JP (1) JP2019139675A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7064680B1 (ja) * 2021-07-28 2022-05-11 SOPPRA Digital transformation株式会社 プログラムコード自動生成システム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7064680B1 (ja) * 2021-07-28 2022-05-11 SOPPRA Digital transformation株式会社 プログラムコード自動生成システム

Similar Documents

Publication Publication Date Title
JP7090778B2 (ja) 影響分析
JP4822817B2 (ja) コンパイルシステム
JP4100630B2 (ja) Uml設計方法
US8181171B2 (en) Method and apparatus for analyzing large scale program and generation of code from degenerated program dependence graph
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
JPH08234975A (ja) プログラム生成装置および方法
JP2009129179A (ja) プログラム並列化支援装置およびプログラム並列化支援方法
US8615708B1 (en) Techniques for live styling a web page
KR100456023B1 (ko) 절차 지향 프로그램을 컴포넌트 기반의 시스템으로래핑하기 위한 방법 및 그 장치
JP2005196291A (ja) ユーザインタフェースアプリケーション開発プログラム、および開発装置
WO2009098739A1 (ja) プログラム最適化装置およびプログラム最適化方法
US11611627B2 (en) Action flow fragment management
Gabmeyer et al. A feature-based classification of formal verification techniques for software models
US8145992B2 (en) Validation assisted document conversion design
Boucher et al. Towards more reliable configurators: A re-engineering perspective
US10691434B2 (en) System and method for converting a first programming language application to a second programming language application
Borowski et al. Graph Buddy—an interactive code dependency browsing and visualization tool
JP6651974B2 (ja) 情報処理装置、コンパイル方法及びコンパイラプログラム
JP2008276735A (ja) プログラムコード変換装置及びプログラムコード変換方法
JP4867864B2 (ja) 性能データ収集・表示システム、性能データ表示装置、そのプログラム
JP5405684B1 (ja) ソースプログラムのプログラミング言語変換装置
JP2019139675A (ja) ソースコード最適化装置、プログラムおよび方法
JP7260150B2 (ja) Webサイト設計支援装置、Webサイト設計支援方法、及びプログラム
Harrison et al. Tools for multiple-CPU environments
JP5932707B2 (ja) 計算機、プログラム及びデータ生成方法