(57)【要約】      （修正有）【課題】既存のプログラムを異なるプロセッサで動作させた場合の性能を見積もる方法を提供する。【解決手段】性能見積装置１００は、性能情報取得部１２０と、性能見積部１２５と、記憶部１３０とを有する。性能情報取得部の実行部１２２は、ＣＰＵでプログラム１３１を実行して性能情報を取得し、情報取得部１２３は、取得した性能情報のうちプログラムの全体の実行時間と、各命令の実行回数を取得して、性能情報１３５として記憶部に記憶する。性能見積部のアクセラレータ性能計算部１２６は、タイミング情報１３３と性能情報１３５とを参照して、アクセラレータが命令を実行するのに要する時間と命令の実行回数との積の和を求め、求めた値に基づいて、プログラムを実行した場合の実行時間を見積って性能見積結果１３７を記憶部に記憶し、計算結果出力部１２７は、性能見積結果を表示装置に出力して表示する。【選択図】図３
2016212667.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを第１のプロセッサで実行することにより、各命令の実行回数を取得し、
前記プログラムの一部又は全体において、前記第１のプロセッサとは異なる特性を有する第２のプロセッサが前記命令を実行するのに要する時間と該命令の前記実行回数との積の和を求め、求めた値に基づいて、前記プログラムの一部又は全体を該第２のプロセッサが実行した場合の実行時間を見積って出力する、
処理をコンピュータが行うことを特徴とする性能見積方法。
【請求項２】
前記コンピュータが、
プログラムを第１のプロセッサで実行することにより、更に、キャッシュヒット率を取得し、
前記プログラムの一部又は全体に対して、前記キャッシュヒット率に基づいてメモリアクセスのオーバーヘッドを算出し、前記求めた値に加算することで、前記実行時間を見積もることを特徴とする請求項１記載の性能見積方法。
【請求項３】
前記コンピュータが、
前記第１のプロセッサによる前記プログラムの実行において、最も実行時間が長かったサブルーチンを、前記第２のプロセッサで実行させる前記プログラムの一部として選択する、
ことを特徴とする請求項２記載の性能見積方法。
【請求項４】
前記コンピュータが、
プログラムを第１のプロセッサで実行することにより、更に、ループ回数を取得し、
前記プログラムの一部において、ループ単位で前記第２のプロセッサによる並列実行数を計算する
ことを特徴とする請求項３記載の性能見積方法。
【請求項５】
コンピュータに、
プログラムを第１のプロセッサで実行することにより、各命令の実行回数を取得し、
前記プログラムの一部又は全体において、前記第１のプロセッサとは特性を有する第２のプロセッサが前記命令を実行するのに要する時間と該命令の前記実行回数との積の和を求め、求めた値に基づいて、前記プログラムの一部又は全体を該第２のプロセッサが実行した場合の実行時間を見積って出力する、
処理を行わせることを特徴とする性能見積プログラム。
【請求項６】
プログラムを第１のプロセッサで実行することにより、各命令の実行回数を取得する性能情報取得部と、
前記プログラムの一部又は全体に対して、前記第１のプロセッサとは特性を有する第２のプロセッサが前記命令を実行するのに要する時間と該命令の前記実行回数との積の和を求め、該第２のプロセッサが前記プログラムの一部又は全体を実行した場合の実行時間を見積もって出力する性能見積部と、
を有する性能見積装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの性能見積技術に関する。
【背景技術】
【０００２】
近年、シーケンシャルに演算処理を行うＣＰＵ（Central Processing Unit）で動作するように開発された既存プログラムを、プロセッサの特性が異なるＧＰＵ（Graphics Processing Unit）等のアクセラレータで動作させることで、プログラム動作時の性能を向上させることが行われている。
【０００３】
コンパイラが自動的に並列性を持つタスクを抽出し、各プロセッサユニットの特性に合わせて、抽出したタスクを配置する技術が知られている。また、Ｌ２キャッシュネスト内に性能モニタを配置して、Ｌ２キャッシュアクセスを監視することで性能情報を取得する技術等が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−３２８４１６号公報
【特許文献２】特表２０１０−５３１４９８号公報
【特許文献３】特開平７−３３４３９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、既存プログラムをアクセラレータで動作させることはできないため、アクセラレータでの性能を評価するためには、既存プログラムをアクセラレータ用に書き換えなければならない。
【０００６】
既存プログラムの書き換えは、専門知識を有する開発であり、設計工数を必要とする。上述した技術のように、特性に応じて、アクセラレータに配置させるタスクを決めたとしても、実際に性能が良くなるか否かの検証は、既存プログラムを書き換えた後にしか行うことができないといった問題がある。
【０００７】
したがって、１つの側面では、本発明は、既存のプログラムで異なるプロセッサで動作させた場合の性能を見積もることを目的とする。
【課題を解決するための手段】
【０００８】
一態様によれば、プログラムを第１のプロセッサで実行することにより、各命令の実行回数を取得し、前記プログラムの一部又は全体において、前記第１のプロセッサとは異なる特性を有する第２のプロセッサが前記命令を実行するのに要する時間と該命令の前記実行回数との積の和を求め、求めた値に基づいて、前記プログラムの一部又は全体を該第２のプロセッサが実行した場合の実行時間を見積って出力する、処理をコンピュータが行うことを特徴とする性能見積方法が提供される。
【０００９】
また、上記課題を解決するための手段として、上記方法を行う装置、コンピュータに上記処理を実行させるためのプログラム、及び、そのプログラムを記憶した記憶媒体とすることもできる。
【発明の効果】
【００１０】
既存のプログラムで異なるプロセッサで動作させた場合の性能を見積もることができる。
【図面の簡単な説明】
【００１１】
【図１】アクセラレータを含むシステム例を示す図である。
【図２】性能見積装置のハードウェア構成を示す図である。
【図３】実施例１における性能見積装置の機能構成例を示す図である。
【図４】実施例１における性能情報取得部による性能情報取得処理を説明するためのフローチャート図である。
【図５】実施例１における性能見積部による性能見積処理を説明するためのフローチャート図である。
【図６】実施例１における実行サイクル数対応表を示す図である。
【図７】実施例２における性能見積装置の機能構成例を示す図である。
【図８】実施例２における性能情報取得部による性能情報取得処理を説明するためのフローチャート図である。
【図９】実施例２における性能見積部による性能見積処理を説明するためのフローチャート図である。
【図１０】実施例３における性能見積装置の機能構成例を示す図である。
【図１１】実施例３における性能見積部による性能見積処理を説明するためのフローチャート図である。
【図１２】実施例４における性能見積装置の機能構成例を示す図である。
【図１３】実施例４における性能情報取得部による性能情報取得処理を説明するためのフローチャート図である。
【図１４】実施例４における性能見積部による性能見積処理を説明するためのフローチャート図である。
【図１５】実施例５における性能見積装置の機能構成例を示す図である。
【図１６】実施例５における性能情報取得部による性能情報取得処理を説明するためのフローチャート図である。
【図１７】実施例５における性能見積部による性能見積処理を説明するためのフローチャート図である。
【図１８】ループ記述例を示す図である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施の形態を図面に基づいて説明する。先ず、アクセラレータ９を含むシステム例について説明する。図１は、アクセラレータを含むシステム例を示す図である。図１（Ａ）では、サーバーが、ＣＰＵ１とアクセラレータ９としてＧＰＵ２とを有し、ＣＰＵ１とＧＰＵ２のそれぞれが、固有のメモリ１ｍと２ｍとを有するシステム例を示している。ＣＰＵ１とＧＰＵ２とは、バス３ｂを介して通信可能である。
【００１３】
図１（Ｂ）では、異種混合プロセッサによるシステム例を示している。このシステムは、種々のマルチメディアを搭載した携帯電話等で広く適用されており、ＣＰＵ１と、ＧＰＵ２、ＦＰＧＡ３、及びＤＳＰ４の複数のアクセラレータ９と、メモリ５とを有する。メモリ５は、ＣＰＵ１と複数のアクセラレータ９とで共有されるため、データ転送が不要となる。
【００１４】
ＣＰＵ１で実行させる既存プログラムを、ＧＰＵ２で実行させて高速化させるためには、通常、
（１）ＣＰＵ１で実行させる既存プログラムをアクセラレータ９で実行可能なようにコードを書き換える。単に、アクセラレータ９上で動くようにするだけでは高速化できない場合がある。そのため、既存プログラムは、アクセラレータ９に最適化される。
（２）上記（１）のプログラムを、アクセラレータ９で実行することで、性能を測定する。
（３）ＣＰＵ１のみで既存プログラムを実行した場合の性能結果と、上記（２）で得られた性能結果とを比較する
ことで、実現される高速化の程度を判定する。
【００１５】
上記（１）の既存プログラムのコードの書き換えは、各アクセラレータ９の特性に応じて行われるため、専門的な知識を要する。コードの書き換え後の性能評価によって、高速化がそれ程望めないと判断した場合には、設計者の既存プログラムのコードを書き換えた工数が無駄になってしまう。
【００１６】
従って、本実施の形態では、既存プログラムのコードをアクセラレータ９用に書き換える前に、高速化の程度、高速化可能であるのか否か等を予め把握可能とする、性能見積方法、性能見積プログラム、及び性能見積装置を提供する。
【００１７】
以下に、各アクセラレータ９に応じて既存プログラムのコードを書き換える前に、既存プログラムをＣＰＵ１で実行して性能情報を取得し、取得した性能情報に基づいて、アクセラレータ９を利用した場合の実行時間を見積もる本実施の形態について説明する。
【００１８】
本実施の形態に係る性能見積装置１００は、図２に示すようなハードウェア構成を有する。図２は、性能見積装置のハードウェア構成を示す図である。図２において、性能見積装置１００は、コンピュータによって制御される情報処理装置であって、ＣＰＵ（Central Processing Unit）１１と、主記憶装置１２と、補助記憶装置１３と、入力装置１４と、表示装置１５と、通信Ｉ／Ｆ（インターフェース）１７と、ドライブ装置１８とを有し、バスＢに接続される。
【００１９】
ＣＰＵ１１は、主記憶装置１２に格納されたプログラムに従って性能見積装置１００を制御する。主記憶装置１２には、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）等が用いられ、ＣＰＵ１１にて実行されるプログラム、ＣＰＵ１１での処理に必要なデータ、ＣＰＵ１１での処理にて得られたデータ等を記憶又は一時保存する。
【００２０】
補助記憶装置１３には、ＨＤＤ（Hard Disk Drive）等が用いられ、各種処理を実行するためのプログラム等のデータを格納する。補助記憶装置１３に格納されているプログラムの一部が主記憶装置１２にロードされ、ＣＰＵ１１に実行されることによって、各種処理が実現される。主記憶装置１２及び補助記憶装置１３は、記憶部１３０に相当する。
【００２１】
入力装置１４は、マウス、キーボード等を有し、ユーザが性能見積装置１００による処理に必要な各種情報を入力するために用いられる。表示装置１５は、ＣＰＵ１１の制御のもとに必要な各種情報を表示する。入力装置１４と表示装置１５とは、一体化したタッチパネル等によるユーザインタフェースであってもよい。通信Ｉ／Ｆ１７は、有線又は無線などのネットワークを通じて通信を行う。通信Ｉ／Ｆ１７による通信は無線又は有線に限定されるものではない。
【００２２】
性能見積装置１００によって行われる処理を実現するプログラムは、例えば、ＣＤ−ＲＯＭ（Compact Disc Read-Only Memory）等の記憶媒体１９によって性能見積装置１００に提供される。
【００２３】
ドライブ装置１８は、ドライブ装置１８にセットされた記憶媒体１９（例えば、ＣＤ−ＲＯＭ等）と性能見積装置１００とのインターフェースを行う。
【００２４】
また、記憶媒体１９に、後述される本実施の形態に係る種々の処理を実現するプログラムを格納し、この記憶媒体１９に格納されたプログラムは、ドライブ装置１８を介して性能見積装置１００にインストールされる。インストールされたプログラムは、性能見積装置１００により実行可能となる。
【００２５】
尚、プログラムを格納する記憶媒体１９はＣＤ−ＲＯＭに限定されず、コンピュータが読み取り可能な、構造（structure）を有する１つ以上の非一時的（non-transitory）な、有形（tangible）な媒体であればよい。コンピュータ読取可能な記憶媒体として、ＣＤ−ＲＯＭの他に、ＤＶＤディスク、ＵＳＢメモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリであっても良い。
【００２６】
以下に、実施例１〜実施例５について説明する。
・実施例１は、既存のプログラム全体をアクセラレータ９で実行させる場合の性能を見積もる場合に相当する。
・実施例２は、既存のプログラムのサブルーチンをアクセラレータ９で実行させる場合の性能を見積もる場合に相当する。
・実施例３は、複数のアクセラレータ９から実行時間を最短にするアクセラレータ９を１つ選択し、選択したアクセラレータ９で実行させる場合の性能を見積もる場合に相当する。
・実施例４は、実施例１をベースとし、メモリアクセスによるオーバーヘッドを考慮して、既存のプログラム全体をアクセラレータ９で実行させる場合の性能を見積もる場合に相当する。
・実施例５は、実施例３及び実施例４を組み合せ、更に、既存のプログラムをループ単位で高精度に実行時間を見積もり、複数のアクセラレータ９から最短の実行時間となる１つを選択し、選択したアクセラレータ９で実行させる場合の性能を見積もる場合に相当する。
【００２７】
実施例１〜実施例５において、既存のプログラムはプログラム１３１に相当する。実施例１は、即ち、既存のプログラム全体をアクセラレータ９用に書き換える場合に相当し、以下、「全体置き換え」と言う場合がある。
【００２８】
図３は、実施例１における性能見積装置の機能構成例を示す図である。図３において、性能見積装置１００は、主に、性能情報取得部１２０と、性能見積部１３５とを有する。記憶部１３０は、ＣＰＵ１で動作するプログラム１３１、実行サイクル数対応表１３３ｔを含むタイミング情報１３３、性能情報１３５、性能見積結果１３７等を記憶する。
【００２９】
性能情報取得部１２０は、ＣＰＵ１１でプログラム１３１を実行して性能情報１３５を取得する処理部であり、更に、実行部１２２と、情報取得部１２３とを有する。実行部１２２は、プログラム１３１を実行し、即ち、ＣＰＵ１１でプログラム１３１を実行して性能情報を取得する。情報取得部１２３は、実行部１２２が取得した性能情報のうち、プログラム１３１の全体の実行時間と、各命令の実行回数（以下、各命令実行回数という）とを取得して、性能情報１３５として記憶部１３０に記憶する。
【００３０】
性能見積部１２５は、タイミング情報１３３と、性能情報１３５とを参照して、アクセラレータ９での性能を計算する処理部であり、更に、アクセラレータ性能計算部１２６と、計算結果出力部１２７とを有する。
【００３１】
アクセラレータ性能計算部１２６は、命令毎にアクセラレータ９の実行クロックサイクル数を計算し、求めた実行クロックサイクル数に基づいて、アクセラレータ９の実行時間を計算する。
【００３２】
命令毎のアクセラレータ９の実行クロックサイクル数は、タイミング情報１３３を用いて、
各命令アクセラレータ実行クロックサイクル数
＝  命令実行回数  ×  並列数  ×  アクセラレータ実行サイクル数  （１ａ）
で表される。
【００３３】
また、アクセラレータ９の実行時間は、
アクセラレータ実行時間  ＝  全命令アクセラレータ実行クロックサイクル数
÷  アクセラレータクロック周波数
÷  アクセラレータ並列実行数                （１ｂ）
で表される。アクセラレータ性能計算部１２６は、アクセラレータ９の実行時間を示す性能見積結果１３７を記憶部１３０に記憶する。
【００３４】
計算結果出力部１２７は、性能見積部１２５によって算出された性能見積結果１３７を表示装置１５に出力して表示する。性能見積結果１３７は、プログラム１３１の全体をアクセラレータ９で動作させた場合の実行時間を示し、実行部１２２によるＣＰＵ１１でプログラム１３１を実行させた際の実行時間を更に示してもよい。計算結果出力部１２７は、実行部１２２が、ＣＰＵ１１でプログラム１３１を実行させた際の実行時間をアクセラレータ９の実行時間と対比させて表示装置１５に表示させてもよい。
【００３５】
プログラム１３１は、図１に示すようなＣＰＵ１と１以上のアクセラレータ９を有するシステムで動作するプログラムであり、予め、性能見積装置１００に入力され記憶部１３０に記憶される。
【００３６】
タイミング情報１３３は、アクセラレータ９の基本情報を示し、クロック周波数、実行サイクル数対応表１３３ｔ、並列実行数等の情報を有し、予め、性能見積装置１００に入力され記憶部１３０に記憶される。タイミング情報１３３は、性能見積部１２５のアクセラレータ性能計算部１２６によって参照される。
【００３７】
性能情報１３５は、実行部１２２がプログラム１３１を実行中に得られた性能情報のうち、ＣＰＵ１１によるプログラム１３１全体の実行時間、各命令実行回数等を示す。
【００３８】
性能見積結果１３７は、アクセラレータ性能計算部１２６によって計算されたアクセラレータ９でプログラム１３１全体を実行した場合の実行時間を示す。性能見積結果１３７に、プログラム１３１全体の実行をＣＰＵ１１からアクセラレータ９に置き換えた場合の性能改善を検証するために、ＣＰＵ１１がプログラム１３１全体を実行した場合の実行時間を含めてもよい。
【００３９】
図４は、実施例１における性能情報取得部による性能情報取得処理を説明するためのフローチャート図である。図４において、性能情報取得部１２０では、実行部１２２が、プログラム１３１を実行して、実行中のＣＰＵ１１による性能情報を出力する（ステップＳ１５１）。
【００４０】
情報取得部１２３は、実行部１２２がプログラム１３１の実行中に得られた性能情報のうち、プログラム１３１の全体の実行時間と各命令実行回数とを性能情報１３５として取得する（ステップＳ１５２）。
【００４１】
図５は、実施例１における性能見積部による性能見積処理を説明するためのフローチャート図である。図５において、性能見積部１２５が、タイミング情報１３３、性能情報１３５等を読み込むと（ステップＳ１７１）、アクセラレータ性能計算部１２６によるアクセラレータ性能計算処理が開始される。
【００４２】
アクセラレータ性能計算部１２６は、式（１ａ）を用いて、各命令のアクセラレータ９の実行クロックサイクル数を計算する（ステップＳ１７２）。また、アクセラレータ性能計算部１２６は、式（１ｂ）を用いて、全命令に対するアクセラレータの実行時間を算出する（ステップＳ１７３）。
【００４３】
計算結果出力部１２７は、プログラム１３１の実行全体をアクセラレータ９で置き換えた場合のアクセラレータ９の実行時間を示す性能見積結果１３７を出力する（ステップＳ１７４）。その後、性能情報取得部１２０は、この性能情報取得処理を終了する。
【００４４】
図６は、実施例１における実行サイクル数対応表を示す図である。図６において、実行サイクル数対応表１３３ｔは、ＣＰＵ命令毎に、ＣＰＵ実行サイクル数とアクセラレータ実行サイクル数とを対応付けたテーブルであり、ＣＰＵ命令、ＣＰＵ実行サイクル数、並列数、アクセラレータ実行サイクル数等を有する。
【００４５】
ＣＰＵ命令は、ＣＰＵ１１に行わせる命令を示し、例えば、浮動小数点演算に関するＦＡＤＤ、ＦＳＵＢ、ＦＭＵＬ、及びＦＤＩＶと、ベクトル演算に関するＡＤＤＰＳ、ＭＵＬＰＳ、及びＤＩＶＰＳと、整数演算に関するＡＤＤ、シフト命令のＳＨＬ等が示される。
【００４６】
ＣＰＵ実行サイクル数は、ＣＰＵ命令を実行するのに要するサイクル数を示す。並列数は、ＣＰＵ命令によって１度に行われる命令数を示す。アクセラレータ実行サイクル数は、アクセラレータ９がＣＰＵ命令を実行するのに要するサイクル数を示す。並列数は、各浮動小数点演算処理は１命令で行われため並列数「１」を示し、ベクトル演算処理は１命令で４データを並列処理するため並列数「４」が示されている。
【００４７】
上記式（１ａ）において、プログラム１３１内の命令毎に、タイミング情報１３３の実行サイクル数対応表１３３ｔのアクセラレータ実行サイクル数と、並列実行数とが参照される。ＣＰＵ命令「ＦＭＵＬ」を実行した場合を例として、式（１ａ）の計算例を説明する。
【００４８】
実行サイクル数対応表１３３ｔは、ＣＰＵ命令「ＦＭＵＬ」に対して、ＣＰＵ実行サイクル数「２」、並列数「１」、アクセラレータ実行サイクル数「６」が示されている。ＣＰＵ実行サイクル数「２」に対してアクセラレータ実行サイクル数「６」が示される。
【００４９】
プログラム１３１の実行により得られた命令実行回数に、ＣＰＵ命令「ＦＭＵＬ」の並列数「１」を乗算し、更に、アクセラレータ実行サイクル数「６」を乗算することで、各命令アクセラレータ実行クロックサイクル数を得られる。
【００５０】
式（１ａ）によって、ＣＰＵ命令毎にプログラム１３１で実行された命令の実行回数（性能情報１３５から得られる命令実行回数）と、実行サイクル数対応表１３３ｔとを参照することで、各ＣＰＵ命令をアクセラレータ９で置き換えた場合の各命令アクセラレータ実行クロックサイクル数が得られる。
【００５１】
各命令アクセラレータ実行クロックサイクル数を合算して、全命令アクセラレータ実行クロックサイクル数を算出して、上記式（１ｂ）において、合算して得た全命令アクセラレータ実行クロックサイクル数を、タイミング情報１３３で示されるアクセラレータ９のクロック周波数と並列実行数とで除算することで、アクセラレータ９で置き換えた場合のプログラム１３１全体の実行時間が得られる。
【００５２】
ＣＰＵ命令「ＦＭＵＬ」の例では、アクセラレータ９ではＣＰＵ１１より３倍掛るように見えるが、タイミング情報１３３で与えられるアクセラレータ９の並列実行数が「３２」の場合、アクセラレータ９での実行時間は「６／３２（＝３／１６）」サイクルとなる。ＣＰＵ命令「ＦＭＵＬ」の１回の実行に関して言えば、ＣＰＵ実行サイクル数「２」に対して、理論上は凡そ１０倍の高速化となる。
【００５３】
性能見積装置１００は、図２に示すコンピュータとして説明したが、上述した処理を、図１で示すようなシステム構成を有する実機で行ってもよい。具体的には、携帯電話に、図３に示すような機能構成を実装させて、プログラム１３１の性能を測定してもよい。
【００５４】
次に、実施例２は、プログラム１３１の少なくとも１つのサブルーチンをアクセラレータ９用に書き換える場合に相当し、以下、「サブルーチン置き換え」と言う場合がある。
【００５５】
図７は、実施例２における性能見積装置の機能構成例を示す図である。図７中、実施例１と同様の処理部には同様の符号を付してある。図７において、性能見積装置１００−２は、主に、性能情報取得部１２０と、性能見積部１３５とを有する。記憶部１３０は、ＣＰＵ１で動作するプログラム１３１、実行サイクル数対応表１３３ｔを含むタイミング情報１３３、性能情報１３５−２、性能見積結果１３７等を記憶する。
【００５６】
性能情報取得部１２０は、ＣＰＵ１１でプログラム１３１を実行して性能情報１３５−２を取得する処理部であり、更に、実行部１２２と、情報取得部１２３−２とを有する。実行部１２２は、プログラム１３１を実行し、即ち、ＣＰＵ１１でプログラム１３１を実行して性能情報を取得する。情報取得部１２３−２は、実行部１２２が取得した性能情報のうち、プログラム１３１の全体の実行時間と、サブルーチン毎の各命令実行回数とを取得して、性能情報１３５として記憶部１３０に記憶する。
【００５７】
性能見積部１２５は、タイミング情報１３３と、性能情報１３５−２とを参照して、サブルーチンの処理をアクセラレータ９で置き換えた場合の性能を計算する処理部であり、更に、アクセラレータ性能計算部１２６−２と、計算結果出力部１２７−２とを有する。
【００５８】
アクセラレータ性能計算部１２６−２は、サブルーチンのうち、最も実行時間の長いサブルーチンを、プロセッサをアクセラレータ９へ置き換える対象サブルーチンとして選択し、対象サブルーチンについて、命令毎にアクセラレータ９の実行クロックサイクル数を計算し、求めた実行クロックサイクル数に基づいて、アクセラレータ９の実行時間を計算する。
【００５９】
対象サブルーチンにおける命令毎のアクセラレータ９の実行クロックサイクル数は、タイミング情報１３３を用いて、
各命令アクセラレータ実行クロックサイクル数
＝  命令実行回数  ×  並列数  ×  アクセラレータ実行サイクル数  （２ａ）
で表される。
【００６０】
また、対象サブルーチンにおけるアクセラレータ９の実行時間は、
対象サブルーチンのアクセラレータ実行時間
＝  全命令アクセラレータ実行クロックサイクル数
÷  アクセラレータクロック周波数
÷  アクセラレータ並列実行数                        （２ｂ）
で表される。アクセラレータ性能計算部１２６−２は、対象サブルーチンに係るアクセラレータ９の実行時間を示す性能見積結果１３７−２を記憶部１３０に記憶する。
【００６１】
アクセラレータ性能計算部１２６−２は、対象サブルーチン以外の各サブルーチンについても、アクセラレータ９の実行時間を求めておいてもよい。
【００６２】
アクセラレータ性能計算部１２６−２は、対象サブルーチンをアクセラレータ９に置き換えた場合のＣＰＵ１１の実行時間（以下、サブルーチン置き換えによるＣＰＵ実行時間という）を求める。先ず、性能情報１３５−２から対象サブルーチンの各命令実行回数を取得し、タイミング情報１３３の実行サイクル数対応表１３３ｔを参照して、上述した式（２ａ）及び（２ｂ）をＣＰＵ１１に関して算出することにより、対象サブルーチンのＣＰＵ実行時間を求める。
【００６３】
従って、サブルーチン置き換えによるＣＰＵ実行時間は、
サブルーチン置き換えによるＣＰＵ実行時間
＝  全体の実行時間  −  対象サブルーチンのＣＰＵ実行時間        （２ｃ）
で表される。
【００６４】
そして、アクセラレータ性能計算部１２６−２は、式（２ａ）及び式（２ｂ）で得られた対象サブルーチンのアクセラレータ実行時間と、式（２ｃ）で得たＣＰＵ実行時間とを合算して、サブルーチン置き換えによる全体の実行時間を取得する。即ち、
サブルーチン置き換えによる全体の実行時間
＝  対象サブルーチンのアクセラレータ実行時間
＋  サブルーチン置き換えによるＣＰＵ実行時間                  （２ｄ）
で表される。性能見積結果１３７−２が記憶部１３０に記憶される性能見積結果１３７−２には、サブルーチン置き換えによる全体の実行時間が示される。更に、性能見積結果１３７−２によって、アクセラレータ９とＣＰＵ１１とを対応付けてサブルーチン毎の実行時間が示されてもよい。
【００６５】
計算結果出力部１２７−２は、性能見積結果１３７−２を表示装置１５に出力して表示する。性能見積結果１３７−２は、プログラム１３１のうち、実行時間の長いサブルーチンをアクセラレータ９に置き換えた場合、即ち、プログラム１３１の一部をアクセラレータ９に置き換えた場合の実行時間を示す。計算結果出力部１２７−２は、更に、アクセラレータ９とＣＰＵ１１とを対応付けてサブルーチン毎の夫々の実行時間を表示装置１５に表示させてもよい。
【００６６】
プログラム１３１及びタイミング情報１３３は、実行サイクル数対応表１３３ｔを含めて、実施例１と同様であるため、その説明を省略する。
【００６７】
性能情報１３５−２は、実行部１２２によるプログラム１３１の実行中に得られた性能情報のうち、ＣＰＵ１１によるプログラム１３１全体の実行時間、サブルーチン毎の各命令実行回数等を示す。
【００６８】
性能見積結果１３７−２は、アクセラレータ性能計算部１２６−２によって計算された、対象サブルーチンをアクセラレータ９で置き換えた場合のプログラム１３１全体の実行時間等を示す。性能見積結果１３７−２によって、性能改善を理解し易くするために、ＣＰＵ１１がプログラム１３１全体を実行した場合の実行時間、アクセラレータ９及びＣＰＵ１１のサブルーチン毎の夫々の実行時間等が示されてもよい。
【００６９】
図８は、実施例２における性能情報取得部による性能情報取得処理を説明するためのフローチャート図である。図８において、性能情報取得部１２０では、実行部１２２が、プログラム１３１を実行して、実行中のＣＰＵ１１による性能情報を出力する（ステップＳ２５１）。
【００７０】
情報取得部１２３−２は、実行部１２２がプログラム１３１の実行中に得られた性能情報のうち、プログラム１３１の全体の実行時間とサブルーチン毎の各命令実行回数とを性能情報１３５−２として取得する（ステップＳ２５２）。
【００７１】
図９は、実施例２における性能見積部による性能見積処理を説明するためのフローチャート図である。図９において、性能見積部１２５が、タイミング情報１３３、性能情報１３５等を読み込むと（ステップＳ２７１）、アクセラレータ性能計算部１２６−２によるアクセラレータ性能計算処理が開始される。
【００７２】
アクセラレータ性能計算部１２６−２は、性能情報１３５−２のサブルーチン毎の各命令実行回数に基づいて、最も実行時間の長いサブルーチンを、プロセッサをアクセラレータ９に置き換える対象サブルーチンとして選択する（ステップＳ２７２）。
【００７３】
アクセラレータ性能計算部１２６−２は、対象サブルーチンの各命令のアクセラレータ９の実行クロックサイクル数を計算する（ステップＳ２７３）。そして、アクセラレータ性能計算部１２６は、対象サブルーチンのアクセラレータ９の実行時間を算出する（ステップＳ２７４）。計算した各命令のアクセラレータ９の実行クロックサイクル数を合計して、タイミング情報１３３のアクセラレータ９のクロック周波数と並列実行数とを用いて、対象サブルーチンのアクセラレータ９の実行時間が算出される。
【００７４】
アクセラレータ性能計算部１２６−２は、性能情報１３５−２から得られる全体の実行時間から対象サブルーチンのＣＰＵ実行時間を減算して、サブルーチン置き換えによるＣＰＵ実行時間を求める（ステップＳ２７５）。
【００７５】
アクセラレータ性能計算部１２６−２は、対象サブルーチンのアクセラレータ実行時間と、サブルーチン置き換えによるＣＰＵ実行時間とを合計して、サブルーチン置き換えによる全体の実行時間を求める（ステップＳ２７６）。
【００７６】
更に、アクセラレータ性能計算部１２６−２は、対象サブルーチン以外のサブルーチン毎に、ＣＰＵ実行時間及びアクセラレータ実行時間を計算する（ステップＳ２７７）。この処理は省略してもよい。性能見積結果１３７−２が記憶部１３０に格納される。
【００７７】
計算結果出力部１２７−２は、サブルーチン置き換えによる全体の実行時間を示す性能見積結果１３７−２を出力する（ステップＳ２７８）。計算結果出力部１２７−２は、性能見積結果１３７−２を表示装置１５に表示するようにしてもよい。
【００７８】
上述した、実施例２における性能情報取得処理において、計算結果出力部１２７−２が、アクセラレータ９とＣＰＵ１１とを対応付けてサブルーチン毎の夫々の実行時間を表示装置１５に表示させてもよく、その場合には、ユーザにより対象サブルーチンを選択可能とし、ユーザの選択に応じて、ステップＳ２７５、Ｓ２７６、（必要に応じてＳ２７７）、及びＳ２７８を繰り返すようにしてもよい。
【００７９】
次に、実施例３は、プログラム１３１の少なくとも１つのサブルーチンを、複数のアクセラレータ９のうち実行時間が最短となるアクセラレータ９を選択して、選択したアクセラレータ９用に書き換える場合に相当し、以下、「選択置き換え」と言う場合がある。
【００８０】
図１０は、実施例３における性能見積装置の機能構成例を示す図である。図１０において、性能見積装置１００−３は、主に、性能情報取得部１２０と、性能見積部１３５とを有する。記憶部１３０は、ＣＰＵ１で動作するプログラム１３１、各アクセラレータの、実行サイクル数対応表１３３ｔを含むタイミング情報１３３、性能情報１３５、性能見積結果１３７等を記憶する。
【００８１】
性能情報取得部１２０は、ＣＰＵ１１でプログラム１３１を実行して性能情報１３５−２を取得する処理部であり、更に、実行部１２２と、情報取得部１２３−２とを有し、実施例２と同様であるため、その説明を省略する。
【００８２】
性能見積部１２５は、タイミング情報１３３と、性能情報１３５−２とを参照して、サブルーチンの処理を複数のアクセラレータ９から選択して置き換えた場合の性能を計算する処理部であり、更に、アクセラレータ性能計算部１２６−３と、計算結果出力部１２７−３とを有する。
【００８３】
アクセラレータ性能計算部１２６−３は、サブルーチンのうち、性能情報１３５−２のサブルーチン毎の各命令実行回数に基づいて、最も実行時間の長いサブルーチンを、プロセッサをアクセラレータ９へ置き換える対象サブルーチンとして選択し、対象サブルーチンについて、命令毎に各アクセラレータ９の実行クロックサイクル数を計算し、求めた実行クロックサイクル数に基づいて、各アクセラレータ９の実行時間を計算する。実施例２の式（２ａ）及び（２ｂ）を、各アクセラレータ９について計算すればよい。
【００８４】
アクセラレータ性能計算部１２６−３は、対象サブルーチン以外の各サブルーチンについても、アクセラレータ９毎に実行時間を求めておいてもよい。
【００８５】
アクセラレータ性能計算部１２６−３は、複数のアクセラレータ９から、対象サブルーチンに対する実行時間が最短となるアクセラレータ９を選択する。そして、アクセラレータ性能計算部１２６−３は、選択したアクセラレータ９に対して、選択したアクセラレータ９のタイミング情報１３３の実行サイクル数対応表１３３ｔを参照して、選択置き換えによるＣＰＵ実行時間を求める。
【００８６】
選択置き換えによるＣＰＵ実行時間
＝  全体の実行時間  −  対象サブルーチンのＣＰＵ実行時間        （３ｃ）
で表される。この式（３ｃ）は、実施例２の式（２ｃ）に相当する。対象サブルーチンを選択したアクセラレータ９で置き換えた場合の、対象サブルーチン以外のＣＰＵ実行時間を示す選択置き換えによるＣＰＵ実行時間が求められる。
【００８７】
そして、アクセラレータ性能計算部１２６−３は、選択したアクセラレータ９に対して、対象サブルーチンのアクセラレータ実行時間と、選択置き換えによるＣＰＵ実行時間とを合算して、選択置き換えによる全体の実行時間を取得する。
【００８８】
選択置き換えによる全体の実行時間
＝  対象サブルーチンのアクセラレータ実行時間
＋  選択置き換えによるＣＰＵ実行時間                            （３ｄ）
で表される。この式（３ｄ）は、実施例２の式（２ｄ）に相当する。性能見積結果１３７−３が記憶部１３０に記憶される性能見積結果１３７−３には、選択置き換えによる全体の実行時間が示される。更に、性能見積結果１３７−３によって、複数のアクセラレータ９とＣＰＵ１１各々のサブルーチン毎の実行時間が対応付けられて示されてもよい。
【００８９】
計算結果出力部１２７−３は、性能見積結果１３７−３を表示装置１５に出力して表示する。性能見積結果１３７−３は、プログラム１３１のうち、実行時間の長いサブルーチンを選択したアクセラレータ９に置き換えた場合、即ち、プログラム１３１の一部を選択したアクセラレータ９に置き換えた場合の実行時間を示す。計算結果出力部１２７−３は、更に、複数のアクセラレータ９とＣＰＵ１１各々のサブルーチン毎の実行時間を対応付けて表示装置１５に表示させてもよい。
【００９０】
プログラム１３１及び各アクセラレータ９のタイミング情報１３３は、実行サイクル数対応表１３３ｔを含めて、実施例１と同様であるため、その説明を省略する。
【００９１】
性能情報１３５−２は、実施例２と同様に、実行部１２２によるプログラム１３１の実行中に得られた性能情報のうち、ＣＰＵ１１によるプログラム１３１全体の実行時間、サブルーチン毎の各命令実行回数等を示す。
【００９２】
性能見積結果１３７−３は、アクセラレータ性能計算部１２６−３によって計算された、対象サブルーチンを選択したアクセラレータ９で置き換えた場合のプログラム１３１全体の実行時間等を示す。性能見積結果１３７−３によって、性能改善を理解し易くするために、ＣＰＵ１１がプログラム１３１全体を実行した場合の実行時間、複数のアクセラレータ９及びＣＰＵ１１のサブルーチン毎の夫々の実行時間等が示されてもよい。
【００９３】
性能情報取得部１２０による性能情報取得処理は、実施例２と同様であるため、フローチャートを用いた説明を省略する。
【００９４】
図１１は、実施例３における性能見積部による性能見積処理を説明するためのフローチャート図である。図１１において、性能見積部１２５が、タイミング情報１３３、性能情報１３５等を読み込むと（ステップＳ３７１）、アクセラレータ性能計算部１２６−３によるアクセラレータ性能計算処理が開始される。
【００９５】
アクセラレータ性能計算部１２６−３は、性能情報１３５−２のサブルーチン毎の各命令実行回数に基づいて、最も実行時間の長いサブルーチンを、プロセッサをアクセラレータ９に置き換える対象サブルーチンとして選択する（ステップＳ３７２）。
【００９６】
アクセラレータ性能計算部１２６−３は、複数のアクセラレータ９の各々に対して、対象サブルーチンの各命令のアクセラレータ９の実行クロックサイクル数を計算する（ステップＳ３７３）。そして、アクセラレータ性能計算部１２６は、複数のアクセラレータ９の各々に対して、対象サブルーチンのアクセラレータ９の実行時間を算出する（ステップＳ３７４）。計算した各命令のアクセラレータ９の実行クロックサイクル数を合計して、タイミング情報１３３のアクセラレータ９のクロック周波数と並列実行数とを用いて、対象サブルーチンのアクセラレータ９の実行時間が算出される。
【００９７】
アクセラレータ性能計算部１２６−３は、複数のアクセラレータ９から、アクセラレータ実行時間が最短となるアクセラレータ９を選択し（ステップＳ３７５）、性能情報１３５−２から得られる全体の実行時間から対象サブルーチンのＣＰＵ実行時間を減算して、選択置き換えによるＣＰＵ実行時間を求める（ステップＳ３７６）。
【００９８】
アクセラレータ性能計算部１２６−３は、対象サブルーチンのアクセラレータ実行時間と、選択置き換えによるＣＰＵ実行時間とを合計して、選択置き換えによる全体の実行時間を求める（ステップＳ３７７）。
【００９９】
更に、アクセラレータ性能計算部１２６−３は、対象サブルーチン以外のサブルーチン毎に、ＣＰＵ実行時間及び複数のアクセラレータ９夫々のアクセラレータ実行時間を計算する（ステップＳ３７８）。この処理は省略してもよい。性能見積結果１３７−３が記憶部１３０に格納される。
【０１００】
計算結果出力部１２７−３は、選択置き換えによる全体の実行時間を示す性能見積結果１３７−３を出力する（ステップＳ３７９）。計算結果出力部１２７−２は、性能見積結果１３７−３を表示装置１５に表示するようにしてもよい。
【０１０１】
上述した、実施例３における性能情報取得処理において、計算結果出力部１２７−３が、複数のアクセラレータ９とＣＰＵ１１とを対応付けてサブルーチン毎の夫々の実行時間を表示装置１５に表示させてもよく、その場合には、ユーザにより対象サブルーチンとアクセラレータ９とを選択可能とし、ユーザの選択に応じて、ステップＳ３７６、Ｓ３７７、（必要に応じてＳ３７８）、及びＳ３７９を繰り返すようにしてもよい。
【０１０２】
次に、実施例４は、実施例１をベースとし、メモリアクセスによるオーバーヘッドを考慮して性能を見積もる場合に相当し、以下、「オーバーヘッド考慮」という場合がある。
【０１０３】
図１２は、実施例４における性能見積装置の機能構成例を示す図である。図１２において、性能見積装置１００は、主に、性能情報取得部１２０と、性能見積部１３５とを有する。記憶部１３０は、ＣＰＵ１で動作するプログラム１３１、実行サイクル数対応表１３３ｔを含むタイミング情報１３３−４、性能情報１３５−４、性能見積結果１３７−４等を記憶する。
【０１０４】
性能情報取得部１２０は、ＣＰＵ１１でプログラム１３１を実行して性能情報１３５を取得する処理部であり、更に、実行部１２２と、情報取得部１２３−４とを有する。実行部１２２は、プログラム１３１を実行し、即ち、ＣＰＵ１１でプログラム１３１を実行して性能情報を取得する。情報取得部１２３−４は、実行部１２２が取得した性能情報のうち、プログラム１３１の全体の実行時間と、各命令実行回数と、キャッシュヒット率とを取得して、性能情報１３５−４として記憶部１３０に記憶する。
【０１０５】
性能見積部１２５は、タイミング情報１３３−４と、性能情報１３５−４とを参照して、アクセラレータ９での性能を計算する処理部であり、更に、アクセラレータ性能計算部１２６−４と、計算結果出力部１２７−４とを有する。
【０１０６】
アクセラレータ性能計算部１２６−４は、命令毎にアクセラレータ９の実行クロックサイクル数を計算し、求めた実行クロックサイクル数に基づいて、アクセラレータ９の実行時間を計算する。アクセラレータ９の実行時間は、実施例１の式（１ａ）及び式（１ｂ）から得られる。
【０１０７】
更に、アクセラレータ性能計算部１２６−４は、メモリアクセスによるオーバーヘッドを算出して、算出したオーバーヘッドを含めてアクセラレータ９の実行時間とする。
【０１０８】
メモリアクセスによるオーバーヘッドの計算では、先ず、メモリアクセス命令数から必要なメモリ転送量を、
メモリ転送量  ＝  ワードサイズ  ×  メモリアクセス命令数          （４ａ）
により計算する。
【０１０９】
次に、算出したメモリ転送量と、キャッシュヒット率とからメモリアクセスのオーバーヘッドを、
主記憶転送量    ＝  メモリ転送量  ×  （１−キャッシュヒット率）    （４ｂ）
オーバーヘッド  ＝  アクセラレータの主記憶転送時間  ×  主記憶転送量  （４ｃ）
により計算する。
【０１１０】
以下に、オーバーヘッドの計算例について示す。タイミング情報１３３−４と性能情報１３５−４から、
・アクセラレータの主記憶転送時間：1/208[GB/s] = 4.8 [ps/B]
アクセラレータのメモリ帯域（例えば、208GB/s）の逆数である。
・キャッシュヒット率：90%
・メモリアクセス命令：100
・ワードサイズ：32bits = 4B (B:バイト)
を得たとする。
【０１１１】
この場合、
メモリ転送量は、式（４ａ）により、4[B]×100 = 400[B]となり、
主記憶転送量は、式（４ｂ）により、400[B] × (1-0.90) = 40[B]となり、
オーバーヘッドは、式（４ｃ）により、40[B] × 4.8[ps/B] = 192 [ps]となる。
【０１１２】
実施例４におけるアクセラレータの実行時間（以下、「オーバーヘッド考慮実行時間」という）は、オーバーヘッドを考慮した値とするため、実施例１の式（１ａ）及び式（１ｂ）によって得られたアクセラレータ９の実行時間に、実施例４の式（４ａ）〜式（４ｃ）によって得られたオーバーヘッドを加算した値となる。即ち、
オーバーヘッド考慮実行時間
＝  アクセラレータ実行時間（式（１ｂ））
＋  オーバーヘッド                          （４ｄ）
で表される。
【０１１３】
タイミング情報１３３−４は、アクセラレータ９の基本情報を示し、クロック周波数、実行サイクル数対応表１３３ｔ、並列実行数、更に、主記憶転送時間等の情報を有し、予め、性能見積装置１００に入力され記憶部１３０に記憶される。タイミング情報１３３−４は、性能見積部１２５のアクセラレータ性能計算部１２６−４によって参照される。
【０１１４】
性能情報１３５−４は、実行部１２２がプログラム１３１を実行中に得られた性能情報のうち、ＣＰＵ１１によるプログラム１３１全体の実行時間、各命令実行回数、キャッシュヒット率等を示す。
【０１１５】
性能見積結果１３７−４は、アクセラレータ性能計算部１２６−４によって計算されたアクセラレータ９でプログラム１３１全体を実行した場合にメモリアクセスのオーバーヘッドを考慮した実行時間を示す。性能見積結果１３７−４に、プログラム１３１全体の実行をＣＰＵ１１からアクセラレータ９に置き換えた場合の性能改善を検証するために、ＣＰＵ１１のメモリアクセスのオーバーヘッドを別途求め、ＣＰＵ１１がプログラム１３１全体を実行した場合の実行時間に加算した値を含めてもよい。
【０１１６】
図１３は、実施例４における性能情報取得部による性能情報取得処理を説明するためのフローチャート図である。図１３において、性能情報取得部１２０では、実行部１２２が、プログラム１３１を実行して、実行中のＣＰＵ１１による性能情報を出力する（ステップＳ４５１）。
【０１１７】
情報取得部１２３−４は、実行部１２２がプログラム１３１の実行中に得られた性能情報のうち、プログラム１３１の全体の実行時間と各命令実行回数とキャッシュヒット率とを性能情報１３５−４として取得する（ステップＳ４５２）。
【０１１８】
図１４は、実施例４における性能見積部による性能見積処理を説明するためのフローチャート図である。図１４において、性能見積部１２５が、タイミング情報１３３、性能情報１３５等を読み込むと（ステップＳ４７１）、アクセラレータ性能計算部１２６−４によるアクセラレータ性能計算処理が開始される。
【０１１９】
アクセラレータ性能計算部１２６−４は、実施例１の式（１ａ）を用いて、各命令のアクセラレータ９の実行クロックサイクル数を計算する（ステップＳ４７２）。
【０１２０】
アクセラレータ性能計算部１２６−４は、式（４ａ）を用いて、アクセスメモリ命令数から必要なメモリ転送量を計算し（ステップＳ４７３）、式（４ｂ）及び（４ｃ）を用いて、キャッシュヒット率からメモリアクセスのオーバーヘッドを計算する（ステップＳ４７４）。
【０１２１】
また、アクセラレータ性能計算部１２６−４は、実施例１の式（１ｂ）を用いて、全命令に対するアクセラレータ９の実行時間を算出し（ステップＳ４７５）、式（４ｄ）によりオーバーヘッドを加算することで、オーバーヘッド考慮実行時間を算出する（ステップＳ４７６）。
【０１２２】
計算結果出力部１２７−４は、プログラム１３１の実行全体をアクセラレータ９で置き換えた場合のオーバーヘッド考慮実行時間を示す性能見積結果１３７−４を出力する（ステップＳ４７７）。その後、性能情報取得部１２０は、この性能情報取得処理を終了する。
【０１２３】
次に、実施例５は、実施例３及び実施例４を組み合せ、更に、既存のプログラムをループ単位で高精度に実行時間を見積もり、複数のアクセラレータ９から最短の実行時間となる１つを選択し、選択したアクセラレータ９で実行させる場合の性能を見積もる場合に相当し、以下、「高精度性能見積」という場合がある。
【０１２４】
図１５は、実施例５における性能見積装置の機能構成例を示す図である。図１５において、性能見積装置１００は、主に、性能情報取得部１２０と、性能見積部１３５とを有する。記憶部１３０は、実行前性能情報１３４−５、ＣＰＵ１で動作するプログラム１３１、実行サイクル数対応表１３３ｔを含む複数のタイミング情報１３３、実行後性能情報１３５−５、性能見積結果１３７−５等を記憶する。
【０１２５】
性能情報取得部１２０は、ＣＰＵ１１によるプログラム１３１の実行前後で実行前性能情報１３４−５及び実行後性能情報１３５を取得する処理部であり、更に、実行前情報取得部１２１−５と、実行部１２２と、実行後情報取得部１２３−５とを有する。
【０１２６】
実行前情報取得部１２１−５は、プログラムのコンパイル時にループ当たりの変数の個数等の実行前性能情報１３４−５を取得する。実行部１２２は、プログラム１３１を実行し、即ち、ＣＰＵ１１でプログラム１３１を実行して性能情報を取得する。情報取得部１２３−５は、実行部１２２が取得した性能情報のうち、プログラム１３１の全体の実行時間と、ループ回数と、各命令実行回数と、キャッシュヒット率とを取得して、性能情報１３５−４として記憶部１３０に記憶する。
【０１２７】
性能見積部１２５は、タイミング情報１３３と、実行後性能情報１３５−５とを参照して、サブルーチンの処理を複数のアクセラレータ９から選択して置き換えた場合の性能を計算する処理部であり、更に、アクセラレータ性能計算部１２６−５と、計算結果出力部１２７−５とを有する。
【０１２８】
アクセラレータ性能計算部１２６−５は、実行後性能情報１３５−５のサブルーチン毎の各命令実行回数に基づいて、最も実行時間の長いサブルーチンを、プロセッサをアクセラレータ９へ置き換える対象サブルーチンとして選択し、対象サブルーチンについて、複数のアクセラレータ９の各々に対して、
・命令毎にアクセラレータ９の実行クロックサイクル数を計算し、
・ループ１回当たりの変数の個数と、アクセラレータ９が持つレジスタ数とから、ループ並列数を計算し、
・実施例４の式（４ａ）〜（４ｃ）に従って、メモリアクセスのオーバーヘッドを計算し、
・実行クロックサイクル数、ループ並列数、及びオーバーヘッドに基づいて、ループ毎のアクセラレータ９の実行時間を計算し、
・アクセラレータ９毎に、対象サブルーチン内の各ループのアクセラレータ９の実行時間を合計して、各アクセラレータ９の対象サブルーチン全体の実行時間を計算する。
【０１２９】
アクセラレータ性能計算部１２６−５は、計算結果に基づいて、複数のアクセラレータ９から、対象サブルーチンに対する実行時間が最短となるアクセラレータ９を選択する。そして、アクセラレータ性能計算部１２６−５は、選択したアクセラレータ９に対して、選択したアクセラレータ９のタイミング情報１３３の実行サイクル数対応表１３３ｔを参照し、実施例３の式（３ｃ）に従って、選択置き換えによるＣＰＵ実行時間を求める。
【０１３０】
そして、アクセラレータ性能計算部１２６−５は、選択したアクセラレータ９に対して、対象サブルーチンのアクセラレータ実行時間と、選択置き換えによるＣＰＵ実行時間とを合算して（実施例３の式（３ｄ））、高精度性能見積の全体の実行時間を取得する。即ち、
高精度性能見積の全体の実行時間
＝  対象サブルーチンのアクセラレータ実行時間
＋  サブルーチン置き換えによるＣＰＵ実行時間                  （５ｄ）
で表される。式（５ｄ）は、実施例２の式（２ｄ）に相当するが、実施例５における対象サブルーチンのアクセラレータ実行時間は、ループ単位で見積もった高精度な実行時間を示す点で異なっている。
【０１３１】
性能見積結果１３７−５が記憶部１３０に記憶される性能見積結果１３７−５には、高精度性能見積の全体の実行時間が示される。更に、性能見積結果１３７−５によって、複数のアクセラレータ９とＣＰＵ１１とを対応付けてサブルーチン毎の夫々の実行時間が示されてもよい。
【０１３２】
計算結果出力部１２７−５は、性能見積結果１３７−５を表示装置１５に出力して表示する。性能見積結果１３７−５は、プログラム１３１のうち、実行時間の長いサブルーチンを選択されたアクセラレータ９に置き換えた場合、即ち、プログラム１３１の一部をアクセラレータ９に置き換えた場合の高精度な実行時間を示す。計算結果出力部１２７−５は、更に、複数のアクセラレータ９とＣＰＵ１１とを対応付けてサブルーチン毎の夫々の実行時間を表示装置１５に表示させてもよい。
【０１３３】
プログラム１３１及び各アクセラレータ９のタイミング情報１３３は、実行サイクル数対応表１３３ｔを含めて、実施例１と同様であるため、その説明を省略する。
【０１３４】
実行前性能情報１３４−５は、プログラム１３１のコンパイラ時に得られるループ１回当たりの変数の個数等のループ情報を含む。
【０１３５】
実行後性能情報１３５−５は、実行部１２２によるプログラム１３１の実行中に得られた性能情報のうち、ＣＰＵ１１によるプログラム１３１全体の実行時間、ループ回数、サブルーチン毎の各命令実行回数、キャッシュヒット率等を示す。
【０１３６】
性能見積結果１３７−５は、アクセラレータ性能計算部１２６−５によって計算された、対象サブルーチンを選択したアクセラレータ９で置き換えた場合のループ単位で見積もった、プログラム１３１全体の高精度な実行時間等を示す。性能見積結果１３７−５によって、性能改善を理解し易くするために、ＣＰＵ１１がプログラム１３１全体を実行した場合の実行時間、複数のアクセラレータ９及びＣＰＵ１１のサブルーチン毎の夫々の実行時間等が示されてもよい。
【０１３７】
上述した実施例５では、アクセラレータ９の並列実行数がコア数以外の要因にも影響を受けることを考慮することができる。
【０１３８】
図１６は、実施例５における性能情報取得部による性能情報取得処理を説明するためのフローチャート図である。図１６において、性能情報取得部１２０では、実行前情報取得部１２１−５は、プログラム１３１のコンパイル時にループ１回当たりの変数の個数等を示すループ情報を取得する（ステップＳ５５１）。
【０１３９】
実行部１２２が、プログラム１３１を実行して、実行中のＣＰＵ１１による性能情報を出力する（ステップＳ５５２）。
【０１４０】
そして、実行後情報取得部１２３−５は、実行部１２２がプログラム１３１の実行中に得られた性能情報のうち、ループ回数と各命令実行回数とキャッシュヒット率とを性能情報として取得する（ステップＳ５５３）。
【０１４１】
図１７は、実施例５における性能見積部による性能見積処理を説明するためのフローチャート図である。図１７において、性能見積部１２５が、タイミング情報１３３、性能情報１３５等を読み込むと（ステップＳ５７１）、アクセラレータ性能計算部１２６−５によるアクセラレータ性能計算処理が開始される。
【０１４２】
アクセラレータ性能計算部１２６−５は、実行後性能情報１３５−５のサブルーチン毎の各命令実行回数に基づいて、最も実行時間の長いサブルーチンを、プロセッサをアクセラレータ９に置き換える対象サブルーチンとして選択する（ステップＳ５７２）。
【０１４３】
そして、アクセラレータ性能計算部１２６−５は、実施例１の式（１ａ）を用いて、複数のアクセラレータ９の各々に対して、各命令のアクセラレータ９の実行クロックサイクル数を計算する（ステップＳ５７３）。
【０１４４】
アクセラレータ性能計算部１２６−５は、複数のアクセラレータ９の各々に対して、対象サブルーチンにおけるループ１回当たりの変数の個数と、各アクセラレータ９が持つレジスタ数とからループ並列数を計算する（ステップＳ５７４）。
【０１４５】
アクセラレータ性能計算部１２６−５は、複数のアクセラレータ９の各々に対して、対象サブルーチンにおいて、実施例４の式（４ａ）〜（４ｃ）に従って、キャッシュヒット率からメモリアクセスのオーバーヘッドを計算する（ステップＳ５７５）。
【０１４６】
アクセラレータ性能計算部１２６−５は、対象サブルーチン内のループ毎に、アクセラレータ９の実行時間を計算する（ステップＳ５７６）。
【０１４７】
そして、アクセラレータ性能計算部１２６−５は、複数のアクセラレータ９の各々に対して、対象サブルーチン内の各ループのアクセラレータ９の実行時間を合計して、各アクセラレータ９の対象サブルーチン全体の実行時間を計算する（ステップＳ５７７）。
【０１４８】
アクセラレータ性能計算部１２６−５は、複数のアクセラレータ９の各々の実行時間のうち、実行時間が最短のアクセラレータ９を選択する（ステップＳ５７８）。
【０１４９】
一方、アクセラレータ性能計算部１２６−５は、実行後性能情報１３５−５から得られる全体の実行時間から、対象サブルーチンのＣＰＵ実行時間を減算して、サブルーチン置き換えによるＣＰＵ実行時間を求める（ステップＳ５７９）。
【０１５０】
アクセラレータ性能計算部１２６−５は、対象サブルーチンの選択されたアクセラレータ９の実行時間と、サブルーチン置き換えによるＣＰＵ実行時間とを合計して、高精度性能見積の全体の実行時間を求める（ステップＳ５８０）。
【０１５１】
更に、アクセラレータ性能計算部１２６−５は、対象サブルーチン以外のサブルーチン毎に、ＣＰＵ実行時間及び複数のアクセラレータ９夫々のアクセラレータ実行時間を計算する（ステップＳ５８１）。この処理は省略してもよい。性能見積結果１３７−３が記憶部１３０に格納される。
【０１５２】
計算結果出力部１２７−５は、高精度性能見積の全体の実行時間を示す性能見積結果１３７−５を出力する（ステップＳ５８２）。計算結果出力部１２７−５は、性能見積結果１３７−５を表示装置１５に表示するようにしてもよい。
【０１５３】
上述した、実施例５における性能情報取得処理において、計算結果出力部１２７−５が、複数のアクセラレータ９とＣＰＵ１１とを対応付けてサブルーチン毎の夫々の実行時間を表示装置１５に表示させてもよく、その場合には、ユーザにより対象サブルーチンとアクセラレータ９とを選択可能とし、ステップＳ５７９、Ｓ５８０、（必要に応じてＳ５８１）、及びＳ５８２を繰り返すようにしてもよい。
【０１５４】
実施例５における、高精度な性能見積計算について、図１８に示すような、２つのループを含むあるサブルーチンが対象サブルーチンとなった場合で説明する。説明を簡潔にするため、図６の実行サイクル数対応表１３３ｔのアクセラレータ９の場合で説明するが、他のアクセラレータ９の各々に対して、同様の処理を行うものとする。
【０１５５】
図１８は、ループ記述例を示す図である。図１８に示すループ記述例７７では、サブルーチンfunc内のループＮｏ．１及びループＮｏ．２を示し、他を省略している。
【０１５６】
ループ記述例７７を参照して、図１７のステップＳ５７３における、実行クロックサイクル数の計算について説明する。下記に示すＣＰＵ命令に対するアクセラレータ実行サイクル数は、図６の実行サイクル数対応表１３３ｔより、ＦＡＤＤ、ＦＳＵＢ、ＡＤＤ、及びＳＨＬは１クロックサイクルであり、ＦＭＵＬは６クロックサイクルである。実行クロックサイクル数は、実施例１で説明した式（１ａ）より、
＝  命令実行回数  ×  並列数  ×  アクセラレータ実行サイクル数
である。この例では、命令実行回数を１０００回とする。
【０１５７】
ループＮｏ．１の各命令のアクセラレータ９の実行クロックサイクル数は、
・ＦＡＤＤ：1000×1×1=1000
・ＦＳＵＢ：1000×1×1=1000
・ＦＭＵＬ：1000×1×6=1000
・ＡＤＤ  ：2000×1×1=2000
である。
【０１５８】
ループＮｏ．２の各命令のアクセラレータ９の実行クロックサイクル数は、
・ＳＨＬ  ：1000×1×1=1000
・ＡＤＤ  ：2000×1×1=2000
である。
【０１５９】
次に、図１７のステップＳ５７４における、ループ並列数の計算について説明する。ループ１回当たりの変数の個数と、アクセラレータ９が持つレジスタ数とから計算される。ループＮｏ．１と、ループＮｏ．２の夫々で使用する変数は、
ループＮｏ．１：i, y[i], x[i], x[i + N/2], z[i], w[i]
ループＮｏ．２：i, x[i*2], x[i*2+1], y[i], z[i]
であり、ループＮｏ．１では６個、ループＮｏ．２では５個である。
【０１６０】
ここで、アクセラレータ９のレジスタ数は１２８個、また、最大並列数は３２とする。ループＮｏ．１と、ループＮｏ．２の夫々の並列数は、
ループＮｏ．１：min(32, 128/6) = min(32, 21) = 21
ループＮｏ．２：min(32, 128/5) = min(32, 25) = 25
と得る。
【０１６１】
更に、図１７のステップＳ５７５における、メモリアクセスのオーバーヘッドの計算について説明する。先ず、タイミング情報１３３及び実行後性能情報１３５−５から、前提を、
・アクセラレータの主記憶転送時間：1/208[GB/s] = 4.8 [ps/B]
（アクセラレータのメモリ帯域が208GB/sとした場合）
・メモリアクセス命令数：9000
・ワードサイズ：32bits = 4B (B: バイト)
・キャッシュヒット率：90%
とする。
【０１６２】
従って、
・メモリ転送量：4[B]×9000 = 36000[B]
・主記憶転送量：36000[B] × (1-0.90) = 3600[B]
を得て、
オーバーヘッド：3600[B] × 4.8[ps/B] = 17 [ns]
が算出される。
【０１６３】
通常、ループ毎に命令実行回数及びキャッシュヒット率は異なっているが、簡単のため、以降の説明では、ループＮｏ．１とＮｏ．２の両方で上記オーバーヘッドの値とする。
【０１６４】
図１７のステップＳ５７６における、ループ毎のアクセラレータ９の実行時間の計算について説明する。ここでは、タイミング情報１３３からアクセラレータ９のクロック周波数1GHz(=109)を得るものとする。
【０１６５】
ループＮｏ．１について、
全命令アクセラレータ実行クロックサイクル数
=  1000+1000+6000+2000=10000
及び、
アクセラレータ９の実行時間  =  10000/109/21+17=493ns
を得る。
【０１６６】
また、ループＮｏ．２について、
全命令アクセラレータ実行クロックサイクル数  =  1000+2000=3000
及び、
アクセラレータ９の実行時間  =  3000/109/25+17  =  137ns
を得る。
【０１６７】
そして、図１７のステップＳ５７７における、アクセラレータ９に関して、対象サブルーチン全体の実行時間の計算について説明する。ここでは、サブルーチンfunc全体の実行時間を計算する。ループＮｏ．１とループＮｏ．２の実行時間を合計して、
対象サブルーチン全体の実行時間  =  493+137  =  630ns
を得る。
【０１６８】
上述により、対象サブルーチンをアクセラレータ９で実行した場合の実行時間を高精度に見積もることができる。
【０１６９】
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、主々の変形や変更が可能である。
【０１７０】
以上の実施例１〜実施例５を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
プログラムを第１のプロセッサで実行することにより、各命令の実行回数を取得し、
前記プログラムの一部又は全体において、前記第１のプロセッサとは異なる特性を有する第２のプロセッサが前記命令を実行するのに要する時間と該命令の前記実行回数との積の和を求め、求めた値に基づいて、前記プログラムの一部又は全体を該第２のプロセッサが実行した場合の実行時間を見積って出力する、
処理をコンピュータが行うことを特徴とする性能見積方法。
（付記２）
前記コンピュータが、
プログラムを第１のプロセッサで実行することにより、更に、キャッシュヒット率を取得し、
前記プログラムの一部又は全体に対して、前記キャッシュヒット率に基づいてメモリアクセスのオーバーヘッドを算出し、前記求めた値に加算することで、前記実行時間を見積もることを特徴とする付記１記載の性能見積方法。
（付記３）
前記コンピュータが、
前記第１のプロセッサによる前記プログラムの実行において、最も実行時間が長かったサブルーチンを、前記第２のプロセッサで実行させる前記プログラムの一部として選択する、
ことを特徴とする付記２記載の性能見積方法。
（付記４）
前記コンピュータが、
プログラムを第１のプロセッサで実行することにより、更に、ループ回数を取得し、
前記プログラムの一部において、ループ単位で前記第２のプロセッサによる並列実行数を計算する
ことを特徴とする付記３記載の性能見積方法。
（付記５）
コンピュータに、
プログラムを第１のプロセッサで実行することにより、各命令の実行回数を取得し、
前記プログラムの一部又は全体において、前記第１のプロセッサとは特性を有する第２のプロセッサが前記命令を実行するのに要する時間と該命令の前記実行回数との積の和を求め、求めた値に基づいて、前記プログラムの一部又は全体を該第２のプロセッサが実行した場合の実行時間を見積って出力する、
処理を行わせることを特徴とする性能見積プログラム。
（付記６）
プログラムを第１のプロセッサで実行することにより、各命令の実行回数を取得する性能情報取得部と、
前記プログラムの一部又は全体に対して、前記第１のプロセッサとは特性を有する第２のプロセッサが前記命令を実行するのに要する時間と該命令の前記実行回数との積の和を求め、該第２のプロセッサが前記プログラムの一部又は全体を実行した場合の実行時間を見積もって出力する性能見積部と、
を有する性能見積装置。
（付記７）
前記プログラムの一部は、前記第１のプロセッサによる実行において、最も実行時間が長かったサブルーチンであることを特徴とする付記６記載の性能見積装置。
【符号の説明】
【０１７１】
１１          ＣＰＵ
１２          主記憶装置
１３          補助記憶装置
１４          入力装置
１５          表示装置
１７          通信Ｉ／Ｆ
１８          ドライブ装置
１９          記憶媒体
１００        性能見積装置
１２０        性能情報取得部
１２１−５    実行前情報取得部
１２２        実行部
１２３、１２３−５        情報取得部
１２５        性能見積部
１２６        アクセラレータ性能計算部
１２７        計算結果出力部
１３０        記憶部
１３１        プログラム
１３３        タイミング情報
１３４−５    実行前性能情報
１３５、１３５−２、１３５−４        性能情報
１３５−５    実行前性能情報
１３７、１３７−２、１３７−３、１３７−４、１３７−５        性能見積結果
【図１】
2016212667.tif 000003
【図２】
2016212667.tif 000004
【図３】
2016212667.tif 000005
【図４】
2016212667.tif 000006
【図５】
2016212667.tif 000007
【図６】
2016212667.tif 000008
【図７】
2016212667.tif 000009
【図８】
2016212667.tif 000010
【図９】
2016212667.tif 000011
【図１０】
2016212667.tif 000012
【図１１】
2016212667.tif 000013
【図１２】
2016212667.tif 000014
【図１３】
2016212667.tif 000015
【図１４】
2016212667.tif 000016
【図１５】
2016212667.tif 000017
【図１６】
2016212667.tif 000018
【図１７】
2016212667.tif 000019
【図１８】
2016212667.tif 000020