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

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

▶ 日本電気株式会社の特許一覧

特開2022-180838プログラム修正装置、プログラム修正方法及びプログラム
<>
  • 特開-プログラム修正装置、プログラム修正方法及びプログラム 図1
  • 特開-プログラム修正装置、プログラム修正方法及びプログラム 図2
  • 特開-プログラム修正装置、プログラム修正方法及びプログラム 図3
  • 特開-プログラム修正装置、プログラム修正方法及びプログラム 図4
  • 特開-プログラム修正装置、プログラム修正方法及びプログラム 図5A
  • 特開-プログラム修正装置、プログラム修正方法及びプログラム 図5B
  • 特開-プログラム修正装置、プログラム修正方法及びプログラム 図6A
  • 特開-プログラム修正装置、プログラム修正方法及びプログラム 図6B
  • 特開-プログラム修正装置、プログラム修正方法及びプログラム 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022180838
(43)【公開日】2022-12-07
(54)【発明の名称】プログラム修正装置、プログラム修正方法及びプログラム
(51)【国際特許分類】
   G06F 8/72 20180101AFI20221130BHJP
   G06F 8/77 20180101ALI20221130BHJP
【FI】
G06F8/72
G06F8/77
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2021087556
(22)【出願日】2021-05-25
(71)【出願人】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100103894
【弁理士】
【氏名又は名称】家入 健
(72)【発明者】
【氏名】石田 祐二郎
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376CA39
5B376DA21
(57)【要約】
【課題】プログラムの質を向上させることが可能なプログラム修正装置、プログラム修正方法及びプログラムを提供すること。
【解決手段】実施の形態にかかるプログラム修正装置10は、修正の対象となる対象プログラムを解析し、解析結果として解析情報を生成する解析部11と、対象プログラムの修正に関する保守性又はソースコード修正許容量の少なくともいずれかを示す目標値、及び解析情報に基づいて、対象プログラムの修正方法を特定し、修正方法を用いて対象プログラムを修正する修正部12を備える。
【選択図】図1
【特許請求の範囲】
【請求項1】
修正の対象となる対象プログラムを解析し、解析結果として解析情報を生成する解析部と、
前記対象プログラムの修正に関する保守性又はソースコード修正許容量の少なくともいずれかを示す目標値、及び前記解析情報に基づいて、前記対象プログラムの修正方法を特定し、前記修正方法を用いて前記対象プログラムを修正する修正部と、を備える
プログラム修正装置。
【請求項2】
前記目標値は、実行性能、メモリ使用量、ベクトル化率のうち少なくともいずれか1つのパラメータをさらに含む、
請求項1に記載のプログラム修正装置。
【請求項3】
前記プログラム修正装置は、前記修正部によって修正された修正後の前記対象プログラムが、前記目標値を達成するか否かを判定する判定部をさらに備え、
前記判定部が、前記修正後の対象プログラムが前記目標値を達成しないと判定した場合に、前記修正部は、前記修正後の対象プログラムに関する新たな解析情報及び前記目標値に基づいて、前記修正後の対象プログラムの新たな修正方法を特定し、前記新たな修正方法を用いて前記修正後の対象プログラムを修正する、
請求項1又は2に記載のプログラム修正装置。
【請求項4】
前記修正部は、前記対象プログラムを修正する際に、前記対象プログラムの修正部分に関する解析情報を導出し、前記解析情報と、前記修正部分に関する解析情報を用いて、前記新たな解析情報を生成する、
請求項3に記載のプログラム修正装置。
【請求項5】
前記判定部は、前記修正後の対象プログラムが、前記目標値を達成しないと判定した場合に、前記修正後の対象プログラムに対する更なる修正によって前記目標値を達成する見込みがあるか否かをさらに判定し、前記目標値を達成する見込みがないと判定した場合に、前記修正部は、前記修正後の対象プログラムに対する更なる修正を実行しない、
請求項3又は4に記載のプログラム修正装置。
【請求項6】
前記対象プログラムは、ベクトル計算機用のプログラムであり、
前記修正部は、複数のベクトル計算機用のプログラムの修正方法の中から、前記対象プログラムの修正方法を特定する、
請求項1乃至5のいずれか1項に記載のプログラム修正装置。
【請求項7】
修正の対象となる対象プログラムを解析し、解析結果として解析情報を生成する解析ステップと、
前記対象プログラムの修正に関する保守性又はソースコード修正許容量の少なくともいずれかを示す目標値及び前記解析情報に基づいて、前記対象プログラムの修正方法を特定する特定ステップと、
特定された前記修正方法を用いて前記対象プログラムを修正する修正ステップと、
をプログラム修正装置が実行するプログラム修正方法。
【請求項8】
修正の対象となる対象プログラムを解析し、解析結果として解析情報を生成する解析ステップと、
前記対象プログラムの修正に関する保守性又はソースコード修正許容量の少なくともいずれかを示す目標値及び前記解析情報に基づいて、前記対象プログラムの修正方法を特定する特定ステップと、
特定された前記修正方法を用いて前記対象プログラムを修正する修正ステップと、
をプログラム修正方法としてコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はプログラム修正装置、プログラム修正方法及びプログラムに関する。
【背景技術】
【0002】
計算機の技術の進展に伴い、ソフトウェアの開発に関する様々な技術が開発されている。
【0003】
例えば、特許文献1には、ソフトウェアを静的解析することによって静的解析結果を取得するとともに、そのソフトウェアを動的解析することによって動的解析結果を取得し、両解析結果に基づいてオブジェクトの依存関係を解析する解析装置が記載されている。
【0004】
また、特許文献2には、プログラム生成に係るルールを学習するルール学習手段を備えるプログラム自動生成装置が記載されている。プログラム自動生成装置は、入力されたモデルに基づいてコードを自動で生成する際に、その学習結果に基づいてコードを生成するためのルールを選択する。そして、選択したルールを使用して、モデルをコードに変換し、コードを生成する。
【0005】
また、特許文献3には、プログラムコードを解析し、その解析結果に基づいて、プログラムコードのデータを変換するための変換条件に合致する部分を変換して新たなプログラムコードのデータを生成する、プログラムコード生成支援装置が記載されている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】国際公開2020/070817号
【特許文献2】特開2010-049585号公報
【特許文献3】特開2006-215826号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
本開示の目的は、プログラムの質を向上させることが可能なプログラム修正装置、プログラム修正方法及びプログラムを提供することである。
【課題を解決するための手段】
【0008】
本開示にかかる一態様のプログラム修正装置は、修正の対象となる対象プログラムを解析し、解析結果として解析情報を生成する解析部と、対象プログラムの修正に関する保守性又はソースコード修正許容量の少なくともいずれかを示す目標値及び解析情報に基づいて、対象プログラムの修正方法を特定し、修正方法を用いて対象プログラムを修正する修正部を備える。
【0009】
本開示にかかる一態様のプログラム修正方法は、修正の対象となる対象プログラムを解析し、解析結果として解析情報を生成する解析ステップと、対象プログラムの修正に関する保守性又はソースコード修正許容量の少なくともいずれかを示す目標値及び解析情報に基づいて、対象プログラムの修正方法を特定する特定ステップと、特定された修正方法を用いて対象プログラムを修正する修正ステップをプログラム修正装置が実行するものである。
【0010】
本開示にかかる一態様のプログラムは、修正の対象となる対象プログラムを解析し、解析結果として解析情報を生成する解析ステップと、対象プログラムの修正に関する保守性又はソースコード修正許容量の少なくともいずれかを示す目標値及び解析情報に基づいて、対象プログラムの修正方法を特定する特定ステップと、特定された修正方法を用いて対象プログラムを修正する修正ステップをプログラム修正方法としてコンピュータに実行させるものである。
【発明の効果】
【0011】
本開示によれば、プログラムの質を向上させることが可能なプログラム修正装置、プログラム修正方法及びプログラムを提供することができる。
【図面の簡単な説明】
【0012】
図1】実施の形態1にかかるプログラム修正装置の一例を示すブロック図である。
図2】実施の形態1にかかるプログラム修正装置が実行する処理の一例を示すフローチャートである。
図3】実施の形態2にかかるプログラム最適化装置の一例を示すブロック図である。
図4】実施の形態2にかかる入力データの一例を示す図である。
図5A】実施の形態2にかかる最適化案の一例を示す図である。
図5B】実施の形態2にかかる最適化案の一例を示す図である。
図6A】実施の形態2にかかるプログラム最適化装置が実行する処理の一例を示すフローチャートである。
図6B】実施の形態2にかかるプログラム最適化装置が実行する処理の一例を示すフローチャートである。
図7】各実施の形態にかかる装置のハードウェア構成の一例を示すブロック図である。
【発明を実施するための形態】
【0013】
実施の形態1
以下、図面を参照して本発明の実施の形態1について説明する。
【0014】
図1は、実施の形態1にかかるプログラム修正装置の一例を示すブロック図である。プログラム修正装置10は、解析部11及び修正部12を備え、プログラム修正装置10の各部は、不図示の制御部(コントローラ)により制御される。以下、各構成要素について説明する。
【0015】
解析部11は、修正の対象となるプログラム(以下、対象プログラムと記載)を解析し、その解析結果としての解析情報を生成する。対象プログラムは、任意のプログラムであってよいが、特に規模の大きなプログラムである方が、プログラム修正装置10による処理の効果が大きくなる。解析情報は、ソースコードの構造(例えば構造における依存関係)を示し、プログラムの保守性又はソースコードの分量といった情報を導き出すことができるものである。
【0016】
修正部12は、対象プログラムの修正に関する保守性又はソースコード修正許容量の少なくともいずれかを示す目標値と、解析部11が生成した解析情報に基づいて、プログラムの修正方法を特定する。修正部12は、具体的には、修正後の対象プログラムが目標値を達成するか、又は、修正後の対象プログラムが目標値を達成する可能性がある修正方法を特定する。そして、特定した修正方法を用いて、対象プログラムを修正する。
【0017】
ここで、修正に関する保守性を示す目標値とは、修正によって対象プログラムの保守性が増加する度合いをいう。保守性は、ソースコードの保守の容易さを示す指標であり、例えば、ソースコードの構造における依存関係の複雑さを示す指標、ソースコード中のリテラル数、のうちの少なくとも1つを含む。依存関係は、ソースコード中におけるデータ依存又は制御依存の少なくともいずれかの関係であっても良いし、ソースコード中で使用されるライブラリ、フレームワーク、関数等に関する依存関係であっても良い。保守性を示す目標値は、例えば、ソースコード修正量、ソースコード改変後の依存関係の複雑さ等に関する目標値で表される。保守性を示す目標値が大きい場合、修正部12による修正後の対象プログラムの保守性が、修正前の対象プログラムの保守性よりも大きく向上する必要がある。一方、その目標値が小さい場合、修正部12による修正後の対象プログラムの保守性は、修正前の対象プログラムの保守性よりも向上する度合いが小さくて良い。ただし、指標や依存関係は、ここに記載した例に限られない。
【0018】
ソースコード修正許容量は、対象プログラムを修正するにあたって、ユーザから改変が許容された対象プログラムのソースコードの範囲である。ソースコード修正許容量を示す目標値が大きいほど、修正部12が修正可能な対象プログラムの範囲が広くなり、その目標値が小さいほど、修正部12が修正可能な対象プログラムの範囲が狭くなる。
【0019】
修正部12は、このような目標値と、解析情報に基づいて、対象プログラムが目標値を達成するようなプログラムの修正方法を特定する。例えば、修正部12が、解析情報に基づき、想定される修正方法が2通りあることを特定したとする。ここで、保守性を示す目標値が「X」であり、第1の修正方法によって向上する保守性の値が「Y」、第2の修正方法によって向上する保守性の値が「Z」であり、Y>X>Zである場合、修正部12は、目標値を満たす第1の修正方法を選択する。
【0020】
別の例として、修正部12が、解析情報に基づき、想定される修正方法が3通りあることを特定したとする。ここで、ソースコード修正許容量を示す目標値が「中」であり、第1の修正方法におけるソースコード修正量が「大」、第2の修正方法におけるソースコード修正量が「中」であり、第3の修正方法におけるソースコード修正量が「小」である場合、修正部12は、目標値を満たす第2又は第3の修正方法を選択する。なお、修正部12は、この2つの修正方法の中から、最もソースコード修正許容量が少ない第3の修正方法を選択しても良い。又は、他の目標値(例えば、保守性についての目標値)がさらに設定されている場合に、2つの修正方法の中から、他の目標値を満たす修正方法を選択しても良い。そして、修正部12は、特定した修正方法を用いて、対象プログラムを修正する。なお、プログラムの修正方法は、事前にプログラム修正装置10に格納されていても良いし、修正部12が外部のデータベースを参照することによって取得しても良い。
【0021】
図2は、プログラム修正装置10の代表的な処理の一例を示したフローチャートであり、このフローチャートによって、プログラム修正装置10の処理が説明される。まず、プログラム修正装置10の解析部11は、修正の対象となる対象プログラムを解析し、解析結果として解析情報を生成する(ステップS11;解析ステップ)。
【0022】
次に、修正部12は、対象プログラムの修正に関する保守性又はソースコード修正許容量の少なくともいずれかを示す目標値及び解析情報に基づいて、対象プログラムの修正方法を特定する(ステップS12;特定ステップ)。そして、修正部12は、ステップS12で特定した修正方法を用いて対象プログラムを修正する(ステップS13;修正ステップ)。
【0023】
このようにして、プログラム修正装置10は、プログラムの質、特に保守性や可読性を向上させることができる。
【0024】
実施の形態2
以下、図面を参照して本開示の実施の形態2について説明する。実施の形態2では、実施の形態1にかかるプログラム修正装置10の具体例について説明する。
【0025】
図3は、実施の形態2にかかるプログラム最適化装置の一例を示すブロック図である。プログラム最適化装置20は、解析部21、変換部22、判定部23及びDB(Data Base)24を備え、プログラム最適化装置20の各部は、不図示の制御部(コントローラ)により制御される。以下、各構成要素について説明する。
【0026】
解析部21は、実施の形態1の解析部11に対応し、入力データに含まれる対象プログラムを、コードを実行せずに静的解析する。なお、解析部21は、後述のDB24に格納された静的解析の方法を取得することにより、静的解析を実行する。そして、対象プログラムを静的解析した結果と、入力データに含まれる、修正に関する各種の目標値とを合わせた情報として、静的解析情報を生成する。対象プログラムを静的解析した結果は、対象プログラムのコードの依存関係等の構造情報を含む。解析部21は、生成した静的解析情報を変換部22に出力する。
【0027】
なお、ユーザは、プログラム最適化装置20の入力部(不図示)を介して、対象プログラムのほか、修正に関する各種の目標値及び対象プログラムの動的解析情報が含まれる入力データを入力する。対象プログラムは、各種の大規模なシミュレーションを実行するためのベクトル計算機用のプログラムである。また、各種の目標値は、対象プログラムが修正された後の達成目標を示し、保守性、ソースコード修正許容量のほか、実行性能、メモリ使用量、ベクトル化率といったパラメータがさらに含まれていても良い。また、動的解析情報は、対象プログラムを実際に実行することによって得られる情報を示し、プロファイラによる解析情報、又はユーザによる見積もり値を用いることができる。
【0028】
保守性とは、実施の形態1に記載の通り、コード保守の容易さであり、そのパラメータとしては、ソースコードの構造における依存関係の複雑さを示す指標、及びソースコード中のリテラルの数を含む。ソースコード修正許容量は、対象プログラムを修正するにあたって改変が許可された対象プログラムのソースコードの範囲である。ソースコード修正許容量については、この例では、「修正許容量:小」を「修正範囲がコードブロック(ループ又はセクション)内に収まる」ことと定義し、「修正許容量:中」を「修正範囲がソースコード内に収まる」ことと定義する。また、「修正許容量:大」を、「ソースコード外のライブラリやヘッダの修正、及びソースコードの追加について検討が必要」であるとする。ただし、ソースコード修正許容量は、修正するソースコードの行数等によって定義されても良い。
【0029】
メモリ使用量は、対象プログラムを実際に実行した場合の、コンピュータのメモリ使用量である。ベクトル化率とは、対象プログラムを実際に実行した場合の、全処理要素中のベクトル処理要素の割合である。上述の通り、対象プログラムはベクトル計算機用のプログラムであるため、このベクトル化率が、効率的な計算の指標として重要となる。実行性能は、対象プログラムを実際に実行した場合の、実行効率の値、FLOPS(Floating-point Operations Per Second)の値、又は実行時間の少なくともいずれかといった、コンピュータの処理に関するパラメータである。
【0030】
なお、これらの目標値として、具体的な値又は範囲の他に、目標値を設定しないことを示す「不問」という情報が、入力データとして設定されても良い。例えば、保守性について目標値が設定されないことにより、対象プログラムの修正によって、対象プログラムの保守性の上昇又は低下のどちらの事象が起こっても良いことになる。また、ソースコード修正許容量について目標値が設定されないことにより、対象プログラムの修正によって、ソースコード修正量が非常に大きくなっても良い。
【0031】
図4は、対象プログラム、目標値及び対象プログラムの動的解析情報が含まれる入力データの一例を示す。図4における目標値には、実行効率として「2倍以上」、ソースコード修正許容量として「中」、その他のパラメータとして「不問」が設定されている。また、対象プログラムの動的解析情報として、実行時間が「Ts」、メモリ使用量が「MB」であることも設定されている。なお、動的解析情報には、「実行効率(実行時間)」、「メモリ使用量」のほか、「ベクトル演算率」等のパラメータが含まれていても良い。プログラム最適化装置20は、これらの入力データを用いて、適切な最適化がなされたソースコードを出力する。
【0032】
図3に戻り、説明を続ける。変換部22は、実施の形態1の修正部12に対応し、解析部21が生成した静的解析情報に基づいて、DB24を検索し、対象プログラムに対して適切と考えられる1又は複数の最適化方法のソースコードを選択する。そして、その最適化方法を対象プログラムに適用することで、対象プログラムを修正し、仮最適化済みソースコードを生成する。変換部22は、生成した仮最適化済みソースコードを判定部23に出力する。
【0033】
より詳細には、変換部22は、静的解析情報における対象プログラムの構造情報を参照することにより、その構造に適用可能な最適化方法を、DB24を検索することにより特定する。そして、変換部22は、特定した最適化方法に関連付けられてDB24に格納された各種パラメータの変化特性を参照することによって、特定した最適化方法の中から、入力データで定義された各種の目標値を達成する方向に最適化がなされる、1又は複数の最適化方法を選択する。目標値を達成する方向とは、ある最適化方法の変化特性において、向上の対象となる目標値に係るパラメータが程度に関わらず向上し、なおかつ、ソースコード修正許容量、及び修正において許容されるパラメータの低下度合いが、目標値を満たす範囲内にあることを意味する。例えば、図4において、「実行効率」は、向上の対象となる目標値に係るパラメータである。なお、「目標値を達成する方向」には、変化特性において、向上の対象となる目標値に係るパラメータが変化しない場合や、低下する場合は含まれない。
【0034】
なお、変換部22は、1つの最適化方法を適用することにより、各種の目標値を達成する方向に最適化がなされる場合には、その1つの最適化方法を選択する。一方、複数の最適化方法が同時に適用可能であり、その複数の最適化方法を適用することにより、各種の目標値を達成する方向に最適化がなされると判定した場合には、変換部22は、その複数の最適化方法を選択することもできる。
【0035】
また、入力データで定義された各種の目標値を達成する方向で最適化がなされる最適化方法が複数あり、それらが同時に適用可能でない場合も想定される。この場合、変換部22は、最適化方法に関連付けられた各種パラメータの変化特性と、目標値を比較することにより、複数の最適化方法の中から、目標値を達成する可能性が高くなると考えられる1つの最適化方法を選択する。
【0036】
図5A、5Bは、変換部22がDB24を検索することにより特定した、図4に示す入力データに適用可能な最適化方法及びその各種パラメータの変化特性である。図5Aは、最適化方法のうちの最適化案Aと、その最適化案Aに関連付けられて格納されている各種パラメータの変化特性Aを示す。図5Bは、最適化方法のうちの最適化案Bと、その最適化案Bに関連付けられて格納されている各種パラメータの変化特性Bを示す。
【0037】
図5Aでは、変化特性Aにおいて、最適化案Aのソースコード修正量が「中」であること、最適化案Aを実行した場合の性能向上としてベクトル演算率が「向上大」であり、実行効率が「向上大」であることが示されている。その一方、最適化案Aを実行した場合の性能低下としてメモリ使用量が「O(n)増加」し、保守性が「低下大」であることも示されている。
【0038】
図5Bでは、変化特性Bにおいて、最適化案Aのソースコード修正量が「小」であること、最適化案Bを実行した場合の性能向上としてベクトル演算率が「向上大」であり、実行効率が「向上小」であることが示されている。その一方、最適化案Bを実行した場合の性能低下として保守性が「低下小」であることも示されている。なお、変化特性Bでは、変化特性Aと異なり、メモリ使用量は増加しない。
【0039】
この場合、変換部22は、図4に示した目標値を参照することによって、変化特性A、Bの両方とも、ソースコード修正許容量「中」の制限を満たしていることを判定する。さらに、変換部22は、変化特性Aの実行効率が「向上大」であり、変化特性Bの実行効率が「向上小」であることから、最適化案Aの方が、最適化案Bと比較して、目標値として設定された実行効率「2倍以上」を達成する可能性が高いことを判定する。そして、変換部22は、目標値におけるその他のパラメータが「不問」であり、変化特性Aにおける性能低下を無視して良いことを判定することで、実行効率向上の可能性がより高い最適化案Aを、適切な最適化案として選択する。そして、変換部22は、その最適化案Aを対象プログラムに適用することで、仮最適化済みソースコードを生成する。
【0040】
なお、図4に示した目標値として、ソースコード修正許容量として「小」が設定されている場合、変換部22は、最適化案A、Bの中から、ソースコード修正許容量「小」の制限を満たす最適化案Bを選択する。目標値として、メモリ使用量、又は保守性の低下が「中」までとなる制限が設定されている場合でも、変換部22は、これらの制限を満たす最適化案Bを選択する。
【0041】
また、解析部21は、対象プログラムが修正される場合に、その修正部分に関する構造情報を、静的解析情報として導出する。そして、解析部21によって生成された対象プログラムの静的解析情報と、修正部分に関する静的解析情報を用いて、修正済みの対象プログラムに関する新たな静的解析情報を生成する。
【0042】
図3に戻り、説明を続ける。判定部23は、変換部22が生成した仮最適化済みソースコードを解析し、最適化によるプログラムの性能変化を推定する。この性能変化は、上述の各種パラメータに関する性能向上又は低下をいう。この推定にあたり、実行性能のような、算出に際してプログラムの実行が必要となる性能変化の値に関しては、判定部23は、DB24に登録された統計データを用いて計算する。
【0043】
上述の通り、DB24には、最適化方法に関連付けられた変化特性が格納されている。しかしながら、この変化特性はあくまで最適化方法それ自体の特性であって、対象プログラムに対して最適化方法を適用した場合の具体的なパラメータの変化度合いについては、判定部23における推定処理を実行することによって、初めて判明するものである。
【0044】
判定部23は、仮最適化済みソースコードにおいて推定した性能変化により、入力データにおける目標値を達成しているか否かを判定する。目標値を達成している場合、その仮最適化済みソースコードが、最適化済みソースコードとして、ユーザに対して出力される。例えば、プログラム最適化装置20の表示部上で、仮最適化済みソースコードが表示される。なお、この際に、判定部23は、この最適化済みソースコードが、設定された目標値を達成すると推定される旨を、表示部、音声出力部といったプログラム最適化装置20の通知部を介して通知しても良い。このようにして、プログラム最適化装置20は、最適化の動作を終了する。
【0045】
一方、仮最適化済みソースコードにおいて推定した性能変化が、入力データにおける目標値を達成していない場合、判定部23は、仮最適化済みソースコードに対する更なる適切な修正が可能か否かを判定する。具体的には、判定部23は、修正済の対象プログラムに関する新たな静的解析情報及び目標値に基づいて、DB24を参照する。そして、修正済みの対象プログラムの構造に適用可能な最適化方法であって、目標値を達成する方向に最適化がなされる最適化方法があるか否かを判定する。変換部22での処理と同様、この判定は、最適化方法に関連付けられてDB24に格納された各種パラメータの変化特性を参照することによってなされる。
【0046】
修正済みの対象プログラムに適用可能であり、かつ、目標値を達成する方向に最適化がなされる最適化方法がある場合、変換部22は、仮最適化済みソースコードに対して、そのような新たな最適化方法を適用し、プログラムを更に修正する。一方、修正済みの対象プログラムに適用可能な最適化方法がないか、又は、目標値を達成する方向に最適化がなされる最適化方法がない、少なくともいずれかの場合、判定部23は、現在の仮最適化済みソースコードを、最適化済みソースコードとしてユーザに対して出力する。なお、この際に、判定部23は、この最適化済みソースコードが、設定された目標値を達成しないと推定される旨を、表示部、音声出力部といったプログラム最適化装置20の通知部を介して通知しても良い。このようにして、プログラム最適化装置20は、目標値に届く見込みがない場合に、最適化の動作を打ち切る。
【0047】
DB24には、ベクトル計算機用のソースコードの最適化方法と、その最適化方法に関する各種パラメータの変化特性が、関連付けられて格納されている。上述の図5A、5Bは、その具体例である。このような様々な複数の最適化方法は、例えば事前に機械学習がなされることによりDB24に蓄積される。さらに、DB24には、各最適化方法を多様な種類のプログラムに適用した場合の、性能向上又は低下の効果を示す統計データが格納されている。判定部23は、最適化によるプログラムの性能変化を推定する場合に、対象プログラムと類似した構造を有するプログラムに適用した場合の性能向上又は低下の効果を示す統計データを用いて、その推定を実行する。なお、判定部23が、統計データに記載されたプログラムが、対象プログラムと類似した構造を有するか否かの判定処理を行う点については、公知の判定技術を用いることができる。また、DB24には、解析部21による静的解析方法についても、格納されている。この静的解析方法も、例えば事前に機械学習がなされることによってDB24に蓄積される。
【0048】
図6A、6Bは、プログラム最適化装置20の代表的な処理の一例を示したフローチャートである。以下、図6A、6Bを用いて、プログラム最適化装置20全体を通した処理について説明する。
【0049】
まず、プログラム最適化装置20の解析部21は、入力データを取得し、入力データに含まれる対象プログラムを静的解析して、静的解析情報を生成する(ステップS21)。解析部21は、生成した静的解析情報を変換部22に出力する。
【0050】
変換部22は、ステップS21で生成された静的解析情報に基づいて、DB24を検索し、対象プログラムに対して適切と考えられる1又は複数の最適化方法のソースコードを選択する(ステップS22)。変換部22は、選択した最適化方法を対象プログラムに適用することにより、仮最適化済みソースコードを生成する(ステップS23)。
【0051】
判定部23は、変換部22が生成した仮最適化済みソースコードを解析し、最適化によるプログラムの性能変化を推定する(ステップS24)。そして、判定部23は、ステップS24の推定結果に基づき、仮最適化済みソースコードが、入力データにおける目標値を達成しているか否かを判定する(ステップS25)。仮最適化済みソースコードが、入力データにおける目標値を達成している場合(ステップS25のYes)、判定部23は、現在の仮最適化済みソースコードを、最適化済みソースコードとして、ユーザに対して出力する(ステップS26)。これにより、プログラム最適化装置20は、最適化の動作を終了する。
【0052】
仮最適化済みソースコードが、入力データにおける目標値を達成していない場合(ステップS25のNo)、判定部23は、仮最適化済みソースコードに対するこれ以上の適切な修正が可能か否かを判定する(ステップS27)。適切な修正がある場合(ステップS27のYes)、ステップS22、S23に戻り、変換部22は、仮最適化済みソースコードに対して、そのような新たな最適化方法を適用し、対象プログラムを更に修正する。このようにして再度生成された仮最適化済みソースコードについて、判定部23は、ステップS24、S25の処理を再度実行する。
【0053】
一方、ステップS27において、適切な修正がないと判定された場合(ステップS27のNo)、判定部23は、現在の仮最適化済みソースコードを、最適化済みソースコードとして、ユーザに対して出力する(ステップS26)。以上のようにして、プログラム最適化装置20は、目標値で示す性能を達成するか、又は適切な修正ができなくなるまで、対象プログラムの修正を繰り返し実行する。
【0054】
なお、ユーザは、ステップS26で提示された最適化済みソースコードを実際に実行し、それにより得られた性能向上又は低下の効果を示すデータを、最適化済みソースコードに適用された最適化方法に関連付けられた統計データとして、DB24に格納させても良い。これにより、判定部23における判定の正確性を向上させることができる。
【0055】
以上に示したように、ユーザは、プログラム最適化装置20を用いることで、プログラムの質、特に保守性や可読性を向上させることができる。例えば、ユーザは、入力データの目標値において、実行性能、メモリ使用量といったパラメータが現在の対象プログラムよりも低下しないように設定し、かつ、保守性を向上させるような目標値を設定することができる。これにより、プログラム最適化装置20の修正によって、対象プログラムのコードが整理され、可読性を向上させることができる。また、許容可能な修正量を示すソースコード修正許容量が目標値で設定されることにより、プログラム最適化装置20は、ユーザの設定に応じて、できるだけ少ないソースコード修正量で、保守性や可読性、又は各種性能を向上させることもできる。
【0056】
大気や水流といった気象のシミュレーション、又は創薬等に活用される生体シミュレーションを行う需要は常に存在し、そのようなシミュレーションは、日常生活を目立たないところで支えている。このようなシミュレーションを行うプログラムは、1度の実行におけるメインループの繰り返し数が数千万又は数億を超えるものも珍しくなく、扱う入出力データ量も数GB(Giga Byte)を超える場合がある。
【0057】
このような複雑で大規模な計算を実時間で処理するためには、いわゆるスーパーコンピュータと呼ばれる大型計算機の利用が不可欠である。特にベクトルプロセッサを有するベクトル型計算機は、特定の分野ではスカラプロセッサを圧倒する性能を発揮し、広く利用されている。大型計算機は、一般の計算機とは大きく異なるアーキテクチャで構成される。そのため、あるプログラムを大型計算機向けに最適化する場合、アーキテクチャの特性上、最適化のためのコード改変が複雑になる。そのため、大型計算機の性能を十分に発揮するような最適化には、専門性の高い知識と技術が必要とされた。また、専門家であっても、最適化の目標を達成するには、ソースコードのどの部分をどこまで最適化すれば良いかがすぐに判断できないこともあり、最適化に相応の工数をかける必要がある。しかしながら、プログラムの最適化を行いたいという需要は常に存在するため、需要に対してそれを供給できる工数又は人材が不足する傾向にあった。
【0058】
また、可能な限りプログラムの性能を上げるためには、最適化が必要な範囲が広範囲となるため、ソースコードの改変が更に複雑になる。このため、最適化によりコードの保守性や可読性が低下し、プログラムのメンテナンスにかかる工数が大きくなることによって、プログラムの最適化が原因で生産性が低下するという問題があった。
【0059】
しかしながら、実施の形態2では、ユーザが専門スキルを有していなくても、プログラム最適化装置20が、ベクトル計算機用のプログラムの最適化を、保守性や可読性を考慮して自動的に行うことができる。そのため、ユーザは、専門スキルの取得等といった、プログラム最適化に要する時間と労力を軽減することができる。また、専門スキルを有する専門家は、プログラムの最適化の作業をする必要がなく、DB24の更新や、DB24に格納されていない特殊な最適化作業を実行すれば良いので、プログラム最適化装置20は、専門家の時間と労力も軽減することができる。以上の理由から、プログラム最適化装置20は、大規模計算機を前提としたソフトウェア開発や、HPC(High Performance Computing)に適用することにより、顕著な効果を奏する。
【0060】
上述の通り、入力データにおける目標値は、実行性能、メモリ使用量、ベクトル化率のうち少なくともいずれか1つのパラメータを含んでいても良い。これにより、プログラム最適化装置20は、プログラムの保守性や可読性を向上させるだけでなく、実際のプログラムの性能を向上、又は性能の低下を抑制することができるため、プログラムの質を異なる観点からさらに向上させることができる。
【0061】
また、判定部23が修正済みの対象プログラムが目標値を達成しないと判定した場合に、変換部22は、修正済みの対象プログラムの新たな修正方法を特定し、新たな修正方法を用いて修正後の対象プログラムを修正することができる。これにより、プログラム最適化装置20は、目標値の条件を満たす最適化済みソースコードをユーザが得る可能性をより高くすることができる。
【0062】
なお、変換部22は、対象プログラムを修正する際に、対象プログラムの修正部分に関する静的解析情報を導出し、解析部21が生成した静的解析情報と、修正部分に関する静的解析情報を用いて、新たな静的解析情報を生成することができる。これにより、変換部22は、修正済みの対象プログラム全体に対して静的解析を実行する必要なく、新たな静的解析情報を生成することができるため、処理に必要な時間を削減することができる。
【0063】
また、判定部23が、修正済みの対象プログラムが、目標値を達成しないと判定し、かつ、更なる修正によって目標値を達成する見込みがないと判定した場合に、変換部22が、修正済みの対象プログラムに対する更なる修正を実行しないようにすることができる。これにより、プログラム最適化装置20は、無駄な処理を打ち切ることができ、処理を効率的にすることができる。
【0064】
なお、本開示は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、対象プログラムが実行されるコンピュータは、ベクトルアーキテクチャを利用しないコンピュータであっても良い。この場合、目標値におけるベクトル化率は、入力データの設定上、自動的に「不問」となる。
【0065】
以上に示した実施の形態では、この開示をハードウェアの構成として説明したが、この開示は、これに限定されるものではない。この開示は、上述の実施形態において説明された各装置の処理(ステップ)を、コンピュータ内のプロセッサにコンピュータプログラムを実行させることにより実現することも可能である。
【0066】
図7は、以上に示した各実施の形態の処理が実行される情報処理装置(信号処理装置)のハードウェア構成例を示すブロック図である。図7を参照すると、この情報処理装置90は、信号処理回路91、プロセッサ92及びメモリ93を含む。
【0067】
信号処理回路91は、プロセッサ92の制御に応じて、信号を処理するための回路である。なお、信号処理回路91は、送信装置から信号を受信する通信回路を含んでいても良い。
【0068】
プロセッサ92は、メモリ93からソフトウェア(コンピュータプログラム)を読み出して実行することで、上述の実施形態において説明された装置の処理を行う。プロセッサ92の一例として、CPU(Central Processing Unit)、MPU(Micro Processing Unit)、FPGA(Field-Programmable Gate Array)、DSP(Demand-Side Platform)、ASIC(Application Specific Integrated Circuit)のうち一つを用いてもよいし、そのうちの複数を並列で用いてもよい。
【0069】
メモリ93は、揮発性メモリや不揮発性メモリ、またはそれらの組み合わせで構成される。メモリ93は、1個に限られず、複数設けられてもよい。なお、揮発性メモリは、例えば、DRAM (Dynamic Random Access Memory)、SRAM (Static Random Access Memory)等のRAM (Random Access Memory)であってもよい。不揮発性メモリは、例えば、PROM (Programmable Random Only Memory)、EPROM (Erasable Programmable Read Only Memory) 等のROM (Random Only Memory)、フラッシュメモリや、SSD(Solid State Drive)であってもよい。
【0070】
メモリ93は、1以上の命令を格納するために使用される。ここで、1以上の命令は、ソフトウェアモジュール群としてメモリ93に格納される。プロセッサ92は、これらのソフトウェアモジュール群をメモリ93から読み出して実行することで、上述の実施形態において説明された処理を行うことができる。
【0071】
なお、メモリ93は、プロセッサ92の外部に設けられるものに加えて、プロセッサ92に内蔵されているものを含んでもよい。また、メモリ93は、プロセッサ92を構成するプロセッサから離れて配置されたストレージを含んでもよい。この場合、プロセッサ92は、I/O(Input/Output)インタフェースを介してメモリ93にアクセスすることができる。
【0072】
以上に説明したように、上述の実施形態における各装置が有する1又は複数のプロセッサは、図面を用いて説明されたアルゴリズムをコンピュータに行わせるための命令群を含む1又は複数のプログラムを実行する。この処理により、各実施の形態に記載された信号処理方法が実現できる。
【0073】
プログラムは、コンピュータに読み込まれた場合に、実施形態で説明された1又はそれ以上の機能をコンピュータに行わせるための命令群(又はソフトウェアコード)を含む。プログラムは、非一時的なコンピュータ可読媒体又は実体のある記憶媒体に格納されてもよい。限定ではなく例として、コンピュータ可読媒体又は実体のある記憶媒体は、random-access memory(RAM)、read-only memory(ROM)、フラッシュメモリ、solid-state drive(SSD)又はその他のメモリ技術、CD-ROM、digital versatile disk(DVD)、Blu-ray(登録商標)ディスク又はその他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ又はその他の磁気ストレージデバイスを含む。プログラムは、一時的なコンピュータ可読媒体又は通信媒体上で送信されてもよい。限定ではなく例として、一時的なコンピュータ可読媒体又は通信媒体は、電気的、光学的、音響的、またはその他の形式の伝搬信号を含む。
【0074】
以上、実施の形態を参照して本開示を説明したが、本開示は上記によって限定されるものではない。本開示の構成や詳細には、開示のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【0075】
10 プログラム修正装置
11 解析部 12 修正部
20 プログラム最適化装置
21 解析部 22 変換部
23 判定部 24 DB
図1
図2
図3
図4
図5A
図5B
図6A
図6B
図7