(57)【要約】【課題】プログラムを並列化するためにプログラムの分割位置の候補を選定し、その有効性を表示できるようにすることを目的とする。【解決手段】分割範囲抽出部１１０は、ソースコード１０２から分割指示１０１に含まれる関数名で識別される対象関数のソースコードを抽出する。構造解析部１２０は、対象関数に含まれる繰り返し文の制御ブロックと条件分岐文の制御ブロックとを特定する。構造解析部１２０は、制御ブロック毎に当該制御ブロックで読み書きされる共有変数を特定し、特定した共有変数を示す共有リソースアクセス情報１０３を生成し、生成した共有リソースアクセス情報１０３を共有リソースアクセス情報蓄積部１９０に記憶する。変数影響範囲表示部１３０は、共有リソースアクセス情報蓄積部１９０から共有リソースアクセス情報１０３を入力し、入力した共有リソースアクセス情報１０３を表示装置に表示する。【選択図】図１
2012008667.tif 000002
【特許請求の範囲】
【請求項１】
複数の関数を含んだプログラムを並列処理するためにプログラムの分割箇所を決定するための並列化支援情報を生成する並列化支援装置において、
複数の関数それぞれのソースコードを含んだプログラムのソースコードをソースプログラムとして入力し、前記ソースプログラムに含まれる関数のソースコードであって繰り返し制御と条件分岐制御とのいずれかの制御を変数を用いて命令する複数の制御文を含んで記述された関数のソースコードを識別する関数名を入力し、入力した関数名で識別される関数のソースコードを対象関数として前記ソースプログラムから抽出する対象関数抽出部と、
前記対象関数抽出部により抽出された対象関数から前記対象関数に含まれる複数の制御文を複数の対象制御文としてＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を用いて特定する制御文特定部と、
前記制御文特定部により特定された対象制御文毎に当該対象制御文で使用される変数を使用変数としてＣＰＵを用いて特定する使用変数特定部と、
前記使用変数特定部により特定された使用変数を対象制御文毎に示す情報を並列化支援情報として生成し、生成した並列化支援情報を出力する並列化支援情報出力部と
を備えたことを特徴とする並列化支援装置。
【請求項２】
前記使用変数特定部は、対象制御文毎に当該対象制御文で使用される変数のうち前記対象関数以外の関数でも使用可能な大域変数として定義される変数を前記使用変数として特定する
ことを特徴とする請求項１記載の並列化支援装置。
【請求項３】
前記使用変数特定部は、対象制御文毎に当該対象制御文で使用される大域変数を当該対象制御文で更新される更新変数と当該対象制御文で参照される参照変数とに区別して特定し、
前記並列化支援情報出力部は、対象制御文毎に更新変数と参照変数とを区別して示す情報を前記並列化支援情報として生成する
ことを特徴とする請求項２記載の並列化支援装置。
【請求項４】
前記並列化支援装置は、さらに、
対象制御文毎に更新変数の使用回数と参照変数の使用回数とをＣＰＵを用いて特定し、対象制御文毎に当該対象制御文を分割箇所として選択可能な度合いを示す制御文点数を更新変数の使用回数と参照変数の使用回数とを用いて所定の計算方法で算出する制御文点数算出部を備え、
前記並列化支援情報出力部は、対象制御文毎に更新変数と参照変数と制御文点数とを示す情報を前記並列化支援情報として生成する
ことを特徴とする請求項３記載の並列化支援装置。
【請求項５】
複数の関数を含んだプログラムを並列処理するためにプログラムの分割箇所を決定するための並列化支援情報を生成する並列化支援装置の並列化支援方法において、
対象関数抽出部が、複数の関数それぞれのソースコードを含んだプログラムのソースコードをソースプログラムとして入力し、前記ソースプログラムに含まれる関数のソースコードであって繰り返し制御と条件分岐制御とのいずれかの制御を変数を用いて命令する複数の制御文を含んで記述された関数のソースコードを識別する関数名を入力し、入力した関数名で識別される関数のソースコードを対象関数として前記ソースプログラムから抽出し、
制御文特定部が、前記対象関数抽出部により抽出された対象関数から前記対象関数に含まれる複数の制御文を複数の対象制御文としてＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を用いて特定し、
使用変数特定部が、前記制御文特定部により特定された対象制御文毎に当該対象制御文で使用される変数を使用変数としてＣＰＵを用いて特定し、
並列化支援情報出力部が、前記使用変数特定部により特定された使用変数を対象制御文毎に示す情報を並列化支援情報として生成し、生成した並列化支援情報を出力する
ことを特徴とする並列化支援装置の並列化支援方法。
【請求項６】
複数の関数を含んだプログラムを並列処理するためにプログラムの分割箇所を決定するための並列化支援情報を生成する並列化支援プログラムにおいて、
複数の関数それぞれのソースコードを含んだプログラムのソースコードをソースプログラムとして入力し、前記ソースプログラムに含まれる関数のソースコードであって繰り返し制御と条件分岐制御とのいずれかの制御を変数を用いて命令する複数の制御文を含んで記述された関数のソースコードを識別する関数名を入力し、入力した関数名で識別される関数のソースコードを対象関数として前記ソースプログラムから抽出する対象関数抽出処理と、
前記対象関数抽出処理により抽出された対象関数から前記対象関数に含まれる複数の制御文を複数の対象制御文としてＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を用いて特定する制御文特定処理と、
前記制御文特定処理により特定された対象制御文毎に当該対象制御文で使用される変数を使用変数としてＣＰＵを用いて特定する使用変数特定処理と、
前記使用変数特定処理により特定された使用変数を対象制御文毎に示す情報を並列化支援情報として生成し、生成した並列化支援情報を出力する並列化支援情報出力処理と
をコンピュータに実行させる並列化支援プログラム。
【請求項７】
複数の関数を含んだプログラムを並列処理するためにプログラムの分割箇所を決定するための並列化支援情報を生成する並列化支援装置において、
複数の関数それぞれのソースコードを含んだプログラムのソースコードをソースプログラムとして入力し、前記ソースプログラムに含まれる関数のソースコードであって繰り返し制御と条件分岐制御とのいずれかの制御を変数を用いて命令する複数の制御文を含んで記述された関数のソースコードを識別する関数名を入力し、入力した関数名で識別される関数のソースコードを対象関数として前記ソースプログラムから抽出する対象関数抽出部と、
前記対象関数抽出部により抽出された対象関数から前記対象関数に含まれる複数の制御文を複数の対象制御文としてＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を用いて特定する制御文特定部と、
前記制御文特定部により特定された対象制御文毎に当該対象制御文で変数が使用される回数を変数の使用回数としてＣＰＵを用いて特定し、対象制御文毎に当該対象制御文を分割箇所として選択可能な度合いを示す制御文点数を変数の使用回数を用いて所定の計算方法で算出する制御文点数算出部と、
前記制御文点数算出部により算出された制御文点数を対象制御文毎に示す情報を並列化支援情報として生成し、生成した並列化支援情報を出力する並列化支援情報出力部と
を備えたことを特徴とする並列化支援装置。
【請求項８】
複数の関数を含んだプログラムを並列処理するためにプログラムの分割箇所を決定するための並列化支援情報を生成する並列化支援装置の並列化支援方法において、
対象関数抽出部が、複数の関数それぞれのソースコードを含んだプログラムのソースコードをソースプログラムとして入力し、前記ソースプログラムに含まれる関数のソースコードであって繰り返し制御と条件分岐制御とのいずれかの制御を変数を用いて命令する複数の制御文を含んで記述された関数のソースコードを識別する関数名を入力し、入力した関数名で識別される関数のソースコードを対象関数として前記ソースプログラムから抽出し、
制御文特定部が、前記対象関数抽出部により抽出された対象関数から前記対象関数に含まれる複数の制御文を複数の対象制御文としてＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を用いて特定し、
制御文点数算出部が、前記制御文特定部により特定された対象制御文毎に当該対象制御文で変数が使用される回数を変数の使用回数としてＣＰＵを用いて特定し、対象制御文毎に当該対象制御文を分割箇所として選択可能な度合いを示す制御文点数を変数の使用回数を用いて所定の計算方法で算出し、
並列化支援情報出力部が、前記制御文点数算出部により算出された制御文点数を対象制御文毎に示す情報を並列化支援情報として生成し、生成した並列化支援情報を出力する
ことを特徴とする並列化支援装置の並列化支援方法。
【請求項９】
複数の関数を含んだプログラムを並列処理するためにプログラムの分割箇所を決定するための並列化支援情報を生成する並列化支援プログラムにおいて、
複数の関数それぞれのソースコードを含んだプログラムのソースコードをソースプログラムとして入力し、前記ソースプログラムに含まれる関数のソースコードであって繰り返し制御と条件分岐制御とのいずれかの制御を変数を用いて命令する複数の制御文を含んで記述された関数のソースコードを識別する関数名を入力し、入力した関数名で識別される関数のソースコードを対象関数として前記ソースプログラムから抽出する対象関数抽出処理と、
前記対象関数抽出処理により抽出された対象関数から前記対象関数に含まれる複数の制御文を複数の対象制御文としてＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を用いて特定する制御文特定処理と、
前記制御文特定処理により特定された対象制御文毎に当該対象制御文で変数が使用される回数を変数の使用回数としてＣＰＵを用いて特定し、対象制御文毎に当該対象制御文を分割箇所として選択可能な度合いを示す制御文点数を変数の使用回数を用いて所定の計算方法で算出する制御文点数算出処理と、
前記制御文点数算出処理により算出された制御文点数を対象制御文毎に示す情報を並列化支援情報として生成し、生成した並列化支援情報を出力する並列化支援情報出力処理と
をコンピュータに実行させる並列化支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、プログラムを並列化するための並列化支援装置、並列化支援装置の並列化支援方法および並列化支援プログラムに関するものである。
【背景技術】
【０００２】
従来のプログラム自動並列化方法では、大域変数部がソースプログラムを解析して大域変数名を検出し、大域変数情報生成部が変数と関数との呼び出し関係を表形式で作成し、並列化解析部が変数名、大域変数か局所変数かの属性、ソースコード文番号を変数表に登録して並列性の判定を行う（特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平５−１４３３５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上記の従来方法は、変数のアクセス箇所に修正が加わらない関数を分割してプログラムを並列化するため、プログラムの分割箇所が限られてしまい、プログラムを十分に並列化することができないという課題がある。
【０００５】
本発明は、例えば、プログラムを並列化するためにプログラムの分割位置の候補を選定し、その有効性を表示できるようにすることを目的とする。
【課題を解決するための手段】
【０００６】
本発明の並列化支援装置は、複数の関数を含んだプログラムを並列処理するためにプログラムの分割箇所を決定するための並列化支援情報を生成する並列化支援装置であって、
複数の関数それぞれのソースコードを含んだプログラムのソースコードをソースプログラムとして入力し、前記ソースプログラムに含まれる関数のソースコードであって繰り返し制御と条件分岐制御とのいずれかの制御を変数を用いて命令する複数の制御文を含んで記述された関数のソースコードを識別する関数名を入力し、入力した関数名で識別される関数のソースコードを対象関数として前記ソースプログラムから抽出する対象関数抽出部と、
前記対象関数抽出部により抽出された対象関数から前記対象関数に含まれる複数の制御文を複数の対象制御文としてＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を用いて特定する制御文特定部と、
前記制御文特定部により特定された対象制御文毎に当該対象制御文で使用される変数を使用変数としてＣＰＵを用いて特定する使用変数特定部と、
前記使用変数特定部により特定された使用変数を対象制御文毎に示す情報を並列化支援情報として生成し、生成した並列化支援情報を出力する並列化支援情報出力部とを備える。
【発明の効果】
【０００７】
本発明によれば、例えば、プログラムを並列化するためにプログラムの分割位置の候補（対象制御文）を選定し、その有効性を並列化支援情報として表示することができる。
【図面の簡単な説明】
【０００８】
【図１】実施の形態１におけるソフトウェア開発支援装置１００の機能構成図。
【図２】実施の形態１におけるソフトウェア開発支援方法を示すフローチャート。
【図３】実施の形態１における制御ブロック特定処理（Ｓ１２０）を示すフローチャート。
【図４】実施の形態１における対象関数１０４の一例を示す図。
【図５】実施の形態１における共有変数特定処理（Ｓ１３０）のフローチャート。
【図６】実施の形態１における共有リソースアクセス情報１０３の一例を示す図。
【図７】実施の形態１におえるソフトウェア開発支援方法の概要図。
【図８】実施の形態１におけるソフトウェア開発支援装置１００のハードウェア資源の一例を示す図。
【図９】実施の形態２におけるソフトウェア開発支援装置１００の機能構成図。
【図１０】実施の形態２におけるソフトウェア開発支援方法を示すフローチャート。
【図１１】実施の形態２における重み付け点数算出処理（Ｓ１５０）のフローチャート。
【図１２】実施の形態２における重み付け係数情報１０５を示す図。
【図１３】実施の形態２における共有リソースアクセス情報１０３の一例を示す図。
【発明を実施するための形態】
【０００９】
実施の形態１．
複数の関数を含んだプログラムを並列処理するためにプログラムの分割箇所を決定するための並列化支援情報を生成する並列化支援装置の形態について説明する。
【００１０】
図１は、実施の形態１におけるソフトウェア開発支援装置１００の機能構成図である。
実施の形態１におけるソフトウェア開発支援装置１００の機能構成について、図１に基づいて説明する。
【００１１】
ソフトウェア開発支援装置１００（並列化支援装置の一例）は、分割範囲抽出部１１０、構造解析部１２０、変数影響範囲表示部１３０および共有リソースアクセス情報蓄積部１９０を備える。
【００１２】
分割範囲抽出部１１０（対象関数抽出部の一例）は、ソースコード１０２と分割指示１０１とを入力し、分割指示１０１で指示された関数のソースコードを対象関数としてソースコード１０２から抽出する。
ソースコード１０２は、複数の関数それぞれのソースコードを含んだプログラムのソースコード（ソースプログラム）である。
分割指示１０１は、ソースコード１０２に含まれる関数のソースコードを識別する関数名を含むデータである。
関数のソースコードは、繰り返し制御と条件分岐制御とのいずれかの制御を変数を用いて命令する複数の制御文を含んで記述される。
【００１３】
構造解析部１２０（制御文特定部の一例）は、分割範囲抽出部１１０により抽出された対象関数から対象関数に含まれる複数の制御文（後述する制御ブロック）を複数の対象制御文としてＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を用いて特定する。
構造解析部１２０（使用変数特定部の一例）は、対象制御文毎に当該対象制御文で使用される変数を使用変数としてＣＰＵを用いて特定する。
構造解析部１２０（並列化支援情報出力部の一例）は、対象制御文毎に使用変数を示す情報を共有リソースアクセス情報１０３（並列化支援情報）として生成し、生成した共有リソースアクセス情報１０３を共有リソースアクセス情報蓄積部１９０に記憶する。
【００１４】
例えば、構造解析部１２０は、対象制御文毎に当該対象制御文で使用される変数のうち対象関数以外の関数でも使用可能な共有変数（大域変数、グローバル変数）として宣言（定義）される変数を使用変数として特定する。
また、構造解析部１２０は、対象制御文毎に当該対象制御文で使用される大域変数を当該対象制御文で書き込まれる書き込み変数（更新変数）と当該対象制御文で読み出される読み出し変数（参照変数）とに区別して特定する。
また、構造解析部１２０は、対象制御文毎に更新変数と参照変数とを区別して示す情報を共有リソースアクセス情報１０３として生成する。
【００１５】
変数影響範囲表示部１３０（並列化支援情報出力部の一例）は、共有リソースアクセス情報蓄積部１９０に記憶された並列化支援情報を表示する。
【００１６】
共有リソースアクセス情報蓄積部１９０は、構造解析部１２０により生成される共有リソースアクセス情報１０３を記憶する。
【００１７】
図２は、実施の形態１におけるソフトウェア開発支援方法を示すフローチャートである。
実施の形態１におけるソフトウェア開発支援方法の処理について、図２に基づいて説明する。
【００１８】
Ｓ１１０において、ユーザは、並列化したいプログラムのソースコード名をキーボードやマウスなどの入力装置を用いてソフトウェア開発支援装置１００に入力する。
さらに、ユーザは、並列化したいプログラムを構成する複数の関数のうち並列化の調査をしたい関数の関数名を入力装置を用いてソフトウェア開発支援装置１００に入力する。
以下、ユーザに入力されたソースコード名と関数名とを含むデータを「分割指示１０１」という。
【００１９】
分割範囲抽出部１１０は、分割指示１０１に含まれるソースコード名で識別されるソースコード１０２を所定の記憶装置（図示省略）から入力する。所定の記憶装置には、並列化の対象となるプログラムのソースコードが予め記憶されているものとする。
分割範囲抽出部１１０は、ソースコード１０２から分割指示１０１に含まれる関数名で識別される関数のソースコードを抽出する。
以下、Ｓ１１０で抽出した関数のソースコードを「対象関数１０４」という。
Ｓ１１０の後、Ｓ１２０に進む。
【００２０】
Ｓ１２０において、構造解析部１２０は、対象関数１０４に含まれる繰り返し文の制御ブロックと条件分岐文の制御ブロックとを特定する。
【００２１】
例えば、繰り返し文は「ｆｏｒ文」として記述され、条件分岐文は「ｓｗｉｔｃｈ文」として記述される。
ｆｏｒ文は「ｆｏｒ（変数の初期値；繰り返しの終了条件；変数の更新方法）｛１つまたは複数の命令文｝」の形式で記述される。｛｝内に記述された命令文は（）内で指定された変数が終了条件を満たすまで繰り返し実行される。（）内で指定された変数は｛｝内の命令文の処理が１回終わるたびに更新方法に従って更新される。
ｓｗｉｔｃｈ文は「ｓｗｉｔｃｈ（変数）｛ｃａｓｅ  変数値１：処理１；ｃａｓｅ  変数値２：処理２；・・・｝」の形式で記述される。（）内で指定された変数の値が“変数値１”であれば“変数値１”に対応する「処理１」が実行され、（）内で指定された変数の値が“変数値２”であれば“変数値２”に対応する「処理２」が実行される。
【００２２】
Ｓ１２０の詳細について後述する。
【００２３】
Ｓ１２０の後、Ｓ１３０に進む。
【００２４】
Ｓ１３０において、構造解析部１２０は、制御ブロック毎に当該制御ブロックで読み書きされる共有変数を特定し、特定した共有変数を示す共有リソースアクセス情報１０３を生成し、生成した共有リソースアクセス情報１０３を共有リソースアクセス情報蓄積部１９０に記憶する。
【００２５】
共有変数は、大域変数、グローバル変数または共有リソースともいう。
共有変数は、異なる関数で共通に読み書きできる変数である。一方、特定の関数でのみ読み書きできる変数を局所変数またはローカル変数という。
【００２６】
Ｓ１３０の詳細について後述する。
【００２７】
Ｓ１３０の後、Ｓ１４０に進む。
【００２８】
Ｓ１４０において、変数影響範囲表示部１３０は、共有リソースアクセス情報蓄積部１９０から共有リソースアクセス情報１０３を入力し、入力した共有リソースアクセス情報１０３を表示装置に表示する。
また、変数影響範囲表示部１３０は、後述する分割位置候補情報も表示する。
ユーザは、表示された共有リソースアクセス情報１０３や分割位置候補情報に基づいてプログラムの分割箇所を判断する。
Ｓ１４０により、ソフトウェア開発支援方法の処理は終了する。
【００２９】
次に、制御ブロック特定処理（Ｓ１２０）の詳細と共有変数特定処理（Ｓ１３０）の詳細とについて説明する。
【００３０】
図３は、実施の形態１における制御ブロック特定処理（Ｓ１２０）を示すフローチャートである。
図４は、実施の形態１における対象関数１０４の一例を示す図である。
実施の形態１における制御ブロック特定処理（Ｓ１２０）について、図３および図４に基づいて説明する。
【００３１】
図４に示す対象関数１０４は関数名「ｆｕｎｃ」で識別される関数のソースコードである。
この対象関数１０４には、「ｆｏｒ文」で記述された繰り返しの制御ブロック（ａ）と「ｆｏｒ文」で記述された繰り返しの制御ブロック（ｂ）と「Ｓｗｉｔｃｈ文」で記述された条件分岐の制御ブロック（ｃ）とが含まれる。
図３に示す制御ブロック特定処理（Ｓ１２０）により、構造解析部１２０は、対象関数１０４から制御ブロック（ａ）（ｂ）（ｃ）の記述箇所を特定する。
【００３２】
Ｓ１２１において、構造解析部１２０は、対象関数１０４から先頭行を選択する。
図４の対象関数１０４において、先頭行の「ｉｎｔ  ｉ；」は繰り返し文や条件分岐文ではなく局所変数ｉの宣言文である。
以下、対象関数１０４から選択した行を「選択行」という。
Ｓ１２１の後、Ｓ１２２に進む。
【００３３】
Ｓ１２２において、構造解析部１２０は、選択行が繰り返し文（例えば、ｆｏｒ文）と条件分岐文（例えば、ｓｗｉｔｃｈ文）とその他の文（例えば、代入文や宣言文）とのいずれの種類の命令文であるかを判定する。
例えば、構造解析部１２０は、構文解析や字句解析により選択行の種類を判定する。
選択行が「繰り返し文」である場合、Ｓ１２３に進む。
選択行が「条件分岐文」である場合、Ｓ１２５に進む。
選択行が「その他」の命令文である場合、Ｓ１２７に進む。
【００３４】
Ｓ１２３において、構造解析部１２０は、繰り返し文の最終行を判定し、制御ブロックを特定する。
例えば、構造解析部１２０は、中カッコ“｛”“｝”の数を数えて繰り返し文の最終行となる“｝”を判定する。
例えば、構造解析部１２０は、制御ブロックの行番号にマーク「＊」を付けたり、制御ブロックの行番号を記録することにより、制御ブロックを特定する。
【００３５】
Ｓ１２４において、構造解析部１２０は、選択行を繰り返し文の最終行に変更する。
Ｓ１２４の後、Ｓ１２７に進む。
【００３６】
Ｓ１２５において、構造解析部１２０は、条件分岐文の最終行を判定し、制御ブロックを特定する（Ｓ１２３と同様）。
Ｓ１２５の後、Ｓ１２６に進む。
【００３７】
Ｓ１２６において、構造解析部１２０は、選択行を条件分岐文の最終行に変更する。
Ｓ１２６の後、Ｓ１２７に進む。
【００３８】
Ｓ１２７において、構造解析部１２０は、選択行が対象関数１０４の最終行“｝”であるか否かを判定する。
選択行が対象関数１０４の最終行である場合（ＹＥＳ）、Ｓ１２９に進む。
選択行が対象関数１０４の最終行でない場合（ＮＯ）、Ｓ１２８に進む。
【００３９】
Ｓ１２８において、構造解析部１２０は、選択行の次の行を新たな選択行として設定する。
Ｓ１２８の後、Ｓ１２２に戻る。
【００４０】
Ｓ１２９において、構造解析部１２０は、Ｓ１２３またはＳ１２５で特定した各制御ブロックの最終行（または先頭行）の行番号を分割位置候補として設定して分割位置情報を生成する。
例えば、図４に示す対象関数１０４に対して、構造解析部１２０は制御ブロック（ａ）（ｂ）の最終行を分割位置候補（１）（２）として分割位置情報に設定する。
Ｓ１２９により、制御ブロック特定処理（Ｓ１２０）は終了する。
【００４１】
図５は、実施の形態１における共有変数特定処理（Ｓ１３０）のフローチャートである。
実施の形態１における共有変数特定処理（Ｓ１３０）について、図５に基づいて説明する。
【００４２】
Ｓ１３１において、構造解析部１２０は、プログラムのソースコード１０２から変数の宣言文（定義文）を検索し、宣言文に基づいて共有変数を特定する。
主に、共有変数は関数の外側（特にプログラムのソースコード１０２の最初の部分）に記述される宣言文により定義される。
Ｓ１３１の後、Ｓ１３２に進む。
【００４３】
Ｓ１３２において、構造解析部１２０は、制御ブロック特定処理（Ｓ１２０）（図３参照）で特定した複数の制御ブロックから制御ブロックを１つ選択する。
以下、選択した制御ブロックを「選択ブロック」という。
Ｓ１３２の後、Ｓ１３３に進む。
【００４４】
Ｓ１３３において、構造解析部１２０は、選択ブロックを検索し、共有変数毎に当該共有変数の使用箇所を特定する。
Ｓ１３３の後、Ｓ１３４に進む。
【００４５】
Ｓ１３４において、構造解析部１２０は、共有変数毎に当該共有変数の使用箇所を構文解析または字句解析し、共有変数毎に当該共有変数のアクセス種別を判定する。
アクセス種別は、当該共有変数が読み出し（参照）のみされる読み出し変数と書き込み（更新）される書き込み変数とのいずれであるかを示す値である。読み出しも書き込みもされる変数は書き込み変数として判定する。
Ｓ１３４の後、Ｓ１３５に進む。
【００４６】
Ｓ１３５において、構造解析部１２０は、選択ブロックに対応付けて共有変数と共有変数のアクセス種別とを共有リソースアクセス情報１０３に設定する。
Ｓ１３５の後、Ｓ１３６に進む。
【００４７】
Ｓ１３６において、構造解析部１２０は、未選択の制御ブロックが残っているか否かを判定する。
未選択の制御ブロックが残っている場合（ＹＥＳ）、Ｓ１３２に戻る。Ｓ１３２において、構造解析部１２０は未選択の制御ブロックを選択する。
未選択の制御ブロックが残っていない場合（ＮＯ）、共有変数特定処理（Ｓ１３０）は終了する。
【００４８】
図６は、実施の形態１における共有リソースアクセス情報１０３の一例を示す図である。
共有変数特定処理（Ｓ１３０）（図５参照）により、図６に示すような共有リソースアクセス情報１０３が生成される。
共有リソースアクセス情報１０３は、制御ブロック（ａ）（ｂ）（ｃ）毎に共有変数「Ａ」「Ｂ」「Ｃ」「Ｄ」それぞれのアクセス種別を示している。
例えば、制御ブロック（ａ）では共有変数「Ａ」「Ｄ」が書き込み（Ｗ）され、共有変数「Ｂ」「Ｃ」が読み出し（Ｒ）されている。
【００４９】
例えば、ユーザは、図６の共有リソースアクセス情報１０３を参照し、共有変数の書き込みをしていない制御ブロック（ｂ）が分割箇所に適していると判断する。
つまり、図４に示した対象関数１０４は、制御ブロック（ｂ）の最終行を示す分割位置候補（２）までの処理と分割位置候補（２）以降の処理とに分割して並列に処理される可能性がある。
【００５０】
図７は、実施の形態１におえるソフトウェア開発支援方法の概要図である。
実施の形態１におけるソフトウェア開発支援方法の概要について、図７に基づいて説明する。
【００５１】
ソフトウェア開発支援装置１００は、対象関数１０４から制御ブロック（ａ）（ｂ）（ｃ）を特定し、制御ブロック毎に共有変数の使用状況を把握し、制御ブロック毎の共有変数の使用状況を集計して共有リソースアクセス情報１０３を生成する。
ユーザは、共有リソースアクセス情報１０３を見ることにより分割可能な位置を把握することができる。
【００５２】
図８は、実施の形態１におけるソフトウェア開発支援装置１００のハードウェア資源の一例を示す図である。
図８において、ソフトウェア開発支援装置１００は、ＣＰＵ９１１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）（マイクロプロセッサ、マイクロコンピュータともいう）を備えている。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３、ＲＡＭ９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、ドライブ装置９０４、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。ドライブ装置９０４は、ＦＤ（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・Ｄｒｉｖｅ）、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｃ）などの記憶媒体を読み書きする装置である。
【００５３】
通信ボード９１５は、有線または無線で、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネット、電話回線などの通信網に接続している。
【００５４】
磁気ディスク装置９２０には、ＯＳ９２１（オペレーティングシステム）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。
【００５５】
プログラム群９２３には、実施の形態において「〜部」として説明する機能を実行するプログラムが含まれる。プログラムは、ＣＰＵ９１１により読み出され実行される。すなわち、プログラムは、「〜部」としてコンピュータを機能させるものであり、また「〜部」の手順や方法をコンピュータに実行させるものである。
【００５６】
ファイル群９２４には、実施の形態において説明する「〜部」で使用される各種データ（入力、出力、判定結果、計算結果、処理結果など）が含まれる。
【００５７】
実施の形態において構成図およびフローチャートに含まれている矢印は主としてデータや信号の入出力を示す。
【００５８】
実施の形態において「〜部」として説明するものは「〜回路」、「〜装置」、「〜機器」であってもよく、また「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ファームウェア、ソフトウェア、ハードウェアまたはこれらの組み合わせのいずれで実装されても構わない。
【００５９】
実施の形態１において、例えば、以下のようなソフトウェア開発支援装置１００について説明した。
ソフトウェア開発支援装置１００は、ユーザが指定した分割箇所（関数）に対して有効性を検証し、検証結果（共有リソースアクセス情報１０３）をユーザに提示する。
ソフトウェア開発支援装置１００は、プログラムのソースコードを入力する手段（分割範囲抽出部１１０）および共有リソースを抽出する抽出する手段（構造解析部１２０）を備える。ソフトウェア開発支援装置１００は、共有リソースをアクセスするプログラムの関数の構造を分析し、共有リソースのアクセスに影響を及ぼさないように構造的に分割可能な箇所（分割位置候補）を抽出して表示する。
【００６０】
実施の形態２．
制御ブロック毎に分割箇所として適している度合いを示す点数を共有変数の使用回数に基づいて求める形態について説明する。
以下、実施の形態１と異なる事項について主に説明する。説明を省略する事項については実施の形態１と同様である。
【００６１】
図９は、実施の形態２におけるソフトウェア開発支援装置１００の機能構成図である。
実施の形態２におけるソフトウェア開発支援装置１００の機能構成について、図９に基づいて説明する。
【００６２】
ソフトウェア開発支援装置１００は、実施の形態１で説明した構成（図１参照）に加えて、重み付け決定部１４０を備える。
【００６３】
重み付け決定部１４０（制御文点数算出部の一例）は、対象制御文毎に書き込み変数（更新変数）の使用回数と読み出し変数（参照変数）の使用回数とをＣＰＵを用いて特定する。
重み付け決定部１４０は、対象制御文毎に当該対象制御文を分割箇所として選択可能な度合いを示す重み付け点数（制御文点数）を書き込み変数の使用回数と読み出し変数の使用回数とを用いて所定の計算方法で算出し、算出した重み付け点数を共有リソースアクセス情報１０３に設定する。
変数影響範囲表示部１３０は、対象制御文毎に書き込み変数と読み出し変数と重み付け点数とを示す共有リソースアクセス情報１０３（並列化支援情報）を表示する。
【００６４】
図１０は、実施の形態２におけるソフトウェア開発支援方法を示すフローチャートである。
実施の形態２におけるソフトウェア開発支援方法の処理について、図１０に基づいて説明する。
【００６５】
ソフトウェア開発支援方法において、実施の形態１で説明した処理（図２参照）に加えて、Ｓ１５０を実行する。
【００６６】
Ｓ１５０において、重み付け決定部１４０は、制御ブロック毎に共有変数の使用回数に基づいて重み付け点数を算出し、算出した重み付け点数を共有リソースアクセス情報１０３に設定する。
Ｓ１５０の詳細について以下に説明する。
【００６７】
図１１は、実施の形態２における重み付け点数算出処理（Ｓ１５０）のフローチャートである。
実施の形態２における重み付け点数算出処理（Ｓ１５０）について、図１１に基づいて説明する。
【００６８】
重み付け決定部１４０は、図１１に基づいて説明する重み付け点数算出処理（Ｓ１５０）を対象関数１０４の制御ブロック毎に実行する。
【００６９】
Ｓ１５１において、重み付け決定部１４０は、Ｓ１３１（図５参照）で特定した複数の共有変数から共有変数を１つ選択する。
以下、選択した共有変数を「選択変数」という。
Ｓ１５１の後、Ｓ１５２に進む。
【００７０】
Ｓ１５２において、重み付け決定部１４０は、制御ブロックを終端方向に検索して選択変数の使用箇所を特定する。
Ｓ１５２の後、Ｓ１５３に進む。
【００７１】
Ｓ１５３において、重み付け決定部１４０は、選択変数の使用箇所を構文解析または字句解析し、当該使用箇所での選択変数のアクセス種別を判定する。
選択変数のアクセス種別が「書き込み」である場合、Ｓ１５４に進む。
選択変数のアクセス種別が「読み出し」である場合、Ｓ１５５に進む。
また、選択変数の使用箇所が無かった場合（使用無し）、Ｓ１５６に進む。
【００７２】
Ｓ１５４において、重み付け決定部１４０は、制御ブロックの重み付け点数に書き込み用の重み付け係数を加算する。後述するように、書き込み用の重み付け係数は予め定められる。
Ｓ１５４の後、Ｓ１５２に戻る。Ｓ１５２において、重み付け決定部１４０はＳ１５３で判定した使用箇所以降を対象にして制御ブロックを検索する。
【００７３】
Ｓ１５５において、重み付け決定部１４０は、制御ブロックの重み付け点数に読み出し用の重み付け係数を加算する。後述するように、読み出し用の重み付け係数は予め定められる。
Ｓ１５５の後、Ｓ１５２に戻る。Ｓ１５３において、重み付け決定部１４０はＳ１５３で判定した使用箇所以降を対象にして制御ブロックを検索する。
【００７４】
Ｓ１５６において、重み付け決定部１４０は、未選択の共有変数が残っているか否かを判定する。
未選択の制御ブロックが残っている場合（ＹＥＳ）、Ｓ１５１に戻る。重み付け決定部１４０は、Ｓ１５１において未選択の共有変数を選択し、Ｓ１５２において制御ブロックを先頭から検索する。
未選択の共有変数が残っていない場合（ＮＯ）、Ｓ１５７に進む。
【００７５】
Ｓ１５７において、重み付け決定部１４０は、制御ブロックの重み付け点数を共有リソースアクセス情報１０３に設定する。
Ｓ１５７により、重み付け点数算出処理（Ｓ１５０）は終了する。
【００７６】
図１２は、実施の形態２における重み付け係数情報１０５を示す図である。重み付け係数情報１０５は所定の記憶装置に予め記憶される。
重み付け決定部１４０は、図１２に示すような重み付け係数情報１０５に基づいて選択ブロックの重み付け点数に重み付け係数を加算する（図１１のＳ１５５、Ｓ１５６）。
例えば、重み付け決定部１４０は共有変数の読み出し箇所毎に１点加算し、共有変数の書き込み箇所毎に１０点加算する。
【００７７】
図１３は、実施の形態２における共有リソースアクセス情報１０３の一例を示す図である。
図１３に示す共有リソースアクセス情報１０３は、実施の形態１で説明した項目（図６参照）に加えて、「重み付け点数」を有する。
例えば、重み付け点数は、共有変数の使用箇所が多いほど高く、特に、共有変数の書き込み箇所が多いほど高い。つまり、重み付け点数は、共有変数の書き込み箇所が少ないほど低い。
この場合、重み付け点数が低い制御ブロックは、分割箇所として適した制御ブロックである可能性が高い。
例えば、ユーザは、重み付け点数が低い制御ブロックを組み合わせて並行化作業を進める。
但し、重み付け係数情報１０５を変更して、共有変数の書き込み箇所が少ないほど重み付け点数を高くしても構わない。
【００７８】
共有リソースアクセス情報１０３は、重み付け点数だけを示してもよい。
つまり、ソフトウェア開発方法（図１０参照）のＳ１３０において、構造解析部１２０は共有変数のアクセス種別を特定しなくても構わない。
【００７９】
実施の形態２において、例えば、以下のようなソフトウェア開発支援装置１００について説明した。
ソフトウェア開発支援装置１００は、関数内の分割箇所（制御ブロック）のそれぞれに共有リソースのアクセス状況の重み付けを行うことで、プログラムの最適な分割箇所をユーザに示す。
【符号の説明】
【００８０】
１００  ソフトウェア開発支援装置、１０１  分割指示、１０２  ソースコード、１０３  共有リソースアクセス情報、１０４  対象関数、１０５  重み付け係数情報、１１０  分割範囲抽出部、１２０  構造解析部、１３０  変数影響範囲表示部、１４０  重み付け決定部、１９０  共有リソースアクセス情報蓄積部、９０１  表示装置、９０２  キーボード、９０３  マウス、９０４  ドライブ装置、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信ボード、９２０  磁気ディスク装置、９２１  ＯＳ、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群。
【図１】
2012008667.tif 000003
【図２】
2012008667.tif 000004
【図３】
2012008667.tif 000005
【図４】
2012008667.tif 000006
【図５】
2012008667.tif 000007
【図６】
2012008667.tif 000008
【図７】
2012008667.tif 000009
【図８】
2012008667.tif 000010
【図９】
2012008667.tif 000011
【図１０】
2012008667.tif 000012
【図１１】
2012008667.tif 000013
【図１２】
2012008667.tif 000014
【図１３】
2012008667.tif 000015