IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

<>
  • 特許-情報処理方法及び最適化プログラム 図1
  • 特許-情報処理方法及び最適化プログラム 図2
  • 特許-情報処理方法及び最適化プログラム 図3
  • 特許-情報処理方法及び最適化プログラム 図4
  • 特許-情報処理方法及び最適化プログラム 図5
  • 特許-情報処理方法及び最適化プログラム 図6
  • 特許-情報処理方法及び最適化プログラム 図7
  • 特許-情報処理方法及び最適化プログラム 図8
  • 特許-情報処理方法及び最適化プログラム 図9
  • 特許-情報処理方法及び最適化プログラム 図10
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-04-17
(45)【発行日】2023-04-25
(54)【発明の名称】情報処理方法及び最適化プログラム
(51)【国際特許分類】
   G06F 8/41 20180101AFI20230418BHJP
【FI】
G06F8/41 130
【請求項の数】 6
(21)【出願番号】P 2019168077
(22)【出願日】2019-09-17
(65)【公開番号】P2021047480
(43)【公開日】2021-03-25
【審査請求日】2022-06-09
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】野津 隆弘
【審査官】北川 純次
(56)【参考文献】
【文献】特開2016-40691(JP,A)
【文献】特開2013-242604(JP,A)
【文献】国際公開第2018/163304(WO,A1)
【文献】米国特許出願公開第2009/0276766(US,A1)
【文献】米国特許出願公開第2016/0085528(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/41
(57)【特許請求の範囲】
【請求項1】
対象プログラムを実行することで、各プログラムコードの実行回数を取得し、
前記実行回数が上位の代入文に関するプログラムコードの中から、複数個の代入文に関するプログラムコードの組み合わせを選択し、
選択した組み合わせに含まれる前記複数個の代入文に関するプログラムコードそれぞれについてSIMD演算機能を用いた並列処理が実行されるよう、前記対象プログラムが変更された場合に、該変更された対象プログラムを実行することで、実行精度と演算時間とを算出し、
算出した実行精度と演算時間とが所定の条件を満たすように、前記組み合わせを探索する、
処理をコンピュータが実行する情報処理方法。
【請求項2】
実行回数が上位の代入文に関するプログラムコードに対して、進化計算を行うことで、前記組み合わせを探索する、請求項1に記載の情報処理方法。
【請求項3】
実行回数が上位の代入文に関するプログラムコードの中から、複数個の代入文に関するプログラムコードの第1の組み合わせを選択し、実行回数が上位の代入文に関するプログラムコードの中から、複数個の代入文に関するプログラムコードの第2の組み合わせを選択した場合において、第1の組み合わせと第2の組み合わせとを交叉させることで、前記組み合わせを新たに選択する、請求項2に記載の情報処理方法。
【請求項4】
実行回数が上位の代入文に関するプログラムコードの中から、複数個の代入文に関するプログラムコードの組み合わせを選択した場合において、該組み合わせの一部の選択を非選択に、または、一部の非選択を選択に変更することで、前記組み合わせを新たに選択する、請求項2に記載の情報処理方法。
【請求項5】
実行回数が上位の代入文に関するプログラムコードのうち、前記実行精度が低く、かつ、前記演算時間が長い代入文に関するプログラムコードを、前記実行回数が上位の代入文に関するプログラムコードから除外する、請求項1に記載の情報処理方法。
【請求項6】
対象プログラムを実行することで、各プログラムコードの実行回数を取得し、
前記実行回数が上位の代入文に関するプログラムコードの中から、複数個の代入文に関するプログラムコードの組み合わせを選択し、
選択した組み合わせに含まれる前記複数個の代入文に関するプログラムコードそれぞれについてSIMD演算機能を用いた並列処理が実行されるよう、前記対象プログラムが変更された場合に、該変更された対象プログラムが実行することで、実行精度と演算時間とを算出し、
算出した実行精度と演算時間とが所定の条件を満たすように、前記組み合わせを探索する、
処理をコンピュータに実行させるための最適化プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理方法及び最適化プログラムに関する。
【背景技術】
【0002】
従来より、プログラムを最適化する最適化技術の1つとして、SIMD(Single Instruction Multiple Data)演算機能を用いた並列処理が知られている。当該最適化技術によれば、プログラムの実行精度を縮小することで、演算時間を短縮することができる。
【先行技術文献】
【特許文献】
【0003】
【文献】特開2016-40691号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、上記最適化技術の場合、実行精度を縮小する対象を適切に選択しなければ、演算時間の短縮において十分な効果を得ることができない。
【0005】
一つの側面では、SIMD演算機能を用いた並列処理において、実行精度を縮小する対象を適切に選択することを目的としている。
【課題を解決するための手段】
【0006】
一態様によれば、情報処理方法は、
対象プログラムを実行することで、各プログラムコードの実行回数を取得し、
前記実行回数が上位の代入文に関するプログラムコードの中から、複数個の代入文に関するプログラムコードの組み合わせを選択し、
選択した組み合わせに含まれる前記複数個の代入文に関するプログラムコードそれぞれについてSIMD演算機能を用いた並列処理が実行されるよう、前記対象プログラムが変更された場合に、該変更された対象プログラムを実行することで、実行精度と演算時間とを算出し、
算出した実行精度と演算時間とが所定の条件を満たすように、前記組み合わせを探索する、処理をコンピュータが実行する。
【発明の効果】
【0007】
SIMD演算機能を用いた並列処理において、実行精度を縮小する対象を適切に選択することができる。
【図面の簡単な説明】
【0008】
図1】情報処理装置のハードウェア構成の一例を示す図である。
図2】SIMD演算機能を用いた並列処理の概要を説明するための図である。
図3】プログラム最適化処理の流れを示すフローチャートである。
図4】コンパイル処理の流れを示すフローチャートである。
図5】プロファイル情報解析処理の流れを示すフローチャートである。
図6】プロファイル情報の一例を示す図である。
図7】候補の抽出例を示す図である。
図8】評価処理の流れを示すフローチャートである。
図9】組み合わせ探索処理の流れを示すフローチャートである。
図10】交叉及び突然変異に基づいて選択/非選択を決定する処理の具体例を示す図である。
【発明を実施するための形態】
【0009】
以下、各実施形態について添付の図面を参照しながら説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複した説明を省略する。
【0010】
[第1の実施形態]
<情報処理装置のハードウェア構成>
はじめに、最適化プログラムを実行することで、対象プログラムを最適化する情報処理装置のハードウェア構成について説明する。なお、第1の実施形態において"最適化"とは、対象プログラムにおいて、実行精度を縮小するプログラムコードを適切に選択することで、SIMD演算機能を用いた並列処理において、演算時間の短縮を実現することを指す。
【0011】
図1は、情報処理装置のハードウェア構成の一例を示す図である。図1に示すように、情報処理装置100は、CPU(Central Processing Unit)110と、ROM(Read Only Memory)120と、RAM(Random Access Memory)130とを有する。なお、CPU110と、ROM120と、RAM130とは、いわゆるコンピュータを形成する。
【0012】
また、情報処理装置100は、I/F(Interface)装置140と、補助記憶装置150と、操作装置160と、表示装置170とを有する。なお、情報処理装置100の各ハードウェアは、バス180を介して相互に接続される。
【0013】
CPU110は、補助記憶装置150にインストールされている各種プログラム(例えば、最適化プログラム、オリジナルプログラム(最適化する対象プログラム)、チューニングプログラム(最適化されたプログラム))を実行する演算デバイスである。CPU110は、SIMD演算機能を有し、チューニングプログラムに含まれる一部のプログラムコード(オリジナルプログラムにおいて適切に選択され、変換されたプログラムコード)を並列処理により実行する。
【0014】
ROM120は、不揮発性メモリであり、補助記憶装置150に格納されている各種プログラムをCPU110が実行するために必要なプログラムを格納する、主記憶デバイスである。
【0015】
RAM130は、揮発性メモリであり、補助記憶装置150にインストールされている各種プログラムをCPU110が実行する際に展開する作業領域を提供する、主記憶デバイスである。
【0016】
I/F装置140は、不図示のネットワークと接続するための通信デバイスである。
【0017】
補助記憶装置150は、各種プログラムや、CPU110が各種プログラムを実行する際に使用する情報、実行したことで生成される情報等を格納する補助記憶デバイスである。図1に示すように、第1の実施形態に係る情報処理装置100の場合、補助記憶装置150には、最適化プログラム151、プログラム解析変換コード152、オリジナルプログラム153、チューニングプログラム154が格納される。
【0018】
なお、最適化プログラム151は、CPU110によって実行されることで、最適化する対象プログラム(オリジナルプログラム153)の一部のプログラムコードを、プログラム解析変換コード152を用いて変換し、チューニングプログラム154を生成する。
【0019】
操作装置160は、最適化プログラム151がCPU110によって実行される際、情報処理装置100のユーザが情報処理装置100に対して各種指示を入力するのに用いる入力デバイスである。表示装置170は、最適化プログラム151がCPU110によって実行される際の情報処理装置100の内部状態を、ユーザに表示するための出力デバイスである。
【0020】
<SIMD演算機能を用いた並列処理の概要>
次に、CPU110のSIMD演算機能を用いた並列処理の概要について説明する。図2は、SIMD演算機能を用いた並列処理の概要を説明するための図である。図2に示すように、情報処理装置100のCPU110が128ビットのSIMD演算機能を有する場合、単精度演算では、演算対象のデータを、64ビットずつ、2並列で実行する(符号210参照)。一方、倍精度演算では、演算対象のデータを、32ビットずつ、4並列で実行する(符号220参照)。
【0021】
このように、SIMD演算機能では、演算対象のデータのビット数を落とし(実行精度を縮小し(例えば、64ビット→32ビット))、並列数を増やすことで(例えば、2並列→4並列)、1回の命令で実行する処理を増やし、演算時間の短縮を実現している。
【0022】
<プログラム最適化処理の流れ>
次に、対象プログラム(オリジナルプログラム153)を最適化するプログラム最適化処理の流れについて説明する。図3は、プログラム最適化処理の流れを示すフローチャートである。CPU110は最適化プログラム151を実行することで、図3に示すプログラム最適化処理に含まれる各処理を行う。
【0023】
ステップS301において、CPU110は最適化プログラム151を実行することでコンパイル処理を行う。具体的には、CPU110は最適化プログラム151を実行することで、最適化する対象プログラム(オリジナルプログラム153)を補助記憶装置150から読み出し、読み出したオリジナルプログラム153に対してコンパイル処理を行う(詳細は後述)。これにより、実行可能バイナリコード310が生成される。
【0024】
ステップS302において、CPU110は最適化プログラム151を実行することで、実行可能バイナリコード310を実行する。具体的には、CPU110は最適化プログラム151を実行することで、ユーザからの実行開始指示の受け付け処理を行い、実行開始指示を受け付けた場合に、実行可能バイナリコード310を実行し、プロファイル情報を生成する。
【0025】
ステップS303において、CPU110は最適化プログラム151を実行することで、プロファイル情報解析処理を行う。具体的には、CPU110は最適化プログラム151を実行することで、ステップS302で生成したプロファイル情報を取得し、取得したプロファイル情報を解析する。プロファイル情報には、オリジナルプログラム153の各プログラムコードの実行回数が含まれており、CPU110は、当該プロファイル情報を解析することで、実行回数が上位の代入文に関するプログラムコード320を抽出する。
【0026】
なお、第1の実施形態において、実行回数が上位の代入文に関するプログラムコード320は、SIMD演算機能を用いた単精度演算による並列処理が実行されるべき"候補"である。第1の実施形態では、当該候補の中から、適切な組み合わせを選択することで、演算時間の短縮を実現する。
【0027】
ステップS304において、CPU110は最適化プログラム151を実行することで、候補の中から、複数個のランダムな代入文に関するプログラムコードの組み合わせを選択する。
【0028】
ステップS305において、CPU110は最適化プログラム151を実行することで、オリジナルプログラム153に含まれるプログラムコードにおいて、選択した組み合わせに含まれる代入文に関するプログラムコードを特定する。また、CPU110は最適化プログラム151を実行することで、特定したプログラムコードを変換し、チューニングプログラム154を生成する。これにより、生成したチューニングプログラム154のうち、変換されたプログラムコードについて、SIMD演算機能を用いた単精度演算による並列処理が実行される。なお、変換にあたっては、プログラム解析変換コード152が用いられる。
【0029】
具体的には、オリジナルプログラム153において特定された代入文に関するプログラムコードについて、プログラム解析変換コード152を用いることで、例えば、
・倍精度演算を実行する三角関数(sin、cos等)を、単精度演算を実行する三角関数に変換する、
・変数の定義を、倍精度演算から単精度演算に変換する、
・数値を、倍精度演算の表記から、単精度演算の表記に変換する、
等の処理を行う。
【0030】
また、オリジナルプログラム153において特定された代入文に関するプログラムコードについて、SIMD演算機能を用いた単精度演算による並列処理を実行するプログラムコードであることを定義する処理を行う。
【0031】
なお、SIMD演算機能を用いた単精度演算による並列処理を実行するプログラムコードであることを定義する処理は、人為的に行われるものとする(例えば、ユーザが明示的に、"code.c"を記述することで定義されるものとする)。ただし、後述するコンパイル処理を行う際に、並列処理を実行させるプログラムコードを判定して定義するなど、自動的に行われてもよい。
【0032】
ステップS306において、CPU110は最適化プログラム151を実行することでコンパイル処理を行う。具体的には、CPU110は最適化プログラム151を実行することで、ステップS305で生成したチューニングプログラム154に対してコンパイル処理を行う。これにより、実行可能バイナリコード330が生成される。
【0033】
ステップS307において、CPU110は最適化プログラム151を実行することで、実行可能バイナリコード330を実行する。具体的には、CPU110は最適化プログラム151を実行することで、ユーザからの実行開始指示の受け付け処理を行い、実行開始指示を受け付けた場合に、実行可能バイナリコード330を実行する。
【0034】
ステップS308において、CPU110は最適化プログラム151を実行することで、評価処理を行う。具体的には、CPU110は最適化プログラム151を実行することで、実行可能バイナリコード330を実行した際の、実行性能(演算時間)と実行精度とを算出する(詳細は後述)。
【0035】
ステップS309において、CPU110は最適化プログラム151を実行することで、算出した実行性能(演算時間)と実行精度とが所定の条件を満たすか否かを判定する。ステップS309において、算出した実行性能(演算時間)と実行精度とが所定の条件を満たさないと判定した場合には、対象プログラム(オリジナルプログラム153)が最適化されていないと判定する(ステップS309においてNOと判定する)。
【0036】
ステップS310において、CPU110は最適化プログラム151を実行することで、組み合わせ探索処理を行う。具体的には、CPU110は最適化プログラム151を実行することで、候補の中から、適切な組み合わせ(実行性能(演算時間)と実行精度とが所定の条件を満たす組み合わせ)を探索する。
【0037】
ここで、候補に含まれるプログラムコードについて、全ての組み合わせを選択しようとすると、選択する組み合わせの数が膨大となる。このため、第1の実施形態では、進化計算を行い、候補に含まれるプログラムコードにおいて、適切な組み合わせを探索する際の、探索回数を減らす(詳細は後述)。
【0038】
ステップS310において進化計算のもとで組み合わせが選択されると、ステップS305に戻る。これにより、ステップS305では、オリジナルプログラム153に含まれるプログラムコードのうち、ステップS310において選択された組み合わせに含まれる代入文に関するプログラムコードを特定し、特定したプログラムコードを変換する。
【0039】
ステップS310の組み合わせ探索処理は、ステップS309において、算出した実行性能(演算時間)と実行精度とが所定の条件を満たすと判定されるまで繰り返される。
【0040】
一方、ステップS309において、算出した実行性能(演算時間)と実行精度とが所定の条件を満たすと判定された場合には、対象プログラム(オリジナルプログラム153)が最適化されたと判定する(ステップS309においてYESと判定する)。
【0041】
ステップS311において、CPU110は最適化プログラム151を実行することで、最適化されたプログラムである、チューニングプログラム154を出力する。
【0042】
<プログラム最適化処理に含まれる各処理の詳細>
次に、プログラム最適化処理(図3)に含まれる各処理(ここでは、コンパイル処理(ステップS301)、プロファイル情報解析処理(ステップS303)、評価処理(ステップS308)、組み合わせ探索処理(ステップS310))の詳細について説明する。
【0043】
(1)コンパイル処理の詳細
はじめに、コンパイル処理(ステップS301)の詳細について説明する。図4は、コンパイル処理の流れを示すフローチャートである。
【0044】
ステップS401において、CPU110は最適化プログラム151を実行することで、補助記憶装置150からオリジナルプログラム153を読み出す。
【0045】
ステップS402において、CPU110は最適化プログラム151を実行することで、読み出したオリジナルプログラム153の構文解析を行う。
【0046】
ステップS403において、CPU110は最適化プログラム151を実行することで、オリジナルプログラム153に基づいてオブジェクトコード(実行可能バイナリコード310)を生成する。
【0047】
ステップS404において、CPU110は最適化プログラム151を実行することで、実行可能バイナリコード310を補助記憶装置150に格納した後、図3のステップS302に戻る。
【0048】
(2)プロファイル情報解析処理の詳細
次に、プロファイル情報解析処理(ステップS303)の詳細について説明する。
【0049】
(2-1)プロファイル情報解析処理の流れ
はじめに、プロファイル情報解析処理の流れについて説明する。図5は、プロファイル情報解析処理の流れを示すフローチャートである。
【0050】
ステップS501において、CPU110は最適化プログラム151を実行することで、プロファイル情報を取得する。
【0051】
ステップS502において、CPU110は最適化プログラム151を実行することで、コントロールフローごとのプロファイル情報を取得し、各プログラムコードの実行回数を取得する。
【0052】
ステップS503において、CPU110は最適化プログラム151を実行することで、取得した各プログラムコードの実行回数の中から、代入文に関するプログラムコードの実行回数を取得する。
【0053】
ステップS504において、CPU110は最適化プログラム151を実行することで、代入文に関するプログラムコードを実行回数に従ってソートする。
【0054】
ステップS505において、CPU110は最適化プログラム151を実行することで、実行回数が上位の代入文に関するプログラムコード320を候補として抽出し、図3のステップS304に戻る。
【0055】
(2-2)プロファイル情報の具体例
次に、プロファイル情報解析処理(ステップS303)において取得されるプロファイル情報の具体例について説明する。図6は、プロファイル情報の一例を示す図である。
【0056】
図6に示すように、プロファイル情報解析処理において取得されるプロファイル情報600には、各プログラムコードの実行回数が含まれる。図6のプロファイル情報600は、実行可能バイナリコード310が実行されたことで、プログラムコード601が、2619152回実行されたことを示している。同様に、図6のプロファイル情報600は、実行可能バイナリコード310が実行されたことで、プログラムコード602が、2598227回実行されたことを示している。
【0057】
ここで、プログラムコード601~605は、代入文に関するプログラムコードである。したがって、プログラムコード601~605にそれぞれ含まれる代入文は、それぞれのプログラムコード601~605の実行回数分、実行されたことになる。
【0058】
例えば、プログラムコード601には、代入文として、"int i=1"、"i++"が含まれる。上述したように、プログラムコード601の実行回数は、2619152回であることから、代入文="int i=1"、"i++"は、2619152回、実行されたことになる。
【0059】
(2-3)候補の抽出例
次に、候補の抽出例について説明する。図7は、候補の抽出例を示す図である。図7に示すように、代入文に関するプログラムコードであるプログラムコード601~605それぞれの実行回数は、
・プログラムコード601:2619152回、
・プログラムコード602:2598227回、
・プログラムコード603:1659425回、
・プログラムコード604:2598227回、
・プログラムコード605:5154604回、
である。したがって、実行回数の多い順にソートした場合、プログラムコード605→601→602→604→603の順になる。
【0060】
図7の例は、実行回数が上位の代入文に関するプログラムコード320として、プログラムコード605、601、602、604が抽出されたことを示している。
【0061】
(3)評価処理の詳細
次に、評価処理(ステップS308)の詳細について説明する。図8は、評価処理の流れを示すフローチャートである。
【0062】
ステップS801において、CPU110は最適化プログラム151を実行することで、実行可能バイナリコード330を実行した際の実行性能として、演算時間を算出する。
【0063】
ステップS802において、CPU110は最適化プログラム151を実行することで、実行可能バイナリコード330を実行した際の実行結果を取得する。また、CPU110は最適化プログラム151を実行することで、実行可能バイナリコード310を実行した際の実行結果と、実行可能バイナリコード330を実行した際の実行結果との差分(実行精度)を算出し、図3のステップS309に戻る。
【0064】
(4)組み合わせ探索処理の詳細
次に、組み合わせ探索処理(ステップS310)の詳細について説明する。
【0065】
(4-1)組み合わせ探索処理の流れ
はじめに、組み合わせ探索処理の流れについて説明する。図9は、組み合わせ探索処理の流れを示すフローチャートである。
【0066】
ステップS901において、CPU110は最適化プログラム151を実行することで、評価処理の結果(実行性能(演算時間)、実行精度)に基づいて、実行性能が低く(演算時間が長く)、かつ、実行精度が低い代入文に関するプログラムコードを特定する。また、CPU110は最適化プログラム151を実行することで、特定した代入文に関するプログラムコードを、候補(実行回数が上位の代入文に関するプログラムコード320)から除外する。
【0067】
ステップS902において、CPU110は最適化プログラム151を実行することで、現時点での候補の中から、代入文に関するプログラムコードを選択する際、交叉及び突然変異に基づいて選択/非選択を決定する。
【0068】
ステップS903において、CPU110は最適化プログラム151を実行することで、選択した代入文に関するプログラムコードの組み合わせを新たに出力し、図3のステップS305に戻る。
【0069】
(4-2)交叉及び突然変異の具体例
次に、交叉及び突然変異に基づいて選択/非選択を決定する処理の具体例について説明する。図10は、交叉及び突然変異に基づいて選択/非選択を決定する処理の具体例を示す図である。図10において、それぞれの矩形は、候補に含まれるそれぞれの代入文に関するプログラムコードを表している。また、それぞれの矩形に含まれる数値は、それぞれの代入文に関するプログラムコードが選択されたか否かを表している。具体的には、"0"は非選択を、"1"は選択を表している。
【0070】
なお、図10では、説明を簡略化するため、候補には、15個の代入文に関するプログラムコードが含まれているものとしている。
【0071】
このうち、図10(a)は、候補に含まれる15個の代入文に関するプログラムコードの選択/非選択を、交叉に基づいて決定する様子を示している。
【0072】
符号1001は、候補から選択した、7個の代入文に関するプログラムコードの組み合わせの一例を示している。具体的には、符号1001の場合、候補のうち、2番目、3番目、5番目、7番目、10番目、11番目、14番目の代入文に関するプログラムコードの組み合わせが選択されている。
【0073】
一方、符号1011は、候補から選択した、6個の代入文に関するプログラムコードの組み合わせの一例を示している。具体的には、符号1011の場合、候補のうち、1番目、4番目、7番目、12番目、13番目、15番目の代入文に関するプログラムコードの組み合わせが選択されている。
【0074】
交叉処理では、符号1001に示す組み合わせの一部の選択/非選択と、符号1011に示す組み合わせの一部の選択/非選択とを入れ替えることで、新たな組み合わせ(符号1002、符号1012)を選択する。
【0075】
一方、図10(b)は、候補に含まれる15個の代入文に関するプログラムコードの選択/非選択を、突然変異に基づいて決定する様子を示している。図10(b)に示すように、突然変異処理では、符号1001に示す組み合わせの一部について、選択を非選択に(あるいは非選択を選択)に変更することで、新たな組み合わせ(符号1003)を選択する。
【0076】
以上の説明から明らかなように、情報処理装置100では、最適化する対象プログラムであるオリジナルプログラムを実行することで、各プログラムコードの実行回数を取得する。また、情報処理装置100では、実行回数が上位の代入文に関するプログラムコードの中から、単精度演算を行う複数個の代入文に関するプログラムコードの組み合わせを選択する。
【0077】
また、情報処理装置100では、選択した組み合わせについて、SIMD演算機能を用いた並列処理が実行されるよう、オリジナルプログラムが変換された場合に、生成されたチューニングプログラムを実行し、実行精度と演算時間とを算出する。
【0078】
更に、情報処理装置100では、算出した実行精度と演算時間とが所定の条件を満たすように、組み合わせを探索する。
【0079】
これにより、情報処理装置100によれば、SIMD演算機能を用いた並列処理において、実行精度を縮小する対象を適切に選択することができる。
【0080】
[第2の実施形態]
上記第1の実施形態では、実行回数が上位の代入文に関するプログラムコード320を抽出する際の抽出方法の詳細について言及しなかったが、当該抽出方法には、任意の抽出方法が適用されうる。例えば、実行回数が上位N個(あるいは、上位M%)の、代入文に関するプログラムコードを抽出してもよいし、実行回数が所定の閾値以上の、代入文に関するプログラムコードを抽出してもよい。
【0081】
なお、開示の技術では、以下に記載する付記のような形態が考えられる。
(付記1)
対象プログラムを実行することで、各プログラムコードの実行回数を取得し、
前記実行回数が上位の代入文に関するプログラムコードの中から、複数個の代入文に関するプログラムコードの組み合わせを選択し、
選択した組み合わせに含まれる前記複数個の代入文に関するプログラムコードそれぞれについてSIMD演算機能を用いた並列処理が実行されるよう、前記対象プログラムが変更された場合に、該変更された対象プログラムを実行することで、実行精度と演算時間とを算出し、
算出した実行精度と演算時間とが所定の条件を満たすように、前記組み合わせを探索する、
処理をコンピュータが実行する情報処理方法。
(付記2)
実行回数が上位の代入文に関するプログラムコードに対して、進化計算を行うことで、前記組み合わせを探索する、付記1に記載の情報処理方法。
(付記3)
実行回数が上位の代入文に関するプログラムコードの中から、複数個の代入文に関するプログラムコードの第1の組み合わせを選択し、実行回数が上位の代入文に関するプログラムコードの中から、複数個の代入文に関するプログラムコードの第2の組み合わせを選択した場合において、第1の組み合わせと第2の組み合わせとを交叉させることで、前記組み合わせを新たに選択する、付記2に記載の情報処理方法。
(付記4)
実行回数が上位の代入文に関するプログラムコードの中から、複数個の代入文に関するプログラムコードの組み合わせを選択した場合において、該組み合わせの一部の選択を非選択に、または、一部の非選択を選択に変更することで、前記組み合わせを新たに選択する、付記2に記載の情報処理方法。
(付記5)
実行回数が上位の代入文に関するプログラムコードのうち、前記実行精度が低く、かつ、前記演算時間が長い代入文に関するプログラムコードを、前記実行回数が上位の代入文に関するプログラムコードから除外する、付記1に記載の情報処理方法。
(付記6)
対象プログラムを実行することで、各プログラムコードの実行回数を取得し、
前記実行回数が上位の代入文に関するプログラムコードの中から、複数個の代入文に関するプログラムコードの組み合わせを選択し、
選択した組み合わせに含まれる前記複数個の代入文に関するプログラムコードそれぞれについてSIMD演算機能を用いた並列処理が実行されるよう、前記対象プログラムが変更された場合に、該変更された対象プログラムを実行することで、実行精度と演算時間とを算出し、
算出した実行精度と演算時間とが所定の条件を満たすように、前記組み合わせを探索する、
処理をコンピュータに実行させるための最適化プログラム。
【0082】
なお、上記実施形態に挙げた構成等に、その他の要素との組み合わせ等、ここで示した構成に本発明が限定されるものではない。これらの点に関しては、本発明の趣旨を逸脱しない範囲で変更することが可能であり、その応用形態に応じて適切に定めることができる。
【符号の説明】
【0083】
100 :情報処理装置
151 :最適化プログラム
152 :プログラム解析変換コード
153 :オリジナルプログラム
154 :チューニングプログラム
310、330 :実行可能バイナリコード
320 :実行回数が上位の代入文に関するプログラムコード
600 :プロファイル情報
601~605 :プログラムコード
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10