(57)【要約】      （修正有）【課題】確度の高いプロファイリングを実現することができるプロファイリング装置、プロファイリング方法、及びプログラムを提供する。【解決手段】プロファイリング装置１０１は、第１の処理部１１１と第２の処理部１３１を有する。第１の処理部は、アプリケーションプログラムを実行し、プロファイルの開始指示とプロファイルのサンプリング周期に基づくサンプリング周期情報を第２処理部に通知する。第２の処理部は、アプリケーションプログラムに含まれる関数を実行し、開始指示を受信すると、サンプリング周期ごとに関数の実行状態を計測する。【選択図】図２
2020013273.tif 000002
【特許請求の範囲】
【請求項１】
第１の処理部と第２の処理部を有するプロファイリング装置であって、
前記第１の処理部は、
アプリケーションプログラムを実行する実行部と、
プロファイルの開始指示と前記プロファイルのサンプリング周期に基づくサンプリング周期情報を前記第２処理部に通知する通知部と、
を備え、
前記第２の処理部は、
前記アプリケーションプログラムに含まれる関数を実行する回路部と、
前記開始指示を受信すると、前記サンプリング周期ごとに前記関数の実行状態を計測する計測部と、
を備えるプロファイリング装置。
【請求項２】
前記通知部は、前記サンプリング周期情報として、前記サンプリング周期と前記第２の処理部のクロック周波数に基づいて算出される分周情報を前記第２処理部に通知する請求項１記載のプロファイリング装置。
【請求項３】
前記分周情報は、前記サンプリング周期に前記クロック周波数を乗算することにより算出される請求項２記載のプロファイリング装置。
【請求項４】
前記計測部は、分周情報に基づいて、周期が前記サンプリング周期であるサンプリングパルスを生成し、前記サンプリングパルスに応じて前記関数の実行状態を計測する請求項３記載のプロファイリング装置。
【請求項５】
第１の処理部と第２の処理部を有するプロファイリング装置が実行するプロファイリング方法であって、
前記第１の処理部が、
アプリケーションプログラムを実行し、
プロファイルの開始指示と前記プロファイルのサンプリング周期に基づくサンプリング周期情報を前記第２処理部に通知し、
前記第２の処理部が、
前記アプリケーションプログラムに含まれる関数を実行し、
前記開始指示を受信すると、前記サンプリング周期ごとに前記関数の実行状態を計測する、
プロファイリング方法。
【請求項６】
コンピュータが有する第１の処理部に、
アプリケーションプログラムを実行し、
プロファイルの開始指示と前記プロファイルのサンプリング周期に基づくサンプリング周期情報を前記第２処理部に通知する、
処理を実行させ、
前記コンピュータが有する第２の処理部に、
前記アプリケーションプログラムに含まれる関数を実行し、
前記開始指示を受信すると、前記サンプリング周期ごとに前記関数の実行状態を計測する、
処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロファイリング装置、プロファイリング方法、およびプログラムに関する。
【背景技術】
【０００２】
近年、データセンターなどではＮＦＶ（Ｎｅｔｗｏｒｋ  Ｆｕｎｃｔｉｏｎｓ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ）等のネットワーク機器をソフトウェアとして実装する方式が適用されている。しかし、パケット処理等においてはＩＡ（Ｉｎｔｅｌ（登録商標）  Ａｒｃｈｉｔｅｃｔｕｒｅ）プロセッサだけでは処理性能が不足することがある。そのため、一部の機能を当該機能に特化した別のプロセッサで実行し、異種プロセッサ間で連携動作するヘテロジニアスコンピューティング技術が注目を集めている。
【０００３】
従来のＣ言語アプリケーションの性能解析手法として、ＩＡプロセッサなどにはプロセッサ内部のパフォーマンスカウンタと、カーネルやアプリケーションの実行内容を紐付ける性能プロファイル技術（統計的サンプリング手法）が利用されている。
【０００４】
異種プロセッサ間で連携動作するアプリケーションの場合は、プロセッサ毎にコア（コアロジック）、インターコネクト、およびペリフェラルが異なる。そのため、各々のプロセッサで異なる方法または仕組みで別々に性能情報を収集し、性能解析を行い、性能改善につなげる手法が用いられる。
【０００５】
並列マシン上でのプログラムの稼動状況を表示してプログラム開発の性能評価作業を効率的に行える技術が知られている（例えば、特許文献１参照）。また、性能解析用の専用ハードウェアを必要とせず、かつ、バスサイクル数やキャッシュのヒット率など詳細な情報を解析できる技術が知られている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平５−２５０３３９号公報
【特許文献２】特開２００７−３０４９４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ＩＡプロセッサ上で動作するＣ言語アプリケーションでは機能や関数単位でのプロファイリングを行う。ホストプロセッサ上のＣ言語アプリケーションを主処理とし、ゲストプロセッサに連動処理（従属処理）を行う場合、機能や関数の紐付けが困難である。
【０００８】
一例としてゲストプロセッサにＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）を使用した場合を図１に示す。ＦＰＧＡがクロックドリブンで動作する仕組みであり、ホストプロセッサであるＣＰＵ側は関数ドリブンで動く仕組みであるためホストプロセッサとゲストプロセッサは同一の思想で性能プロファイルを取ることが困難である。
【０００９】
従来技術では異種プロセッサ間で連携動作するアプリケーションの性能解析時にはプロセッサ毎に別々の手法を用いている。そのため、性能解析時のデータ収集のサンプリング粒度および開始／終了タイミングに差分があり、確度の高いプロファイリングを行うことが困難である。
【００１０】
本発明は、確度の高いプロファイリングを実現することを目的とする。
【課題を解決するための手段】
【００１１】
実施の形態のプロファイリング装置は、第１の処理部と第２の処理部を有する。
【００１２】
前記第１の処理部は、実行部と、通知部と、を有する。
【００１３】
前記実行部は、アプリケーションプログラムを実行する。
【００１４】
前記通知部は、プロファイルの開始指示と前記プロファイルのサンプリング周期に基づくサンプリング周期情報を前記第２処理部に通知する。
【００１５】
前記第２の処理部は、回路部と、計測部と、を有する。
【００１６】
前記回路部は、前記アプリケーションプログラムに含まれる関数を実行する。
【００１７】
前記計測部は、前記開始指示を受信すると、前記サンプリング周期ごとに前記関数の実行状態を計測する。
【発明の効果】
【００１８】
実施の形態によれば、確度の高いプロファイリングを実現することができる。
【図面の簡単な説明】
【００１９】
【図１】ＦＰＧＡをゲストプロセッサに設定した例を示す図である。
【図２】実施の形態に係るプロファイリング装置の構成図である。
【図３】関数Ｂの構造を示す図である。
【図４】関数階層管理テーブルの例を示す図である。
【図５】プロファイル管理テーブルの例を示す図である。
【図６】プロファイル集計テーブルの例を示す図である。
【図７】実施の形態に係るプロファイリング装置のアプリケーション起動時の処理のフローチャートである。
【図８】実施の形態に係るプロファイリング装置のプロファイル開始時の処理のフローチャートである。
【図９】実施の形態に係るプロファイリング装置のプロファイル実行中の処理のフローチャートである。
【図１０】実施の形態に係るプロファイリング装置のプロファイル終了時の処理のフローチャートである。
【図１１】情報処理装置（コンピュータ）の構成図である。
【発明を実施するための形態】
【００２０】
以下、図面を参照しながら実施の形態について説明する。
【００２１】
図２は、実施の形態に係るプロファイリング装置の構成図である。
【００２２】
プロファイリング装置１０１は、ホストプロセッサ１１１、メモリ１２１、ゲストプロセッサ１３１、およびメモリ１４１を有する。ホストプロセッサ１１１とゲストプロセッサ１３１は、システムバス１５１を介して接続されている。プロファイリング装置１０１は、例えば、パーソナルコンピュータ（ＰＣ）やサーバ等の情報処理装置（コンピュータ）である。尚、図中の矢印は、データ、指示、または通知等の流れを示す。
【００２３】
プロファイリング装置１０１は、ＯｐｅｎＣＬ（Ｏｐｅｎ  Ｃｏｍｐｕｔｅ  Ｌａｎｇｕａｇｅ）を適用することによりＣ言語ベースのプログラミング言語を使用してホストプロセッサ側よりゲストプロセッサ上で関数を実行する。
【００２４】
ホストプロセッサ１１１は、アプリケーション実行部１１２、ホストプロファイラ１１３、ゲストプロファイル管理部１１４、通知部１１５、およびプロファイルデータ受信部１１６を有する。ホストプロセッサ１１１は、例えば、メモリ１２１に記憶されたプログラムを実行することにより、アプリケーション実行部１１２、ホストプロファイラ１１３、ゲストプロファイル管理部１１４、通知部１１５、およびプロファイルデータ受信部１１６の機能を実行する。ホストプロセッサ１１１は、例えば、ＣＰＵ（Central Processing Unit）である。ホストプロセッサ１１１は、第１の処理部の一例である。
【００２５】
アプリケーション実行部１１２は、アプリケーションプログラムを実行する。尚、アプリケーション実行部１１２は、アプリケーションプログラムに含まれる一部の関数をゲストプロセッサ１３１上で実行する。実施の形態において、アプリケーション実行部１１２は、アプリケーションＡを実行する。アプリケーションＡには、関数Ｂが含まれている。関数Ｂは、ゲストプロセッサ１３１で実行される。アプリケーション実行部１１２は、実行部の一例である。
【００２６】
ホストプロファイラ１１３は、ホストプロセッサ１１１上で実行されるアプリケーションの処理に対するプロファイルを行う。例えば、ホストプロファイラ１１３は、アプリケーションＡの処理のうち、ゲストプロセッサ１３１で実行される関数Ｂ以外のホストプロセッサ１１１上で実行される処理に対するプロファルを行う。ホストプロファイラ１１３は、プロファイルの結果をプロファイルＤＢ（データベース）１２２に書き込む。
【００２７】
ゲストプロファイル管理部１１４は、ホストプロファイルの開始タイミングおよび終了タイミングで通知部１１５にゲストプロセッサのプロファイル開始指示および終了指示を行う。ゲストプロファイル管理部１１４は、ホストプロファイルの終了タイミングでゲストプロセッサ側の並列処理の全関数のプロファイル情報をプロファイルＤＢ１２２に統合する。
【００２８】
通知部１１５は、プロファイルの開始および終了の指示をゲストプロセッサ１３１に通知する。ゲストプロセッサ１３１は、通知部１１５からの指示をトリガに、各関数の実行状態の計測を開始および終了する。プロファイルの開始の指示には、ゲストプロセッサ１３１のクロック周波数とプロファイルサンプリング周期から算出されるゲストプロセッサ１３１のサンプリング分周情報が含まれる。尚、プロファイルサンプリング周期は、ユーザが任意に設定可能である。
【００２９】
通知部１１５は、ゲストプロセッサ１３１のサンプリング分周情報を下式（１）により算出する。
【００３０】
γ=α×β    ・・・（１）
γは、サンプリング分周情報（カウント）である。αは、プロファイリングのサンプリング周期（秒）である。βは、ゲストプロセッサのクロック周波数（Ｈｚ）である。
【００３１】
通知部１１５からの終了の指示に対するゲストプロセッサ１３１の応答によりプロファイルデータがホストプロセッサ１１１に通知される。
【００３２】
尚、通知部１１５は、プロファイリングのサンプリング周期αをサンプリング生成部１３２に送信し、ゲストプロセッサ１３１のサンプリング生成部１３２がサンプリング分周情報γを算出してもよい。サンプリング分周情報およびサンプリング周期は、サンプリング周期情報の一例である。
【００３３】
プロファイルデータ受信部１１６は、ゲストプロセッサ１３１からプロファイルデータを受信する。
【００３４】
メモリ１２１は、ホストプロセッサ１１１が使用するデータやプログラムを記憶し、ホストプロセッサ１１１とメモリバスを介して接続している。メモリ１２１は、プロファイルＤＢ１２２および関数階層管理テーブル１２３を記憶する。また、メモリ１２１は、アプリケーションプログラムであるアプリケーションＡ（不図示）を記憶する。メモリ１２１は、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００３５】
ゲストプロセッサ１３１は、サンプリング生成部１３２、プロファイルデータ管理部１３３、回路ブロック１３４−ｉ（ｉ＝１〜５）、プロファイルデータ集計部１３５、およびプロファイルデータ送信部１３６を有する。ゲストプロセッサ１３１は、例えば、ＦＰＧＡ（ｆｉｅｌｄ−ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）またはＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等のハードウェア回路である。例えば、ゲストプロセッサ１３１がＦＰＧＡの場合、ホストプロセッサ１１１は、コンフィグレーションを行うことで、ゲストプロセッサ１３１に各処理を実行する回路を生成可能である。ゲストプロセッサ１３１は、第２の処理部の一例である。
【００３６】
サンプリング生成部１３２は、通知部１１５より通知された、サンプリング分周情報をもとにホストプロセッサ１１１側のプロファイルのサンプリング周期に同期したサンプリングパルスを生成する。サンプリング生成部１３２は、サンプリングパルスをプロファイルの開始から終了までの期間に生成する。サンプリング生成部１３２は、プロファイル終了後にリセットして、次の開始指示待つ。
【００３７】
プロファイルデータ管理部１３３は、プロファイル実行中の関数出現回数を計測するために、回路ブロック１３４−ｉ毎にプロファイルデータを管理する。また、関数の実行時間は、ゲストプロセッサの各回路ブロックのイネーブルの期間である。サンプリング生成部１３２およびプロファイルデータ管理部１３３は、計測部の一例である。
【００３８】
プロファイルデータ管理部１３３は、回路ブロック１３４−ｉのイネーブル期間をサンプリング生成部１３２から与えられたサンプリング周期で、回路ブロック１３４−ｉの実行状態をサンプリングし、サンプリング周期毎の各関数の実行状態を検出する。プロファイルデータ管理部１３３は、サンプリング周期毎の実行中の関数を示す情報をプロファイル管理テーブル１４３に書き込む。プロファイルデータ管理部１３３は、プロファイル終了後、リセットして、次の実行を待つ。
【００３９】
プロファイルデータ管理部１３３は、ゲストプロセッサ１３１上で動作する関数をサンプリング生成部１３２で生成されたサンプリングパルスベースでサンプリングすることで、ホストプロセッサ１１１側のプロファイルのサンプリング周期と同期した出現回数の計測が可能となる。
【００４０】
回路ブロック１３４−ｉは、それぞれ対応する関数を実行する回路である。関数ブロック１３４−１は、関数Ｂを実行する。関数ブロック１３４−２は、関数ａを実行する。関数ブロック１３４−３は、関数ｂを実行する。関数ブロック１３４−４は、関数ｃを実行する。関数ブロック１３４−５は、関数ｄを実行する。また、回路ブロック１３４−１〜５をそれぞれ関数ブロックＢ、関数ブロックａ、関数ブロックｂ、関数ブロックｃ、関数ブロックｄと表記する場合がある。回路ブロック１３４−ｉは、回路部の一例である。
【００４１】
プロファイルデータ集計部１３５は、通知部１１５から集計指示を受信し、プロファイル管理テーブル１４３を読み出して関数コード毎の出現回数の集計を行い、プロファイル集計テーブル１４２に集計結果であるプロファイルデータを書き込む。
【００４２】
プロファイルデータ送信部１３６は、プロファイル集計テーブル１４２の内容をホストプロセッサ１１１へ送信する。
【００４３】
メモリ１４１は、ゲストプロセッサ１３１が使用するデータを記憶し、ゲストプロセッサ１３１とメモリバスを介して接続している。メモリ１４１は、プロファイル集計テーブル１４２およびプロファイル管理テーブル１４３を記憶する。メモリ１４１は、例えば、ＲＡＭである。
【００４４】
実施の形態において、ホストプロセッサ１１１は、アプリケーションＡを実行する。アプリケーションＡには、関数Ｂが含まれている。関数Ｂは、ゲストプロセッサ１３１で実行される。
【００４５】
図３は、関数Ｂの構造を示す図である。
【００４６】
関数Ｂは、関数ａおよび関数ｄを含む。すなわち、関数Ｂから関数ａと関数ｄが呼び出される。関数ａは、関数ｂおよび関数ｃを含む。すなわち、関数ａから関数ｂと関数ｃが呼び出される。
【００４７】
このような関数Ｂの構造を図示すると図３に示されるような階層構造となる。第１の関数が第２の関数を読み出す場合、階層構造において、第１の関数は第２の関数の上位の階層に位置する。
【００４８】
よって、第１階層（Ｌ１）に関数Ｂがあり、関数Ｂの下の第２階層（Ｌ２）に関数ａと関数ｄがある。また、関数ａの下の第３階層（Ｌ３）に関数ｂと関数ｃがある。
【００４９】
図４は、関数階層管理テーブルの例を示す図である。
【００５０】
関数階層管理テーブル１２３は、ゲストプロセッサ１３１で動作する関数の階層構造を示し、各関数の階層構造における位置を示す。図４の関数階層管理テーブル１２３は、図３の関数Ｂの階層構造を示す。関数階層管理テーブル１２３には、関数名と階層Ｌ１〜Ｌ３が対応付けられて記述されている。
【００５１】
関数名は、関数の名前である。
【００５２】
階層Ｌ１〜Ｌ３は、関数を識別する識別子（番号）である。階層Ｌ１〜Ｌ３は、関数の階層構造における位置や自身がどの関数から呼び出されるかを示す。階層Ｌ１〜Ｌ３の値は、自身が存在する階層より下の階層の値は０となる。
【００５３】
図３に示すように関数Ｂは、第１階層（Ｌ１）に存在する１番目の関数である。よって、関数名＝Ｂに対応するＬ１は、１となる。関数Ｂは、第１階層（Ｌ１）存在するので、第１階層より下の階層であるＬ２，Ｌ３は、０となる。
【００５４】
図３に示すように関数ａは、第２階層（Ｌ２）に存在する１番目の関数である。よって、関数名＝ａに対応するＬ２は、１となる。関数ａは、第１階層（Ｌ１）の関数Ｂから呼び出される。よって、関数名＝ａに対応するＬ１は、関数名＝ＢのＬ１と同じ１となる。関数ａは第２階層（Ｌ２）に存在するので、関数名＝ａに対応するＬ３は、０となる。
【００５５】
図３に示すように関数ｂは、第３階層（Ｌ３）に存在する１番目の関数である。よって、関数名＝ｂに対応するＬ３は、１となる。関数ｂは、第２階層（Ｌ２）の関数ａから呼び出される。よって、関数名＝ｂに対応するＬ１，Ｌ２は、関数名＝ａのＬ１，Ｌ２と同じ１となる。
【００５６】
図３に示すように関数ｃは、第３階層（Ｌ３）に存在する２番目の関数である。よって、関数名＝ｃに対応するＬ３は、２となる。関数ｃは、第２階層（Ｌ２）の関数ａから呼び出される。よって、関数名＝ｃに対応するＬ１，Ｌ２は、関数名＝ａのＬ１，Ｌ２と同じ１となる。
【００５７】
図３に示すように関数ｄは、第２階層（Ｌ２）に存在する２番目の関数である。よって、関数名＝ｄに対応するＬ２は、２となる。関数ｄは、第１階層（Ｌ１）の関数Ｂから呼び出される。よって、関数名＝ｄに対応するＬ１は、関数名＝ＢのＬ１と同じ１となる。関数ｄは第２階層（Ｌ２）に存在するので、関数名＝ｄに対応するＬ３は、０となる。
【００５８】
実施の形態において、関数名に対応するＬ１〜Ｌ３の値を並べた数字を関数名の関数を示す関数コードとする。例えば、関数名＝関数ＢのＬ１〜Ｌ３は、それぞれＬ１＝１、Ｌ２＝０，Ｌ３＝０であるので、関数Ｂを示す関数コードは１００となる。同様に、関数ａを示す関数コードは１１０、関数ｂを示す関数コードは１１１、関数ｃを示す関数コードは１１２、関数ｄを示す関数コードは１２０となる。
【００５９】
図５は、プロファイル管理テーブルの例を示す図である。
【００６０】
プロファイル管理テーブル１４３は、サンプリング間隔毎の実行されている関数を示す。プロファイル管理テーブル１４３には、サンプリングカウントと実行関数リストが対応付けられて記述されている。
【００６１】
サンプリングカウントは、サンプリング生成部１３２で生成されるサンプリングパルスのカウント値である。
【００６２】
実行関数リストは、対応するサンプリングカウントにおいて、実行されている関数を示す関数コードのリストである。
【００６３】
図５のプロファイル管理テーブル１４３は、サンプリングカウント＝１のとき、関数Ｂ（関数コード１００）と関数Ｂから呼ばれる関数ｄ（関数コード＝１２０）が実行されていることを示す。また、図５のプロファイル管理テーブル１４３は、サンプリングカウント＝２のとき、関数Ｂ（関数コード１００）が実行されていることを示す。また、図５のプロファイル管理テーブル１４３は、サンプリングカウント＝３のとき、関数Ｂ（関数コード１００）と、関数Ｂから呼ばれる関数ａ（関数コード＝１１０）と、関数ａから呼ばれる関数ｂ（関数コード１１１）と、が実行されていることを示す。
【００６４】
図６は、プロファイルデータ集計テーブルの例を示す図である。
【００６５】
プロファイル集計テーブル１４２は、関数それぞれの出現回数を示す。プロファイル集計テーブル１４２には、関数コードとカウント数が対応付けられて記述されている。
【００６６】
関数コードは、関数を識別する識別子（コード）である。
【００６７】
カウント数は、プロファイル管理テーブル１４３における関数コードの出現回数である。
【００６８】
プロファイル集計テーブル１４２は、プロファイルデータ集計部１３５によりプロファイル管理テーブル１４３に基づいて生成される。図６のプロファイル集計テーブル１４２は、図５のプロファイル管理テーブル１４３に基づいて生成された例を示す。例えば、図５のプロファイル管理テーブル１４３のサンプリングカウント＝１〜３それぞれに対応する実行関数リストに１００が記述されている。すなわち、関数コード＝１００が３回、出現している。よって、図６のプロファイル集計テーブル１４２において、関数コード＝１００に対応するカウント数は３となる。
【００６９】
また、関数コード＝１１０は、図５のプロファイル管理テーブル１４３のサンプリングカウント＝２に対応する実行関数リストに記載されている。すなわち、関数コード＝１１０が１回、出現している。よって、図６のプロファイル集計テーブル１４２において、関数コード＝１１０に対応するカウント数は１となる。
【００７０】
同様に、図５のプロファイル管理テーブル１４３に基づき、関数コード＝１１１、１２０の出現回数をカウントすると、関数コード＝１１１、１２０の出現回数は、両方とも１回である。よって、図６のプロファイル集計テーブル１４２において、関数コード＝１１１、１２０に対応するカウント数は、それぞれ１となる。
【００７１】
図７は、実施の形態に係るプロファイリング装置のアプリケーション起動時の処理のフローチャートである。実施の形態では、アプリケーションＡが実行される場合を説明する。また、アプリケーションＡには関数Ｂが含まれており、関数Ｂはゲストプロセッサ１３１で実行される。
【００７２】
ステップＳ５０１において、アプリケーション実行部１１２は、アプリケーションＡを実行する。
【００７３】
以下のステップＳ５０２〜Ｓ５０４は、並列に実行される。
【００７４】
ステップＳ５０２において、ゲストプロファイル管理部１１４は、ゲストプロセッサ１３１で実行される関数Ｂの構造に基づいて、関数階層管理テーブル１２３を生成する。それにより、図４に示すような関数階層管理テーブル１２３が生成される。アプリケーションＡの実行時に関数Ｂが呼び出された場合には、アプリケーション実行部１１２は、関数階層管理テーブル１２３に基づく各関数を示す３ケタの関数コードをゲストプロセッサ１３１に通知し、ゲストプロセッサ１３１は各関数を示す関数コードを管理する。
【００７５】
ステップＳ５０３において、アプリケーション実行部１１２は、連動対象の関数Ｂの回路ブロックの生成指示を実行し、ゲストプロセッサ１３１に関数Ｂを実行する関数単位の関数ブロック１３４−ｉを生成する。詳細には、ゲストプロセッサ１３１には、関数Ｂを実行する関数ブロック１３４−１、関数Ｂに含まれる関数ａ〜ｄをそれぞれ実行する関数ブロック１３４−２〜１３４−５が生成される。する。アプリケーションＡの実行時に関数Ｂが呼び出されると、回路ブロック１３４−ｉは、関数Ｂ、ａ〜ｄを実行する。
【００７６】
ステップＳ５０４において、ゲストプロファイル管理部１１４は、ゲストプロセッサ１３１上にサンプリング生成部１３２、プロファイルデータ管理部１３３、プロファイルデータ集計部１３５、およびプロファイルデータ送信部１３６を生成する。また、ゲストプロファイル管理部１１４は、メモリ１４１上にプロファイル集計テーブル１４２およびプロファイル管理テーブル１４３を生成する。
【００７７】
ステップＳ５０２〜Ｓ５０４の後、プロファイリング装置１０１は、プロファイリングを開始し、下記のプロファイル開始時の処理が実行される。
【００７８】
図８は、実施の形態に係るプロファイリング装置のプロファイル開始時の処理のフローチャートである。
【００７９】
ステップＳ５１１において、アプリケーションＡに対するプロファイル（性能解析）のため、ホストプロファイラ１１３が起動する。ホストプロファイラ１１３は、ゲストプロファイル管理部１１４に対して、プロファイルの開始指示を行う。ここでは、プロファイルのサンプリング周期を１０ｍｓとする。
【００８０】
ステップＳ５１２において、ゲストプロファイル管理部１１４は、開始指示を受信し、通知部１１５に対してプロファイルの開始指示を行う。
【００８１】
ステップＳ５１３において、通知部１１５は、開始指示を受信し、ゲストプロセッサ１３１のクロック周波数とプロファイルサンプリング周期からゲストプロセッサ１３１のサンプリング分周情報を算出する。通知部１１５は、サンプリング分周情報を含むプロファイルの開始指示をサンプリング生成部１３２に通知する。ここでは、ゲストプロセッサ１３１のクロック周波数は、１ＧＨｚとする。したがって、上式（１）より、ゲストプロセッサ１３１のサンプリング分周情報は、１０Ｍとなる。
【００８２】
ステップＳ５１４において、サンプリング生成部１３２は、開始指示を受信し、ゲストプロセッサ１３１のプロファイルを有効化（開始）する。サンプリング生成部１３２は、通知されたサンプリング分周情報より１０Ｍ／ｓの分周カウンタを生成し、カウントを開始する。サンプリング生成部１３２は同時にサンプリングパルスを生成する。詳細には、サンプリング生成部１３２は、ゲストプロセッサ１３１のクロックをカウントし、１０Ｍクロック毎にサンプリングパルスを生成する。これにより、周期が１０ｍｓのサンプリングパルスが生成され、サンプリングパルスはホストプロセッサ１１１のプロファイルのサンプリング周期と同期する。
【００８３】
ステップＳ５１４の後、制御は下記のプロファイル実行中の処理に進む。
【００８４】
図９は、実施の形態に係るプロファイリング装置のプロファイル実行中の処理のフローチャートである。
【００８５】
以下のステップＳ５２１、Ｓ５２２は、並列に実行される。
【００８６】
ステップＳ５２１において、ホストプロファイラ１１３は、プロファイルのサンプリング周期でホストプロセッサ１１１上で実行中の関数（動作関数）のカウントを実行する。すなわち、ホストプロファイラ１１３は、プロファイル実行中においてプロファイルのサンプリング周期ごとに、ホストプロセッサ１１１上で実行中の関数の関数毎の出現回数をカウントする。
【００８７】
ステップＳ５２２において、プロファイルデータ管理部１３３は、サンプリングパルスの立ち上がりに合わせて、当該立ち上がり時にゲストプロセッサ１３１上で実行中の関数（動作関数）を検出し、検出した関数を示す関数コードをプロファイル管理テーブル１４３に書き込む。プロファイルデータ管理部１３３は、サンプリングパルスの立ち上がり毎にサンプリングカウントを１インクリメントし、サンプリングカウントと当該立ち上がり時に実行中の関数の関数コードをプロファイル管理テーブル１４３に書き込む。尚、サンプリングパルスは、サンプリング生成部１３２で生成され、ホストプロセッサ１１１のプロファイルのサンプリング周期と同期する。
【００８８】
これにより、図５に示すようなプロファイル管理テーブル１４３が生成される。図５のプロファイル管理テーブル１４３は、サンプリングカウント＝１のとき、関数Ｂ（関数コード１００）と関数Ｂから呼ばれる関数ｄ（関数コード＝１２０）が実行されていることを示す。また、図５のプロファイル管理テーブル１４３は、サンプリングカウント＝２のとき、関数Ｂ（関数コード１００）が実行されていることを示す。また、図５のプロファイル管理テーブル１４３は、サンプリングカウント＝３のとき、関数Ｂ（関数コード１００）と、関数Ｂから呼ばれる関数ａ（関数コード＝１１０）と、関数ａから呼ばれる関数ｂ（関数コード１１１）と、が実行されていることを示す。
【００８９】
プロファイル実行中に、ユーザからの終了指示またはタイマ満了などによりプロファイルが終了される場合、制御は下記のプロファイル終了時の処理に進む。
【００９０】
図１０は、実施の形態に係るプロファイリング装置のプロファイル終了時の処理のフローチャートである。
【００９１】
ステップＳ５３１において、ユーザからの終了指示またはタイマ満了などにより、ホストプロファイラ１１３はプロファイルを終了する。ホストプロファイラ１１３は、プロファイル実行中にカウントしたホストプロセッサ１１１上の動作関数毎のカウント数をプロファイルＤＢ１２２に書き込む。そして、ホストプロファイラ１１３は停止する。
【００９２】
以下のステップＳ５３２、Ｓ５３３は、並列に実行される。尚、ステップＳ５３２、Ｓ５３３は、直列に実行されてもよい。
【００９３】
ステップＳ５３２において、ゲストプロファイル管理部１１４は、通知部１１５に対してプロファイルの終了指示を行う。
【００９４】
ステップＳ５３３において、ゲストプロファイル管理部１１４は、プロファイルデータ受信部１１６にゲストプロファイルデータの待ち受けを指示する。
【００９５】
以下のステップＳ５３４、Ｓ５３５は、並列に実行される。尚、ステップＳ５３４、Ｓ５３５は、直列に実行されてもよい。
【００９６】
ステップＳ５３４において、通知部１１４は、プロファイルの終了指示をサンプリング生成部１３２に通知する。
【００９７】
ステップＳ５３５において、通知部１１４は、集計指示をプロファイルデータ集計部１３５に通知する。
【００９８】
ステップＳ５３６において、プロファイルデータ集計部１３５は、集計指示を受信し、プロファイル管理テーブル１４３を読み出して関数コード毎の出現回数の集計を行う。プロファイルデータ集計部１３５は、集計結果として、関数コードと当該関数コードの出現回数（カウント数）をプロファイル集計テーブル１４２に書き込む。
【００９９】
ステップＳ５３７において、プロファイルデータ集計部１３５は、集計の完了を確認し、プロファイルデータ送信部１３６に送信指示を行う。プロファイルデータ送信部１３６は、送信指示を受信し、プロファイル集計テーブル１４２を読み出す。プロファイルデータ送信部１３６は、プロファイル集計テーブル１４２の内容をゲストプロファイルデータとしてプロファイルデータ受信部１１６に送信する。
【０１００】
ステップＳ５３８において、プロファイルデータ受信部１１６は、ゲストプロファイルデータを受信し、ゲストプロファイル管理部１１４に転送する。
【０１０１】
ステップＳ５３９において、ゲストプロファイル管理部１１４は、関数階層管理テーブル１２３に基づいて、ゲストプロファイルデータに含まれる関数コードを対応する関数名を対応付ける。ゲストプロファイル管理部１１４は、ゲストプロファイルデータに含まれる関数コードに対応する関数名と、ゲストプロファイルデータに含まれるカウント数と、を、プロファイルＤＢ１２２にマージ（書き込む）する。
【０１０２】
ステップＳ５４０において、ポストプロファイラ１１３は、プロファイルＤＢ１２２からアプリケーションＡの性能解析結果を示すプロファイルレポートを作成する。
【０１０３】
実施の形態のプロファイリング装置によれば、周波数差のある異種プロセッサ間であっても、ホストプロセッサとゲストプロセッサ間で連動動作するアプリケーションにおいて、データ収集のサンプリング粒度、開始タイミング、および終了タイミングを合わせてプロファイリングすることができる。それにより、確度の高い性能解析を行うことができる。
【０１０４】
実施の形態のプロファイリング装置によれば、ホストプロセッサ処理と従属関係にあるゲストプロセッサ処理の関数とサンプリングによる出現回数の紐付けを行うことで、プロファイル結果確認の容易性を高めることができる。
【０１０５】
図１１は、情報処理装置（コンピュータ）の構成図である。
【０１０６】
実施の形態のプロファイリング装置１０１は、例えば、図１１に示すような情報処理装置（コンピュータ）１によって実現可能である。
【０１０７】
情報処理装置１は、Central Processing Unit（ＣＰＵ）２、メモリ３、入力装置４、出力装置５、記憶部６、記録媒体駆動部７、及びネットワーク接続装置８を備え、それらはバス９により互いに接続されている。
【０１０８】
ＣＰＵ２は、情報処理装置１全体を制御する中央処理装置（プロセッサ）である。ＣＰＵ２は、アプリケーション実行部１１２、ホストプロファイラ１１３、ゲストプロファイル管理部１１４、通知部１１５、およびプロファイルデータ受信部１１６として動作する。
【０１０９】
メモリ３は、プログラム実行の際に、記憶部６（あるいは可搬記録媒体１０）に記憶されているプログラムあるいはデータを一時的に格納するRead Only Memory(ＲＯＭ)やRandom Access Memory(ＲＡＭ)等のメモリである。ＣＰＵ２は、メモリ３を利用してプログラムを実行することにより、上述した各種処理を実行する。
【０１１０】
入力装置４は、ユーザ又はオペレータからの指示や情報の入力、情報処理装置１で用いられるデータの取得等に用いられる。入力装置４は、例えば、キーボード、マウス、タッチパネル、カメラ、またはセンサ等である。
【０１１１】
出力装置５は、ユーザ又はオペレータへの問い合わせや処理結果を出力したりする。出力装置５は、例えば、ディスプレイ、またはプリンタ等である。
【０１１２】
記憶部６は、例えば、磁気ディスク装置、光ディスク装置、テープ装置等である。情報処理装置１は、記憶部６に、上述のプログラムとデータを保存しておき、必要に応じて、それらをメモリ３に読み出して使用する。
【０１１３】
記録媒体駆動部７は、可搬記録媒体１０を駆動し、その記録内容にアクセスする。可搬記録媒体としては、メモリカード、フレキシブルディスク、Compact Disk Read Only Memory(ＣＤ−ＲＯＭ)、光ディスク、光磁気ディスク等、任意のコンピュータ読み取り可能な記録媒体が用いられる。ユーザは、この可搬記録媒体１０に上述のプログラムとデータを格納しておき、必要に応じて、それらをメモリ３に読み出して使用する。
【０１１４】
ネットワーク接続装置８は、Local Area Network（ＬＡＮ）やWide Area Network（ＷＡＮ）等の任意の通信ネットワークに接続され、通信に伴うデータ変換を行う通信インターフェースである。ネットワーク接続装置８は、通信ネットワークを介して接続された装置へデータの送信または通信ネットワークを介して接続された装置からデータを受信する。
【０１１５】
アクセラレータ１１は、ＣＰＵ２が実行するプログラムの一部の処理を実行する。アクセラレータ１１は、プロセッサ１２およびメモリ１３を有する。
【０１１６】
プロセッサ１２は、ゲストプロセッサ１３１に対応する。プロセッサ１２は、例えば、ＦＰＧＡやＧＰＵ等である。プロセッサ１２は、サンプリング生成部１３２、プロファイルデータ管理部１３３、回路ブロック１３４−ｉ、プロファイルデータ集計部１３５、およびプロファイルデータ送信部１３６として動作する。
【０１１７】
メモリ１３は、プロセッサ１２で利用されるプログラムあるいはデータを一時的に格納するRead Only Memory(ＲＯＭ)やRandom Access Memory(ＲＡＭ)等のメモリである。メモリ１３は、メモリ１４１に対応する。
【０１１８】
なお、情報処理装置１が図１１のすべての構成要素を含む必要はなく、用途や条件に応じて一部の構成要素を省略することも可能である。例えば、ユーザ又はオペレータからの指示や情報の入力を行わない場合は、入力装置４を省略してもよく、ユーザ又はオペレータへの問い合わせや処理結果の出力を行わない場合は、出力装置５を省略してもよい。情報処理装置１が可搬記録媒体１０にアクセスしない場合は、記録媒体駆動部７を省略してもよい。
【０１１９】
以上の実施の形態に関し、さらに以下の付記を開示する。
（付記１）
第１の処理部と第２の処理部を有するプロファイリング装置であって、
前記第１の処理部は、
アプリケーションプログラムを実行する実行部と、
プロファイルの開始指示と前記プロファイルのサンプリング周期に基づくサンプリング周期情報を前記第２処理部に通知する通知部と、
を備え、
前記第２の処理部は、
前記アプリケーションプログラムに含まれる関数を実行する回路部と、
前記開始指示を受信すると、前記サンプリング周期ごとに前記関数の実行状態を計測する計測部と、
を備えるプロファイリング装置。
（付記２）
前記通知部は、前記サンプリング周期情報として、前記サンプリング周期と前記第２の処理部のクロック周波数に基づいて算出される分周情報を前記第２処理部に通知する付記１記載のプロファイリング装置。
（付記３）
前記分周情報は、前記サンプリング周期に前記クロック周波数を乗算することにより算出される付記２記載のプロファイリング装置。
（付記４）
前記計測部は、分周情報に基づいて、周期が前記サンプリング周期であるサンプリングパルスを生成し、前記サンプリングパルスに応じて前記関数の実行状態を計測する付記３記載のプロファイリング装置。
（付記５）
第１の処理部と第２の処理部を有するプロファイリング装置が実行するプロファイリング方法であって、
前記第１の処理部が、
アプリケーションプログラムを実行し、
プロファイルの開始指示と前記プロファイルのサンプリング周期に基づくサンプリング周期情報を前記第２処理部に通知し、
前記第２の処理部が、
前記アプリケーションプログラムに含まれる関数を実行し、
前記開始指示を受信すると、前記サンプリング周期ごとに前記関数の実行状態を計測する、
プロファイリング方法。
（付記６）
前記第１の処理部は、前記サンプリング周期情報として、前記サンプリング周期と前記第２の処理部のクロック周波数に基づいて算出される分周情報を前記第２処理部に通知する付記５記載のプロファイリング方法。
（付記７）
前記分周情報は、前記サンプリング周期に前記クロック周波数を乗算することにより算出される付記６記載のプロファイリング方法。
（付記８）
前記第２の処理部は、分周情報に基づいて、周期が前記サンプリング周期であるサンプリングパルスを生成し、前記サンプリングパルスに応じて前記関数の実行状態を計測する付記７記載のプロファイリング方法。
（付記９）
コンピュータが有する第１の処理部に、
アプリケーションプログラムを実行し、
プロファイルの開始指示と前記プロファイルのサンプリング周期に基づくサンプリング周期情報を前記第２処理部に通知する、
処理を実行させ、
前記コンピュータが有する第２の処理部に、
前記アプリケーションプログラムに含まれる関数を実行し、
前記開始指示を受信すると、前記サンプリング周期ごとに前記関数の実行状態を計測する、
処理を実行させるプログラム。
（付記１０）
前記第１の処理部は、前記サンプリング周期情報として、前記サンプリング周期と前記第２の処理部のクロック周波数に基づいて算出される分周情報を前記第２処理部に通知する付記９記載のプログラム。
（付記１１）
前記分周情報は、前記サンプリング周期に前記クロック周波数を乗算することにより算出される付記１０記載のプログラム。
（付記１２）
前記第２の処理部は、分周情報に基づいて、周期が前記サンプリング周期であるサンプリングパルスを生成し、前記サンプリングパルスに応じて前記関数の実行状態を計測する付記１１記載のプログラム。
【符号の説明】
【０１２０】
１０１    プロファイリング装置
１１１    ホストプロセッサ
１１２    アプリケーション実行部
１１３    ホストプロファイラ
１１４    ゲストプロファイル管理部
１１５    通知部
１１６    プロファイルデータ受信部
１２１    メモリ
１２２    プロファイルＤＢ
１２３    関数階層管理テーブル
１３１    ゲストプロセッサ
１３２    サンプリング生成部
１３３    プロファイルデータ管理部
１３４    回路ブロック
１３５    プロファイルデータ集計部
１３６    プロファイルデータ送信部
１４１    メモリ
１４２    プロファイル集計テーブル
１４３    プロファイル管理テーブル
【図１】
2020013273.tif 000003
【図２】
2020013273.tif 000004
【図３】
2020013273.tif 000005
【図４】
2020013273.tif 000006
【図５】
2020013273.tif 000007
【図６】
2020013273.tif 000008
【図７】
2020013273.tif 000009
【図８】
2020013273.tif 000010
【図９】
2020013273.tif 000011
【図１０】
2020013273.tif 000012
【図１１】
2020013273.tif 000013