(57)【要約】【課題】処理をアクセラレータに実行させることが好ましいか否かを判定すること。【解決手段】情報処理装置１００は、バイナリ実行プログラム１０１のＣＦＧ１０２に含まれる１以上の強連結グラフを特定する。情報処理装置１００は、プロファイル情報１０３に基づいて、特定した１以上のＳＣＳのそれぞれのＳＣＳが表す処理の特性を示す特性値を算出する。情報処理装置１００は、算出したそれぞれのＳＣＳの特性値と、アクセラレータについて設定された条件とに基づいて、それぞれのＳＣＳが表す処理が、アクセラレータに実行させる処理に適するか否かを判定する。【選択図】図１
2019053448.tif 000002
【特許請求の範囲】
【請求項１】
プログラムのコントロールフローグラフに含まれる１以上の強連結グラフを特定し、
前記コントロールフローグラフに含まれる１以上のノードのそれぞれのノードが表す処理の特性を示すプロファイル情報に基づいて、特定した前記１以上の強連結グラフのそれぞれの強連結グラフが表す処理の特性を示す特性値を算出し、
算出した前記それぞれの強連結グラフの特性値と、アクセラレータについて設定された条件とに基づいて、前記それぞれの強連結グラフが表す処理が、前記アクセラレータに実行させる処理に適するか否かを判定する、
制御部を有することを特徴とする情報処理装置。
【請求項２】
前記制御部は、
前記強連結グラフが表す処理によって、単位時間当たりに実行される演算量が大きいほど、または、単位時間当たりにアクセスされるデータ量が小さいほど、値が大きくなる第１の特性値を算出し、
算出した前記第１の特性値が、前記アクセラレータについて設定された第１の閾値を超える場合、前記強連結グラフが表す処理が、前記アクセラレータに実行させる処理に適すると判定する、ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記制御部は、
前記強連結グラフが表す処理の演算量を示す第２の特性値を算出し、
算出した前記第２の特性値が、前記アクセラレータについて設定された第２の閾値を下回る場合、前記強連結グラフが表す処理が、前記アクセラレータに実行させる処理に適すると判定する、ことを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記第２の特性値は、前記強連結グラフに含まれる１以上のノードのそれぞれのノードが表す処理の演算量を、前記強連結グラフが表す処理に含まれる分岐処理における分岐確率に応じて重み付けして合計することにより得られる、ことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記第２の特性値は、前記強連結グラフが表す処理によって単位時間当たりに実行される演算量を、前記強連結グラフが表す処理の単位時間当たりの実行頻度で除算することにより得られる、ことを特徴とする請求項３または４に記載の情報処理装置。
【請求項６】
前記制御部は、
前記強連結グラフが表す処理による単位時間当たりの演算装置の使用時間を示す第３の特性値を算出し、
算出した前記第３の特性値が、前記アクセラレータについて設定された第３の閾値を超える場合、前記強連結グラフが表す処理が、前記アクセラレータに実行させる処理に適すると判定する、ことを特徴とする請求項１〜５のいずれか一つに記載の情報処理装置。
【請求項７】
前記制御部は、
前記コントロールフローグラフに含まれ、所定の演算量を超える処理をそれぞれ表す、１以上の強連結グラフを特定する、ことを特徴とする請求項１〜６のいずれか一つに記載の情報処理装置。
【請求項８】
コンピュータが、
プログラムのコントロールフローグラフに含まれる１以上の強連結グラフを特定し、
前記コントロールフローグラフに含まれる１以上のノードのそれぞれのノードが表す処理の特性を示すプロファイル情報に基づいて、特定した前記１以上の強連結グラフのそれぞれの強連結グラフが表す処理の特性を示す特性値を算出し、
算出した前記それぞれの強連結グラフの特性値と、アクセラレータについて設定された条件とに基づいて、前記それぞれの強連結グラフが表す処理が、前記アクセラレータに実行させる処理に適するか否かを判定する、
処理を実行することを特徴とする情報処理方法。
【請求項９】
コンピュータに、
プログラムのコントロールフローグラフに含まれる１以上の強連結グラフを特定し、
前記コントロールフローグラフに含まれる１以上のノードのそれぞれのノードが表す処理の特性を示すプロファイル情報に基づいて、特定した前記１以上の強連結グラフのそれぞれの強連結グラフが表す処理の特性を示す特性値を算出し、
算出した前記それぞれの強連結グラフの特性値と、アクセラレータについて設定された条件とに基づいて、前記それぞれの強連結グラフが表す処理が、前記アクセラレータに実行させる処理に適するか否かを判定する、
処理を実行させることを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、および情報処理プログラムに関する。
【背景技術】
【０００２】
従来、特定の処理に特化したハードウェア、例えば、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）やＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などに、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が実行する処理の一部を、ＣＰＵの代わりに実行させるオフロードの技術がある。ハードウェアは、例えば、アクセラレータと呼ばれる。
【０００３】
先行技術としては、例えば、ハードウェアアクセラレータから利益を得ることが可能なアプリケーションの加速バージョンのパフォーマンスを、基準バージョンのパフォーマンスと比較するものがある。また、例えば、特定の関数がアクセラレータポリシーを満たすか否かを決定し、アクセラレータポリシーが満たされれば、関数をハードウェアアクセラレータに割り当てる技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−１９１８２８号公報
【特許文献２】特開２０１２−１３３７７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術では、あるプログラムに規定された一連の処理のうち、いずれの処理をアクセラレータに実行させることが好ましいかを判断することが難しい。例えば、一連の処理のうち、いずれの処理をアクセラレータに実行させると、一連の処理にかかる時間を低減可能であるかを判断することが難しい。
【０００６】
１つの側面では、本発明は、処理をアクセラレータに実行させることが好ましいか否かを判定することができる情報処理装置、情報処理方法、および情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
１つの実施態様によれば、プログラムのコントロールフローグラフに含まれる１以上の強連結グラフを特定し、前記コントロールフローグラフに含まれる１以上のノードのそれぞれのノードが表す処理の特性を示すプロファイル情報に基づいて、特定した前記１以上の強連結グラフのそれぞれの強連結グラフが表す処理の特性を示す特性値を算出し、算出した前記それぞれの強連結グラフの特性値と、アクセラレータについて設定された条件とに基づいて、前記それぞれの強連結グラフが表す処理が、前記アクセラレータに実行させる処理に適するか否かを判定する情報処理装置、情報処理方法、および情報処理プログラムが提案される。
【発明の効果】
【０００８】
一態様によれば、処理をアクセラレータに実行させることが好ましいか否かを判定することが可能になる。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態にかかる情報処理方法の一実施例を示す説明図である。
【図２】図２は、情報処理装置１００のハードウェア構成例を示すブロック図である。
【図３】図３は、情報処理装置１００の機能的構成例を示すブロック図である。
【図４】図４は、プログラムのソースコード４００の一例を示す説明図である。
【図５】図５は、ＣＦＧ５００の一例を示す説明図である。
【図６】図６は、１以上のＳＣＳの一例を示す説明図である。
【図７】図７は、プログラムのプロファイル情報を生成する一例を示す説明図である。
【図８】図８は、イベント情報７０３の一例を示す説明図である。
【図９】図９は、プロファイル情報テーブル９００の一例を示す説明図である。
【図１０】図１０は、ＳＣＳが表す処理の特性値を算出する一例を示す説明図（その１）である。
【図１１】図１１は、ＳＣＳが表す処理の特性値を算出する一例を示す説明図（その２）である。
【図１２】図１２は、アクセラレータに実行させる処理に適するか否かを判定する一例を示す説明図である。
【図１３】図１３は、ＳＣＳが表す処理の実行演算量を算出する別の例を示す説明図である。
【図１４】図１４は、指定されるイベントの種類を変更した一例を示す説明図である。
【図１５】図１５は、全体処理手順の一例を示すフローチャートである。
【図１６】図１６は、ＳＣＳ特定処理手順の一例を示すフローチャートである。
【図１７】図１７は、ＳＣＳ特定処理を規定したソースコード１７００の一例を示す説明図である。
【発明を実施するための形態】
【００１０】
以下に、図面を参照して、本発明にかかる情報処理装置、情報処理方法、および情報処理プログラムの実施の形態を詳細に説明する。
【００１１】
（実施の形態にかかる情報処理方法の一実施例）
図１は、実施の形態にかかる情報処理方法の一実施例を示す説明図である。情報処理装置１００は、プログラムに規定された処理をアクセラレータに実行させることが好ましいか否かを判定することが可能であるコンピュータである。
【００１２】
情報処理装置１００は、例えば、サーバ、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）、タブレット端末、スマートフォン、ウェアラブル端末などである。アクセラレータは、例えば、ＦＰＧＡ、ＧＰＵ、またはＬＳＩ（Ｌａｒｇｅ−Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）などである。
【００１３】
ここで、プログラムを実装するシステム上にアクセラレータを用意し、プログラムに規定された一連の処理の全部または一部をアクセラレータに実行させ、一連の処理にかかる時間の低減化を図り、プログラムの性能の向上を図ることが望まれる場合がある。これに対し、例えば、プログラムごとに専用のアクセラレータを作成し、一連の処理の全部をアクセラレータに実行させることが考えられる。
【００１４】
しかしながら、プログラムごとに専用のアクセラレータを作成すると、コストの増大化を招いてしまうことがある。また、一連の処理の全部をアクセラレータに実行させることが好ましいとは限らない。例えば、アクセラレータが実行する処理の演算量とアクセラレータがメモリに対して入出力するデータ量との観点から、一連の処理の一部だけをアクセラレータに実行させることの方が比較的好ましく、一連の処理にかかる時間を低減することができることがある。
【００１５】
このため、一連の処理の全部または一部を選択してアクセラレータに実行させることが望まれる場合がある。これに対し、例えば、システムの製造者が、一連の処理のうち、いずれの処理をアクセラレータに実行させることが好ましいかを検討し、一連の処理の全部または一部を選択してアクセラレータに実行させることが考えられる。ここで、検討する対象は、単独の処理であってもよいし、複数の処理をまとめた処理であってもよい。
【００１６】
しかしながら、一連の処理のうち、いずれの処理をアクセラレータに実行させることが好ましいかを判断することは難しい。例えば、一連の処理のうち、いずれの処理をアクセラレータに実行させると、一連の処理にかかる時間を低減可能であるかを判断することは難しい。このため、システムの製造者は、一連の処理にかかる時間を効率よく低減することができず、プログラムの性能を効率よく向上させることができないことがある。また、いずれの処理をアクセラレータに実行させることが好ましいかを検討する際にかかる時間の増大化を招き、システムの製造者の負担の増大化を招き、コストの増大化を招いてしまうことがある。
【００１７】
また、専用のアクセラレータを作成せず、汎用のアクセラレータをシステム上に用意して利用する場合、アクセラレータの処理性能で実行可能な範囲で、いずれかの処理をアクセラレータに実行させることになる。このため、システムの製造者が、誤って、アクセラレータの処理性能で実行可能ではない処理を、アクセラレータに実行させようとしてしまうことがある。また、アクセラレータの処理性能を考慮するため、いずれの処理をアクセラレータに実行させることが好ましいかを検討する際にかかる時間の増大化を招き、システムの製造者の負担の増大化を招き、コストの増大化を招いてしまうことがある。
【００１８】
また、アクセラレータに実行させることが好ましい処理の数が、システム上に用意可能なアクセラレータの数より多い場合、いずれの処理を優先してアクセラレータに実行させればよいかを判断することは難しい。このため、システムの製造者は、一連の処理にかかる時間を効率よく低減することができず、プログラムの性能を効率よく向上させることができないことがある。また、いずれの処理をアクセラレータに実行させることが好ましいかを検討する際にかかる時間の増大化を招き、システムの製造者の負担の増大化を招き、コストの増大化を招いてしまうことがある。
【００１９】
また、システムの製造者とプログラムの設計者とが異なり、システムの製造者が、プログラムの設計者と契約締結し、プログラムの設計者にシステムを提供し、プログラムの設計者にシステムを利用させることがある。この際、プログラムの設計者は、契約締結前には、プログラムのソースコードを秘匿しておくことを望む傾向がある。一方で、プログラムの設計者は、契約締結を検討するため、システムを利用した場合、アクセラレータによりプログラムの性能を向上可能であるか否かを把握することを望む傾向もある。
【００２０】
しかしながら、システムの製造者が、プログラムのソースコードを参照せず、一連の処理のうち、いずれの処理をアクセラレータに実行させることが好ましいかを判断し、プログラムの設計者に通知することは難しい。このため、プログラムの設計者が、プログラムのソースコードを、システムの製造者に開示するというリスクを負うことがある。また、プログラムのソースコードが開示されない場合、いずれの処理をアクセラレータに実行させることが好ましいかを検討する際にかかる時間の増大化を招き、システムの製造者の負担の増大化を招き、コストの増大化を招いてしまうことがある。
【００２１】
また、システムの製造者が、イベントベースプロファイラや統計的プロファイラなどを用いて、プログラムに規定された関数単位で、アクセラレータ向きの処理を発見し、アクセラレータに実行させようとする場合が考えられる。
【００２２】
しかしながら、プログラムの設計者は、アクセラレータに関する情報を知らずにプログラムを設計することがあり、プログラム内の関数単位では、アクセラレータ向きの処理を発見することは難しい。また、イベントベースプロファイラを用いる場合、プログラムを書き換えることになり、プログラムの処理性能が変化してしまい、アクセラレータ向きの処理を発見しづらい。
【００２３】
そこで、本実施の形態では、プログラムのコントロールフローグラフ（Ｃｏｎｔｒｏｌ  Ｆｌｏｗ  Ｇｒａｐｈ）を参照することにより、プログラムに規定された処理が、アクセラレータに実行させる処理に適するか否かを判定する情報処理方法について説明する。以下の説明では、コントロールフローグラフを「ＣＦＧ」と表記する場合がある。
【００２４】
図１の例では、情報処理装置１００は、バイナリ実行プログラム１０１のＣＦＧ１０２を取得する。以下の説明では、バイナリ実行プログラム１０１を単に「プログラム１０１」と表記する場合がある。ＣＦＧ１０２は、プログラム１０１に規定された一連の処理の流れを示す有向グラフである。ＣＦＧ１０２は、プログラム１０１に規定された一連の処理のそれぞれの処理を表すノードを含み、ノード間が有向エッジで接続されるグラフである。ノードは、例えば、基本ブロックとも呼ばれる。有向エッジは、例えば、ある処理を表すノードと、その処理の次に実行される処理を表すノードとを接続する。
【００２５】
情報処理装置１００は、例えば、他装置と通信可能に接続される。他装置は、例えば、プログラム１０１に対してＣＦＧ１０２抽出を行い、プログラム１０１のＣＦＧ１０２を生成し、プログラム１０１のＣＦＧ１０２を情報処理装置１００に送信する。情報処理装置１００は、例えば、プログラム１０１のＣＦＧ１０２を、他装置から受信する。
【００２６】
また、情報処理装置１００は、プログラム１０１のプロファイル情報１０３を取得する。プロファイル情報１０３は、ＣＦＧ１０２に含まれる１以上のノードのそれぞれのノードが表す処理の特性を示す情報を含む。プロファイル情報１０３は、例えば、プログラム１０１に規定された一連の処理のそれぞれの処理の特性を示す情報を含む。処理の特性を示す情報は、例えば、処理１回分の演算量を示す情報である。
【００２７】
情報処理装置１００は、例えば、他装置と通信可能に接続される。他装置は、例えば、プログラム１０１を実行してプロファイルを測定し、プロファイル情報１０３を生成し、プロファイル情報１０３を情報処理装置１００に送信する。情報処理装置１００は、プロファイル情報１０３を、他装置から受信する。
【００２８】
情報処理装置１００は、ＣＦＧ１０２に含まれる１以上の強連結グラフを特定し、強連結グラフを記録したリスト１０４を記憶する。強連結グラフは、ＣＦＧ１０２に含まれる部分グラフであり、その部分グラフ上のいずれのノード間にも有向路が存在する部分グラフである。強連結グラフは、階層構造であってもよい。強連結グラフは、例えば、他の強連結グラフを含んでもよい。以下の説明では、強連結グラフを「ＳＣＳ（Ｓｔｒｏｎｇｌｙ  Ｃｏｎｎｅｃｔｅｄ  Ｓｕｂｃｏｍｐｏｎｅｎｔ）」と表記する場合がある。
【００２９】
情報処理装置１００は、以降において、ＳＣＳが表す処理単位で扱うことにより、プログラム１０１内で繰り返し呼び出される可能性が比較的高い処理単位で、アクセラレータに実行させる候補を検討しやすくなる。ＳＣＳが表す処理は、例えば、関数として扱うことが可能であり、プログラム１０１から分離可能である。関数は、例えば、カーネルと呼ばれる。関数は、繰り返し呼び出されるため、アクセラレータで実行させた場合に、ＣＰＵの処理負荷が低減される傾向がある。
【００３０】
情報処理装置１００は、プロファイル情報１０３に基づいて、特定した１以上のＳＣＳのそれぞれのＳＣＳが表す処理の特性を示す特性値を算出し、特性値を記録したリスト１０４を記憶する。特性値は、例えば、ＳＣＳが表す処理１回分の演算量であり、ＳＣＳに含まれる１以上のノードのそれぞれのノードが表す処理１回分の演算量を合計することにより得られる。
【００３１】
情報処理装置１００は、例えば、ＳＣＳごとに、ＳＣＳに含まれる１以上のノードのそれぞれのノードが表す処理１回分の演算量を合計した結果を、ＳＣＳが表す処理１回分の演算量を示す特性値として算出する。この場合、特性値は、ＳＣＳが表す処理をアクセラレータに実行させた場合にＣＰＵの処理負荷がどの程度低減されるかの指標や、アクセラレータの処理性能で実行可能であるかを判定する指標などになりうる。
【００３２】
情報処理装置１００は、算出したそれぞれのＳＣＳの特性値と、アクセラレータについて設定された条件１０５とに基づいて、それぞれのＳＣＳが表す処理が、アクセラレータに実行させる処理に適するか否かを判定し、判定した結果１０６を記憶する。アクセラレータについて設定された条件１０５は、例えば、アクセラレータの処理性能で実行可能な処理に関する条件１０５である。アクセラレータについて設定された条件１０５は、具体的には、アクセラレータの処理性能で実行可能な演算量の上限を示す。
【００３３】
また、アクセラレータについて設定された条件１０５は、例えば、ＣＰＵの処理負荷がどの程度以上に低減されれば、処理をアクセラレータに実行させることが好ましいと判定するかに関する条件１０５である。アクセラレータについて設定された条件１０５は、具体的には、演算量の下限を示す。以下の説明では、アクセラレータについて設定された条件１０５を「アクセラレータ条件１０５」と表記する場合がある。
【００３４】
情報処理装置１００は、例えば、ＳＣＳについて算出した演算量が、アクセラレータ条件１０５が示す演算量の上限以下である場合、ＳＣＳが表す処理が、アクセラレータの処理性能で実行可能であると判定する。そして、情報処理装置１００は、アクセラレータの処理性能で実行可能であれば、ＳＣＳが表す処理が、アクセラレータに実行させる処理に適すると判定する。
【００３５】
また、情報処理装置１００は、例えば、ＳＣＳについて算出した演算量が、アクセラレータ条件１０５が示す演算量の下限以上である場合、ＳＣＳが表す処理をアクセラレータで実行すると、ＣＰＵの処理負荷が一定以上低減されると判定する。そして、情報処理装置１００は、ＣＰＵの処理負荷が一定以上低減されれば、ＳＣＳが表す処理が、アクセラレータに実行させる処理に適すると判定する。
【００３６】
これにより、情報処理装置１００は、比較的短時間で、ＳＣＳが表す処理をアクセラレータに実行させることが好ましいかを判定することができ、判定した結果をシステムの製造者に通知することができる。また、情報処理装置１００は、ＳＣＳが表す処理について算出した特性値をシステムの製造者に通知してもよく、ＳＣＳが表す処理をアクセラレータに実行させることがどの程度好ましいかを把握可能にすることもできる。
【００３７】
このため、システムの製造者は、プログラム１０１に規定された一連の処理のうち、いずれの処理をアクセラレータに実行させるかを判断可能になる。そして、システムの製造者は、プログラム１０１に規定された一連の処理の全部または一部をアクセラレータに実行させ、一連の処理にかかる時間の低減化を図り、プログラム１０１の性能の向上を図ることが可能になる。
【００３８】
また、情報処理装置１００は、プログラム１０１のＣＦＧ１０２と、プログラム１０１のプロファイル情報１０３とを、他装置から受信すればよい。このため、情報処理装置１００は、プログラム１０１を参照しなくてもよく、プログラム１０１自体を秘匿したまま、ＳＣＳが表す処理をアクセラレータに実行させることが好ましいかを判定することができる。また、情報処理装置１００は、プログラム１０１への入力データの性質などを参照しなくてもよい。
【００３９】
結果として、プログラム１０１の設計者は、プログラム１０１自体や実行環境などを秘匿したまま、アクセラレータによりプログラム１０１の性能を向上可能であるか否かを把握することができ、システムを利用するか否かを決定することができる。このため、プログラム１０１の設計者は、プログラム１０１が開示されるリスクを負わなくてもよく、システムの製造者とプログラム１０１の設計者とは、システムの利用に関して契約締結しやすくなる。
【００４０】
また、情報処理装置１００は、ＳＣＳが表す処理単位で扱うため、プログラム１０１に予め規定された関数ではなくても、プログラム１０１から関数として分離可能である処理単位で、アクセラレータ向きか否かを判定することができる。このため、情報処理装置１００は、アクセラレータで実行させることが好ましい処理を発見しやすくすることができる。また、情報処理装置１００は、プログラム１０１を書き換えなくてもよいようにすることができる。
【００４１】
ここでは、情報処理装置１００が、プログラム１０１のＣＦＧ１０２やプログラム１０１のプロファイル情報１０３を、他装置から受信する場合について説明したが、これに限らない。例えば、情報処理装置１００が、プログラム１０１に対してＣＦＧ１０２抽出を行い、プログラム１０１のＣＦＧ１０２を生成する場合があってもよい。また、例えば、情報処理装置１００が、プログラム１０１を実行してプロファイルを測定し、プロファイル情報１０３を生成する場合があってもよい。
【００４２】
ここでは、情報処理装置１００が、ＳＣＳの特定、ＳＣＳの特性値の算出、および、適するか否かの判定を行う場合について説明したが、これに限らない。例えば、ＳＣＳの特定を行う情報処理装置１００と、ＳＣＳの特性値の算出を行う情報処理装置１００と、適するか否かの判定を行う情報処理装置１００とが異なる場合があってもよい。この場合、それぞれの情報処理装置１００が協働することにより、実施の形態にかかる情報処理方法が実現される。
【００４３】
ここでは、情報処理装置１００が、ＣＦＧ１０２に含まれる１以上のＳＣＳを特定する場合について説明した。この際、情報処理装置１００は、例えば、自装置で、ＣＦＧ１０２を解析した結果、ＣＦＧ１０２に含まれる１以上のＳＣＳを特定してもよい。一方で、情報処理装置１００は、例えば、他装置がＣＦＧ１０２を解析した結果得られたＣＦＧ１０２に含まれる１以上のＳＣＳを示す情報を受信することにより、１以上のＳＣＳを特定してもよい。
【００４４】
（情報処理装置１００のハードウェア構成例）
次に、図２を用いて、情報処理装置１００のハードウェア構成例について説明する。
【００４５】
図２は、情報処理装置１００のハードウェア構成例を示すブロック図である。図２において、情報処理装置１００は、ＣＰＵ２０１と、メモリ２０２と、ネットワークＩ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０３と、記録媒体Ｉ／Ｆ２０４と、記録媒体２０５とを有する。また、各構成部は、バス２００によってそれぞれ接続される。
【００４６】
ここで、ＣＰＵ２０１は、情報処理装置１００の全体の制御を司る。メモリ２０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有する。具体的には、例えば、フラッシュＲＯＭやＲＯＭが各種プログラムを記憶し、ＲＡＭがＣＰＵ２０１のワークエリアとして使用される。メモリ２０２に記憶されるプログラムは、ＣＰＵ２０１にロードされることで、コーディングされている処理をＣＰＵ２０１に実行させる。
【００４７】
ネットワークＩ／Ｆ２０３は、通信回線を通じてネットワーク２１０に接続され、ネットワーク２１０を介して他のコンピュータに接続される。そして、ネットワークＩ／Ｆ２０３は、ネットワーク２１０と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。ネットワークＩ／Ｆ２０３には、例えば、モデムやＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）アダプタなどを採用することができる。
【００４８】
記録媒体Ｉ／Ｆ２０４は、ＣＰＵ２０１の制御に従って記録媒体２０５に対するデータのリード／ライトを制御する。記録媒体Ｉ／Ｆ２０４は、例えば、ディスクドライブ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）ポートなどである。記録媒体２０５は、記録媒体Ｉ／Ｆ２０４の制御で書き込まれたデータを記憶する不揮発メモリである。記録媒体２０５は、例えば、ディスク、半導体メモリ、ＵＳＢメモリなどである。記録媒体２０５は、情報処理装置１００から着脱可能であってもよい。
【００４９】
情報処理装置１００は、上述した構成部のほか、例えば、キーボード、マウス、ディスプレイ、プリンタ、スキャナ、マイク、スピーカーなどを有してもよい。また、情報処理装置１００は、記録媒体Ｉ／Ｆ２０４や記録媒体２０５を複数有していてもよい。また、情報処理装置１００は、記録媒体Ｉ／Ｆ２０４や記録媒体２０５を有していなくてもよい。
【００５０】
（情報処理装置１００の機能的構成例）
次に、図３を用いて、情報処理装置１００の機能的構成例について説明する。
【００５１】
図３は、情報処理装置１００の機能的構成例を示すブロック図である。情報処理装置１００は、記憶部３００と、取得部３０１と、特定部３０２と、算出部３０３と、判定部３０４と、出力部３０５とを含む。
【００５２】
記憶部３００は、例えば、図２に示したメモリ２０２や記録媒体２０５などの記憶領域によって実現される。以下では、記憶部３００が、情報処理装置１００に含まれる場合について説明するが、これに限らない。例えば、記憶部３００が、情報処理装置１００とは異なる装置に含まれ、記憶部３００の記憶内容が情報処理装置１００から参照可能である場合があってもよい。
【００５３】
取得部３０１〜出力部３０５は、制御部となる機能である。取得部３０１〜出力部３０５は、具体的には、例えば、図２に示したメモリ２０２や記録媒体２０５などの記憶領域に記憶されたプログラムをＣＰＵ２０１に実行させることにより、または、ネットワークＩ／Ｆ２０３により、その機能を実現する。各機能部の処理結果は、例えば、図２に示したメモリ２０２や記録媒体２０５などの記憶領域に記憶される。
【００５４】
記憶部３００は、各機能部の処理に用いられる各種情報を記憶する。記憶部３００は、例えば、取得部３０１が取得した各種情報を記憶する。記憶部３００は、具体的には、取得部３０１が取得したプログラムのＣＦＧを記憶する。ＣＦＧは、プログラムに規定された一連の処理の流れを示す有向グラフである。ＣＦＧは、プログラムに規定された一連の処理のそれぞれの処理を表すノードを含み、ノード間が有向エッジで接続されるグラフである。有向エッジは、例えば、ある処理を表すノードと、その処理の次に実行される処理を表すノードとを接続する。
【００５５】
記憶部３００は、具体的には、取得部３０１が取得したプログラムのプロファイル情報を記憶する。プロファイル情報は、ＣＦＧに含まれる１以上のノードのそれぞれのノードが表す処理の特性を示す情報を含む。プロファイル情報は、例えば、ＣＦＧに含まれる１以上のノードが表す、プログラムに規定された一連の処理のそれぞれの処理の特性を示す情報を含む。処理の特性を示す情報は、例えば、処理１回分の演算量、処理の実行演算量、処理によって単位時間当たりにアクセスされるデータ量、処理による単位時間当たりの演算装置の使用時間などを示す情報である。実行演算量は、処理によって単位時間当たりに実行される演算量である。以下の説明では、処理１回分の演算量を単に「処理の演算量」と表記する場合がある。演算装置は、例えば、ＣＰＵ２０１である。
【００５６】
記憶部３００は、例えば、ＳＣＳの特性値の算出式を記憶し、算出されたＳＣＳの特性値を記憶する。ＳＣＳは、ＣＦＧに含まれる部分グラフであり、部分グラフ上のいずれの２つのノード間にも有向路が存在する部分グラフである。ＳＣＳの特性値は、ＳＣＳが表す処理の特性を示す。特性値は、例えば、後述する第１の特性値、第２の特性値、第３の特性値などである。
【００５７】
記憶部３００は、具体的には、第１の特性値を記憶する。第１の特性値は、ＳＣＳが表す処理によって、単位時間当たりに実行される実行演算量が大きいほど、または、単位時間当たりにアクセスされるデータ量が小さいほど、値が大きくなる。第１の特性値は、例えば、ＳＣＳが表す処理の演算強度である。演算強度は、例えば、ＳＣＳが表す処理によって単位時間当たりに実行される実行演算量を、ＳＣＳが表す処理によって単位時間当たりにアクセスされるデータ量で除算することにより得られる。
【００５８】
記憶部３００は、具体的には、第２の特性値を記憶する。第２の特性値は、例えば、ＳＣＳが表す処理１回分の演算量を示す。演算量は、例えば、ＳＣＳが表す処理の実行演算量を、ＳＣＳが表す処理の単位時間当たりの実行頻度で除算することにより得られる。実行頻度は、例えば、ＳＣＳが表す処理の実行演算量を、ＳＣＳが表す処理のセルフ演算量で除算することにより得られる。セルフ演算量は、例えば、ＳＣＳに含まれる１以上のノードのそれぞれのノードが表す処理１回分の演算量を合計することにより得られる。
【００５９】
ここで、ＳＣＳが他のＳＣＳを含む場合がある。この場合、実行頻度は、例えば、ＳＣＳの実行演算量から他のＳＣＳの実行演算量を減算した結果を、ＳＣＳが表す処理のセルフ演算量で除算することにより得られる。この場合、セルフ演算量は、ＳＣＳから他のＳＣＳを除いた部分グラフに含まれる１以上のノードのそれぞれのノードが表す処理１回分の演算量を合計することにより得られる。
【００６０】
記憶部３００は、具体的には、第３の特性値を記憶する。第３の特性値は、例えば、ＳＣＳが表す処理による単位時間当たりの演算装置の使用時間を示す。第３の特性値は、具体的には、ＳＣＳに含まれる１以上のノードのそれぞれのノードが表す処理による単位時間当たりの演算装置の使用時間を合計することにより得られる。第３の特性値は、具体的には、短時間当たりの演算装置の使用時間の割合を示す使用率であってもよい。
【００６１】
記憶部３００は、例えば、アクセラレータ条件を記憶する。アクセラレータ条件は、例えば、アクセラレータの処理性能で実行可能な処理に関する条件である。アクセラレータ条件は、具体的には、アクセラレータの処理性能で実行可能な演算量の上限を示す。アクセラレータ条件は、例えば、処理をアクセラレータに実行させることが、どの程度好ましければ、アクセラレータに実行させる処理に適すると判定するかに関する条件であってもよい。アクセラレータ条件は、具体的には、特性値と比較する閾値であり、処理をアクセラレータに実行させることが一定以上好ましいことを示す閾値を示す。
【００６２】
取得部３０１は、各機能部の処理に用いられる各種情報を記憶部３００から取得し、各機能部に出力する。また、取得部３０１は、他装置から取得した各種情報を、記憶部３００に記憶し、または、各機能部に出力する。取得部３０１は、例えば、プログラムのＣＦＧやプログラムのプロファイル情報などを、他装置から受信し、記憶部３００に記憶する。取得部３０１は、自装置でプログラムのＣＦＧやプログラムのプロファイル情報などを生成する場合、プログラムを取得してもよい。
【００６３】
特定部３０２は、プログラムのＣＦＧに含まれる１以上のＳＣＳを特定する。特定部３０２は、例えば、ＣＦＧに含まれ、所定の演算量を超える処理をそれぞれ表す、１以上のＳＣＳを特定する。特定部３０２は、取得部３０１がプログラムを取得した場合、プログラムのＣＦＧを生成してから、プログラムのＣＦＧに含まれる１以上のＳＣＳを特定してもよい。
【００６４】
これにより、特定部３０２は、アクセラレータに実行させる処理の候補を表すＳＣＳを特定することができ、算出部３０３に参照させることができる。また、特定部３０２は、所定の演算量を超えず、アクセラレータに実行させることが比較的好ましくない処理を表すＳＣＳを特定せず、算出部３０３の処理負担の低減化を図ることができる。
【００６５】
算出部３０３は、プロファイル情報に基づいて、特定部３０２が特定した１以上のＳＣＳのそれぞれのＳＣＳの特性値を算出する。算出部３０３は、例えば、それぞれのＳＣＳについて、第１の特性値、第２の特性値、第３の特性値などを算出する。
【００６６】
算出部３０３は、具体的には、ＳＣＳに含まれる１以上のノードのそれぞれのノードが表す処理の演算量を合計し、ＳＣＳが表す処理のセルフ演算量を算出する。セルフ演算量は、ＳＣＳに含まれる１以上のノードのそれぞれのノードが表す処理の演算量を合計した結果である。ＳＣＳが表す処理のセルフ演算量は、例えば、ＳＣＳが他のＳＣＳを含む場合、他のＳＣＳが表す処理のセルフ演算量を除外して算出される。
【００６７】
ここで、ＳＣＳに含まれる１以上のノードのいずれかのノードが表す処理が、分岐処理である場合がある。この場合、算出部３０３は、具体的には、ＳＣＳに含まれる１以上のノードのそれぞれのノードが表す処理の演算量を、ＳＣＳが表す処理に含まれる分岐処理における分岐確率に応じて重み付けして合計し、ＳＣＳが表す処理のセルフ演算量を算出する。これにより、算出部３０３は、ＳＣＳが表す処理のセルフ演算量を精度よく算出することができ、ＳＣＳが表す処理が、アクセラレータに実行させる処理に適するか否かを精度よく判定可能にすることができる。
【００６８】
ここで、ＳＣＳが他のＳＣＳを含む場合がある。この場合、算出部３０３は、具体的には、ＳＣＳから他のＳＣＳを除いた部分グラフに含まれる１以上のノードのそれぞれのノードが表す処理の演算量を合計した結果を、ＳＣＳが表す処理のセルフ演算量として算出する。これにより、算出部３０３は、ＳＣＳが表す処理のセルフ演算量を精度よく算出することができ、ＳＣＳが表す処理が、アクセラレータに実行させる処理に適するか否かを精度よく判定可能にすることができる。
【００６９】
さらに、ＳＣＳが他のＳＣＳを含み、かつ、ＳＣＳから他のＳＣＳを除いた部分グラフに含まれる１以上のノードのいずれかのノードが表す処理が、分岐処理である場合がある。この場合、算出部３０３は、具体的には、部分グラフに含まれる１以上のノードのそれぞれのノードが表す処理の演算量を、部分グラフが表す処理に含まれる分岐処理における分岐確率に応じて重み付けして合計し、ＳＣＳが表す処理のセルフ演算量を算出する。これにより、算出部３０３は、ＳＣＳが表す処理のセルフ演算量を精度よく算出することができ、ＳＣＳが表す処理が、アクセラレータに実行させる処理に適するか否かを精度よく判定可能にすることができる。
【００７０】
算出部３０３は、具体的には、ＳＣＳに含まれる１以上のノードのそれぞれのノードが表す処理の実行演算量を合計し、ＳＣＳが表す処理の実行演算量を算出する。
【００７１】
ここで、ＳＣＳに含まれる１以上のノードのいずれかのノードが表す処理が、複数の呼出元から呼び出される場合がある。この場合、算出部３０３は、具体的には、ＳＣＳが表す処理において、ＳＣＳに含まれる１以上のノードのそれぞれのノードが表す処理が呼び出された回数に応じて、それぞれのノードが表す処理の実行演算量に重み付けして合計する。算出部３０３は、合計した結果を、ＳＣＳが表す処理の実行演算量として算出する。これにより、算出部３０３は、ＳＣＳが表す処理の実行演算量を精度よく算出することができ、ＳＣＳが表す処理が、アクセラレータに実行させる処理に適するか否かを精度よく判定可能にすることができる。
【００７２】
算出部３０３は、具体的には、ＳＣＳに含まれる１以上のノードのそれぞれのノードが表す処理によって単位時間当たりにアクセスされるデータ量を合計し、ＳＣＳが表す処理によって単位時間当たりにアクセスされるデータ量を算出する。
【００７３】
算出部３０３は、具体的には、ＳＣＳが表す処理の実行演算量を、ＳＣＳが表す処理のセルフ演算量で除算し、実行頻度を算出する。
【００７４】
ここで、ＳＣＳが他のＳＣＳを含む場合がある。この場合、算出部３０３は、具体的には、ＳＣＳが表す処理の実行演算量から、他のＳＣＳが表す処理の実行演算量を減算する。そして、算出部３０３は、減算した結果を、ＳＣＳが表す処理のセルフ演算量で除算し、実行頻度を算出する。これにより、算出部３０３は、ＳＣＳが表す処理の実行頻度を精度よく算出することができ、ＳＣＳが表す処理が、アクセラレータに実行させる処理に適するか否かを精度よく判定可能にすることができる。
【００７５】
算出部３０３は、具体的には、ＳＣＳが表す処理の実行演算量を、ＳＣＳが表す処理によって単位時間当たりにアクセスされるデータ量で除算することにより得られる演算強度を、第１の特性値として算出する。これにより、算出部３０３は、処理をアクセラレータに実行させると、プログラムの処理性能が一定以上向上するか否かを判定する指標を、判定部３０４に提供することができる。
【００７６】
算出部３０３は、具体的には、ＳＣＳが表す処理の実行演算量を、ＳＣＳが表す処理の実行頻度で除算することにより得られる、ＳＣＳが表す処理１回分の演算量を、第２の特性値として算出する。これにより、算出部３０３は、処理をアクセラレータの処理性能で実行可能であるか否かを判定する指標を、判定部３０４に提供することができる。
【００７７】
また、算出部３０３は、具体的には、ＳＣＳに含まれる１以上のノードのそれぞれのノードが表す処理による単位時間当たりの演算装置の使用時間を合計し、ＳＣＳが表す処理による単位時間当たりの演算装置の使用時間を、第３の特性値として算出する。これにより、算出部３０３は、処理をアクセラレータに実行させると、ＣＰＵ２０１の処理負担を一定以上低減することができるか否かを判定する指標を、判定部３０４に提供することができる。
【００７８】
判定部３０４は、算出部３０３が算出したそれぞれのＳＣＳの特性値と、アクセラレータについて設定された条件とに基づいて、それぞれのＳＣＳが表す処理が、アクセラレータに実行させる処理に適するか否かを判定する。
【００７９】
判定部３０４は、例えば、算出部３０３が算出した第１の特性値が、アクセラレータについて設定された第１の閾値を超える場合、ＳＣＳが表す処理がアクセラレータに実行させる処理に適すると判定する。これにより、判定部３０４は、アクセラレータに実行させると、プログラムの処理性能を一定以上向上することができる処理を、アクセラレータに実行させる処理に適すると判定することができる。
【００８０】
判定部３０４は、例えば、算出部３０３が算出した第２の特性値が、アクセラレータについて設定された第２の閾値を下回る場合、ＳＣＳが表す処理がアクセラレータに実行させる処理に適すると判定する。これにより、判定部３０４は、アクセラレータの処理性能で実行可能である処理を、アクセラレータに実行させる処理に適すると判定することができる。
【００８１】
判定部３０４は、例えば、算出部３０３が算出した第３の特性値が、アクセラレータについて設定された第３の閾値を超える場合、ＳＣＳが表す処理がアクセラレータに実行させる処理に適すると判定する。これにより、判定部３０４は、アクセラレータに実行させると、ＣＰＵ２０１の処理負担を一定以上低減することができる処理を、アクセラレータに実行させる処理に適すると判定することができる。
【００８２】
判定部３０４は、例えば、算出部３０３が算出した実行頻度を、第４の特性値として用いてもよい。判定部３０４は、例えば、第４の特性値が、アクセラレータについて設定された第４の閾値を超える場合、ＳＣＳが表す処理がアクセラレータに実行させる処理に適すると判定する。これにより、判定部３０４は、アクセラレータに実行させると、ＣＰＵ２０１の処理負担を一定以上低減することができる処理を、アクセラレータに実行させる処理に適すると判定することができる。
【００８３】
判定部３０４は、例えば、算出した第２の特性値が、アクセラレータについて設定された第５の閾値を超える場合、ＳＣＳが表す処理がアクセラレータに実行させる処理に適すると判定してもよい。第５の閾値は、例えば、第２の閾値より小さい。これにより、判定部３０４は、アクセラレータに実行させると、プログラムの処理性能を一定以上向上することができる処理を、アクセラレータに実行させる処理に適すると判定することができる。
【００８４】
出力部３０５は、各機能部の処理結果を出力する。出力形式は、例えば、ディスプレイへの表示、プリンタへの印刷出力、ネットワークＩ／Ｆ２０３による外部装置への送信、または、メモリ２０２や記録媒体２０５などの記憶領域への記憶である。出力部３０５は、例えば、判定部３０４の判定結果を出力する。
【００８５】
これにより、出力部３０５は、各機能部の処理結果を利用者に通知可能にし、情報処理装置１００の管理や運用、例えば、情報処理装置１００の設定値の更新などを支援することができ、情報処理装置１００の利便性の向上を図ることができる。出力部３０５は、判定部３０４の判定結果を利用者に通知し、プログラムに規定された一連の処理のうち、アクセラレータに実行させることが好ましい処理があるか否か、および、いずれの処理をアクセラレータに実行させるかを判断しやすくすることができる。
【００８６】
（プログラムのソースコード４００の一例）
次に、図４〜図１２を用いて、情報処理装置１００の動作例について説明する。まず、図４を用いて、プログラムのソースコード４００の一例について説明する。
【００８７】
図４は、プログラムのソースコード４００の一例を示す説明図である。図４に示すように、プログラムのソースコード４００のＬ１〜Ｌ１４のそれぞれの行には、命令文が規定される。そして、情報処理装置１００、または、情報処理装置１００とは異なる他装置は、図４に示したソースコード４００からＣＦＧ５００を生成する。ここで、図５を用いて、図４に示したソースコード４００から生成されるＣＦＧ５００の一例について説明する。
【００８８】
（ＣＦＧ５００の一例）
図５は、ＣＦＧ５００の一例を示す説明図である。図５に示すように、ＣＦＧ５００は、始点ブロックと、終点ブロックと、基本ブロックｎ１〜ｎ１０とを含む。始点ブロックと、終点ブロックとは、特定の処理を表さず、プログラム全体が表す一連の処理の始点または終点を示す特殊な基本ブロックである。始点ブロックから基本ブロックｎ１へと有向エッジが接続される。
【００８９】
基本ブロックｎ１は、例えば、図４に示したソースコード４００のＬ１，Ｌ２の行に記述された命令文の処理を表す。基本ブロックｎ１から基本ブロックｎ２へと有向エッジが接続される。基本ブロックｎ２は、例えば、図４に示したソースコード４００のＬ３の行に記述された命令文の処理を表す。基本ブロックｎ２から基本ブロックｎ３および基本ブロックｎ１０へと有向エッジが接続される。
【００９０】
基本ブロックｎ３は、例えば、図４に示したソースコード４００のＬ４の行に記述された命令文の処理を表す。基本ブロックｎ３から基本ブロックｎ４へと有向エッジが接続される。基本ブロックｎ４は、例えば、図４に示したソースコード４００のＬ５の行に記述された命令文の処理を表す。基本ブロックｎ４から基本ブロックｎ５および基本ブロックｎ９へと有向エッジが接続される。
【００９１】
基本ブロックｎ５は、例えば、図４に示したソースコード４００のＬ６の行に記述された命令文の処理を表す。基本ブロックｎ５から基本ブロックｎ６および基本ブロックｎ７へと有向エッジが接続される。基本ブロックｎ６は、例えば、図４に示したソースコード４００のＬ７の行に記述された命令文の処理を表す。基本ブロックｎ６から基本ブロックｎ８へと有向エッジが接続される。
【００９２】
基本ブロックｎ７は、例えば、図４に示したソースコード４００のＬ９の行に記述された命令文の処理を表す。基本ブロックｎ７から基本ブロックｎ８へと有向エッジが接続される。基本ブロックｎ８は、例えば、図４に示したソースコード４００のＬ１０の行に記述された命令文の処理を表す。基本ブロックｎ８から基本ブロックｎ４へと有向エッジが接続される。
【００９３】
基本ブロックｎ９は、例えば、図４に示したソースコード４００のＬ１２の行に記述された命令文の処理を表す。基本ブロックｎ９から基本ブロックｎ２へと有向エッジが接続される。基本ブロックｎ１０は、例えば、図４に示したソースコード４００のＬ１４の行に記述された命令文の処理を表す。基本ブロックｎ１０から終点ブロックへと有向エッジが接続される。
【００９４】
そして、情報処理装置１００、または、他装置は、図５に示したＣＦＧ５００に含まれる１以上のＳＣＳを特定する。ＳＣＳを特定する技術としては、下記参考文献１および下記参考文献２などを参照することができる。
【００９５】
参考文献１：Ｆ．Ｂｏｕｒｄｏｎｃｌｅ．  “Ｅｆｆｉｃｉｅｎｔ  ｃｈａｏｔｉｃ  ｉｔｅｒａｔｉｏｎ  ｓｔｒａｔｅｇｉｅｓ  ｗｉｔｈ  ｗｉｄｅｎｉｎｇｓ．”  Ｆｏｒｍａｌ  Ｍｅｔｈｏｄｓ  ｉｎ  Ｐｒｏｇｒａｍｍｉｎｇ  ａｎｄ  ｔｈｅｉｒ  Ａｐｐｌｉｃａｔｉｏｎｓ．  Ｓｐｒｉｎｇｅｒ，  Ｂｅｒｌｉｎ，  Ｈｅｉｄｅｌｂｅｒｇ，  １９９３．
【００９６】
参考文献２：Ａｌｌｅｎ，  Ｆｒａｎｃｅｓ  Ｅ．  “Ｃｏｎｔｒｏｌ  ｆｌｏｗ  ａｎａｌｙｓｉｓ．”  ＡＣＭ  Ｓｉｇｐｌａｎ  Ｎｏｔｉｃｅｓ．  Ｖｏｌ．  ５．  Ｎｏ．  ７．  ＡＣＭ，  １９７０．
【００９７】
情報処理装置１００、または、他装置は、例えば、上記参考文献１に記載されたＳＣＣ（Ｓｔｒｏｎｇｌｙ  Ｃｏｎｎｅｃｔｅｄ  Ｃｏｍｐｏｎｅｎｔ）分解アルゴリズムを繰り返し適用し、１以上のＳＣＳを特定する。
【００９８】
情報処理装置１００、または、他装置は、具体的には、ＣＦＧ５００に対しＳＣＣ分解アルゴリズムを適用して得られたＳＣＣを、ＳＣＳとして記憶する。さらに、情報処理装置１００、または、他装置は、得られたＳＣＣに対し再びＳＣＣ分解アルゴリズムを適用し、ＳＣＣに包含されるＳＣＣを特定し、ＳＣＳとして記憶する。これにより、情報処理装置１００、または、他装置は、ＳＣＳのリストを生成することができる。ここで、図６を用いて、図５に示したＣＦＧ５００に含まれる１以上のＳＣＳの一例について説明する。
【００９９】
（１以上のＳＣＳの一例）
図６は、１以上のＳＣＳの一例を示す説明図である。図６に示すように、ＣＦＧ５００は、ＳＣＳ１と、ＳＣＳ２と、ＳＣＳ４と、ＳＣＳ１０とを含む。ＳＣＳ１は、基本ブロックｎ１を含む。ＳＣＳ２は、基本ブロックｎ２〜ｎ９を含む。ＳＣＳ２は、プログラム内のｗｈｉｌｅループに対応する。ＳＣＳ４は、基本ブロックｎ４〜ｎ８を含む。ＳＣＳ４は、ＳＣＳ２に包含される。ＳＣＳ１０は、基本ブロックｎ１０を含む。
【０１００】
ここで、情報処理装置１００、または、他装置は、ＣＦＧ５００に含まれる１以上のＳＣＳを特定する際に、所定の条件を満たすＳＣＳを特定し、所定の条件を満たさないＳＣＳを特定しないようにしてもよい。情報処理装置１００、または、他装置は、例えば、演算量が一定以下である処理を表すＳＣＳを特定しないようにしてもよい。また、情報処理装置１００は、例えば、他のＳＣＳに包含されるＳＣＳを特定しないようにしてもよい。また、情報処理装置１００は、例えば、一定数以上の他のＳＣＳに包含されるＳＣＳを特定しないようにし、ＳＣＳの階層を一定以下に抑えてもよい。
【０１０１】
そして、情報処理装置１００、または、他装置は、プログラムを実行し、プログラムのプロファイル情報を生成する。情報処理装置１００、または、他装置は、プログラムのプロファイル情報を生成してから、１以上のＳＣＳを特定してもよい。ここで、図７を用いて、プログラムのプロファイル情報を生成する一例について説明する。
【０１０２】
（プログラムのプロファイル情報を生成する一例）
図７は、プログラムのプロファイル情報を生成する一例を示す説明図である。図７に示すように、ＣＰＵ２０１は、予め指定されたイベントを発生すると、イベント発生トリガーにより、発生したイベントのカウンタ７０２を増加させる。イベントは、例えば、タイマ、演算実行、メモリアクセス、分岐命令実行などである。ここで、情報処理装置１００は、例えば、ＰＭＣ（Ｐｅｒｆｏｒｍａｎｃｅ  Ｍｏｎｉｔｏｒ  Ｃｏｕｎｔｅｒ）回路を有する。
【０１０３】
ＰＭＣ回路は、カウンタ７０２の値が、サンプリングレート７０１の値と等しくなるとイベント情報保存信号を発生し、発生時点におけるＣＰＵ２０１のレジスタ情報に基づいて、イベント情報７０３を保存する。レジスタ情報は、例えば、命令アドレス、Ｔａｋｅｎ／ＮｏｔＴａｋｅｎ情報、ＬＢＲ履歴などである。このように、サンプリングレート７０１の値により、発生するイベントと、発生した時のレジスタ情報とを、統計的にサンプリングすることが可能になる。次に、図８を用いて、サンプリングにより得られたイベント情報７０３の一例について説明する。
【０１０４】
（イベント情報７０３の一例）
図８は、イベント情報７０３の一例を示す説明図である。図８に示すように、情報処理装置１００は、イベントが発生した時刻（秒）と、発生イベントと、命令アドレスと、分岐Ｔａｋｅｎ／ＮｏｔＴａｋｅｎを対応付けたイベント情報７０３を、イベント情報テーブル８００を用いて記憶する。
【０１０５】
命令アドレスは、イベントが発生した命令アドレスである。情報処理装置１００は、命令アドレスに基づいて、どの基本ブロックでイベントが発生したかを特定可能である。ここでは、説明の簡略化のため、命令アドレスは、図４に示した行番号Ｌ１〜Ｌ１４で表現される。分岐Ｔａｋｅｎ／ＮｏｔＴａｋｅｎは、分岐命令実行のイベントが発生した際、分岐処理結果がＴａｋｅｎであるか、ＮｏｔＴａｋｅｎであるかを表す。例えば、分岐条件式が真であればＴａｋｅｎであり、分岐条件式が偽であればＮｏｔＴａｋｅｎである。
【０１０６】
ここで、情報処理装置１００は、実行演算のイベントに基づいて、実行演算のイベント数を算出することができる。実行演算のイベントは、１秒間に、命令アドレスＬ２とＬ１とにおいて発生している。Ｌ１とＬ２とは共に、基本ブロックｎ１に属する。さらに、実行演算のイベントのサンプリングレートを１千万回とすると、基本ブロックｎ１における実行演算のイベント数は、（１＋１）＊１千万＝２０Ｍ回／秒になる。実行演算のイベント数は、例えば、図９に後述するプロファイル情報テーブル９００を用いて、実行演算量として記憶される。
【０１０７】
ここで、情報処理装置１００は、タイマのイベントに基づいて、命令アドレスが含まれる基本ブロック同士のイベント数の比率を算出すれば、基本ブロックごとのＣＰＵ使用率を算出することができる。ＣＰＵ使用率は、例えば、図９に後述するプロファイル情報テーブル９００を用いて記憶される。ここで、情報処理装置１００は、分岐命令実行のイベントに基づいて、分岐処理ごとにＴａｋｅｎとＮｏｔＴａｋｅｎとの回数を計数すれば、分岐確率を算出することができる。分岐確率は、例えば、図９に後述するプロファイル情報テーブル９００を用いて記憶される。
【０１０８】
ここで、情報処理装置１００は、ＬＬＣ（Ｌａｓｔ  Ｌｅｖｅｌ  Ｃａｃｈｅ）ミスのイベントに基づいて、１秒当たりにＬＬＣミスのイベントが発生する回数に、キャッシュラインのサイズを乗算し、アクセスされるデータ量を算出することができる。以下の説明では、アクセスされるデータ量を「メモリアクセス量」と表記する場合がある。メモリアクセス量は、例えば、図９に後述するプロファイル情報テーブル９００を用いて記憶される。ここで、図９の説明に移行し、プロファイル情報テーブル９００の一例について説明する。
【０１０９】
（プロファイル情報テーブル９００の一例）
図９は、プロファイル情報テーブル９００の一例を示す説明図である。図９に示すように、情報処理装置１００は、基本ブロックに、基本ブロックが表す処理の命令文が記述された行の行番号と、基本ブロックが属するＳＣＳと、基本ブロックが表す処理１回分の演算量とを対応付けて、プロファイル情報テーブル９００に記憶する。
【０１１０】
また、情報処理装置１００は、基本ブロックに、算出した実行演算量と、算出したメモリアクセス量と、算出したＣＰＵ使用率と、算出した分岐確率とを対応付けて、プロファイル情報テーブル９００に記憶する。そして、情報処理装置１００は、プロファイル情報テーブル９００に基づいて、ＳＣＳが表す処理の特性値を算出する。ここで、次に、図１０および図１１を用いて、ＳＣＳが表す処理の特性値を算出する一例について説明する。
【０１１１】
（ＳＣＳが表す処理の特性値を算出する一例）
図１０および図１１は、ＳＣＳが表す処理の特性値を算出する一例を示す説明図である。図１０に示すように、情報処理装置１００は、例えば、ＳＣＳ４に属する基本ブロックのプロファイル情報１０００に基づいて、ＳＣＳ４が表す処理の特性値を算出する。特性値は、例えば、実行演算量、メモリアクセス量、ＣＰＵ使用率である。
【０１１２】
情報処理装置１００は、例えば、ＳＣＳ４に属する基本ブロックが表す処理の実行演算量を合計し、ＳＣＳ４が表す処理の実行演算量＝１５０＋１６０＋１００＋２００＋１４０＝７５０［ＭＯｐｓ／ｓ］を算出する。ＳＣＳ４が表す処理の実行演算量は、例えば、図１２に後述する特性値テーブル１２００を用いて記憶される。
【０１１３】
また、情報処理装置１００は、例えば、ＳＣＳ４に属する基本ブロックが表す処理のメモリアクセス量を合計し、ＳＣＳ４が表す処理のメモリアクセス量＝０＋０＋４００＋２００＋０＝６００［Ｍバイト／ｓ］を算出する。ＳＣＳ４が表す処理のメモリアクセス量は、例えば、図１２に後述する特性値テーブル１２００を用いて記憶される。
【０１１４】
また、情報処理装置１００は、例えば、ＳＣＳ４に属する基本ブロックが表す処理のメモリアクセス量を合計し、ＳＣＳ４が表す処理のＣＰＵ使用率＝１２＋１２＋１６＋２３＋１２＝７５［％］を算出する。ＳＣＳ４が表す処理のＣＰＵ使用率は、例えば、図１２に後述する特性値テーブル１２００を用いて記憶される。次に、図１１の説明に移行する。
【０１１５】
図１１に示すように、情報処理装置１００は、例えば、ＳＣＳ４に属する基本ブロックのプロファイル情報１１００に基づいて、ＳＣＳ４が表す処理のセルフ演算量を算出する。ＳＣＳ４が下位ＳＣＳを含まなければ、ＳＣＳ４が表す処理のセルフ演算量は、ＳＣＳ４に含まれる基本ブロックが表す処理の演算量を合計した結果である。下位ＳＣＳは、ＳＣＳ４に包含される他のＳＣＳである。
【０１１６】
一方で、ＳＣＳ４が下位ＳＣＳを含めば、ＳＣＳ４が表す処理のセルフ演算量は、ＳＣＳ４に含まれる基本ブロックから、下位ＳＣＳに含まれる基本ブロックを除いた残余の基本ブロックが表す処理の演算量を合計した結果である。ここでは、ＳＣＳ４は、下位ＳＣＳを含まない。
【０１１７】
また、ＳＣＳ４が表す処理のセルフ演算量は、ＳＣＳ４に含まれる、いずれかの基本ブロックが表す処理が分岐処理である場合、分岐確率に応じて、基本ブロックが表す処理の演算量に重み付けを行うことにより得られる。ここでは、ＳＣＳ４に含まれる基本ブロックｎ５が表す処理が、分岐処理である。
【０１１８】
また、基本ブロックｎ５において、Ｙｅｓ側の基本ブロックｎ６への分岐がＴａｋｅｎに対応し、プロファイル情報テーブル９００に記憶された、基本ブロックｎ６への分岐確率は６６．７％である。このため、基本ブロックｎ７への分岐確率は、１００−６６．７＝３３．３％である。また、ＳＣＳ４内では、他の基本ブロックｎ４，ｎ５，ｎ８は、分岐処理に関わらずに実行される。
【０１１９】
このため、情報処理装置１００は、基本ブロックｎ６が表す演算量には０．６６７の重み付けを行い、基本ブロックｎ７が表す処理の演算量には０．３３３の重み付けを行い、他の基本ブロックｎ４，ｎ５，ｎ８が表す処理の演算量はそのままにする。そして、情報処理装置１００は、ＳＣＳ４のセルフ演算量＝１＋１＋０．６６７＊１＋０．３３３＊４＋１＝５［Ｏｐｓ］を算出する。
【０１２０】
そして、情報処理装置１００は、算出した実行演算量、メモリアクセス量、セルフ演算量に基づいて、ＳＣＳ４が表す処理の実行頻度、演算量、演算強度を算出する。
【０１２１】
情報処理装置１００は、例えば、ＳＣＳ４が表す処理の実行頻度＝（ＳＣＳ４が表す処理の実行演算量−下位ＳＣＳが表す処理の実行演算量）÷ＳＣＳ４が表す処理のセルフ演算量を算出する。情報処理装置１００は、具体的には、ＳＣＳ４が下位ＳＣＳを含まないため、ＳＣＳ４が表す処理の実行頻度＝（７５０−０）÷５＝１５０［Ｍ回／ｓ］を算出する。ＳＣＳ４が表す処理の実行頻度は、例えば、図１２に後述する特性値テーブル１２００を用いて記憶される。
【０１２２】
また、情報処理装置１００は、例えば、ＳＣＳ４が表す処理の演算量＝ＳＣＳ４が表す処理の実行演算量÷ＳＣＳ４が表す処理の実行頻度を算出する。情報処理装置１００は、具体的には、ＳＣＳ４が表す処理の演算量＝７５０÷１５０＝５［Ｏｐｓ］を算出する。ここで、ＳＣＳ４が下位ＳＣＳを含まないため、ＳＣＳ４が表す処理の演算量は、ＳＣＳ４が表す処理のセルフ演算量と等しくなる。ＳＣＳ４が表す処理の演算量は、例えば、図１２に後述する特性値テーブル１２００を用いて記憶される。
【０１２３】
情報処理装置１００は、例えば、ＳＣＳ４が表す処理の演算強度＝ＳＣＳ４が表す処理の実行演算量÷ＳＣＳ４が表す処理のメモリアクセス量を算出する。情報処理装置１００は、具体的には、ＳＣＳ４が表す処理の演算強度＝７５０÷６００＝１．２５［Ｏｐｓ／バイト］を算出する。ＳＣＳ４が表す処理の演算強度は、例えば、図１２に後述する特性値テーブル１２００を用いて記憶される。
【０１２４】
情報処理装置１００は、同様に、ＳＣＳ２が表す処理についても実行演算量、メモリアクセス量、セルフ演算量などを算出し、ＳＣＳ２が表す処理の実行頻度、演算量、演算強度を算出する。
【０１２５】
情報処理装置１００は、例えば、ＳＣＳ２が表す処理の実行演算量＝基本ブロックｎ２〜ｎ９が表す処理の実行演算量を合計した結果を算出する。情報処理装置１００は、具体的には、ＳＣＳ２が表す処理の実行演算量＝５０＋４０＋１５０＋１６０＋１００＋２００＋１４０＋６０＝９００［ＭＯｐｓ／ｓ］を算出する。ＳＣＳ２が表す処理の実行演算量は、例えば、図１２に後述する特性値テーブル１２００を用いて記憶される。
【０１２６】
情報処理装置１００は、例えば、ＳＣＳ２が表す処理のセルフ演算量＝ＳＣＳ４に含まれない基本ブロックｎ２，ｎ３，ｎ９が表す処理の演算量を合計した結果を算出する。情報処理装置１００は、具体的には、ＳＣＳ２が表す処理のセルフ演算量＝１＋１＋１＝３［Ｏｐｓ］を算出する。ＳＣＳ２が表す処理のセルフ演算量は、例えば、図１２に後述する特性値テーブル１２００を用いて記憶される。
【０１２７】
情報処理装置１００は、例えば、ＳＣＳ２が表す処理の実行頻度＝（ＳＣＳ２が表す処理の実行演算量−下位ＳＣＳが表す処理の実行演算量）÷ＳＣＳ２が表す処理のセルフ演算量を算出する。ここでは、下位ＳＣＳは、ＳＣＳ４である。情報処理装置１００は、具体的には、ＳＣＳ２が表す処理の実行頻度＝（９００−７５０）÷３＝５０［Ｍ回／ｓ］を算出する。ＳＣＳ２が表す処理の実行頻度は、例えば、図１２に後述する特性値テーブル１２００を用いて記憶される。
【０１２８】
情報処理装置１００は、例えば、ＳＣＳ２が表す処理の演算量＝ＳＣＳ２が表す処理の実行演算量÷ＳＣＳ２が表す処理の実行頻度を算出する。情報処理装置１００は、具体的には、ＳＣＳ２が表す処理の演算量＝９００÷５０＝１８［Ｏｐｓ］を算出する。ＳＣＳ２が表す処理の演算量は、例えば、図１２に後述する特性値テーブル１２００を用いて記憶される。
【０１２９】
情報処理装置１００は、例えば、ＳＣＳ２が表す処理の演算強度＝ＳＣＳ２が表す処理の実行演算量÷ＳＣＳ２が表す処理のメモリアクセス量を算出する。情報処理装置１００は、具体的には、ＳＣＳ２が表す処理の演算強度１．５［Ｏｐｓ／バイト］を算出する。ＳＣＳ２が表す処理の演算強度は、例えば、図１２に後述する特性値テーブル１２００を用いて記憶される。次に、図１２を用いて、特性値テーブル１２００に基づいて、アクセラレータに実行させる処理に適するか否かを判定する一例について説明する。
【０１３０】
（アクセラレータに実行させる処理に適するか否かを判定する一例）
図１２は、アクセラレータに実行させる処理に適するか否かを判定する一例を示す説明図である。図１２に示すように、情報処理装置１００は、ＳＣＳ１が表す処理と、ＳＣＳ２が表す処理と、ＳＣＳ４が表す処理と、ＳＣＳ１０が表す処理とについて算出した特性値を、特性値テーブル１２００を用いて記憶する。
【０１３１】
情報処理装置１００は、特性値テーブル１２００を参照し、ＳＣＳ１が表す処理と、ＳＣＳ２が表す処理と、ＳＣＳ４が表す処理と、ＳＣＳ１０が表す処理とについて算出した特性値が、アクセラレータ条件を満たすか否かを判定する。アクセラレータ条件は、例えば、ＣＰＵ使用率が７０％以上である条件と、演算量が３０Ｏｐｓ以下である条件と、演算強度が１．２Ｏｐｓ／バイト以上である条件とを含む。
【０１３２】
図１２の例では、情報処理装置１００は、ＳＣＳ２が表す処理の特性値と、ＳＣＳ４が表す処理の特性値とが、アクセラレータ条件を満たすと判定する。そして、情報処理装置１００は、プログラムにアクセラレータで実行させることが好ましい処理があると判定し、アクセラレータに実行させる処理の候補として、ＳＣＳ２が表す処理と、ＳＣＳ４が表す処理とを特定する。
【０１３３】
ここで、アクセラレータの処理性能が低く、アクセラレータ条件に、演算量が１０Ｏｐｓ以下という条件がある場合、情報処理装置１００は、ＳＣＳ２が表す処理を、アクセラレータに実行させる処理の候補にしないことができる。また、情報処理装置１００は、ＳＣＳを特定する際に、ＳＣＳ２が特定されないようにしていてもよい。これにより、情報処理装置１００は、特定しうるＳＣＳすべてについて特性値を算出する場合に比べて、処理負担の低減化を図ることができる。
【０１３４】
以上により、情報処理装置１００は、比較的短時間で、ＳＣＳが表す処理をアクセラレータに実行させることが好ましいかを判定することができ、判定した結果をシステムの製造者に通知することができる。また、情報処理装置１００は、ＳＣＳが表す処理について算出した特性値をシステムの製造者に通知してもよく、ＳＣＳが表す処理をアクセラレータに実行させることがどの程度好ましいかを把握可能にすることもできる。
【０１３５】
また、情報処理装置１００は、プログラムのＣＦＧ５００と、プログラムのプロファイル情報テーブル９００とを参照すればよく、プログラムのソースコード４００を参照しなくてもよい。このため、情報処理装置１００は、プログラムのソースコード４００自体を秘匿したまま、ＳＣＳが表す処理をアクセラレータに実行させることが好ましいかを判定することができる。
【０１３６】
結果として、プログラムのソースコード４００の設計者は、プログラムのソースコード４００自体や実行環境などを秘匿したまま、アクセラレータによりプログラムのソースコード４００の性能を向上可能であるか否かを把握することができる。このため、プログラムのソースコード４００の設計者は、プログラムのソースコード４００が開示されるリスクを負わなくてもよい。
【０１３７】
また、情報処理装置１００は、アクセラレータの種別によらず、ＳＣＳが表す処理に固有の特性値を算出することができる。このため、情報処理装置１００は、アクセラレータの種別がどのような種別であっても、ＳＣＳが表す処理に固有の特性値に基づいて、ＳＣＳが表す処理がアクセラレータ向きであるかを判断可能にすることができる。
【０１３８】
また、情報処理装置１００は、ＳＣＳが表す処理の特性値を算出した後、ＳＣＳが表す処理を実行することが好ましいアクセラレータを製造したり、複数のアクセラレータ候補から選択して利用したりすることを可能にすることができる。結果として、情報処理装置１００は、プログラムの処理性能の向上を図ることができる。
【０１３９】
（ＳＣＳが表す処理の実行演算量を算出する別の例）
次に、図１３を用いて、ＳＣＳが表す処理の実行演算量を算出する別の例について説明する。例えば、ある基本ブロックが表す処理が複数の呼出元から呼び出される場合がある。この場合、ＳＣＳが表す処理の実行演算量を算出する際には、そのＳＣＳが表す処理において、その基本ブロックが表す処理が呼び出された回数に応じて、その基本ブロックが表す処理の実行演算量に重み付けを行うことが好ましい。
【０１４０】
図１３は、ＳＣＳが表す処理の実行演算量を算出する別の例を示す説明図である。図１３に示すように、情報処理装置１００は、イベント情報７０３にさらにＬＢＲ履歴を含めて、イベント情報テーブル１３００を用いて記憶する。ＬＢＲ履歴は、プログラムの実行中に分岐命令実行がある都度、最新の命令アドレスから過去数個分の命令アドレスを記録した履歴である。図１３の例では、ＬＢＲ履歴は、最大４個の命令アドレスの履歴を記録する。
【０１４１】
情報処理装置１００は、イベント情報テーブル１３００を参照し、基本ブロックが表す処理が実行された合計回数のうち、ＳＣＳが表す処理において基本ブロックが表す処理が呼び出された回数の割合を算出する。そして、情報処理装置１００は、基本ブロックにおける実行演算のイベント数に、算出した割合を乗算することにより、ＳＣＳが表す処理の実行演算量を算出する。これにより、情報処理装置１００は、ＳＣＳが表す処理の実行演算量を精度よく算出することができる。
【０１４２】
（指定されるイベントの種類を変更した一例）
次に、図１４を用いて、指定されるイベントの種類を変更した一例について説明する。図７および図８の例では、イベントとして、実行演算が予め指定される場合について説明したが、図１４の例のように、イベントとして、浮動小数点演算や実行命令数が予め指定される場合があってもよい。
【０１４３】
図１４は、指定されるイベントの種類を変更した一例を示す説明図である。情報処理装置１００は、浮動小数点演算が予め指定される場合、例えば、図１４に示すイベント情報テーブル１４００を記憶することになる。情報処理装置１００は、イベント情報テーブル１４００に基づいて、それぞれのＳＣＳが表す処理について、演算量の代わりに、または、演算量に加えて、浮動小数点演算量を算出することができる。また、情報処理装置１００は、アクセラレータ条件として、浮動小数点演算量に関する条件を用いることができる。
【０１４４】
これにより、情報処理装置１００は、アクセラレータに備わる浮動小数点回路のリソース制約を超える浮動小数点演算量になってしまう、ＳＣＳが表す処理を、アクセラレータに実行させることが好ましくないと判定することができる。
【０１４５】
また、情報処理装置１００は、実行命令数が予め指定される場合、例えば、図１４に示すイベント情報テーブル１４００を記憶することになる。そして、情報処理装置１００は、イベント情報テーブル１４００に基づいて、それぞれのＳＣＳが表す処理について、演算量の代わりに、または、演算量に加えて、整数演算量を算出することができる。また、情報処理装置１００は、アクセラレータ条件として、整数演算量に関する条件を用いることができる。
【０１４６】
これにより、情報処理装置１００は、アクセラレータに備わる整数演算回路、または、ランダムロジックのリソース制約を超える整数演算量になってしまう、ＳＣＳが表す処理を、アクセラレータに実行させることが好ましくないと判定することができる。
【０１４７】
（全体処理手順）
次に、図１５を用いて、情報処理装置１００が実行する、全体処理手順の一例について説明する。全体処理は、例えば、図２に示したＣＰＵ２０１と、メモリ２０２や記録媒体２０５などの記憶領域と、ネットワークＩ／Ｆ２０３とによって実現される。
【０１４８】
図１５は、全体処理手順の一例を示すフローチャートである。図１５に示すように、情報処理装置１００は、プログラムと、アクセラレータ条件とを取得する（ステップＳ１５０１）。次に、情報処理装置１００は、プログラムのＣＦＧ５００を生成する（ステップＳ１５０２）。そして、情報処理装置１００は、プログラムに基づいて、プロファイル情報を生成する（ステップＳ１５０３）。
【０１４９】
次に、情報処理装置１００は、生成したＣＦＧ５００に基づいて、図１６に後述するＳＣＳ特定処理を実行する（ステップＳ１５０４）。そして、情報処理装置１００は、特定したＳＣＳごとに特性値を算出する（ステップＳ１５０５）。次に、情報処理装置１００は、特定したＳＣＳごとに、算出した特性値に基づいて、アクセラレータ条件を満たすか否かを判定する（ステップＳ１５０６）。そして、情報処理装置１００は、判定した結果を出力し（ステップＳ１５０７）、全体処理を終了する。
【０１５０】
（ＳＣＳ特定処理手順）
次に、図１６を用いて、情報処理装置１００が実行する、ＳＣＳ特定処理手順の一例について説明する。ＳＣＳ特定処理は、例えば、図２に示したＣＰＵ２０１と、メモリ２０２や記録媒体２０５などの記憶領域と、ネットワークＩ／Ｆ２０３とによって実現される。
【０１５１】
図１６は、ＳＣＳ特定処理手順の一例を示すフローチャートである。図１６に示すように、情報処理装置１００は、ｇｒａｐｈ＝プログラムのＣＦＧ５００に設定する（ステップＳ１６０１）。次に、情報処理装置１００は、ｓｅｔＯｆＳＣＳ＝Φに設定する（ステップＳ１６０２）。Φは空集合である。そして、情報処理装置１００は、ｓｅｔＯｆＳＣＣ＝ＦｉｎｄＳＣＣ（ｇｒａｐｈ）に設定する（ステップＳ１６０３）。ＦｉｎｄＳＣＣ（ｇｒａｐｈ）は、ＳＣＣを特定する関数である。
【０１５２】
次に、情報処理装置１００は、ｓｅｔＯｆＳＣＣ！＝Φであるか否かを判定する（ステップＳ１６０４）。ここで、ｓｅｔＯｆＳＣＣ！＝Φである場合（ステップＳ１６０４：Ｙｅｓ）、情報処理装置１００は、ステップＳ１６０５の処理に移行する。一方で、ｓｅｔＯｆＳＣＣ！＝Φではない場合（ステップＳ１６０４：Ｎｏ）、情報処理装置１００は、ステップＳ１６１５の処理に移行する。
【０１５３】
ステップＳ１６０５では、情報処理装置１００は、ｎｅｘｔＯｆＳＣＣ＝Φに設定する（ステップＳ１６０５）。
【０１５４】
次に、情報処理装置１００は、ｓｃｃ∈ｓｅｔＯｆＳＣＣをすべて処理したか否かを判定する（ステップＳ１６０６）。ここで、処理していないｓｃｃ∈ｓｅｔＯｆＳＣＣがある場合（ステップＳ１６０６：Ｎｏ）、情報処理装置１００は、ステップＳ１６０７の処理に移行する。一方で、ｓｃｃ∈ｓｅｔＯｆＳＣＣをすべて処理した場合（ステップＳ１６０６：Ｙｅｓ）、情報処理装置１００は、ステップＳ１６１４の処理に移行する。
【０１５５】
ステップＳ１６０７では、情報処理装置１００は、ｓｃｃ∈ｓｅｔＯｆＳＣＣを選択する（ステップＳ１６０７）。
【０１５６】
次に、情報処理装置１００は、選択したｓｃｃ∈ｓｅｔＯｆＳＣＳであるか否かを判定する（ステップＳ１６０８）。ここで、ｓｃｃ∈ｓｅｔＯｆＳＣＳである場合（ステップＳ１６０８：Ｙｅｓ）、情報処理装置１００は、ステップＳ１６０６の処理に移行する。一方で、ｓｃｃ∈ｓｅｔＯｆＳＣＳではない場合（ステップＳ１６０８：Ｎｏ）、情報処理装置１００は、ステップＳ１６０９の処理に移行する。
【０１５７】
ステップＳ１６０９では、情報処理装置１００は、ＮｏｔＳａｔｉｓｆｙＣＰＵＵｓａｇｅ（ｓｃｃ）が真であるか否かを判定する（ステップＳ１６０９）。ここで、真ではない場合（ステップＳ１６０９：Ｎｏ）、情報処理装置１００は、ステップＳ１６０６の処理に移行する。一方で、真である場合（ステップＳ１６０９：Ｙｅｓ）、情報処理装置１００は、ステップＳ１６１０の処理に移行する。
【０１５８】
ステップＳ１６１０では、情報処理装置１００は、ｓｅｔＯｆＳＣＳ＝｛ｓｅｔＯｆＳＣＳ｝∪｛ｓｃｃ｝に設定する（ステップＳ１６１０）。
【０１５９】
次に、情報処理装置１００は、ｎｏｄｅ∈ＮｏｄｅＯｆ（ｓｃｃ）をすべて処理したか否かを判定する（ステップＳ１６１１）。ｎｏｄｅ∈ＮｏｄｅＯｆ（ｓｃｃ）をすべて処理した場合（ステップＳ１６１１：Ｙｅｓ）、情報処理装置１００は、ステップＳ１６０６の処理に移行する。一方で、処理していないｎｏｄｅ∈ＮｏｄｅＯｆ（ｓｃｃ）がある場合（ステップＳ１６１１：Ｎｏ）、情報処理装置１００は、ステップＳ１６１２の処理に移行する。
【０１６０】
ステップＳ１６１２では、情報処理装置１００は、ｓｕｂＧｒａｐｈ＝ｓｃｃ−｛ｎｏｄｅ｝に設定する（ステップＳ１６１２）。次に、情報処理装置１００は、ｎｅｘｔＯｆＳＣＣ＝｛ＦｉｎｄＳＣＣ（ｓｕｂＧｒａｐｈ）｝∪｛ｎｅｘｔＯｆＳＣＣ｝に設定する（ステップＳ１６１３）。そして、情報処理装置１００は、ステップＳ１６１１の処理に移行する。
【０１６１】
ステップＳ１６１４では、情報処理装置１００は、ｓｅｔＯｆＳＣＣ＝ｎｅｘｔＯｆＳＣＣに設定する（ステップＳ１６１４）。そして、情報処理装置１００は、ステップＳ１６０４の処理に移行する。
【０１６２】
ステップＳ１６１５では、情報処理装置１００は、ｓｅｔＯｆＳＣＳを出力する（ステップＳ１６１５）。そして、情報処理装置１００は、ＳＣＳ特定処理を終了する。
【０１６３】
（ＳＣＳ特定処理を規定したソースコード１７００の一例）
次に、図１７を用いて、図１６に示したＳＣＳ特定処理を規定したソースコード１７００の一例について説明する。
【０１６４】
図１７は、ＳＣＳ特定処理を規定したソースコード１７００の一例を示す説明図である。図１７に示すように、ソースコード１７００は、関数ＧｅｎｅｒａｔｅＳＣＳ（ｇｒａｐｈ）を記述する。関数ＧｅｎｅｒａｔｅＳＣＳ（ｇｒａｐｈ）は、ｇｒａｐｈ＝プログラムのＣＦＧ５００を入力とし、ＳＣＳを特定する関数である。
【０１６５】
Ｌ１の行には、「ｓｅｔＯｆＳＣＳ＝Φ」が記述され、空集合で初期化することが示されている。Ｌ２の行には、「ｓｅｔＯｆＳＣＣ＝ＦｉｎｄＳＣＣ（ｇｒａｐｈ）」が記述され、上記参考文献１に記載されたＳＣＣ分解アルゴリズムにより、ｇｒａｐｈのＳＣＣを求めることが示されている。
【０１６６】
Ｌ３の行には、「ｗｈｉｌｅ（ｓｅｔＯｆＳＣＣ！＝φ）」が記述され、すべてのＳＣＣを処理するまで、ｗｈｉｌｅループを繰り返すことが示されている。Ｌ４の行には、「ｎｅｘｔＯｆＳＣＣ＝φ」が記述され、次のｆｏｒｅａｃｈループで処理するＳＣＣ集合を設定する変数を初期化することが示されている。
【０１６７】
Ｌ５の行には、「ｆｏｒｅａｃｈ（ｓｃｃ  ∈  ｓｅｔＯｆＳＣＣ）」が記述され、ＳＣＣ集合のＳＣＣを順番に処理することが示されている。Ｌ６の行には、「ｉｆ（ｓｃｃ∈ｓｅｔＯｆＳＣＳ）ｃｏｎｔｉｎｕｅ」が記述され、処理済みｓｃｃに関する処理をスキップすることが示されている。
【０１６８】
Ｌ７の行には、「ｉｆ（ＮｏｔＳａｔｉｓｆｙＣＰＵＵｓａｇｅ（ｓｃｃ））ｃｏｎｔｉｎｕｅ」が記述され、所定の条件を満たさないｓｃｃに関する処理をスキップすることが示されている。所定の条件は、例えば、ＣＰＵ使用率が一定以上であるという条件である。Ｌ８の行には、「ｓｅｔＯｆＳＣＳ＝ｓｅｔＯｆＳＣＳ∪｛ｓｃｃ｝」が記述され、ｓｃｃをＳＣＳ集合に追加することが示されている。
【０１６９】
Ｌ９の行には、「ｆｏｒｅａｃｈ（ｎｏｄｅ∈ＮｏｄｅＯｆ（ｓｃｃ））」が記述され、ｓｃｃに含まれるそれぞれのノードについて処理を繰り返すことが示されている。Ｌ１０の行には、「ｓｕｂＧｒａｐｈ＝ｓｃｃ−｛ｎｏｄｅ｝」が記述され、ｓｃｃからｎｏｄｅを取り除いた部分グラフを、ｓｕｂＧｒａｐｈに設定することが示されている。
【０１７０】
Ｌ１１の行には、「ｎｅｘｔＯｆＳＣＣ＝ＦｉｎｄＳＣＣ（ｓｕｂＧｒａｐｈ）∪ｎｅｘｔＯｆＳＣＣ」が記述され、ＳＣＣを求めることが示されている。Ｌ１４の行には、ｓｅｔＯｆＳＣＣ＝ｎｅｘｔＯｆＳＣＣ」が記述され、次のＳＣＣ集合を現在のＳＣＣ集合に設定することが示されている。Ｌ１６の行には、「ｒｅｔｕｒｎ  ｓｅｔＯｆＳＣＳ」が記述され、ＳＣＳ集合を結果として返すことが示されている。
【０１７１】
以上説明したように、情報処理装置１００によれば、プログラムのＣＦＧに含まれる１以上のＳＣＳを特定することができる。情報処理装置１００によれば、ＣＦＧに含まれる１以上のノードのそれぞれのノードが表す処理の特性を示すプロファイル情報に基づいて、特定した１以上のＳＣＳのそれぞれのＳＣＳが表す処理の特性を示す特性値を算出することができる。情報処理装置１００によれば、算出したそれぞれのＳＣＳの特性値と、アクセラレータについて設定された条件とに基づいて、それぞれのＳＣＳが表す処理が、アクセラレータに実行させる処理に適するか否かを判定することができる。これにより、情報処理装置１００は、比較的短時間で、ＳＣＳが表す処理をアクセラレータに実行させることが好ましいかを判定することができ、いずれの処理をアクセラレータに実行させるか判断しやすくすることができる。
【０１７２】
情報処理装置１００によれば、ＳＣＳが表す処理によって、単位時間当たりに実行される演算量が大きいほど、または、単位時間当たりにアクセスされるデータ量が小さいほど、値が大きくなる第１の特性値を算出することができる。情報処理装置１００によれば、算出した第１の特性値が、アクセラレータについて設定された第１の閾値を超える場合、ＳＣＳが表す処理が、アクセラレータに実行させる処理に適すると判定することができる。これにより、情報処理装置１００は、アクセラレータに実行させると、プログラムの処理性能を一定以上向上することができる処理を、アクセラレータに実行させる処理に適すると判定することができる。
【０１７３】
情報処理装置１００によれば、ＳＣＳが表す処理の演算量を示す第２の特性値を算出することができる。情報処理装置１００によれば、算出した第２の特性値が、アクセラレータについて設定された第２の閾値を下回る場合、ＳＣＳが表す処理が、アクセラレータに実行させる処理に適すると判定することができる。これにより、情報処理装置１００は、アクセラレータの処理性能で実行可能である処理を、アクセラレータに実行させる処理に適すると判定することができる。
【０１７４】
情報処理装置１００によれば、第２の特性値を算出する際、ＳＣＳが表す処理に含まれる分岐処理における分岐確率を考慮することができる。これにより、情報処理装置１００は、ＳＣＳが表す処理の演算量を精度よく算出することができ、第２の特性値を精度よく算出することができる。
【０１７５】
情報処理装置１００によれば、第２の特性値を、ＳＣＳが表す処理によって単位時間当たりに実行される演算量を、ＳＣＳが表す処理の単位時間当たりの実行頻度で除算することにより得ることができる。これにより、情報処理装置１００は、ＳＣＳが他のＳＣＳを含む場合にも、第２の特性値を精度よく算出することができる。
【０１７６】
情報処理装置１００によれば、ＳＣＳが表す処理によって単位時間当たりに実行される演算量から、ＳＣＳに含まれる他のＳＣＳが表す処理によって単位時間当たりに実行される演算量を減算した差分を算出することができる。情報処理装置１００によれば、算出した差分を、ＳＣＳから他のＳＣＳを除いた部分グラフが表す処理の演算量で除算することにより、実行頻度を算出することができる。これにより、情報処理装置１００は、ＳＣＳが他のＳＣＳを含む場合にも、実行頻度を精度よく算出することができ、第２の特性値を精度よく算出することができる。
【０１７７】
情報処理装置１００によれば、部分グラフが表す処理の演算量を算出する際、部分グラフが表す処理に含まれる分岐処理における分岐確率を考慮することができる。これにより、情報処理装置１００は、部分グラフが表す処理の演算量を精度よく算出することができ、第２の特性値を精度よく算出することができる。
【０１７８】
情報処理装置１００によれば、ＳＣＳが表す処理によって単位時間当たりに実行される演算量を算出する際、ＳＣＳが表す処理において、ＳＣＳに含まれる１以上のノードのそれぞれのノードが表す処理が呼び出された回数を考慮することができる。これにより、情報処理装置１００は、ＳＣＳが表す処理によって単位時間当たりに実行される演算量を精度よく算出することができる。
【０１７９】
情報処理装置１００によれば、ＳＣＳが表す処理による単位時間当たりの演算装置の使用時間を示す第３の特性値を算出することができる。情報処理装置１００によれば、算出した第３の特性値が、アクセラレータについて設定された第３の閾値を超える場合、ＳＣＳが表す処理が、アクセラレータに実行させる処理に適すると判定することができる。これにより、情報処理装置１００は、アクセラレータに実行させると、ＣＰＵ２０１の処理負担を一定以上低減することができる処理を、アクセラレータに実行させる処理に適すると判定することができる。
【０１８０】
情報処理装置１００によれば、ＣＦＧに含まれ、所定の演算量を超える処理をそれぞれ表す、１以上のＳＣＳを特定することができる。これにより、情報処理装置１００は、所定の演算量を超えず、アクセラレータに実行させることが比較的好ましくない処理を表すＳＣＳを特定せず、処理負担の低減化を図ることができる。
【０１８１】
なお、本実施の形態で説明した情報処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本実施の形態で説明した情報処理プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本実施の形態で説明した情報処理プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１８２】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１８３】
（付記１）プログラムのコントロールフローグラフに含まれる１以上の強連結グラフを特定し、
前記コントロールフローグラフに含まれる１以上のノードのそれぞれのノードが表す処理の特性を示すプロファイル情報に基づいて、特定した前記１以上の強連結グラフのそれぞれの強連結グラフが表す処理の特性を示す特性値を算出し、
算出した前記それぞれの強連結グラフの特性値と、アクセラレータについて設定された条件とに基づいて、前記それぞれの強連結グラフが表す処理が、前記アクセラレータに実行させる処理に適するか否かを判定する、
制御部を有することを特徴とする情報処理装置。
【０１８４】
（付記２）前記制御部は、
前記強連結グラフが表す処理によって、単位時間当たりに実行される演算量が大きいほど、または、単位時間当たりにアクセスされるデータ量が小さいほど、値が大きくなる第１の特性値を算出し、
算出した前記第１の特性値が、前記アクセラレータについて設定された第１の閾値を超える場合、前記強連結グラフが表す処理が、前記アクセラレータに実行させる処理に適すると判定する、ことを特徴とする付記１に記載の情報処理装置。
【０１８５】
（付記３）前記制御部は、
前記強連結グラフが表す処理の演算量を示す第２の特性値を算出し、
算出した前記第２の特性値が、前記アクセラレータについて設定された第２の閾値を下回る場合、前記強連結グラフが表す処理が、前記アクセラレータに実行させる処理に適すると判定する、ことを特徴とする付記１または２に記載の情報処理装置。
【０１８６】
（付記４）前記第２の特性値は、前記強連結グラフに含まれる１以上のノードのそれぞれのノードが表す処理の演算量を、前記強連結グラフが表す処理に含まれる分岐処理における分岐確率に応じて重み付けして合計することにより得られる、ことを特徴とする付記３に記載の情報処理装置。
【０１８７】
（付記５）前記第２の特性値は、前記強連結グラフが表す処理によって単位時間当たりに実行される演算量を、前記強連結グラフが表す処理の単位時間当たりの実行頻度で除算することにより得られる、ことを特徴とする付記３または４に記載の情報処理装置。
【０１８８】
（付記６）前記実行頻度は、前記強連結グラフが表す処理によって単位時間当たりに実行される演算量から、前記強連結グラフに含まれる他の強連結グラフが表す処理によって単位時間当たりに実行される演算量を減算した差分を、前記強連結グラフから前記他の強連結グラフを除いた部分グラフが表す処理の演算量で除算することにより得られる、ことを特徴とする付記５に記載の情報処理装置。
【０１８９】
（付記７）前記部分グラフが表す処理の演算量は、前記部分グラフに含まれる１以上のノードのそれぞれのノードが表す処理の演算量を、前記部分グラフが表す処理に含まれる分岐処理における分岐確率に応じて重み付けして合計することにより得られる、ことを特徴とする付記６に記載の情報処理装置。
【０１９０】
（付記８）前記強連結グラフが表す処理によって単位時間当たりに実行される演算量は、前記強連結グラフが表す処理において、前記強連結グラフに含まれる１以上のノードのそれぞれのノードが表す処理が呼び出された回数に応じて、前記それぞれのノードが表す処理の演算量に重み付けして合計することにより得られる、ことを特徴とする付記２、５〜７のいずれか一つに記載の情報処理装置。
【０１９１】
（付記９）前記制御部は、
前記強連結グラフが表す処理による単位時間当たりの演算装置の使用時間を示す第３の特性値を算出し、
算出した前記第３の特性値が、前記アクセラレータについて設定された第３の閾値を超える場合、前記強連結グラフが表す処理が、前記アクセラレータに実行させる処理に適すると判定する、ことを特徴とする付記１〜８のいずれか一つに記載の情報処理装置。
【０１９２】
（付記１０）前記制御部は、
前記コントロールフローグラフに含まれ、所定の演算量を超える処理をそれぞれ表す、１以上の強連結グラフを特定する、ことを特徴とする付記１〜９のいずれか一つに記載の情報処理装置。
【０１９３】
（付記１１）コンピュータが、
プログラムのコントロールフローグラフに含まれる１以上の強連結グラフを特定し、
前記コントロールフローグラフに含まれる１以上のノードのそれぞれのノードが表す処理の特性を示すプロファイル情報に基づいて、特定した前記１以上の強連結グラフのそれぞれの強連結グラフが表す処理の特性を示す特性値を算出し、
算出した前記それぞれの強連結グラフの特性値と、アクセラレータについて設定された条件とに基づいて、前記それぞれの強連結グラフが表す処理が、前記アクセラレータに実行させる処理に適するか否かを判定する、
処理を実行することを特徴とする情報処理方法。
【０１９４】
（付記１２）コンピュータに、
プログラムのコントロールフローグラフに含まれる１以上の強連結グラフを特定し、
前記コントロールフローグラフに含まれる１以上のノードのそれぞれのノードが表す処理の特性を示すプロファイル情報に基づいて、特定した前記１以上の強連結グラフのそれぞれの強連結グラフが表す処理の特性を示す特性値を算出し、
算出した前記それぞれの強連結グラフの特性値と、アクセラレータについて設定された条件とに基づいて、前記それぞれの強連結グラフが表す処理が、前記アクセラレータに実行させる処理に適するか否かを判定する、
処理を実行させることを特徴とする情報処理プログラム。
【符号の説明】
【０１９５】
１００  情報処理装置
２００  バス
２０１  ＣＰＵ
２０２  メモリ
２０３  ネットワークＩ／Ｆ
２０４  記録媒体Ｉ／Ｆ
２０５  記録媒体
２１０  ネットワーク
３００  記憶部
３０１  取得部
３０２  特定部
３０３  算出部
３０４  判定部
３０５  出力部
４００  ソースコード
５００  ＣＦＧ
８００，１３００，１４００  イベント情報テーブル
９００  プロファイル情報テーブル
１０００，１１００  プロファイル情報
１２００  特性値テーブル
【図１】
2019053448.tif 000003
【図２】
2019053448.tif 000004
【図３】
2019053448.tif 000005
【図４】
2019053448.tif 000006
【図５】
2019053448.tif 000007
【図６】
2019053448.tif 000008
【図７】
2019053448.tif 000009
【図８】
2019053448.tif 000010
【図９】
2019053448.tif 000011
【図１０】
2019053448.tif 000012
【図１１】
2019053448.tif 000013
【図１２】
2019053448.tif 000014
【図１３】
2019053448.tif 000015
【図１４】
2019053448.tif 000016
【図１５】
2019053448.tif 000017
【図１６】
2019053448.tif 000018
【図１７】
2019053448.tif 000019