以下に、図面を参照して、本発明にかかる情報処理装置、情報処理方法、および情報処理プログラムの実施の形態を詳細に説明する。
(実施の形態にかかる情報処理方法の一実施例)
図1は、実施の形態にかかる情報処理方法の一実施例を示す説明図である。情報処理装置100は、プログラムに規定された処理をアクセラレータに実行させることが好ましいか否かを判定することが可能であるコンピュータである。
情報処理装置100は、例えば、サーバ、PC(Personal Computer)、タブレット端末、スマートフォン、ウェアラブル端末などである。アクセラレータは、例えば、FPGA、GPU、またはLSI(Large-Scale Integration)などである。
ここで、プログラムを実装するシステム上にアクセラレータを用意し、プログラムに規定された一連の処理の全部または一部をアクセラレータに実行させ、一連の処理にかかる時間の低減化を図り、プログラムの性能の向上を図ることが望まれる場合がある。これに対し、例えば、プログラムごとに専用のアクセラレータを作成し、一連の処理の全部をアクセラレータに実行させることが考えられる。
しかしながら、プログラムごとに専用のアクセラレータを作成すると、コストの増大化を招いてしまうことがある。また、一連の処理の全部をアクセラレータに実行させることが好ましいとは限らない。例えば、アクセラレータが実行する処理の演算量とアクセラレータがメモリに対して入出力するデータ量との観点から、一連の処理の一部だけをアクセラレータに実行させることの方が比較的好ましく、一連の処理にかかる時間を低減することができることがある。
このため、一連の処理の全部または一部を選択してアクセラレータに実行させることが望まれる場合がある。これに対し、例えば、システムの製造者が、一連の処理のうち、いずれの処理をアクセラレータに実行させることが好ましいかを検討し、一連の処理の全部または一部を選択してアクセラレータに実行させることが考えられる。ここで、検討する対象は、単独の処理であってもよいし、複数の処理をまとめた処理であってもよい。
しかしながら、一連の処理のうち、いずれの処理をアクセラレータに実行させることが好ましいかを判断することは難しい。例えば、一連の処理のうち、いずれの処理をアクセラレータに実行させると、一連の処理にかかる時間を低減可能であるかを判断することは難しい。このため、システムの製造者は、一連の処理にかかる時間を効率よく低減することができず、プログラムの性能を効率よく向上させることができないことがある。また、いずれの処理をアクセラレータに実行させることが好ましいかを検討する際にかかる時間の増大化を招き、システムの製造者の負担の増大化を招き、コストの増大化を招いてしまうことがある。
また、専用のアクセラレータを作成せず、汎用のアクセラレータをシステム上に用意して利用する場合、アクセラレータの処理性能で実行可能な範囲で、いずれかの処理をアクセラレータに実行させることになる。このため、システムの製造者が、誤って、アクセラレータの処理性能で実行可能ではない処理を、アクセラレータに実行させようとしてしまうことがある。また、アクセラレータの処理性能を考慮するため、いずれの処理をアクセラレータに実行させることが好ましいかを検討する際にかかる時間の増大化を招き、システムの製造者の負担の増大化を招き、コストの増大化を招いてしまうことがある。
また、アクセラレータに実行させることが好ましい処理の数が、システム上に用意可能なアクセラレータの数より多い場合、いずれの処理を優先してアクセラレータに実行させればよいかを判断することは難しい。このため、システムの製造者は、一連の処理にかかる時間を効率よく低減することができず、プログラムの性能を効率よく向上させることができないことがある。また、いずれの処理をアクセラレータに実行させることが好ましいかを検討する際にかかる時間の増大化を招き、システムの製造者の負担の増大化を招き、コストの増大化を招いてしまうことがある。
また、システムの製造者とプログラムの設計者とが異なり、システムの製造者が、プログラムの設計者と契約締結し、プログラムの設計者にシステムを提供し、プログラムの設計者にシステムを利用させることがある。この際、プログラムの設計者は、契約締結前には、プログラムのソースコードを秘匿しておくことを望む傾向がある。一方で、プログラムの設計者は、契約締結を検討するため、システムを利用した場合、アクセラレータによりプログラムの性能を向上可能であるか否かを把握することを望む傾向もある。
しかしながら、システムの製造者が、プログラムのソースコードを参照せず、一連の処理のうち、いずれの処理をアクセラレータに実行させることが好ましいかを判断し、プログラムの設計者に通知することは難しい。このため、プログラムの設計者が、プログラムのソースコードを、システムの製造者に開示するというリスクを負うことがある。また、プログラムのソースコードが開示されない場合、いずれの処理をアクセラレータに実行させることが好ましいかを検討する際にかかる時間の増大化を招き、システムの製造者の負担の増大化を招き、コストの増大化を招いてしまうことがある。
また、システムの製造者が、イベントベースプロファイラや統計的プロファイラなどを用いて、プログラムに規定された関数単位で、アクセラレータ向きの処理を発見し、アクセラレータに実行させようとする場合が考えられる。
しかしながら、プログラムの設計者は、アクセラレータに関する情報を知らずにプログラムを設計することがあり、プログラム内の関数単位では、アクセラレータ向きの処理を発見することは難しい。また、イベントベースプロファイラを用いる場合、プログラムを書き換えることになり、プログラムの処理性能が変化してしまい、アクセラレータ向きの処理を発見しづらい。
そこで、本実施の形態では、プログラムのコントロールフローグラフ(Control Flow Graph)を参照することにより、プログラムに規定された処理が、アクセラレータに実行させる処理に適するか否かを判定する情報処理方法について説明する。以下の説明では、コントロールフローグラフを「CFG」と表記する場合がある。
図1の例では、情報処理装置100は、バイナリ実行プログラム101のCFG102を取得する。以下の説明では、バイナリ実行プログラム101を単に「プログラム101」と表記する場合がある。CFG102は、プログラム101に規定された一連の処理の流れを示す有向グラフである。CFG102は、プログラム101に規定された一連の処理のそれぞれの処理を表すノードを含み、ノード間が有向エッジで接続されるグラフである。ノードは、例えば、基本ブロックとも呼ばれる。有向エッジは、例えば、ある処理を表すノードと、その処理の次に実行される処理を表すノードとを接続する。
情報処理装置100は、例えば、他装置と通信可能に接続される。他装置は、例えば、プログラム101に対してCFG102抽出を行い、プログラム101のCFG102を生成し、プログラム101のCFG102を情報処理装置100に送信する。情報処理装置100は、例えば、プログラム101のCFG102を、他装置から受信する。
また、情報処理装置100は、プログラム101のプロファイル情報103を取得する。プロファイル情報103は、CFG102に含まれる1以上のノードのそれぞれのノードが表す処理の特性を示す情報を含む。プロファイル情報103は、例えば、プログラム101に規定された一連の処理のそれぞれの処理の特性を示す情報を含む。処理の特性を示す情報は、例えば、処理1回分の演算量を示す情報である。
情報処理装置100は、例えば、他装置と通信可能に接続される。他装置は、例えば、プログラム101を実行してプロファイルを測定し、プロファイル情報103を生成し、プロファイル情報103を情報処理装置100に送信する。情報処理装置100は、プロファイル情報103を、他装置から受信する。
情報処理装置100は、CFG102に含まれる1以上の強連結グラフを特定し、強連結グラフを記録したリスト104を記憶する。強連結グラフは、CFG102に含まれる部分グラフであり、その部分グラフ上のいずれのノード間にも有向路が存在する部分グラフである。強連結グラフは、階層構造であってもよい。強連結グラフは、例えば、他の強連結グラフを含んでもよい。以下の説明では、強連結グラフを「SCS(Strongly Connected Subcomponent)」と表記する場合がある。
情報処理装置100は、以降において、SCSが表す処理単位で扱うことにより、プログラム101内で繰り返し呼び出される可能性が比較的高い処理単位で、アクセラレータに実行させる候補を検討しやすくなる。SCSが表す処理は、例えば、関数として扱うことが可能であり、プログラム101から分離可能である。関数は、例えば、カーネルと呼ばれる。関数は、繰り返し呼び出されるため、アクセラレータで実行させた場合に、CPUの処理負荷が低減される傾向がある。
情報処理装置100は、プロファイル情報103に基づいて、特定した1以上のSCSのそれぞれのSCSが表す処理の特性を示す特性値を算出し、特性値を記録したリスト104を記憶する。特性値は、例えば、SCSが表す処理1回分の演算量であり、SCSに含まれる1以上のノードのそれぞれのノードが表す処理1回分の演算量を合計することにより得られる。
情報処理装置100は、例えば、SCSごとに、SCSに含まれる1以上のノードのそれぞれのノードが表す処理1回分の演算量を合計した結果を、SCSが表す処理1回分の演算量を示す特性値として算出する。この場合、特性値は、SCSが表す処理をアクセラレータに実行させた場合にCPUの処理負荷がどの程度低減されるかの指標や、アクセラレータの処理性能で実行可能であるかを判定する指標などになりうる。
情報処理装置100は、算出したそれぞれのSCSの特性値と、アクセラレータについて設定された条件105とに基づいて、それぞれのSCSが表す処理が、アクセラレータに実行させる処理に適するか否かを判定し、判定した結果106を記憶する。アクセラレータについて設定された条件105は、例えば、アクセラレータの処理性能で実行可能な処理に関する条件105である。アクセラレータについて設定された条件105は、具体的には、アクセラレータの処理性能で実行可能な演算量の上限を示す。
また、アクセラレータについて設定された条件105は、例えば、CPUの処理負荷がどの程度以上に低減されれば、処理をアクセラレータに実行させることが好ましいと判定するかに関する条件105である。アクセラレータについて設定された条件105は、具体的には、演算量の下限を示す。以下の説明では、アクセラレータについて設定された条件105を「アクセラレータ条件105」と表記する場合がある。
情報処理装置100は、例えば、SCSについて算出した演算量が、アクセラレータ条件105が示す演算量の上限以下である場合、SCSが表す処理が、アクセラレータの処理性能で実行可能であると判定する。そして、情報処理装置100は、アクセラレータの処理性能で実行可能であれば、SCSが表す処理が、アクセラレータに実行させる処理に適すると判定する。
また、情報処理装置100は、例えば、SCSについて算出した演算量が、アクセラレータ条件105が示す演算量の下限以上である場合、SCSが表す処理をアクセラレータで実行すると、CPUの処理負荷が一定以上低減されると判定する。そして、情報処理装置100は、CPUの処理負荷が一定以上低減されれば、SCSが表す処理が、アクセラレータに実行させる処理に適すると判定する。
これにより、情報処理装置100は、比較的短時間で、SCSが表す処理をアクセラレータに実行させることが好ましいかを判定することができ、判定した結果をシステムの製造者に通知することができる。また、情報処理装置100は、SCSが表す処理について算出した特性値をシステムの製造者に通知してもよく、SCSが表す処理をアクセラレータに実行させることがどの程度好ましいかを把握可能にすることもできる。
このため、システムの製造者は、プログラム101に規定された一連の処理のうち、いずれの処理をアクセラレータに実行させるかを判断可能になる。そして、システムの製造者は、プログラム101に規定された一連の処理の全部または一部をアクセラレータに実行させ、一連の処理にかかる時間の低減化を図り、プログラム101の性能の向上を図ることが可能になる。
また、情報処理装置100は、プログラム101のCFG102と、プログラム101のプロファイル情報103とを、他装置から受信すればよい。このため、情報処理装置100は、プログラム101を参照しなくてもよく、プログラム101自体を秘匿したまま、SCSが表す処理をアクセラレータに実行させることが好ましいかを判定することができる。また、情報処理装置100は、プログラム101への入力データの性質などを参照しなくてもよい。
結果として、プログラム101の設計者は、プログラム101自体や実行環境などを秘匿したまま、アクセラレータによりプログラム101の性能を向上可能であるか否かを把握することができ、システムを利用するか否かを決定することができる。このため、プログラム101の設計者は、プログラム101が開示されるリスクを負わなくてもよく、システムの製造者とプログラム101の設計者とは、システムの利用に関して契約締結しやすくなる。
また、情報処理装置100は、SCSが表す処理単位で扱うため、プログラム101に予め規定された関数ではなくても、プログラム101から関数として分離可能である処理単位で、アクセラレータ向きか否かを判定することができる。このため、情報処理装置100は、アクセラレータで実行させることが好ましい処理を発見しやすくすることができる。また、情報処理装置100は、プログラム101を書き換えなくてもよいようにすることができる。
ここでは、情報処理装置100が、プログラム101のCFG102やプログラム101のプロファイル情報103を、他装置から受信する場合について説明したが、これに限らない。例えば、情報処理装置100が、プログラム101に対してCFG102抽出を行い、プログラム101のCFG102を生成する場合があってもよい。また、例えば、情報処理装置100が、プログラム101を実行してプロファイルを測定し、プロファイル情報103を生成する場合があってもよい。
ここでは、情報処理装置100が、SCSの特定、SCSの特性値の算出、および、適するか否かの判定を行う場合について説明したが、これに限らない。例えば、SCSの特定を行う情報処理装置100と、SCSの特性値の算出を行う情報処理装置100と、適するか否かの判定を行う情報処理装置100とが異なる場合があってもよい。この場合、それぞれの情報処理装置100が協働することにより、実施の形態にかかる情報処理方法が実現される。
ここでは、情報処理装置100が、CFG102に含まれる1以上のSCSを特定する場合について説明した。この際、情報処理装置100は、例えば、自装置で、CFG102を解析した結果、CFG102に含まれる1以上のSCSを特定してもよい。一方で、情報処理装置100は、例えば、他装置がCFG102を解析した結果得られたCFG102に含まれる1以上のSCSを示す情報を受信することにより、1以上のSCSを特定してもよい。
(情報処理装置100のハードウェア構成例)
次に、図2を用いて、情報処理装置100のハードウェア構成例について説明する。
図2は、情報処理装置100のハードウェア構成例を示すブロック図である。図2において、情報処理装置100は、CPU201と、メモリ202と、ネットワークI/F(Interface)203と、記録媒体I/F204と、記録媒体205とを有する。また、各構成部は、バス200によってそれぞれ接続される。
ここで、CPU201は、情報処理装置100の全体の制御を司る。メモリ202は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがCPU201のワークエリアとして使用される。メモリ202に記憶されるプログラムは、CPU201にロードされることで、コーディングされている処理をCPU201に実行させる。
ネットワークI/F203は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して他のコンピュータに接続される。そして、ネットワークI/F203は、ネットワーク210と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。ネットワークI/F203には、例えば、モデムやLAN(Local Area Network)アダプタなどを採用することができる。
記録媒体I/F204は、CPU201の制御に従って記録媒体205に対するデータのリード/ライトを制御する。記録媒体I/F204は、例えば、ディスクドライブ、SSD(Solid State Drive)、USB(Universal Serial Bus)ポートなどである。記録媒体205は、記録媒体I/F204の制御で書き込まれたデータを記憶する不揮発メモリである。記録媒体205は、例えば、ディスク、半導体メモリ、USBメモリなどである。記録媒体205は、情報処理装置100から着脱可能であってもよい。
情報処理装置100は、上述した構成部のほか、例えば、キーボード、マウス、ディスプレイ、プリンタ、スキャナ、マイク、スピーカーなどを有してもよい。また、情報処理装置100は、記録媒体I/F204や記録媒体205を複数有していてもよい。また、情報処理装置100は、記録媒体I/F204や記録媒体205を有していなくてもよい。
(情報処理装置100の機能的構成例)
次に、図3を用いて、情報処理装置100の機能的構成例について説明する。
図3は、情報処理装置100の機能的構成例を示すブロック図である。情報処理装置100は、記憶部300と、取得部301と、特定部302と、算出部303と、判定部304と、出力部305とを含む。
記憶部300は、例えば、図2に示したメモリ202や記録媒体205などの記憶領域によって実現される。以下では、記憶部300が、情報処理装置100に含まれる場合について説明するが、これに限らない。例えば、記憶部300が、情報処理装置100とは異なる装置に含まれ、記憶部300の記憶内容が情報処理装置100から参照可能である場合があってもよい。
取得部301~出力部305は、制御部となる機能である。取得部301~出力部305は、具体的には、例えば、図2に示したメモリ202や記録媒体205などの記憶領域に記憶されたプログラムをCPU201に実行させることにより、または、ネットワークI/F203により、その機能を実現する。各機能部の処理結果は、例えば、図2に示したメモリ202や記録媒体205などの記憶領域に記憶される。
記憶部300は、各機能部の処理に用いられる各種情報を記憶する。記憶部300は、例えば、取得部301が取得した各種情報を記憶する。記憶部300は、具体的には、取得部301が取得したプログラムのCFGを記憶する。CFGは、プログラムに規定された一連の処理の流れを示す有向グラフである。CFGは、プログラムに規定された一連の処理のそれぞれの処理を表すノードを含み、ノード間が有向エッジで接続されるグラフである。有向エッジは、例えば、ある処理を表すノードと、その処理の次に実行される処理を表すノードとを接続する。
記憶部300は、具体的には、取得部301が取得したプログラムのプロファイル情報を記憶する。プロファイル情報は、CFGに含まれる1以上のノードのそれぞれのノードが表す処理の特性を示す情報を含む。プロファイル情報は、例えば、CFGに含まれる1以上のノードが表す、プログラムに規定された一連の処理のそれぞれの処理の特性を示す情報を含む。処理の特性を示す情報は、例えば、処理1回分の演算量、処理の実行演算量、処理によって単位時間当たりにアクセスされるデータ量、処理による単位時間当たりの演算装置の使用時間などを示す情報である。実行演算量は、処理によって単位時間当たりに実行される演算量である。以下の説明では、処理1回分の演算量を単に「処理の演算量」と表記する場合がある。演算装置は、例えば、CPU201である。
記憶部300は、例えば、SCSの特性値の算出式を記憶し、算出されたSCSの特性値を記憶する。SCSは、CFGに含まれる部分グラフであり、部分グラフ上のいずれの2つのノード間にも有向路が存在する部分グラフである。SCSの特性値は、SCSが表す処理の特性を示す。特性値は、例えば、後述する第1の特性値、第2の特性値、第3の特性値などである。
記憶部300は、具体的には、第1の特性値を記憶する。第1の特性値は、SCSが表す処理によって、単位時間当たりに実行される実行演算量が大きいほど、または、単位時間当たりにアクセスされるデータ量が小さいほど、値が大きくなる。第1の特性値は、例えば、SCSが表す処理の演算強度である。演算強度は、例えば、SCSが表す処理によって単位時間当たりに実行される実行演算量を、SCSが表す処理によって単位時間当たりにアクセスされるデータ量で除算することにより得られる。
記憶部300は、具体的には、第2の特性値を記憶する。第2の特性値は、例えば、SCSが表す処理1回分の演算量を示す。演算量は、例えば、SCSが表す処理の実行演算量を、SCSが表す処理の単位時間当たりの実行頻度で除算することにより得られる。実行頻度は、例えば、SCSが表す処理の実行演算量を、SCSが表す処理のセルフ演算量で除算することにより得られる。セルフ演算量は、例えば、SCSに含まれる1以上のノードのそれぞれのノードが表す処理1回分の演算量を合計することにより得られる。
ここで、SCSが他のSCSを含む場合がある。この場合、実行頻度は、例えば、SCSの実行演算量から他のSCSの実行演算量を減算した結果を、SCSが表す処理のセルフ演算量で除算することにより得られる。この場合、セルフ演算量は、SCSから他のSCSを除いた部分グラフに含まれる1以上のノードのそれぞれのノードが表す処理1回分の演算量を合計することにより得られる。
記憶部300は、具体的には、第3の特性値を記憶する。第3の特性値は、例えば、SCSが表す処理による単位時間当たりの演算装置の使用時間を示す。第3の特性値は、具体的には、SCSに含まれる1以上のノードのそれぞれのノードが表す処理による単位時間当たりの演算装置の使用時間を合計することにより得られる。第3の特性値は、具体的には、短時間当たりの演算装置の使用時間の割合を示す使用率であってもよい。
記憶部300は、例えば、アクセラレータ条件を記憶する。アクセラレータ条件は、例えば、アクセラレータの処理性能で実行可能な処理に関する条件である。アクセラレータ条件は、具体的には、アクセラレータの処理性能で実行可能な演算量の上限を示す。アクセラレータ条件は、例えば、処理をアクセラレータに実行させることが、どの程度好ましければ、アクセラレータに実行させる処理に適すると判定するかに関する条件であってもよい。アクセラレータ条件は、具体的には、特性値と比較する閾値であり、処理をアクセラレータに実行させることが一定以上好ましいことを示す閾値を示す。
取得部301は、各機能部の処理に用いられる各種情報を記憶部300から取得し、各機能部に出力する。また、取得部301は、他装置から取得した各種情報を、記憶部300に記憶し、または、各機能部に出力する。取得部301は、例えば、プログラムのCFGやプログラムのプロファイル情報などを、他装置から受信し、記憶部300に記憶する。取得部301は、自装置でプログラムのCFGやプログラムのプロファイル情報などを生成する場合、プログラムを取得してもよい。
特定部302は、プログラムのCFGに含まれる1以上のSCSを特定する。特定部302は、例えば、CFGに含まれ、所定の演算量を超える処理をそれぞれ表す、1以上のSCSを特定する。特定部302は、取得部301がプログラムを取得した場合、プログラムのCFGを生成してから、プログラムのCFGに含まれる1以上のSCSを特定してもよい。
これにより、特定部302は、アクセラレータに実行させる処理の候補を表すSCSを特定することができ、算出部303に参照させることができる。また、特定部302は、所定の演算量を超えず、アクセラレータに実行させることが比較的好ましくない処理を表すSCSを特定せず、算出部303の処理負担の低減化を図ることができる。
算出部303は、プロファイル情報に基づいて、特定部302が特定した1以上のSCSのそれぞれのSCSの特性値を算出する。算出部303は、例えば、それぞれのSCSについて、第1の特性値、第2の特性値、第3の特性値などを算出する。
算出部303は、具体的には、SCSに含まれる1以上のノードのそれぞれのノードが表す処理の演算量を合計し、SCSが表す処理のセルフ演算量を算出する。セルフ演算量は、SCSに含まれる1以上のノードのそれぞれのノードが表す処理の演算量を合計した結果である。SCSが表す処理のセルフ演算量は、例えば、SCSが他のSCSを含む場合、他のSCSが表す処理のセルフ演算量を除外して算出される。
ここで、SCSに含まれる1以上のノードのいずれかのノードが表す処理が、分岐処理である場合がある。この場合、算出部303は、具体的には、SCSに含まれる1以上のノードのそれぞれのノードが表す処理の演算量を、SCSが表す処理に含まれる分岐処理における分岐確率に応じて重み付けして合計し、SCSが表す処理のセルフ演算量を算出する。これにより、算出部303は、SCSが表す処理のセルフ演算量を精度よく算出することができ、SCSが表す処理が、アクセラレータに実行させる処理に適するか否かを精度よく判定可能にすることができる。
ここで、SCSが他のSCSを含む場合がある。この場合、算出部303は、具体的には、SCSから他のSCSを除いた部分グラフに含まれる1以上のノードのそれぞれのノードが表す処理の演算量を合計した結果を、SCSが表す処理のセルフ演算量として算出する。これにより、算出部303は、SCSが表す処理のセルフ演算量を精度よく算出することができ、SCSが表す処理が、アクセラレータに実行させる処理に適するか否かを精度よく判定可能にすることができる。
さらに、SCSが他のSCSを含み、かつ、SCSから他のSCSを除いた部分グラフに含まれる1以上のノードのいずれかのノードが表す処理が、分岐処理である場合がある。この場合、算出部303は、具体的には、部分グラフに含まれる1以上のノードのそれぞれのノードが表す処理の演算量を、部分グラフが表す処理に含まれる分岐処理における分岐確率に応じて重み付けして合計し、SCSが表す処理のセルフ演算量を算出する。これにより、算出部303は、SCSが表す処理のセルフ演算量を精度よく算出することができ、SCSが表す処理が、アクセラレータに実行させる処理に適するか否かを精度よく判定可能にすることができる。
算出部303は、具体的には、SCSに含まれる1以上のノードのそれぞれのノードが表す処理の実行演算量を合計し、SCSが表す処理の実行演算量を算出する。
ここで、SCSに含まれる1以上のノードのいずれかのノードが表す処理が、複数の呼出元から呼び出される場合がある。この場合、算出部303は、具体的には、SCSが表す処理において、SCSに含まれる1以上のノードのそれぞれのノードが表す処理が呼び出された回数に応じて、それぞれのノードが表す処理の実行演算量に重み付けして合計する。算出部303は、合計した結果を、SCSが表す処理の実行演算量として算出する。これにより、算出部303は、SCSが表す処理の実行演算量を精度よく算出することができ、SCSが表す処理が、アクセラレータに実行させる処理に適するか否かを精度よく判定可能にすることができる。
算出部303は、具体的には、SCSに含まれる1以上のノードのそれぞれのノードが表す処理によって単位時間当たりにアクセスされるデータ量を合計し、SCSが表す処理によって単位時間当たりにアクセスされるデータ量を算出する。
算出部303は、具体的には、SCSが表す処理の実行演算量を、SCSが表す処理のセルフ演算量で除算し、実行頻度を算出する。
ここで、SCSが他のSCSを含む場合がある。この場合、算出部303は、具体的には、SCSが表す処理の実行演算量から、他のSCSが表す処理の実行演算量を減算する。そして、算出部303は、減算した結果を、SCSが表す処理のセルフ演算量で除算し、実行頻度を算出する。これにより、算出部303は、SCSが表す処理の実行頻度を精度よく算出することができ、SCSが表す処理が、アクセラレータに実行させる処理に適するか否かを精度よく判定可能にすることができる。
算出部303は、具体的には、SCSが表す処理の実行演算量を、SCSが表す処理によって単位時間当たりにアクセスされるデータ量で除算することにより得られる演算強度を、第1の特性値として算出する。これにより、算出部303は、処理をアクセラレータに実行させると、プログラムの処理性能が一定以上向上するか否かを判定する指標を、判定部304に提供することができる。
算出部303は、具体的には、SCSが表す処理の実行演算量を、SCSが表す処理の実行頻度で除算することにより得られる、SCSが表す処理1回分の演算量を、第2の特性値として算出する。これにより、算出部303は、処理をアクセラレータの処理性能で実行可能であるか否かを判定する指標を、判定部304に提供することができる。
また、算出部303は、具体的には、SCSに含まれる1以上のノードのそれぞれのノードが表す処理による単位時間当たりの演算装置の使用時間を合計し、SCSが表す処理による単位時間当たりの演算装置の使用時間を、第3の特性値として算出する。これにより、算出部303は、処理をアクセラレータに実行させると、CPU201の処理負担を一定以上低減することができるか否かを判定する指標を、判定部304に提供することができる。
判定部304は、算出部303が算出したそれぞれのSCSの特性値と、アクセラレータについて設定された条件とに基づいて、それぞれのSCSが表す処理が、アクセラレータに実行させる処理に適するか否かを判定する。
判定部304は、例えば、算出部303が算出した第1の特性値が、アクセラレータについて設定された第1の閾値を超える場合、SCSが表す処理がアクセラレータに実行させる処理に適すると判定する。これにより、判定部304は、アクセラレータに実行させると、プログラムの処理性能を一定以上向上することができる処理を、アクセラレータに実行させる処理に適すると判定することができる。
判定部304は、例えば、算出部303が算出した第2の特性値が、アクセラレータについて設定された第2の閾値を下回る場合、SCSが表す処理がアクセラレータに実行させる処理に適すると判定する。これにより、判定部304は、アクセラレータの処理性能で実行可能である処理を、アクセラレータに実行させる処理に適すると判定することができる。
判定部304は、例えば、算出部303が算出した第3の特性値が、アクセラレータについて設定された第3の閾値を超える場合、SCSが表す処理がアクセラレータに実行させる処理に適すると判定する。これにより、判定部304は、アクセラレータに実行させると、CPU201の処理負担を一定以上低減することができる処理を、アクセラレータに実行させる処理に適すると判定することができる。
判定部304は、例えば、算出部303が算出した実行頻度を、第4の特性値として用いてもよい。判定部304は、例えば、第4の特性値が、アクセラレータについて設定された第4の閾値を超える場合、SCSが表す処理がアクセラレータに実行させる処理に適すると判定する。これにより、判定部304は、アクセラレータに実行させると、CPU201の処理負担を一定以上低減することができる処理を、アクセラレータに実行させる処理に適すると判定することができる。
判定部304は、例えば、算出した第2の特性値が、アクセラレータについて設定された第5の閾値を超える場合、SCSが表す処理がアクセラレータに実行させる処理に適すると判定してもよい。第5の閾値は、例えば、第2の閾値より小さい。これにより、判定部304は、アクセラレータに実行させると、プログラムの処理性能を一定以上向上することができる処理を、アクセラレータに実行させる処理に適すると判定することができる。
出力部305は、各機能部の処理結果を出力する。出力形式は、例えば、ディスプレイへの表示、プリンタへの印刷出力、ネットワークI/F203による外部装置への送信、または、メモリ202や記録媒体205などの記憶領域への記憶である。出力部305は、例えば、判定部304の判定結果を出力する。
これにより、出力部305は、各機能部の処理結果を利用者に通知可能にし、情報処理装置100の管理や運用、例えば、情報処理装置100の設定値の更新などを支援することができ、情報処理装置100の利便性の向上を図ることができる。出力部305は、判定部304の判定結果を利用者に通知し、プログラムに規定された一連の処理のうち、アクセラレータに実行させることが好ましい処理があるか否か、および、いずれの処理をアクセラレータに実行させるかを判断しやすくすることができる。
(プログラムのソースコード400の一例)
次に、図4~図12を用いて、情報処理装置100の動作例について説明する。まず、図4を用いて、プログラムのソースコード400の一例について説明する。
図4は、プログラムのソースコード400の一例を示す説明図である。図4に示すように、プログラムのソースコード400のL1~L14のそれぞれの行には、命令文が規定される。そして、情報処理装置100、または、情報処理装置100とは異なる他装置は、図4に示したソースコード400からCFG500を生成する。ここで、図5を用いて、図4に示したソースコード400から生成されるCFG500の一例について説明する。
(CFG500の一例)
図5は、CFG500の一例を示す説明図である。図5に示すように、CFG500は、始点ブロックと、終点ブロックと、基本ブロックn1~n10とを含む。始点ブロックと、終点ブロックとは、特定の処理を表さず、プログラム全体が表す一連の処理の始点または終点を示す特殊な基本ブロックである。始点ブロックから基本ブロックn1へと有向エッジが接続される。
基本ブロックn1は、例えば、図4に示したソースコード400のL1,L2の行に記述された命令文の処理を表す。基本ブロックn1から基本ブロックn2へと有向エッジが接続される。基本ブロックn2は、例えば、図4に示したソースコード400のL3の行に記述された命令文の処理を表す。基本ブロックn2から基本ブロックn3および基本ブロックn10へと有向エッジが接続される。
基本ブロックn3は、例えば、図4に示したソースコード400のL4の行に記述された命令文の処理を表す。基本ブロックn3から基本ブロックn4へと有向エッジが接続される。基本ブロックn4は、例えば、図4に示したソースコード400のL5の行に記述された命令文の処理を表す。基本ブロックn4から基本ブロックn5および基本ブロックn9へと有向エッジが接続される。
基本ブロックn5は、例えば、図4に示したソースコード400のL6の行に記述された命令文の処理を表す。基本ブロックn5から基本ブロックn6および基本ブロックn7へと有向エッジが接続される。基本ブロックn6は、例えば、図4に示したソースコード400のL7の行に記述された命令文の処理を表す。基本ブロックn6から基本ブロックn8へと有向エッジが接続される。
基本ブロックn7は、例えば、図4に示したソースコード400のL9の行に記述された命令文の処理を表す。基本ブロックn7から基本ブロックn8へと有向エッジが接続される。基本ブロックn8は、例えば、図4に示したソースコード400のL10の行に記述された命令文の処理を表す。基本ブロックn8から基本ブロックn4へと有向エッジが接続される。
基本ブロックn9は、例えば、図4に示したソースコード400のL12の行に記述された命令文の処理を表す。基本ブロックn9から基本ブロックn2へと有向エッジが接続される。基本ブロックn10は、例えば、図4に示したソースコード400のL14の行に記述された命令文の処理を表す。基本ブロックn10から終点ブロックへと有向エッジが接続される。
そして、情報処理装置100、または、他装置は、図5に示したCFG500に含まれる1以上のSCSを特定する。SCSを特定する技術としては、下記参考文献1および下記参考文献2などを参照することができる。
参考文献1:F.Bourdoncle. “Efficient chaotic iteration strategies with widenings.” Formal Methods in Programming and their Applications. Springer, Berlin, Heidelberg, 1993.
参考文献2:Allen, Frances E. “Control flow analysis.” ACM Sigplan Notices. Vol. 5. No. 7. ACM, 1970.
情報処理装置100、または、他装置は、例えば、上記参考文献1に記載されたSCC(Strongly Connected Component)分解アルゴリズムを繰り返し適用し、1以上のSCSを特定する。
情報処理装置100、または、他装置は、具体的には、CFG500に対しSCC分解アルゴリズムを適用して得られたSCCを、SCSとして記憶する。さらに、情報処理装置100、または、他装置は、得られたSCCに対し再びSCC分解アルゴリズムを適用し、SCCに包含されるSCCを特定し、SCSとして記憶する。これにより、情報処理装置100、または、他装置は、SCSのリストを生成することができる。ここで、図6を用いて、図5に示したCFG500に含まれる1以上のSCSの一例について説明する。
(1以上のSCSの一例)
図6は、1以上のSCSの一例を示す説明図である。図6に示すように、CFG500は、SCS1と、SCS2と、SCS4と、SCS10とを含む。SCS1は、基本ブロックn1を含む。SCS2は、基本ブロックn2~n9を含む。SCS2は、プログラム内のwhileループに対応する。SCS4は、基本ブロックn4~n8を含む。SCS4は、SCS2に包含される。SCS10は、基本ブロックn10を含む。
ここで、情報処理装置100、または、他装置は、CFG500に含まれる1以上のSCSを特定する際に、所定の条件を満たすSCSを特定し、所定の条件を満たさないSCSを特定しないようにしてもよい。情報処理装置100、または、他装置は、例えば、演算量が一定以下である処理を表すSCSを特定しないようにしてもよい。また、情報処理装置100は、例えば、他のSCSに包含されるSCSを特定しないようにしてもよい。また、情報処理装置100は、例えば、一定数以上の他のSCSに包含されるSCSを特定しないようにし、SCSの階層を一定以下に抑えてもよい。
そして、情報処理装置100、または、他装置は、プログラムを実行し、プログラムのプロファイル情報を生成する。情報処理装置100、または、他装置は、プログラムのプロファイル情報を生成してから、1以上のSCSを特定してもよい。ここで、図7を用いて、プログラムのプロファイル情報を生成する一例について説明する。
(プログラムのプロファイル情報を生成する一例)
図7は、プログラムのプロファイル情報を生成する一例を示す説明図である。図7に示すように、CPU201は、予め指定されたイベントを発生すると、イベント発生トリガーにより、発生したイベントのカウンタ702を増加させる。イベントは、例えば、タイマ、演算実行、メモリアクセス、分岐命令実行などである。ここで、情報処理装置100は、例えば、PMC(Performance Monitor Counter)回路を有する。
PMC回路は、カウンタ702の値が、サンプリングレート701の値と等しくなるとイベント情報保存信号を発生し、発生時点におけるCPU201のレジスタ情報に基づいて、イベント情報703を保存する。レジスタ情報は、例えば、命令アドレス、Taken/NotTaken情報、LBR履歴などである。このように、サンプリングレート701の値により、発生するイベントと、発生した時のレジスタ情報とを、統計的にサンプリングすることが可能になる。次に、図8を用いて、サンプリングにより得られたイベント情報703の一例について説明する。
(イベント情報703の一例)
図8は、イベント情報703の一例を示す説明図である。図8に示すように、情報処理装置100は、イベントが発生した時刻(秒)と、発生イベントと、命令アドレスと、分岐Taken/NotTakenを対応付けたイベント情報703を、イベント情報テーブル800を用いて記憶する。
命令アドレスは、イベントが発生した命令アドレスである。情報処理装置100は、命令アドレスに基づいて、どの基本ブロックでイベントが発生したかを特定可能である。ここでは、説明の簡略化のため、命令アドレスは、図4に示した行番号L1~L14で表現される。分岐Taken/NotTakenは、分岐命令実行のイベントが発生した際、分岐処理結果がTakenであるか、NotTakenであるかを表す。例えば、分岐条件式が真であればTakenであり、分岐条件式が偽であればNotTakenである。
ここで、情報処理装置100は、実行演算のイベントに基づいて、実行演算のイベント数を算出することができる。実行演算のイベントは、1秒間に、命令アドレスL2とL1とにおいて発生している。L1とL2とは共に、基本ブロックn1に属する。さらに、実行演算のイベントのサンプリングレートを1千万回とすると、基本ブロックn1における実行演算のイベント数は、(1+1)*1千万=20M回/秒になる。実行演算のイベント数は、例えば、図9に後述するプロファイル情報テーブル900を用いて、実行演算量として記憶される。
ここで、情報処理装置100は、タイマのイベントに基づいて、命令アドレスが含まれる基本ブロック同士のイベント数の比率を算出すれば、基本ブロックごとのCPU使用率を算出することができる。CPU使用率は、例えば、図9に後述するプロファイル情報テーブル900を用いて記憶される。ここで、情報処理装置100は、分岐命令実行のイベントに基づいて、分岐処理ごとにTakenとNotTakenとの回数を計数すれば、分岐確率を算出することができる。分岐確率は、例えば、図9に後述するプロファイル情報テーブル900を用いて記憶される。
ここで、情報処理装置100は、LLC(Last Level Cache)ミスのイベントに基づいて、1秒当たりにLLCミスのイベントが発生する回数に、キャッシュラインのサイズを乗算し、アクセスされるデータ量を算出することができる。以下の説明では、アクセスされるデータ量を「メモリアクセス量」と表記する場合がある。メモリアクセス量は、例えば、図9に後述するプロファイル情報テーブル900を用いて記憶される。ここで、図9の説明に移行し、プロファイル情報テーブル900の一例について説明する。
(プロファイル情報テーブル900の一例)
図9は、プロファイル情報テーブル900の一例を示す説明図である。図9に示すように、情報処理装置100は、基本ブロックに、基本ブロックが表す処理の命令文が記述された行の行番号と、基本ブロックが属するSCSと、基本ブロックが表す処理1回分の演算量とを対応付けて、プロファイル情報テーブル900に記憶する。
また、情報処理装置100は、基本ブロックに、算出した実行演算量と、算出したメモリアクセス量と、算出したCPU使用率と、算出した分岐確率とを対応付けて、プロファイル情報テーブル900に記憶する。そして、情報処理装置100は、プロファイル情報テーブル900に基づいて、SCSが表す処理の特性値を算出する。ここで、次に、図10および図11を用いて、SCSが表す処理の特性値を算出する一例について説明する。
(SCSが表す処理の特性値を算出する一例)
図10および図11は、SCSが表す処理の特性値を算出する一例を示す説明図である。図10に示すように、情報処理装置100は、例えば、SCS4に属する基本ブロックのプロファイル情報1000に基づいて、SCS4が表す処理の特性値を算出する。特性値は、例えば、実行演算量、メモリアクセス量、CPU使用率である。
情報処理装置100は、例えば、SCS4に属する基本ブロックが表す処理の実行演算量を合計し、SCS4が表す処理の実行演算量=150+160+100+200+140=750[MOps/s]を算出する。SCS4が表す処理の実行演算量は、例えば、図12に後述する特性値テーブル1200を用いて記憶される。
また、情報処理装置100は、例えば、SCS4に属する基本ブロックが表す処理のメモリアクセス量を合計し、SCS4が表す処理のメモリアクセス量=0+0+400+200+0=600[Mバイト/s]を算出する。SCS4が表す処理のメモリアクセス量は、例えば、図12に後述する特性値テーブル1200を用いて記憶される。
また、情報処理装置100は、例えば、SCS4に属する基本ブロックが表す処理のメモリアクセス量を合計し、SCS4が表す処理のCPU使用率=12+12+16+23+12=75[%]を算出する。SCS4が表す処理のCPU使用率は、例えば、図12に後述する特性値テーブル1200を用いて記憶される。次に、図11の説明に移行する。
図11に示すように、情報処理装置100は、例えば、SCS4に属する基本ブロックのプロファイル情報1100に基づいて、SCS4が表す処理のセルフ演算量を算出する。SCS4が下位SCSを含まなければ、SCS4が表す処理のセルフ演算量は、SCS4に含まれる基本ブロックが表す処理の演算量を合計した結果である。下位SCSは、SCS4に包含される他のSCSである。
一方で、SCS4が下位SCSを含めば、SCS4が表す処理のセルフ演算量は、SCS4に含まれる基本ブロックから、下位SCSに含まれる基本ブロックを除いた残余の基本ブロックが表す処理の演算量を合計した結果である。ここでは、SCS4は、下位SCSを含まない。
また、SCS4が表す処理のセルフ演算量は、SCS4に含まれる、いずれかの基本ブロックが表す処理が分岐処理である場合、分岐確率に応じて、基本ブロックが表す処理の演算量に重み付けを行うことにより得られる。ここでは、SCS4に含まれる基本ブロックn5が表す処理が、分岐処理である。
また、基本ブロックn5において、Yes側の基本ブロックn6への分岐がTakenに対応し、プロファイル情報テーブル900に記憶された、基本ブロックn6への分岐確率は66.7%である。このため、基本ブロックn7への分岐確率は、100-66.7=33.3%である。また、SCS4内では、他の基本ブロックn4,n5,n8は、分岐処理に関わらずに実行される。
このため、情報処理装置100は、基本ブロックn6が表す演算量には0.667の重み付けを行い、基本ブロックn7が表す処理の演算量には0.333の重み付けを行い、他の基本ブロックn4,n5,n8が表す処理の演算量はそのままにする。そして、情報処理装置100は、SCS4のセルフ演算量=1+1+0.667*1+0.333*4+1=5[Ops]を算出する。
そして、情報処理装置100は、算出した実行演算量、メモリアクセス量、セルフ演算量に基づいて、SCS4が表す処理の実行頻度、演算量、演算強度を算出する。
情報処理装置100は、例えば、SCS4が表す処理の実行頻度=(SCS4が表す処理の実行演算量-下位SCSが表す処理の実行演算量)÷SCS4が表す処理のセルフ演算量を算出する。情報処理装置100は、具体的には、SCS4が下位SCSを含まないため、SCS4が表す処理の実行頻度=(750-0)÷5=150[M回/s]を算出する。SCS4が表す処理の実行頻度は、例えば、図12に後述する特性値テーブル1200を用いて記憶される。
また、情報処理装置100は、例えば、SCS4が表す処理の演算量=SCS4が表す処理の実行演算量÷SCS4が表す処理の実行頻度を算出する。情報処理装置100は、具体的には、SCS4が表す処理の演算量=750÷150=5[Ops]を算出する。ここで、SCS4が下位SCSを含まないため、SCS4が表す処理の演算量は、SCS4が表す処理のセルフ演算量と等しくなる。SCS4が表す処理の演算量は、例えば、図12に後述する特性値テーブル1200を用いて記憶される。
情報処理装置100は、例えば、SCS4が表す処理の演算強度=SCS4が表す処理の実行演算量÷SCS4が表す処理のメモリアクセス量を算出する。情報処理装置100は、具体的には、SCS4が表す処理の演算強度=750÷600=1.25[Ops/バイト]を算出する。SCS4が表す処理の演算強度は、例えば、図12に後述する特性値テーブル1200を用いて記憶される。
情報処理装置100は、同様に、SCS2が表す処理についても実行演算量、メモリアクセス量、セルフ演算量などを算出し、SCS2が表す処理の実行頻度、演算量、演算強度を算出する。
情報処理装置100は、例えば、SCS2が表す処理の実行演算量=基本ブロックn2~n9が表す処理の実行演算量を合計した結果を算出する。情報処理装置100は、具体的には、SCS2が表す処理の実行演算量=50+40+150+160+100+200+140+60=900[MOps/s]を算出する。SCS2が表す処理の実行演算量は、例えば、図12に後述する特性値テーブル1200を用いて記憶される。
情報処理装置100は、例えば、SCS2が表す処理のセルフ演算量=SCS4に含まれない基本ブロックn2,n3,n9が表す処理の演算量を合計した結果を算出する。情報処理装置100は、具体的には、SCS2が表す処理のセルフ演算量=1+1+1=3[Ops]を算出する。SCS2が表す処理のセルフ演算量は、例えば、図12に後述する特性値テーブル1200を用いて記憶される。
情報処理装置100は、例えば、SCS2が表す処理の実行頻度=(SCS2が表す処理の実行演算量-下位SCSが表す処理の実行演算量)÷SCS2が表す処理のセルフ演算量を算出する。ここでは、下位SCSは、SCS4である。情報処理装置100は、具体的には、SCS2が表す処理の実行頻度=(900-750)÷3=50[M回/s]を算出する。SCS2が表す処理の実行頻度は、例えば、図12に後述する特性値テーブル1200を用いて記憶される。
情報処理装置100は、例えば、SCS2が表す処理の演算量=SCS2が表す処理の実行演算量÷SCS2が表す処理の実行頻度を算出する。情報処理装置100は、具体的には、SCS2が表す処理の演算量=900÷50=18[Ops]を算出する。SCS2が表す処理の演算量は、例えば、図12に後述する特性値テーブル1200を用いて記憶される。
情報処理装置100は、例えば、SCS2が表す処理の演算強度=SCS2が表す処理の実行演算量÷SCS2が表す処理のメモリアクセス量を算出する。情報処理装置100は、具体的には、SCS2が表す処理の演算強度1.5[Ops/バイト]を算出する。SCS2が表す処理の演算強度は、例えば、図12に後述する特性値テーブル1200を用いて記憶される。次に、図12を用いて、特性値テーブル1200に基づいて、アクセラレータに実行させる処理に適するか否かを判定する一例について説明する。
(アクセラレータに実行させる処理に適するか否かを判定する一例)
図12は、アクセラレータに実行させる処理に適するか否かを判定する一例を示す説明図である。図12に示すように、情報処理装置100は、SCS1が表す処理と、SCS2が表す処理と、SCS4が表す処理と、SCS10が表す処理とについて算出した特性値を、特性値テーブル1200を用いて記憶する。
情報処理装置100は、特性値テーブル1200を参照し、SCS1が表す処理と、SCS2が表す処理と、SCS4が表す処理と、SCS10が表す処理とについて算出した特性値が、アクセラレータ条件を満たすか否かを判定する。アクセラレータ条件は、例えば、CPU使用率が70%以上である条件と、演算量が30Ops以下である条件と、演算強度が1.2Ops/バイト以上である条件とを含む。
図12の例では、情報処理装置100は、SCS2が表す処理の特性値と、SCS4が表す処理の特性値とが、アクセラレータ条件を満たすと判定する。そして、情報処理装置100は、プログラムにアクセラレータで実行させることが好ましい処理があると判定し、アクセラレータに実行させる処理の候補として、SCS2が表す処理と、SCS4が表す処理とを特定する。
ここで、アクセラレータの処理性能が低く、アクセラレータ条件に、演算量が10Ops以下という条件がある場合、情報処理装置100は、SCS2が表す処理を、アクセラレータに実行させる処理の候補にしないことができる。また、情報処理装置100は、SCSを特定する際に、SCS2が特定されないようにしていてもよい。これにより、情報処理装置100は、特定しうるSCSすべてについて特性値を算出する場合に比べて、処理負担の低減化を図ることができる。
以上により、情報処理装置100は、比較的短時間で、SCSが表す処理をアクセラレータに実行させることが好ましいかを判定することができ、判定した結果をシステムの製造者に通知することができる。また、情報処理装置100は、SCSが表す処理について算出した特性値をシステムの製造者に通知してもよく、SCSが表す処理をアクセラレータに実行させることがどの程度好ましいかを把握可能にすることもできる。
また、情報処理装置100は、プログラムのCFG500と、プログラムのプロファイル情報テーブル900とを参照すればよく、プログラムのソースコード400を参照しなくてもよい。このため、情報処理装置100は、プログラムのソースコード400自体を秘匿したまま、SCSが表す処理をアクセラレータに実行させることが好ましいかを判定することができる。
結果として、プログラムのソースコード400の設計者は、プログラムのソースコード400自体や実行環境などを秘匿したまま、アクセラレータによりプログラムのソースコード400の性能を向上可能であるか否かを把握することができる。このため、プログラムのソースコード400の設計者は、プログラムのソースコード400が開示されるリスクを負わなくてもよい。
また、情報処理装置100は、アクセラレータの種別によらず、SCSが表す処理に固有の特性値を算出することができる。このため、情報処理装置100は、アクセラレータの種別がどのような種別であっても、SCSが表す処理に固有の特性値に基づいて、SCSが表す処理がアクセラレータ向きであるかを判断可能にすることができる。
また、情報処理装置100は、SCSが表す処理の特性値を算出した後、SCSが表す処理を実行することが好ましいアクセラレータを製造したり、複数のアクセラレータ候補から選択して利用したりすることを可能にすることができる。結果として、情報処理装置100は、プログラムの処理性能の向上を図ることができる。
(SCSが表す処理の実行演算量を算出する別の例)
次に、図13を用いて、SCSが表す処理の実行演算量を算出する別の例について説明する。例えば、ある基本ブロックが表す処理が複数の呼出元から呼び出される場合がある。この場合、SCSが表す処理の実行演算量を算出する際には、そのSCSが表す処理において、その基本ブロックが表す処理が呼び出された回数に応じて、その基本ブロックが表す処理の実行演算量に重み付けを行うことが好ましい。
図13は、SCSが表す処理の実行演算量を算出する別の例を示す説明図である。図13に示すように、情報処理装置100は、イベント情報703にさらにLBR履歴を含めて、イベント情報テーブル1300を用いて記憶する。LBR履歴は、プログラムの実行中に分岐命令実行がある都度、最新の命令アドレスから過去数個分の命令アドレスを記録した履歴である。図13の例では、LBR履歴は、最大4個の命令アドレスの履歴を記録する。
情報処理装置100は、イベント情報テーブル1300を参照し、基本ブロックが表す処理が実行された合計回数のうち、SCSが表す処理において基本ブロックが表す処理が呼び出された回数の割合を算出する。そして、情報処理装置100は、基本ブロックにおける実行演算のイベント数に、算出した割合を乗算することにより、SCSが表す処理の実行演算量を算出する。これにより、情報処理装置100は、SCSが表す処理の実行演算量を精度よく算出することができる。
(指定されるイベントの種類を変更した一例)
次に、図14を用いて、指定されるイベントの種類を変更した一例について説明する。図7および図8の例では、イベントとして、実行演算が予め指定される場合について説明したが、図14の例のように、イベントとして、浮動小数点演算や実行命令数が予め指定される場合があってもよい。
図14は、指定されるイベントの種類を変更した一例を示す説明図である。情報処理装置100は、浮動小数点演算が予め指定される場合、例えば、図14に示すイベント情報テーブル1400を記憶することになる。情報処理装置100は、イベント情報テーブル1400に基づいて、それぞれのSCSが表す処理について、演算量の代わりに、または、演算量に加えて、浮動小数点演算量を算出することができる。また、情報処理装置100は、アクセラレータ条件として、浮動小数点演算量に関する条件を用いることができる。
これにより、情報処理装置100は、アクセラレータに備わる浮動小数点回路のリソース制約を超える浮動小数点演算量になってしまう、SCSが表す処理を、アクセラレータに実行させることが好ましくないと判定することができる。
また、情報処理装置100は、実行命令数が予め指定される場合、例えば、図14に示すイベント情報テーブル1400を記憶することになる。そして、情報処理装置100は、イベント情報テーブル1400に基づいて、それぞれのSCSが表す処理について、演算量の代わりに、または、演算量に加えて、整数演算量を算出することができる。また、情報処理装置100は、アクセラレータ条件として、整数演算量に関する条件を用いることができる。
これにより、情報処理装置100は、アクセラレータに備わる整数演算回路、または、ランダムロジックのリソース制約を超える整数演算量になってしまう、SCSが表す処理を、アクセラレータに実行させることが好ましくないと判定することができる。
(全体処理手順)
次に、図15を用いて、情報処理装置100が実行する、全体処理手順の一例について説明する。全体処理は、例えば、図2に示したCPU201と、メモリ202や記録媒体205などの記憶領域と、ネットワークI/F203とによって実現される。
図15は、全体処理手順の一例を示すフローチャートである。図15に示すように、情報処理装置100は、プログラムと、アクセラレータ条件とを取得する(ステップS1501)。次に、情報処理装置100は、プログラムのCFG500を生成する(ステップS1502)。そして、情報処理装置100は、プログラムに基づいて、プロファイル情報を生成する(ステップS1503)。
次に、情報処理装置100は、生成したCFG500に基づいて、図16に後述するSCS特定処理を実行する(ステップS1504)。そして、情報処理装置100は、特定したSCSごとに特性値を算出する(ステップS1505)。次に、情報処理装置100は、特定したSCSごとに、算出した特性値に基づいて、アクセラレータ条件を満たすか否かを判定する(ステップS1506)。そして、情報処理装置100は、判定した結果を出力し(ステップS1507)、全体処理を終了する。
(SCS特定処理手順)
次に、図16を用いて、情報処理装置100が実行する、SCS特定処理手順の一例について説明する。SCS特定処理は、例えば、図2に示したCPU201と、メモリ202や記録媒体205などの記憶領域と、ネットワークI/F203とによって実現される。
図16は、SCS特定処理手順の一例を示すフローチャートである。図16に示すように、情報処理装置100は、graph=プログラムのCFG500に設定する(ステップS1601)。次に、情報処理装置100は、setOfSCS=Φに設定する(ステップS1602)。Φは空集合である。そして、情報処理装置100は、setOfSCC=FindSCC(graph)に設定する(ステップS1603)。FindSCC(graph)は、SCCを特定する関数である。
次に、情報処理装置100は、setOfSCC!=Φであるか否かを判定する(ステップS1604)。ここで、setOfSCC!=Φである場合(ステップS1604:Yes)、情報処理装置100は、ステップS1605の処理に移行する。一方で、setOfSCC!=Φではない場合(ステップS1604:No)、情報処理装置100は、ステップS1615の処理に移行する。
ステップS1605では、情報処理装置100は、nextOfSCC=Φに設定する(ステップS1605)。
次に、情報処理装置100は、scc∈setOfSCCをすべて処理したか否かを判定する(ステップS1606)。ここで、処理していないscc∈setOfSCCがある場合(ステップS1606:No)、情報処理装置100は、ステップS1607の処理に移行する。一方で、scc∈setOfSCCをすべて処理した場合(ステップS1606:Yes)、情報処理装置100は、ステップS1614の処理に移行する。
ステップS1607では、情報処理装置100は、scc∈setOfSCCを選択する(ステップS1607)。
次に、情報処理装置100は、選択したscc∈setOfSCSであるか否かを判定する(ステップS1608)。ここで、scc∈setOfSCSである場合(ステップS1608:Yes)、情報処理装置100は、ステップS1606の処理に移行する。一方で、scc∈setOfSCSではない場合(ステップS1608:No)、情報処理装置100は、ステップS1609の処理に移行する。
ステップS1609では、情報処理装置100は、NotSatisfyCPUUsage(scc)が真であるか否かを判定する(ステップS1609)。ここで、真ではない場合(ステップS1609:No)、情報処理装置100は、ステップS1606の処理に移行する。一方で、真である場合(ステップS1609:Yes)、情報処理装置100は、ステップS1610の処理に移行する。
ステップS1610では、情報処理装置100は、setOfSCS={setOfSCS}∪{scc}に設定する(ステップS1610)。
次に、情報処理装置100は、node∈NodeOf(scc)をすべて処理したか否かを判定する(ステップS1611)。node∈NodeOf(scc)をすべて処理した場合(ステップS1611:Yes)、情報処理装置100は、ステップS1606の処理に移行する。一方で、処理していないnode∈NodeOf(scc)がある場合(ステップS1611:No)、情報処理装置100は、ステップS1612の処理に移行する。
ステップS1612では、情報処理装置100は、subGraph=scc-{node}に設定する(ステップS1612)。次に、情報処理装置100は、nextOfSCC={FindSCC(subGraph)}∪{nextOfSCC}に設定する(ステップS1613)。そして、情報処理装置100は、ステップS1611の処理に移行する。
ステップS1614では、情報処理装置100は、setOfSCC=nextOfSCCに設定する(ステップS1614)。そして、情報処理装置100は、ステップS1604の処理に移行する。
ステップS1615では、情報処理装置100は、setOfSCSを出力する(ステップS1615)。そして、情報処理装置100は、SCS特定処理を終了する。
(SCS特定処理を規定したソースコード1700の一例)
次に、図17を用いて、図16に示したSCS特定処理を規定したソースコード1700の一例について説明する。
図17は、SCS特定処理を規定したソースコード1700の一例を示す説明図である。図17に示すように、ソースコード1700は、関数GenerateSCS(graph)を記述する。関数GenerateSCS(graph)は、graph=プログラムのCFG500を入力とし、SCSを特定する関数である。
L1の行には、「setOfSCS=Φ」が記述され、空集合で初期化することが示されている。L2の行には、「setOfSCC=FindSCC(graph)」が記述され、上記参考文献1に記載されたSCC分解アルゴリズムにより、graphのSCCを求めることが示されている。
L3の行には、「while(setOfSCC!=φ)」が記述され、すべてのSCCを処理するまで、whileループを繰り返すことが示されている。L4の行には、「nextOfSCC=φ」が記述され、次のforeachループで処理するSCC集合を設定する変数を初期化することが示されている。
L5の行には、「foreach(scc ∈ setOfSCC)」が記述され、SCC集合のSCCを順番に処理することが示されている。L6の行には、「if(scc∈setOfSCS)continue」が記述され、処理済みsccに関する処理をスキップすることが示されている。
L7の行には、「if(NotSatisfyCPUUsage(scc))continue」が記述され、所定の条件を満たさないsccに関する処理をスキップすることが示されている。所定の条件は、例えば、CPU使用率が一定以上であるという条件である。L8の行には、「setOfSCS=setOfSCS∪{scc}」が記述され、sccをSCS集合に追加することが示されている。
L9の行には、「foreach(node∈NodeOf(scc))」が記述され、sccに含まれるそれぞれのノードについて処理を繰り返すことが示されている。L10の行には、「subGraph=scc-{node}」が記述され、sccからnodeを取り除いた部分グラフを、subGraphに設定することが示されている。
L11の行には、「nextOfSCC=FindSCC(subGraph)∪nextOfSCC」が記述され、SCCを求めることが示されている。L14の行には、setOfSCC=nextOfSCC」が記述され、次のSCC集合を現在のSCC集合に設定することが示されている。L16の行には、「return setOfSCS」が記述され、SCS集合を結果として返すことが示されている。
以上説明したように、情報処理装置100によれば、プログラムのCFGに含まれる1以上のSCSを特定することができる。情報処理装置100によれば、CFGに含まれる1以上のノードのそれぞれのノードが表す処理の特性を示すプロファイル情報に基づいて、特定した1以上のSCSのそれぞれのSCSが表す処理の特性を示す特性値を算出することができる。情報処理装置100によれば、算出したそれぞれのSCSの特性値と、アクセラレータについて設定された条件とに基づいて、それぞれのSCSが表す処理が、アクセラレータに実行させる処理に適するか否かを判定することができる。これにより、情報処理装置100は、比較的短時間で、SCSが表す処理をアクセラレータに実行させることが好ましいかを判定することができ、いずれの処理をアクセラレータに実行させるか判断しやすくすることができる。
情報処理装置100によれば、SCSが表す処理によって、単位時間当たりに実行される演算量が大きいほど、または、単位時間当たりにアクセスされるデータ量が小さいほど、値が大きくなる第1の特性値を算出することができる。情報処理装置100によれば、算出した第1の特性値が、アクセラレータについて設定された第1の閾値を超える場合、SCSが表す処理が、アクセラレータに実行させる処理に適すると判定することができる。これにより、情報処理装置100は、アクセラレータに実行させると、プログラムの処理性能を一定以上向上することができる処理を、アクセラレータに実行させる処理に適すると判定することができる。
情報処理装置100によれば、SCSが表す処理の演算量を示す第2の特性値を算出することができる。情報処理装置100によれば、算出した第2の特性値が、アクセラレータについて設定された第2の閾値を下回る場合、SCSが表す処理が、アクセラレータに実行させる処理に適すると判定することができる。これにより、情報処理装置100は、アクセラレータの処理性能で実行可能である処理を、アクセラレータに実行させる処理に適すると判定することができる。
情報処理装置100によれば、第2の特性値を算出する際、SCSが表す処理に含まれる分岐処理における分岐確率を考慮することができる。これにより、情報処理装置100は、SCSが表す処理の演算量を精度よく算出することができ、第2の特性値を精度よく算出することができる。
情報処理装置100によれば、第2の特性値を、SCSが表す処理によって単位時間当たりに実行される演算量を、SCSが表す処理の単位時間当たりの実行頻度で除算することにより得ることができる。これにより、情報処理装置100は、SCSが他のSCSを含む場合にも、第2の特性値を精度よく算出することができる。
情報処理装置100によれば、SCSが表す処理によって単位時間当たりに実行される演算量から、SCSに含まれる他のSCSが表す処理によって単位時間当たりに実行される演算量を減算した差分を算出することができる。情報処理装置100によれば、算出した差分を、SCSから他のSCSを除いた部分グラフが表す処理の演算量で除算することにより、実行頻度を算出することができる。これにより、情報処理装置100は、SCSが他のSCSを含む場合にも、実行頻度を精度よく算出することができ、第2の特性値を精度よく算出することができる。
情報処理装置100によれば、部分グラフが表す処理の演算量を算出する際、部分グラフが表す処理に含まれる分岐処理における分岐確率を考慮することができる。これにより、情報処理装置100は、部分グラフが表す処理の演算量を精度よく算出することができ、第2の特性値を精度よく算出することができる。
情報処理装置100によれば、SCSが表す処理によって単位時間当たりに実行される演算量を算出する際、SCSが表す処理において、SCSに含まれる1以上のノードのそれぞれのノードが表す処理が呼び出された回数を考慮することができる。これにより、情報処理装置100は、SCSが表す処理によって単位時間当たりに実行される演算量を精度よく算出することができる。
情報処理装置100によれば、SCSが表す処理による単位時間当たりの演算装置の使用時間を示す第3の特性値を算出することができる。情報処理装置100によれば、算出した第3の特性値が、アクセラレータについて設定された第3の閾値を超える場合、SCSが表す処理が、アクセラレータに実行させる処理に適すると判定することができる。これにより、情報処理装置100は、アクセラレータに実行させると、CPU201の処理負担を一定以上低減することができる処理を、アクセラレータに実行させる処理に適すると判定することができる。
情報処理装置100によれば、CFGに含まれ、所定の演算量を超える処理をそれぞれ表す、1以上のSCSを特定することができる。これにより、情報処理装置100は、所定の演算量を超えず、アクセラレータに実行させることが比較的好ましくない処理を表すSCSを特定せず、処理負担の低減化を図ることができる。
なお、本実施の形態で説明した情報処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本実施の形態で説明した情報処理プログラムは、ハードディスク、フレキシブルディスク、CD-ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本実施の形態で説明した情報処理プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)プログラムのコントロールフローグラフに含まれる1以上の強連結グラフを特定し、
前記コントロールフローグラフに含まれる1以上のノードのそれぞれのノードが表す処理の特性を示すプロファイル情報に基づいて、特定した前記1以上の強連結グラフのそれぞれの強連結グラフが表す処理の特性を示す特性値を算出し、
算出した前記それぞれの強連結グラフの特性値と、アクセラレータについて設定された条件とに基づいて、前記それぞれの強連結グラフが表す処理が、前記アクセラレータに実行させる処理に適するか否かを判定する、
制御部を有することを特徴とする情報処理装置。
(付記2)前記制御部は、
前記強連結グラフが表す処理によって、単位時間当たりに実行される演算量が大きいほど、または、単位時間当たりにアクセスされるデータ量が小さいほど、値が大きくなる第1の特性値を算出し、
算出した前記第1の特性値が、前記アクセラレータについて設定された第1の閾値を超える場合、前記強連結グラフが表す処理が、前記アクセラレータに実行させる処理に適すると判定する、ことを特徴とする付記1に記載の情報処理装置。
(付記3)前記制御部は、
前記強連結グラフが表す処理の演算量を示す第2の特性値を算出し、
算出した前記第2の特性値が、前記アクセラレータについて設定された第2の閾値を下回る場合、前記強連結グラフが表す処理が、前記アクセラレータに実行させる処理に適すると判定する、ことを特徴とする付記1または2に記載の情報処理装置。
(付記4)前記第2の特性値は、前記強連結グラフに含まれる1以上のノードのそれぞれのノードが表す処理の演算量を、前記強連結グラフが表す処理に含まれる分岐処理における分岐確率に応じて重み付けして合計することにより得られる、ことを特徴とする付記3に記載の情報処理装置。
(付記5)前記第2の特性値は、前記強連結グラフが表す処理によって単位時間当たりに実行される演算量を、前記強連結グラフが表す処理の単位時間当たりの実行頻度で除算することにより得られる、ことを特徴とする付記3または4に記載の情報処理装置。
(付記6)前記実行頻度は、前記強連結グラフが表す処理によって単位時間当たりに実行される演算量から、前記強連結グラフに含まれる他の強連結グラフが表す処理によって単位時間当たりに実行される演算量を減算した差分を、前記強連結グラフから前記他の強連結グラフを除いた部分グラフが表す処理の演算量で除算することにより得られる、ことを特徴とする付記5に記載の情報処理装置。
(付記7)前記部分グラフが表す処理の演算量は、前記部分グラフに含まれる1以上のノードのそれぞれのノードが表す処理の演算量を、前記部分グラフが表す処理に含まれる分岐処理における分岐確率に応じて重み付けして合計することにより得られる、ことを特徴とする付記6に記載の情報処理装置。
(付記8)前記強連結グラフが表す処理によって単位時間当たりに実行される演算量は、前記強連結グラフが表す処理において、前記強連結グラフに含まれる1以上のノードのそれぞれのノードが表す処理が呼び出された回数に応じて、前記それぞれのノードが表す処理の演算量に重み付けして合計することにより得られる、ことを特徴とする付記2、5~7のいずれか一つに記載の情報処理装置。
(付記9)前記制御部は、
前記強連結グラフが表す処理による単位時間当たりの演算装置の使用時間を示す第3の特性値を算出し、
算出した前記第3の特性値が、前記アクセラレータについて設定された第3の閾値を超える場合、前記強連結グラフが表す処理が、前記アクセラレータに実行させる処理に適すると判定する、ことを特徴とする付記1~8のいずれか一つに記載の情報処理装置。
(付記10)前記制御部は、
前記コントロールフローグラフに含まれ、所定の演算量を超える処理をそれぞれ表す、1以上の強連結グラフを特定する、ことを特徴とする付記1~9のいずれか一つに記載の情報処理装置。
(付記11)コンピュータが、
プログラムのコントロールフローグラフに含まれる1以上の強連結グラフを特定し、
前記コントロールフローグラフに含まれる1以上のノードのそれぞれのノードが表す処理の特性を示すプロファイル情報に基づいて、特定した前記1以上の強連結グラフのそれぞれの強連結グラフが表す処理の特性を示す特性値を算出し、
算出した前記それぞれの強連結グラフの特性値と、アクセラレータについて設定された条件とに基づいて、前記それぞれの強連結グラフが表す処理が、前記アクセラレータに実行させる処理に適するか否かを判定する、
処理を実行することを特徴とする情報処理方法。
(付記12)コンピュータに、
プログラムのコントロールフローグラフに含まれる1以上の強連結グラフを特定し、
前記コントロールフローグラフに含まれる1以上のノードのそれぞれのノードが表す処理の特性を示すプロファイル情報に基づいて、特定した前記1以上の強連結グラフのそれぞれの強連結グラフが表す処理の特性を示す特性値を算出し、
算出した前記それぞれの強連結グラフの特性値と、アクセラレータについて設定された条件とに基づいて、前記それぞれの強連結グラフが表す処理が、前記アクセラレータに実行させる処理に適するか否かを判定する、
処理を実行させることを特徴とする情報処理プログラム。