(57)【特許請求の範囲】
【請求項１】
対象プログラムに与える複数の入力データを取得し、
取得した前記複数の入力データをそれぞれ前記対象プログラムに与えて実行させることにより、前記対象プログラム内の機能を特定する関数ごとの性能指標値を、前記入力データごとに測定し、
測定した前記入力データごとの前記性能指標値と、前記入力データに関する属性情報に基づいて設定される重み係数との積を、前記関数ごとに加算し、
前記関数ごとの前記加算結果に基づいて、前記関数の中からチューニングポイントの候補となる関数を抽出する、
処理をコンピュータに実行させる性能チューニングプログラム。
【請求項２】
前記属性情報は、前記入力データのデータサイズであることを特徴とする請求項１に記載の性能チューニングプログラム。
【請求項３】
前記属性情報は、前記複数の入力データにおける入力データのデータ形式の出現頻度であることを特徴とする請求項１に記載の性能チューニングプログラム。
【請求項４】
前記属性情報は、前記入力データに関する前記対象プログラムの実行ルートの網羅性に関する情報であることを特徴とする請求項１に記載の性能チューニングプログラム。
【請求項５】
測定した前記性能指標値の測定回数に基づいて、前記加算結果の信頼度を算出する処理を前記コンピュータに実行させることを特徴とする請求項１〜４のいずれか一つに記載の性能チューニングプログラム。
【請求項６】
前記性能指標値はサイクル数で表され、
前記チューニングポイントの候補となる関数の前記入力データごとの性能指標値と、前記重み係数と、１から前記入力データでのＶＬＩＷ命令数／サイクル数を引いた値との積を、前記関数ごとに加算することにより、前記チューニングポイントの候補となる関数に対するチューニング判断の指標値を算出する処理を前記コンピュータに実行させることを特徴とする請求項１〜５のいずれか一つに記載の性能チューニングプログラム。
【請求項７】
対象プログラムに与える複数の入力データを取得し、
取得した前記複数の入力データをそれぞれ前記対象プログラムに与えて実行させることにより、前記対象プログラム内の機能を特定する関数ごとの性能指標値を、前記入力データごとに測定し、
測定した前記入力データごとの前記性能指標値と、前記入力データに関する属性情報に基づいて設定される重み係数との積を、前記関数ごとに加算し、
前記関数ごとの前記加算結果に基づいて、前記関数の中からチューニングポイントの候補となる関数を抽出する、
処理をコンピュータに実行させる性能チューニングプログラムを記録した前記コンピュータに読み取り可能な記録媒体。
【請求項８】
コンピュータを有する性能チューニング装置であって、
対象プログラムに与える複数の入力データを取得し、
取得した前記複数の入力データをそれぞれ前記対象プログラムに与えて実行させることにより、前記対象プログラム内の機能を特定する関数ごとの性能指標値を、前記入力データごとに測定し、
測定した前記入力データごとの前記性能指標値と、前記入力データに関する属性情報に基づいて設定される重み係数との積を、前記関数ごとに加算し、
前記関数ごとの前記加算結果に基づいて、前記関数の中からチューニングポイントの候補となる関数を抽出する、
処理を前記コンピュータが実行することを特徴とする性能チューニング装置。
【請求項９】
コンピュータが実行する性能チューニング方法であって、
前記コンピュータにより、対象プログラムに与える複数の入力データを取得し、
前記コンピュータにより、取得した前記複数の入力データをそれぞれ前記対象プログラムに与えて実行させることにより、前記対象プログラム内の機能を特定する関数ごとの性能指標値を、前記入力データごとに測定し、
前記コンピュータにより、測定した前記入力データごとの前記性能指標値と、前記入力データに関する属性情報に基づいて設定される重み係数との積を、前記関数ごとに加算し、
前記コンピュータにより、前記関数ごとの前記加算結果に基づいて、前記関数の中からチューニングポイントの候補となる関数を抽出する、
ことを特徴とする性能チューニング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プログラム実行性能のチューニングをおこなう性能チューニングプログラム、該プログラムを記録した記録媒体、性能チューニング装置、および性能チューニング方法に関する。
【背景技術】
【０００２】
チューニング技術とは、作成されたプログラムを効率よく走らせるために、処理速度の低下の原因となる性能指標値（たとえば、サイクル数やキャッシュミス率）があらわれた関数をチューニングポイントとして抽出する技術である。
【０００３】
具体的には、このチューニング技術を用いてプログラムをチューニングする場合、あるデータを入力して性能解析をおこない、その結果を元にチューニングポイントを抽出し、チューニングをおこなう。効率の良いチューニングをおこなうためには、チューニングポイントを正確に見出すことが必要である。
【０００４】
たとえば、ＭＰＥＧデコーダのプログラムを対象とすると、ある圧縮データについて伸長処理に時間がかかり再生が追いつかない場合には、この伸長処理の関数のサイクル数が高いと考えられる。したがって、その関数をチューニングポイントとして、プログラムの処理効率の向上を図ることができる。
【０００５】
また、このようなチューニング技術については、実行頻度、命令フェッチやメモリアクセス頻度、キャッシュミス率を測定し、得られた測定結果を元にチューニングポイントを抽出している（たとえば、下記特許文献１〜３を参照。）。
【０００６】
【特許文献１】特公平８−１６０８号公報
【特許文献２】特開平７−１９１８８２号公報
【特許文献３】特開平８−２６３３７２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述した従来のチューニング技術では、入力データの種類などによって測定結果が片寄ることが多いため、正確にチューニングポイントを見出すことは困難であるという問題があった。したがって、幾度となく測定する中で総合的な判断によりチューニングポイントを見出さなければならず、開発者の負担が増大するという問題があった。
【０００８】
また、プログラムの実行占有率や性能指標値など、総合的にも局所的にもプログラム性能が表現できる環境においては、入力データの種類などによって性能測定結果が異なる場合、開発者はそれぞれの入力データとプログラムの特徴から、実行頻度が高くチューニング効果が期待できるモジュールを人為的判断で特定していた。
【０００９】
したがって、ある一回の測定で同一性能指標値の複数の関数が存在し、この測定結果を元に性能解析やチューニングをおこなう場合、どちらの関数をチューニングすべきか判断することができず、正確にチューニングポイントを見出すことは困難であるという問題があった。
【００１０】
また、ある一つの入力データＤａでの測定結果のみを用いてプログラムのチューニングをおこなった結果、その入力データＤａを与えた場合についての性能は改善する反面、他のデータＤｂを与えて測定した場合、入力データＤａによるチューニング前よりも性能が低下してしまうという問題があった。
【００１１】
この発明は、上述した従来技術による問題点を解消するため、簡単かつ効率的に正確なチューニングポイントを自動で見出すことにより、プログラムの性能向上および開発者の負担軽減を図ることができる性能チューニングプログラム、該プログラムを記録した記録媒体、性能チューニング装置、および性能チューニング方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決し、目的を達成するため、この発明にかかる性能チューニングプログラム、該プログラムを記録した記録媒体、性能チューニング装置、および性能チューニング方法は、対象プログラムに与える複数の入力データを取得し、取得された複数の入力データをそれぞれ前記対象プログラムに与えて実行させることにより、前記対象プログラム内の機能を特定する関数ごとの性能指標値を、前記入力データごとに測定し、測定された前記入力データごとの性能指標値を、前記関数ごとに合成し、合成された前記関数ごとの合成結果に基づいて、前記関数の中からチューニングポイントの候補となる関数を抽出することを特徴とする。
【００１３】
この発明によれば、どのような入力データに対しても平均的に性能改善をおこなうことが可能なチューニングポイントの候補となる関数を抽出することができる。
【００１４】
また、上記発明において、前記入力データに関する属性情報に基づいて、前記入力データごとの性能指標値を、前記関数ごとに合成することとしてもよい。
【００１５】
この発明によれば、合成元となる各入力データの性能指標値を平準化することができる。
【００１６】
また、上記発明において、前記属性情報は、前記入力データのデータサイズであることとしてもよい。
【００１７】
この発明によれば、データサイズにより入力データを正規化することができ、合成元となる各入力データの性能指標値を平準化することができる。
【００１８】
また、上記発明において、前記属性情報は、前記入力データの入力頻度であることとしてもよい。
【００１９】
この発明によれば、入力データの特性に応じて、合成元となる各入力データの性能指標値を平準化することができる。
【００２０】
また、上記発明において、前記属性情報は、前記入力データに関する前記プログラムの実行ルートの網羅性に関する情報であることとしてもよい。
【００２１】
この発明によれば、関数に影響を与える入力データの重要度を高くすることにより、チューニングポイント候補の抽出精度の向上を図ることができる。
【００２２】
また、上記発明において、測定された性能指標値の測定回数に基づいて、前記合成結果の信頼度を算出することとしてもよい。
【００２３】
この発明によれば、合成結果の性能指標を簡単に提示することができる。
【００２４】
また、上記発明において、前記チューニングポイントの候補となる関数の前記入力データごとの性能指標値に基づいて、前記チューニングポイントの候補となる関数に対するチューニング判断の指標値を算出することとしてもよい。
【００２５】
この発明によれば、チューニングポイントの候補の絞込みの判断材料を提示することができる。
【００２６】
また、上記発明において、チューニング判断の指標値の算出結果に基づいて、チューニングポイントの候補となる関数の中から、チューニングポイントとなる関数を抽出することとしてもよい。
【００２７】
この発明によれば、チューニングポイントの候補の中からのチューニングポイントの絞込みを自動でおこなうことができる。
【発明の効果】
【００２８】
この発明にかかる性能チューニングプログラム、該プログラムを記録した記録媒体、性能チューニング装置、および性能チューニング方法によれば、簡単かつ効率的に正確なチューニングポイントを自動で見出すことにより、プログラムの性能向上および開発者の負担軽減を図ることができるという効果を奏する。
【発明を実施するための最良の形態】
【００２９】
以下に添付図面を参照して、この発明にかかる性能チューニングプログラム、該プログラムを記録した記録媒体、性能チューニング装置、および性能チューニング方法の好適な実施の形態を詳細に説明する。
【００３０】
（性能チューニングの概要）
まず、この発明の実施の形態にかかる性能チューニングの概要について説明する。図１は、この発明の実施の形態にかかる性能チューニングの概要を示す説明図である。図１において、（１）で、開発者はプログラムを作成する。
【００３１】
（２）で、作成されたプログラムにデータＡ，データＢ，データＣ，・・・を与えてプログラムを実行する。そして、測定結果として、データごとに関数（ここでは、例としてＦｕｎｃ１〜Ｆｕｎｃ４）の性能指標値が測定される。
【００３２】
（３）で、関数ごとに測定結果を合成し合成結果と合成回数（経験値）を得る。この合成結果により、ここでは、関数Ｆｕｎｃ１〜Ｆｕｎｃ４の中から関数Ｆｕｎｃ１，Ｆｕｎｃ２をチューニング対象とする。
【００３３】
（４）で、（３）で選ばれた関数ごとに、複数の性能指標値を合成する。これにより、チューニング対象となるべき関数をチューニングポイントとして出力することができる。
【００３４】
（性能チューニング装置のハードウェア構成）
つぎに、この発明の実施の形態にかかる性能チューニング装置のハードウェア構成について説明する。図２は、この発明の実施の形態にかかる性能チューニング装置のハードウェア構成を示すブロック図である。図２において、性能チューニング装置は、ＣＰＵ２０１と、ＲＯＭ２０２と、ＲＡＭ２０３と、ＨＤＤ（ハードディスクドライブ）２０４と、ＨＤ（ハードディスク）２０５と、ＦＤＤ（フレキシブルディスクドライブ）２０６と、着脱可能な記録媒体の一例としてのＦＤ（フレキシブルディスク）２０７と、ディスプレイ２０８と、Ｉ／Ｆ（インターフェース）２０９と、キーボード２１０と、マウス２１１と、スキャナ２１２と、プリンタ２１３と、を備えている。また、各構成部はバス２００によってそれぞれ接続されている。
【００３５】
ここで、ＣＰＵ２０１は、性能チューニング装置の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される。ＨＤＤ２０４は、ＣＰＵ２０１の制御にしたがってＨＤ２０５に対するデータのリード／ライトを制御する。ＨＤ２０５は、ＨＤＤ２０４の制御で書き込まれたデータを記憶する。
【００３６】
ＦＤＤ２０６は、ＣＰＵ２０１の制御にしたがってＦＤ２０７に対するデータのリード／ライトを制御する。ＦＤ２０７は、ＦＤＤ２０６の制御で書き込まれたデータを記憶したり、ＦＤ２０７に記憶されたデータを性能チューニング装置に読み取らせたりする。
【００３７】
また、着脱可能な記録媒体として、ＦＤ２０７のほか、ＣＤ−ＲＯＭ（ＣＤ−Ｒ、ＣＤ−ＲＷ）、ＭＯ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、メモリーカードなどであってもよい。ディスプレイ２０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ２０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００３８】
Ｉ／Ｆ２０９は、通信回線を通じてインターネットなどのネットワーク２１４に接続され、このネットワーク２１４を介して他の装置に接続される。そして、Ｉ／Ｆ２０９は、ネットワーク２１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００３９】
キーボード２１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス２１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００４０】
スキャナ２１２は、画像を光学的に読み取り、性能チューニング装置内に画像データを取り込む。なお、スキャナ２１２は、ＯＣＲ機能を持たせてもよい。また、プリンタ２１３は、画像データや文書データを印刷する。プリンタ２１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００４１】
（性能チューニング装置の機能的構成）
つぎに、この発明の実施の形態にかかる性能チューニング装置の機能的構成について説明する。図３は、この発明の実施の形態にかかる性能チューニング装置の機能的構成を示すブロック図である。図３において、性能チューニング装置３００は、取得部３０１と、測定部３０２と、合成部３０３と、抽出部３０４と、信頼度算出部３０５と、合成指標値算出部３０６と、から構成されている。
【００４２】
まず、取得部３０１は、チューニングの対象となるプログラム（以下、「対象プログラム」と称す。）に与える複数の入力データを取得する。対象プログラムは、複数の関数により構成されている。関数はプログラム内の機能を特定する実行単位（たとえば、「document.write()」など）である。
【００４３】
また、入力データの種類は、対象プログラムに応じて異なる。たとえば、対象プログラムが画像処理プログラムの場合、入力データは画像データである。また、対象プログラムが音声処理プログラムの場合、入力データは音声データである。また、対象プログラムがファイルシステムの場合、入力データはファイルである。
【００４４】
また、測定部３０２は、取得部３０１によって取得された複数の入力データをそれぞれ対象プログラムに与えて実行させることにより、関数ごとの性能指標値を、入力データごとに測定する。ここで、性能指標値とは、関数の性能をあらわす値であり、たとえば、サイクル数やキャッシュミス率などであらわすことができる。より具体的には、たとえば、ある対象プログラムに入力データが与えられた場合、この入力データに対する対象プログラム内の関数の性能指標値は、当該関数が実行されたときのサイクル数となる。
【００４５】
図４は、関数ごとの性能指標値の一例を示すグラフである。具体的には、対象プログラムに２つの異なるデータ（ここでは、データＤ１およびデータＤ２とする。以降、入力データ総数をｎとし、ｉ番目（ｉ＝１〜ｎ）のデータを「データＤｉ」と称す。）を与えた場合の関数ごとの性能指標値（ここでは、サイクル数）を示している。
【００４６】
図４において、（ａ）はデータＤ１を与えた場合の対象プログラム内の各関数Ｆ１〜Ｆ４のサイクル数を示しており、（ｂ）はデータＤ２を与えた場合の対象プログラム内の各関数Ｆ１〜Ｆ４のサイクル数を示している。
【００４７】
ここでは、例として４つの関数Ｆ１〜Ｆ４について示したが、関数の数は対象プログラムによってまちまちであり、たとえば、数百から数千程度存在する。以降、対象プログラムの関数の総数をｍとし、ｊ番目（ｊ＝１〜ｍ）の関数を関数Ｆｊと称す。
【００４８】
また、図３において、合成部３０３は、測定部３０２によって測定された入力データごとの性能指標値を、関数ごとに合成する。合成結果となる関数Ｆｊごとの合成性能指標値Ｓｊは、下記式（１）であらわすことができる。
【００４９】
Ｓｊ＝Ｃ１・Ｍｊ１＋Ｃ２・Ｍｊ２＋……＋Ｃｉ・Ｍｊｉ＋……＋Ｃｎ・Ｍｊｎ
・・・（１）
【００５０】
上記式（１）において、Ｃｉは入力データＤｉに関する属性情報により設定される重み係数である。重み係数Ｃｉは、属性情報を加味して任意に定義することができる。また、Ｍｊｉは、データＤｉが与えられた場合の関数Ｆｊの性能指標値である。
【００５１】
ここで、重み係数Ｃｉの具体例について説明する。
＜例１＞入力データＤｉのデータサイズ（処理量）ｚｉによる重み付け
【００５２】
たとえば、各データＤｉのデータサイズ（処理量）ｚｉが大きく異なる場合、データサイズｚｉで正規化するなどして単位データ量あたりの処理として再合成することができる。この場合、重み係数Ｃｉは下記式（２）であらわすことができる。
【００５３】
Ｃｉ＝１／ｚｉ・・・（２）
【００５４】
対象プログラムが画像処理プログラムの場合、入力データＤｉは画像データとなる。したがって、画像データである入力データＤｉのデータサイズｚｉは、画像データサイズとなる。たとえば、入力データＤ１のデータサイズｚ１がｚ１＝６００［ｐｉｘｅｌ］、入力データＤ２のデータサイズｚ２がｚ２＝１０００［ｐｉｘｅｌ］、入力データＤ３のデータサイズｚ３がｚ３＝２００［ｐｉｘｅｌ］とすると、合成結果となる関数Ｆｊごとの合成性能指標値Ｓｊは、下記式（３）となる。
【００５５】
Ｓｊ＝（１／６００）×Ｍｊ１＋（１／１０００）×Ｍｊ２＋（１／２００）×Ｍｊ３
・・・（３）
【００５６】
また、対象プログラムが音声処理プログラムの場合、入力データＤｉは音声データとなる。したがって、音声データである入力データＤｉのデータサイズｚｉは、音声データ長となる。たとえば、入力データＤ１のデータサイズｚ１がｚ１＝１．５［ｓｅｃ］、入力データＤ２のデータサイズｚ２がｚ２＝５．２［ｓｅｃ］、入力データＤ３のデータサイズｚ３がｚ３＝３．０［ｓｅｃ］とすると、合成結果となる関数Ｆｊごとの合成性能指標値Ｓｊは、下記式（４）となる。
【００５７】
Ｓｊ＝（１／１．５）×Ｍｊ１＋（１／５．２）×Ｍｊ２＋（１／３．０）×Ｍｊ３
・・・（４）
【００５８】
また、対象プログラムがファイルシステムの場合、入力データＤｉはファイルとなる。したがって、ファイルである入力データＤｉのデータサイズｚｉは、ファイルサイズとなる。たとえば、入力データＤ１のデータサイズｚ１がｚ１＝２０［ＫＢ］、入力データＤ２のデータサイズｚ２がｚ２＝５００［ＫＢ］、入力データＤ３のデータサイズｚ３がｚ３＝２［ＫＢ］とすると、合成結果となる関数Ｆｊごとの合成性能指標値Ｓｊは、下記式（５）となる。
【００５９】
Ｓｊ＝（１／２０）×Ｍｊ１＋（１／５００）×Ｍｊ２＋（１／２）×Ｍｊ３
・・・（５）
【００６０】
＜例２＞入力データＤｉの特性による重み付け
たとえば、プリンタのPostScript処理においては、入力データＤｉは、テキスト形式で入力されるケースが圧倒的に多く、ＪＰＥＧ画像で入力されるケースは少ないというような特性がある。このような場合、入力頻度ｑｉなどで重み付けすることができる。この場合、重み係数Ｃｉは下記式（６）であらわすことができる。
【００６１】
Ｃｉ＝ｑｉ・・・（６）
【００６２】
たとえば、テキスト形式の入力データＤ１の入力頻度ｑ１がｑ１＝９０［％］、ＪＰＥＧ画像の入力データＤ２の入力頻度ｑ２がｑ１＝５［％］とすると、合成結果となる関数Ｆｊごとの合成性能指標値Ｓｊは、下記式（７）となる。
【００６３】
Ｓｊ＝０．９×Ｍｊ１＋０．０５×Ｍｊ２・・・（７）
【００６４】
＜例３＞入力データＤｉの実行ルートの網羅性（カバレージ率ｖｉ）による重み付け
たとえば、入力するデータによって実行ルートが大きく異なるようなプログラムの場合、実行ルートの網羅性を加味するためカバレージ率ｖｉなどで重み付けすることができる。この場合、重み係数Ｃｉは下記式（８）であらわすことができる。
【００６５】
Ｃｉ＝ｖｉ・・・（８）
【００６６】
たとえば、入力データＤ１を与えた場合の関数Ｆｊのカバレージ率ｖ１をｖ１＝８０［％］、入力データＤ２を与えた場合の関数Ｆｊのカバレージ率ｖ２をｖ２＝２０［％］、入力データＤ３を与えた場合の関数Ｆｊのカバレージ率ｖ３をｖ３＝５０［％］とすると、合成結果となる関数Ｆｊごとの合成性能指標値Ｓｊは、下記式（９）となる。
【００６７】
Ｓｊ＝０．８×Ｍｊ１＋０．２×Ｍｊ２＋０．５×Ｍｊ３・・・（９）
【００６８】
つぎに、合成結果（合成性能指標値Ｓｊ）について具体的に説明する。図５は、合成部３０３による合成結果を示す説明図である。図５に示した合成結果は、図４に示した性能指標値（ここでは、サイクル数）を合成したものである。合成されたサイクル数を合成サイクル数と称す。
【００６９】
図５において、（ａ）は、重み係数ＣｉをＣｉ＝１、すなわち、重み付けしない場合の合成性能指標値Ｓ１〜Ｓ４を示している。
【００７０】
（ｂ）は、入力データＤｉに関する属性情報を入力データＤｉのデータサイズ（処理量）ｚｉとした場合の合成性能指標値Ｓ１〜Ｓ４を示している。
【００７１】
（ｃ）は、入力データＤｉに関する属性情報を入力データＤｉの入力頻度ｑｉとした場合の合成性能指標値Ｓ１〜Ｓ４を示している。
【００７２】
（ｄ）は、入力データＤｉに関する属性情報を、入力データＤｉを与えた場合の関数Ｆｊのカバレージ率ｖｉとした場合の合成性能指標値Ｓ１〜Ｓ４を示している。
【００７３】
また、図３において、抽出部３０４は、合成部３０３によって合成された関数Ｆｊごとの合成結果（合成性能指標値Ｓｊ）に基づいて、関数Ｆ１〜Ｆｍの中から対象プログラムのチューニングポイント候補となる関数（以下、「チューニングポイント候補」と称す。）を抽出する。
【００７４】
具体的には、抽出部３０４による抽出基準としては、基準となるしきい値Ｓｔを設定しておき、合成性能指標値Ｓｊがしきい値Ｓｔ以上となる関数Ｆｘを抽出することとしてもよい。また、関数Ｆ１〜Ｆｍの合成性能指標値Ｓ１〜Ｓｍのうち、上位ｙ（ｙ＝１，２，…）番目までの合成性能指標値Ｓ１〜Ｓｙの関数Ｆ１〜Ｆｙを抽出することとしてもよい。以降、チューニングポイント候補Ｆｘ、Ｆ１〜Ｆｙを総称してチューニングポイント候補Ｆｋと称す。
【００７５】
たとえば、図５においては、上位２番目までの合成性能指標値を特定することで、チューニングポイント候補Ｆｋを抽出している。すなわち、図５の（ａ）では、関数Ｆ４（１位）と関数Ｆ１（２位）がチューニングポイント候補Ｆｋとして抽出されている。
【００７６】
（ｂ）では、関数Ｆ３（１位）と関数Ｆ４（２位）がチューニングポイント候補Ｆｋとして抽出されている。
【００７７】
（ｃ）では、関数Ｆ４（１位）と関数Ｆ３（２位）がチューニングポイント候補Ｆｋとして抽出されている。
【００７８】
（ｄ）では、関数Ｆ４（１位）と関数Ｆ１（２位）がチューニングポイント候補Ｆｋとして抽出されている。
【００７９】
また、図３において、信頼度算出部３０５は、測定部３０２によって測定された性能指標値の測定回数に基づいて、合成結果（合成性能指標値Ｓｊ）の信頼度Ｅを算出する。具体的には、合成部３０３が扱った入力データＤｉの総数ｎが信頼度Ｅとなる。この信頼度Ｅは合成を経験した性能指標値の総数に相当するため、信頼度Ｅを付加情報として提供することで、チューニング精度の指標とすることができる。
【００８０】
また、図３において、合成指標値算出部３０６は、チューニングポイント候補Ｆｋの入力データＤｉごとの性能指標値Ｍｋｉに基づいて、チューニングポイント候補Ｆｋに対するチューニング判断の指標値（以下、「合成指標値Ｔｋ」と称す。）を算出する。
【００８１】
この合成指標値の算出例について説明する。図６は、合成指標値の算出例を示す図表である。図６では、図５（ｂ）において、関数Ｆ３，Ｆ４がチューニングポイント候補Ｆｋとして抽出された場合における合成指標値の算出例を示している。
【００８２】
図６において、合成元サイクル数とは、性能指標値Ｍｋｉがサイクル数で表わされている場合、合成部３０３による合成時に重み付け係数Ｃｉによって重み付けされた性能指標値Ｍｋｉが示すサイクル数である。
【００８３】
具体的には、たとえば、図５（ｂ）においては、関数Ｆ３における入力データＤ１の合成サイクル数は「２０」であるが、この合成サイクル数は、入力データＤ１の重み付け係数Ｃ１＝１／１００と、関数Ｆ３における入力データＤ１の性能指標値Ｍ１＝２０００（図４（ａ）を参照。）との積である。
【００８４】
また、稼働率ＶＰＣとは、ＶＬＩＷ命令数／サイクル数で得られる値である。なお、図６においては、関数Ｆ３における入力データＤ１の稼働率ＶＰＣは「０．８」となっている。
【００８５】
また、合成元指標値とは、合成指標値Ｔｋの算出元となる入力データＤｉごとの指標値であり、チューニングポイント候補Ｆｋごとに算出される。たとえば、関数Ｆ１〜Ｆｍの中で関数Ｆｊのサイクル数が最も大きい場合でも、関数Ｆｊの稼働率ＶＰＣが高ければチューニングの余地が少ないと予想される。そのため、合成元サイクル数と稼働率ＶＰＣを合成する。この合成のための算出式を下記式（１０）に示す。
【００８６】
合成元指標値＝合成元サイクル数×（１−ＶＰＣ）・・・（１０）
【００８７】
関数Ｆ３における入力データＤ１の合成元指標値は、２０×（１−０．８）＝４となる。また、合成指標値Ｔｋは、入力データＤｉごとの合成元指標値の和であり、チューニングポイント候補Ｆｋごとに算出される。関数Ｆ３にける合成指標値Ｔｋは、４＋２１＝２５である。算出されたチューニングポイント候補Ｆｋごとの合成指標値Ｔｋは、図２に示したディスプレイ２０８に表示してもよく、また、プリンタ２１３により印刷出力することとしてもよい。
【００８８】
また、この場合、抽出部３０４は、算出された合成指標値Ｔｋに基づいて、チューニングポイント候補Ｆｋの中からチューニングポイントとなる関数（以下、「チューニングポイントＦｐ」と称す。）を抽出することとしてもよい。
【００８９】
チューニングポイントＦｐの抽出基準としては、基準となるしきい値Ｔを設定しておき、合成指標値Ｔｋがしきい値Ｔ以上となる関数ＦｖをチューニングポイントＦｐとして抽出することとしてもよい。また、合成指標値Ｔｋのうち上位ｗ（ｗ＝１，２，…）番目までの合成指標値の関数ＦｋをチューニングポイントＦｐとして抽出することとしてもよい。
【００９０】
たとえば、合成指標値Ｔｋが最大の関数をチューニングポイントＦｐとすると、図５（ｂ）では、関数Ｆ３の合成指標値は「２５」であり、関数Ｆ４の合成指標値は「３５」であるため、合成指標値が高い関数Ｆ４がチューニングポイントＦｐとなる。
【００９１】
これにより、チューニングポイント候補Ｆｋが多数抽出された場合でも、チューニングポイントＦｐの絞込みをおこなうことができ、チューニング精度の向上を図ることができる。
【００９２】
なお、上述した取得部３０１、測定部３０２、合成部３０３、抽出部３０４、信頼度算出部３０５、および合成指標値算出部３０６は、具体的には、たとえば、図２に示したＲＯＭ２０２，ＲＡＭ２０３，ＨＤ２０５などの記録媒体に記録されているプログラムを、ＣＰＵ２０１に実行させることによって、またはＩ／Ｆ２０９によって、その機能を実現する。
【００９３】
（性能チューニング処理手順）
つぎに、この発明の実施の形態にかかる性能チューニング装置３００の性能チューニング処理手順について説明する。図７は、この発明の実施の形態にかかる性能チューニング装置３００の性能チューニング処理手順を示すフローチャートである。
【００９４】
図７において、まず、取得部３０１により複数の入力データＤｉが取得されるまで待ち受け（ステップＳ７０１：Ｎｏ）、複数の入力データＤｉが取得された場合（ステップＳ７０１：Ｙｅｓ）、複数の入力データＤｉを対象プログラムに与えて実行させ、関数Ｆｊごとの性能指標値Ｍｊｉを入力データＤｉごとに測定する（ステップＳ７０２）。
【００９５】
つぎに、合成部３０３により、その測定結果（性能指標値Ｍｊｉ）を関数Ｆｊごとに合成し（ステップＳ７０３）、抽出部３０４により、この合成結果に基づいて関数Ｆ１〜Ｆｍの中からチューニングポイント候補Ｆｋを抽出する（ステップＳ７０４）。
【００９６】
このように、複数の入力データＤｉの合成結果を用いてチューニングポイント候補Ｆｋを抽出することにより、チューニングポイント候補Ｆｋを容易に見出すことができる。これにより、チューニングポイント候補Ｆｋの性能指標値を改善することで、ある一つの入力データを与えた場合の性能だけが向上するのではなく、どのような入力データＤｉに対しても平均的に性能を向上させることができる。また、重み係数Ｃｉを定義することで、チューニングポイント候補Ｆｋの信頼性や抽出精度の向上を図ることができる。
【００９７】
このあと、信頼度算出部３０５により信頼度Ｅを算出する（ステップＳ７０５）。これにより、チューニングポイント候補Ｆｋの信頼性やチューニング精度の向上を図ることができる。また、合成指標値算出部３０６により、チューニングポイント候補Ｆｋにおける合成指標値Ｔｋを入力データＤｉごとに算出し（ステップＳ７０６）、抽出部３０４により、その算出結果に基づいてチューニングポイント候補Ｆｋの中からチューニングポイントＦｐを抽出する（ステップＳ７０７）。
【００９８】
そして、チューニングポイント候補Ｆｋ、信頼度Ｅ、チューニングポイントＦｐの出力処理（表示または印刷出力）をおこなう（ステップＳ７０８）。これにより、一連の処理を終了する。このように、１種類の性能指標値Ｍｋｉのみを用いてチューニングポイント候補Ｆｋを抽出するとチューニング余地が十分考慮されない可能性があるが、複数種類の性能指標値Ｍｋｉを合成することにより、チューニングポイント候補Ｆｋを絞り込むことができ、チューニングポイントＦｐの抽出精度の向上を図ることができる。
【００９９】
このように、上述した実施の形態によれば、人為的判断をおこなうことなく、精度の高いチューニングポイント候補Ｆｋの抽出が可能となり、ある一つの入力データの性能だけが向上するのではなく、どのような入力データに対しても平均的な性能向上を図ることができる。また、作業工数も大幅に削減できるため、設計期間の短縮化や設計者の労力負担軽減を図ることができる。
【０１００】
また、複数回（複数の入力データＤｉ）の性能測定において、性能測定時の属性情報等が大幅に異なる場合、測定結果をそのまま、すなわち属性情報を考慮せずに合成すると、不公平な合成となるが、属性情報で重み付けをして合成することにより、公平に合成することができるため、合成結果（合成性能指標値Ｓｊ）の信頼性や精度の向上を図ることができる。
【０１０１】
また、合成結果（合成性能指標値Ｓｊ）に対し付加情報として信頼度Ｅを出力することで、その合成結果（合成性能指標値Ｓｊ）がどれくらい経験を積んだ値なのか、どれくらい信頼性があるのかを判断することができ、チューニングポイント候補Ｆｋ，チューニングポイントＦｐの抽出精度の向上を図ることができる。
【０１０２】
また、１種類の性能指標値Ｍｋｉのみを用いてチューニングポイントＦｐを抽出するとチューニング余地が十分考慮されない可能性があるが、複数種類の性能指標値Ｍｋｉを合成することにより、チューニングポイントＦｐの抽出精度の向上を図ることができる。
【０１０３】
以上説明したように、この発明にかかる性能チューニングプログラム、該プログラムを記録した記録媒体、性能チューニング装置、および性能チューニング方法によれば、簡単かつ効率的に正確なチューニングポイントを自動で見出すことにより、プログラムの性能向上および開発者の負担軽減を図ることができる。
【０１０４】
なお、本実施の形態で説明した性能チューニング方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【０１０５】
（付記１）対象プログラムに与える複数の入力データを取得させる取得工程と、
前記取得工程によって取得された複数の入力データをそれぞれ前記対象プログラムに与えて実行させることにより、前記対象プログラム内の機能を特定する関数ごとの性能指標値を、前記入力データごとに測定させる測定工程と、
前記測定工程によって測定された前記入力データごとの性能指標値を、前記関数ごとに合成させる合成工程と、
前記合成工程によって合成された前記関数ごとの合成結果に基づいて、前記関数の中からチューニングポイントの候補となる関数を抽出させる抽出工程と、
をコンピュータに実行させる性能チューニングプログラム。
【０１０６】
（付記２）前記合成工程は、前記入力データに関する属性情報に基づいて、前記入力データごとの性能指標値を、前記関数ごとに合成させることを特徴とする付記１に記載の性能チューニングプログラム。
【０１０７】
（付記３）前記属性情報は、前記入力データのデータサイズであることを特徴とする付記２に記載の性能チューニングプログラム。
【０１０８】
（付記４）前記属性情報は、前記入力データの入力頻度であることを特徴とする付記２に記載の性能チューニングプログラム。
【０１０９】
（付記５）前記属性情報は、前記入力データに関する前記プログラムの実行ルートの網羅性に関する情報であることを特徴とする付記２に記載の性能チューニングプログラム。
【０１１０】
（付記６）前記測定工程によって測定された性能指標値の測定回数に基づいて、前記合成結果の信頼度を算出させる信頼度算出工程を前記コンピュータに実行させることを特徴とする付記１〜５のいずれか一つに記載の性能チューニングプログラム。
【０１１１】
（付記７）前記チューニングポイントの候補となる関数の前記入力データごとの性能指標値に基づいて、前記チューニングポイントの候補となる関数に対するチューニング判断の指標値を算出させる指標値算出工程を前記コンピュータに実行させることを特徴とする付記１〜６のいずれか一つに記載の性能チューニングプログラム。
【０１１２】
（付記８）前記指標値算出工程によって算出された算出結果に基づいて、前記抽出工程（以下、「第１の抽出工程」という）によって抽出されたチューニングポイントの候補となる関数の中から、チューニングポイントとなる関数を抽出させる第２の抽出工程を前記コンピュータに実行させることを特徴とする付記７に記載の性能チューニングプログラム。
【０１１３】
（付記９）付記１〜８のいずれか一つに記載の性能チューニングプログラムを記録した前記コンピュータに読み取り可能な記録媒体。
【０１１４】
（付記１０）対象プログラムに与える複数の入力データを取得する取得手段と、
前記取得手段によって取得された複数の入力データをそれぞれ前記対象プログラムに与えて実行させることにより、前記対象プログラム内の機能を特定する関数ごとの性能指標値を、前記入力データごとに測定する測定手段と、
前記測定手段によって測定された前記入力データごとの性能指標値を、前記関数ごとに合成する合成手段と、
前記合成手段によって合成された前記関数ごとの合成結果に基づいて、前記関数の中からチューニングポイントの候補となる関数を抽出する抽出手段と、
を備えることを特徴とする性能チューニング装置。
【０１１５】
（付記１１）対象プログラムに与える複数の入力データを取得する取得工程と、
前記取得工程によって取得された複数の入力データをそれぞれ前記対象プログラムに与えて実行させることにより、前記対象プログラム内の機能を特定する関数ごとの性能指標値を、前記入力データごとに測定する測定工程と、
前記測定工程によって測定された前記入力データごとの性能指標値を、前記関数ごとに合成する合成工程と、
前記合成工程によって合成された前記関数ごとの合成結果に基づいて、前記関数の中からチューニングポイントの候補となる関数を抽出する抽出工程と、
を含んだことを特徴とする性能チューニング方法。
【産業上の利用可能性】
【０１１６】
以上のように、この発明にかかる性能チューニングプログラム、該プログラムを記録した記録媒体、性能チューニング装置、および性能チューニング方法は、プログラムのチューニングに有用であり、特に関数が多いプログラムに適している。
【図面の簡単な説明】
【０１１７】
【図１】この発明の実施の形態にかかる性能チューニングの概要を示す説明図である。
【図２】この発明の実施の形態にかかる性能チューニング装置のハードウェア構成を示すブロック図である。
【図３】この発明の実施の形態にかかる性能チューニング装置の機能的構成を示すブロック図である。
【図４】関数ごとの性能指標値の一例を示すグラフである。
【図５】合成部による合成結果を示す説明図である。
【図６】合成指標値の算出例を示す図表である。
【図７】この発明の実施の形態にかかる性能チューニング装置の性能チューニング処理手順を示すフローチャートである。
【符号の説明】
【０１１８】
３００  性能チューニング装置
３０１  取得部
３０２  測定部
３０３  合成部
３０４  抽出部
３０５  信頼度算出部
３０６  合成指標値算出部
【図１】
0005431633.tif 000002
【図２】
0005431633.tif 000003
【図３】
0005431633.tif 000004
【図４】
0005431633.tif 000005
【図５】
0005431633.tif 000006
【図６】
0005431633.tif 000007
【図７】
0005431633.tif 000008