メイン関数を含む複数の関数を有し、該関数間で階層的に呼び出しが行われるソフトウェアアプリケーションをプロファイリングする方法であって、コンピュータにより前記複数の関数の各々を、前記メイン関数からの最小の呼び出し段数に従って、少なくとも最上位レベル及び最下位レベルを含む複数の階層レベルのうちの1つに分類するステップと、前記最上位レベルで開始して、現在レベルにおける関数群のサブセットを定めるステップと、前記サブセットの関数群に対してプロファイリングコードを付加あるいは有効化し、且つ前記ソフトウェアアプリケーションを実行することで、プロファイリングデータを生成するステップと、前記プロファイリングデータに基づいて前記関数群のうちの1つ以上を除去することにより、前記サブセットを縮小するステップと、前記サブセットを縮小するステップにて除去された関数によってのみ呼び出される関数に、選外関数としてマークを付すステップと、所定の階層レベルに到達するまで、前記現在レベルの下の次レベルから前記選外関数以外の関数群を前記縮小されたサブセットに追加して、前記プロファイリングデータを生成するステップ、前記サブセットを縮小するステップ、及び前記マークを付すステップを繰り返すステップと、を含む、方法。前記分類するステップは更に、前記複数の関数のコールグラフを決定することを有し、前記サブセットを縮小するステップは更に、前記除去された関数及び前記選外関数を前記コールグラフから消去することを有すること特徴とする請求項1記載の方法。前記分類するステップに先立って、プロファイリングメトリックを選択し、且つプロファイリングコードを用いずに前記ソフトウェアアプリケーションを実行することで、選択されたメトリックの基準値を確立するステップを更に有することを特徴とする、請求項1又は2に記載の方法。前記サブセットを縮小するステップは、関数を、それに関連するプロファイリングデータが前記プロファイリングメトリックに関する所定の条件を満たすか否かに基づいて除去することを含む、こと特徴とする請求項3に記載の方法。前記サブセットを縮小するステップは、前記プロファイリングメトリックに従って、プロファイリングされた関数をランク付けすることを含み、前記所定の条件は前記基準値のうちの所与の割合である、こと特徴とする請求項4に記載の方法。前記プロファイリングメトリックは、実行時間、メモリ使用状況、ディスク使用状況、及びハードウェアカウンタに基づくメトリックのうちの少なくとも1つである、こと特徴とする請求項5に記載の方法。前記所定の階層レベルは前記最下位レベルである、こと特徴とする請求項1乃至6の何れか一項に記載の方法。前記所定の階層レベルは、目標とする数又は割合の関数が選外となるか、除去されることになった階層レベルである、こと特徴とする請求項1乃至6の何れか一項に記載の方法。メイン関数を含む複数の関数を有し、該関数間で階層的に呼び出しが行われるソフトウェアアプリケーションを自動的にプロファイリングする装置であって、前記複数の関数の各々を、前記メイン関数からの最小の呼び出し段数に従って、少なくとも最上位レベル及び最下位レベルを含む複数の階層レベルのうちの1つに分類するように構成されたコード分析ユニットと、現在レベルにおける関数群のサブセットを記録するように構成された関数記憶ユニットと、前記サブセットの関数群の各々に対してプロファイリングコードを付加あるいは有効化するように構成されたインスツルメンテーションユニットと、前記ソフトウェアアプリケーションを実行して、プロファイリングデータを生成するように構成された実行ユニットと、前記実行ユニットによって生成されたプロファイリングデータを保持するプロファイルデータ記憶ユニットと、前記プロファイリングデータに基づいて関数を消去し、且つ消去された関数によってのみ呼び出される関数を除いた前記現在レベルの下の次レベルからの関数を記録するよう、前記関数記憶ユニットに命令するように構成された関数選択ユニットと、を含み、前記インスツルメンテーションユニット、前記実行ユニット、前記プロファイルデータ記憶ユニット、及び前記関数選択ユニットは、所定の階層レベルに到達するまで繰り返し動作するように構成される、装置。メイン関数を含む複数の関数を有し、該関数間で階層的に呼び出しが行われるソフトウェアアプリケーションをプロファイリングさせるプログラムであって、コンピュータに、前記複数の関数の各々を、前記メイン関数からの最小の呼び出し段数に従って、少なくとも最上位レベル及び最下位レベルを含む複数の階層レベルのうちの1つに分類するステップと、前記最上位レベルで開始して、現在レベルにおける関数群のサブセットを定めるステップと、前記サブセットの関数群に対してプロファイリングコードを付加あるいは有効化し、且つ前記ソフトウェアアプリケーションを実行することで、プロファイリングデータを生成するステップと、前記プロファイリングデータに基づいて前記サブセットから関数群のうちの1つ以上を除去することにより、前記サブセットを縮小するステップと、前記サブセットを縮小するステップにて除去された関数によってのみ呼び出される関数に、選外関数としてマークを付すステップと、所定の階層レベルに到達するまで、前記現在レベルの下の次レベルから前記選外関数以外の関数群を前記縮小されたサブセットに追加して、前記プロファイリングデータを生成するステップ、前記サブセットを縮小するステップ、及び前記マークを付すステップを繰り返すステップと、を含む処理を実行させるプログラム。上述のように、大規模ソフトウェアアプリケーションは、含まれる関数ファンクション数及び生成されるデータ量に起因して、プロファイリングすることが困難である。開示の機構は、時間を消費する人の介入の必要性を排除することによって、計装プロファイリングの処理を自動化して効率化するものである。本発明の第1の態様によれば、メイン関数を含む複数の関数を有し、該関数間で階層的に呼び出しが行われるソフトウェアアプリケーションをプロファイリングする方法が提供される。当該方法は、前記複数の関数の各々を、前記メイン関数からの最小の呼び出し段数に従って、少なくとも最上位レベル及び最下位レベルを含む複数の階層レベルのうちの1つに分類するステップと、前記最上位レベルで開始して、現在レベルにおける関数群のサブセットを定めるステップと、前記サブセットの関数群に対してプロファイリングコードを付加あるいは有効化し、且つ前記ソフトウェアアプリケーションを実行することで、プロファイリングデータを生成するステップと、前記プロファイリングデータに基づいて前記関数群のうちの1つ以上を除去することにより、前記サブセットを縮小するステップと、前記サブセットを縮小するステップにて除去された関数によってのみ呼び出される関数に、選外関数としてマークを付すステップと、所定の階層レベルに到達するまで、前記現在レベルの下の次レベルから前記選外関数以外の関数群を前記縮小されたサブセットに追加して、前記プロファイリングデータを生成するステップ、前記サブセットを縮小するステップ、及び前記マークを付すステップを繰り返すステップと、を含む。このプロセスは、人の介入なく自動的に実行されることができる。故に、本発明の一実施形態は、インスツルメンテーションによってプロファイリングする対象とすべきソフトウェアアプリケーション部分を定める自動化技術を提供し得る。ここで、分類するステップは更に、前記複数の関数のコールグラフを少なくとも概念的に決定することを有していてもよく、前記サブセットを縮小するステップは更に、除去された関数及び選外関数をコールグラフから消去することを有していてもよい。それにより、前記繰り返すステップの最後の繰り返しで実行した後の結果が、最適化されたプロファイリングコールグラフとなる。好ましくは、関数はコンパイル可能なコードの形態を有し、プロファイリングコードがコンパイラ又はプリプロセッサで付加されることを可能にする。代替的に、所望のサブセットの関数のみをプロファイリングするように、全ての関数に設けられたプロファイリングコードが選択的に有効化/無効化されてもよい。また好ましくは、前記分類するステップに先立って、プロファイリングメトリックを選択し、且つプロファイリングコードを用いずにソフトウェアアプリケーションを実行することで、選択されたメトリックの基準値を確立するステップが存在する。その場合、前記サブセットを縮小するステップは好ましくは、関数を、それに関連するプロファイリングデータがプロファイリングメトリックに関する所定の条件を満たすか否かに基づいて除去することを含む。これは、所定の条件は基準値のうちの所与の割合であるとして、プロファイリングメトリックに従って、プロファイリングされた関数をランク付けすることを含むことができる。好ましくは、メトリックは、実行時間、メモリ使用状況、ディスク使用状況、及びハードウェアカウンタに基づくメトリックのうちの少なくとも1つである。このプロセスの実行が完了する上記所定の階層レベルは好ましくは最下位レベルである。代替的に、このプロセスは、目標とする数又は割合の関数が選外となるか除去されるかしたときに停止されてもよい。最適化されたプロファイリングコールグラフを生成する場合、これは好ましくはユーザに表示される。得られた結果は、所定の階層レベルに到達したときに得られたサブセットに含まれる関数のコードを自動あるいは手動で最適化するために使用され得る。本発明の第2の態様によれば、メイン関数を含む複数の関数を有し、該関数間で階層的に呼び出しが行われるソフトウェアアプリケーションを自動的にプロファイリングする装置が提供される。当該装置は、複数の関数の各々を、メイン関数からの最小の呼び出し段数に従って、少なくとも最上位レベル及び最下位レベルを含む複数の階層レベルのうちの1つに分類するように構成されたコード分析ユニットと、現在レベルにおける関数群のサブセットを記録するように構成された関数記憶ユニットと、サブセットの関数群の各々に対してプロファイリングコードを付加あるいは有効化するように構成されたインスツルメンテーションユニットと、ソフトウェアアプリケーションを実行して、プロファイリングデータを生成するように構成された実行ユニットと、実行ユニットによって生成されたプロファイリングデータを保持するプロファイルデータ記憶ユニットと、プロファイリングデータに基づいて関数を消去し、且つ消去された関数によってのみ呼び出される関数を除いた現在レベルの下の次レベルからの関数を記録するよう、関数記憶ユニットに命令するように構成された関数選択ユニットと、を含み、インスツルメンテーションユニット、実行ユニット、プロファイルデータ記憶ユニット、及び関数選択ユニットは、所定の階層レベルに到達するまで繰り返し動作するように構成される。本発明の第3の態様によれば、メイン関数を含む複数の関数を有し、該関数間で階層的に呼び出しが行われるソフトウェアアプリケーションをプロファイリングさせるプログラムが提供される。当該プログラムは、コンピュータによって実行されるときに該コンピュータに、前記複数の関数の各々を、前記メイン関数からの最小の呼び出し段数に従って、少なくとも最上位レベル及び最下位レベルを含む複数の階層レベルのうちの1つに分類するステップと、前記最上位レベルで開始して、現在レベルにおける関数群のサブセットを定めるステップと、前記サブセットの関数群に対してプロファイリングコードを付加あるいは有効化し、且つ前記ソフトウェアアプリケーションを実行することで、プロファイリングデータを生成するステップと、前記プロファイリングデータに基づいて前記サブセットから関数群のうちの1つ以上を除去することにより、前記サブセットを縮小するステップと、前記サブセットを縮小するステップにて除去された関数によってのみ呼び出される関数に、選外関数としてマークを付すステップと、所定の階層レベルに到達するまで、前記現在レベルの下の次レベルから前記選外関数以外の関数群を前記縮小されたサブセットに追加して、前記プロファイリングデータを生成するステップ、前記サブセットを縮小するステップ、及び前記マークを付すステップを繰り返すステップと、を含む処理を実行させる。図1を参照するに、従来技術に従ったソフトウェアアプリケーション以下、単にプログラムと呼ぶのコンパイル及び計装に伴う処理が模式図の形態で示されている。コンピュータシステム1は、プログラムを格納するメモリ10通常、ソリッドステートメモリに加えて、ハードディスク記憶装置の形態をとると、プログラム内の命令を実行するCPU20とを有している。単純化のために単一のCPUが示されているが、実際には、大規模ソフトウェアアプリケーションは何百又は何千といったCPU上で並列に実行され得る。既に述べたように、プログラムは数多くの関数又はモジュールからなる。これらの各々は、一般的に、プログラマーが理解しやすい高級言語ソースコードで記述される。コンピュータシステム1のCPU20によって実行されることが可能になる前に、各ソースモジュール11は、コンパイラ12にて、CPU20によって理解される機械語オブジェクトコードのレベルへとコンパイルされる中間段階が含まれてもよいが、ここでは単純化のために省略する。モジュールを計装するため、一般的にこのコンパイル段階に、付加的な命令フックの形態をしたインスツルメンテーション13が適用される。しかしながら、インスツルメンテーションは、より前にコンパイル前の前処理として、あるいは後にオブジェクトコードの変更によって導入されてもよい。得られたオブジェクトモジュール14は、プログラムの機能を実行するために相互作用する多数のモジュールのうちの1つである。複数のオブジェクトモジュールを結び付けるため、及び標準コードのライブラリ16に結びつくことによって下位関数を付加するため、リンカー15が使用される。これの一例は、Cプログラミング言語においてメモリを割り当てる下位関数であり、実行ファイルにリンクされたライブラリによって提供されるmalloc及び関連する関数によって提供される。ライブラリ自体がプロファイリング用フックを備えてもよい。その結果、実行可能アプリケーション17の形態をしたプログラムが得られる。この実行ファイルに含まれる機械語レベルの命令を実行することにより、CPUはプログラムを走らせて結果を生成する。具体的には、インスツルメンテーションコードが様々な関数間での呼び出しを監視するときに、計装プログラムはプロファイルデータ40を生成する。上述のように、プロファイリング指標メトリックの可能な限り多くを明らかにすることと過度に多くの情報を生成することとの間にバランスが存在する。これは、典型的に、アプリケーションの予備知識を用いて、プロファイリングすべきプログラムの領域を手動選択することによって、手作業で対処されるが、それは面倒で時間がかかり得るものである。以下に説明する本発明を具現化する方法は、プロファイリングすべき最適な関数の組関数セットをどのようにして自動的に選択するかに関係する。それは、コールグラフ内の異なる階層レベルの関数群を順次組み込む反復的な処理であり、プロファイリングに最も重要な関数群のサブセットを残すように不要な関数群を除去するものである。図2のフローチャートは、プロファイリングすべき最適な関数セットを生成するために使用される処理の概略を示している。この処理は計装されていないプログラムで開始すると仮定している。開始条件は、この方法で使用されるプロファイリングメトリックを選択することを含む。これは、どの関数を含有あるいは排除すべきという形態の判断を決するための基準として使用されるパラメータである。典型的に、プロファイリングメトリックは時間であり、より具体的には、各関数並びに、その子すなわち被発呼側関数の実行によって占有される時間である。しかしながら、後述するように、その他の可能なプロファイリングメトリックも存在する。以下にて列挙するステップ群の幾らかを実行するためにユーザによって操作されるプロファイリング装置を参照することとする。これは、プログラムを実行するために使用されるものとは別個のコンピュータであってもよいし、あるいは、より一般的には、例えば図1のコンピュータシステム1などの実行コンピュータそれ自体であってもよい。故に、汎用コンピュータであっても、コード分析ユニット、関数記憶ユニット、インスツルメンテーションユニット、実行ユニット、プロファイルデータ記憶ユニット及び関数選択ユニットを含むプロファイリング装置として動作することができる。本発明を具現化する方法は以下のステップを含む。ST10.プロファイリングなしでプログラムをコンパイルする。これにより、計装されていないプログラム非計装プログラムが、実行コンピュータによって通常のように実行されることが可能になる。ST12.非計装プログラムを実行することに基づいて、検討するプロファイリングメトリックの基準値を決定する。上述のように、プロファイリングメトリックは典型的に時間であり、その場合、基準値は、プロファイリングが行われないときに該プログラムが要する総時間とし得る。この基準値又は、そのうちの或る割合は、後の関数選択のための閾値として使用される。ST14.実行ファイルを分析することによってコールグラフを決定する。これにより、図3に示すCG1のような、全ての関数及びそれらの呼び出し関係を示すコールグラフが得られる。図3は、非常に単純な一例を示しており、関数群はメイン関数mainからの呼び出し数に従った階層レベルにランク分けされている。全ての呼び出し経路が実行中に辿られるわけではないので、このコールグラフは過剰なものである。この種のコールグラフを静的コールグラフとも呼ぶ。ST16.main関数からの呼び出しステップ数に従って、関数群を複数の階層レベルにランク分けする。コールグラフに関して、これは、関数がメイン関数から幾つのエッジだけ離れているかと表現してもよい。図3に示すように、メイン関数S0又ははコールグラフCG1の先頭にあり、実行はここで開始して終了する。メイン関数は図3のレベル0を占有している。S0によって直接呼び出される関数群すなわち、S0の被発呼側関数がレベル1を形成する。第1レベル内の関数によって呼び出される関数群がレベル2を構成し、等々と続く。レベル2はレベル1の次レベルと呼ばれ、以下同様である。或る関数が2つ以上の上位関数によって呼び出される場合、その関数のレベルは、メイン関数から数えた最小の呼び出し数によって決定される。一例として、図3の関数S8は、呼び出しに関して通り得る2つの経路:経路1:S0→S3→S8経路2:S0→S2→S7→S13→S8を有している。S8は図3のコールグラフではレベル2に示されている。レベル0から数えた最小の呼び出し数が2だからである。ST18.プロファイリングされた関数のリストに第1レベルの関数を追加する。換言すれば、この最初の繰り返し反復において、レベル1内の全ての関数図3では、S1、S2及びS3が存在を含む関数リスト又は関数セット以下ではサブセットとも称するが作成される。レベル1は、当該処理によって検討中の現在レベルとなる。ST20.適切なプロファイリングフックを用いてプログラムを再コンパイルする。すなわち、リスト内の関数のみにインスツルメンテーションコードが付加されるあるいは、有効にされる―以下参照。システム依存問題に対処する、あるいは特別な機能フィーチャをイネーブル/ディセーブルするよう、図1のコンパイラ12、又はコンパイル前にソースコードを変更するプリプロセッサの何れかによるプロファイリングフックの自動挿入を用いて計装プロファイリングが実行される。ST22.こうして再コンパイルされたプログラムを走らせ、プロファイリングデータを収集する。このプロファイリングデータは、当然ながら、リスト内の関数に限定されており、故に、サイズ的に比較的管理しやすいとともに、全体的なプログラム実行にあまり影響しない。ST24.プロファイリングされた関数群をプロファイリングメトリックに従ってランク付ける。一例として時間を考えると、リスト内の関数群は、実行時間その関数及びその被発呼側関数すなわち子関数を実行することによって占有される時間の短い順昇順に並べられる。ST26.メトリックの閾値割合に到達するまで、最小の関数を除去削除する。すなわち、例えば占有時間の約5未満といった、メトリックの所与の割合より小さい割合を占める関数を取り除くことによって、リストが縮小される。以下では、これらを被除去関数と呼ぶ。また、これらの被除去関数によってのみ呼び出される関数を見出し、更なる検討から無視されるようにマークを付す。以下では、これらを選外関数と呼ぶ。ST28.プロファイリングコールグラフから被除去関数及び選外関数を除去する。換言すれば、ST26後に残った関数のみを含めることによって、コールグラフを更新するユーザに実際に表示されるか、あるいはプロファイリング装置内に単に概念的に存在するかに拘わらず。留意すべきことには、これは、現在レベルから除去された関数だけでなく、被除去関数の1つ以上によってのみ呼び出されるものであることに基づいて退けられた下位レベルの関数をも除去する。すなわち、現在レベルの関数を除去することは、それより下位のレベルが再計算されることを可能にするとともに、メイン関数への経路をもはや有さない孤児関数が除去されることを可能にする。こうする理由は、プロファイリングオーバヘッドは、実行されるインスツルメンテーション呼び出しの数に比例し、数多くの短期間呼び出し関数は、プロファイリングメトリックのうちの大きな割合を占めることなくオーバヘッドに大きく影響するためである。結果として、図4のものと同様の縮小されたコールグラフが得られる図4は後の処理段階を示している。ST30.プロファイリングされた関数のリストに次レベルの関数群を追加する。故に、最初の繰り返しにおいて、レベル2の残っている関数が、リスト内に依然としてあるレベル1の関数に追加される。ST32.全ての関数がプロファイリング又は無視除去/選外の何れかを受けるまで、あるいは所定のレベルに到達するまで、ST20からST28を繰り返す。図3の単純な例においては、階層の最下位レベルであるCG1のレベル3に到達するのに二度の反復で十分である。一般的に、処理を最下位レベルまで続けることが常に好ましい。しかしながら、大規模且つ複雑な現実の例においては、コールグラフ内に多数のレベルが存在し、必要な時間及び労力を低減するため、場合により更なる作業に先立って大まかな概略を得るために、プロファイリングは所定数の上位レベルに制限され得る。上記所定のレベルは、関数群のうちの所望の数又は割合が排除選外あるいは除去されることとなったレベルとしてもよい。図4は、最初の2つのレベルがプロファイリングされた後にプロファイリングコールグラフがどのように見え得るかの一例として、更新されたコールグラフCG2を示している。なお、S2はこの単純な例において唯一残っているレベル1の関数である。関数S1及びS3、並びにS1の子であるS4は、上述のステップST28の最初の繰り返しで除去されている。さらに、関数S6が2回目の繰り返しにて除去されている。3番目のレベル2の関数S8は、下位関数S13の被発呼側であるが故に単なるS3の子ではない図3参照ので残されている。従って、最初の繰り返しでS3は除去されているが、S8はその段階で除去されていない。処理の最終結果として、プロファイリング装置は、プロファイリングに非常に重要な関数、すなわち、プロファイリングメトリックに関して非常に興味のある関数のみを含むという意味で、最適化された関数のサブセットを生み出す。換言すれば、この方法の目的は、開始点として全ての関数のプロファイリングを採用するのではなく、プロファイリングのないところから開始して、その後に、タイミングを許容できないほど歪ませることなく重要な特徴を捉えることが出来るプロファイリングを組み込むことである。上述の反復処理は、幾らかの時間を要するものではあるが、全ての関数のプロファイリングデータを収集することなしに、最も重要な関数群に関してプロファイリングデータを取得することを可能にする。また、場合により何時間又は何日も要する完全な実行を行う代わりに、制限ベースあるいはテストベースで例えば、比較的小さい試験データセットを用いてプログラムの実行をプロファイリングすることによって、処理を実行することが可能である。言及しておくが、例えばプロファイリングメトリックなどの開始条件がいったん設定されると、この処理は人の介入なく自動的に進むようにされることができる。斯くして自動的に生成された関数のサブセットは、当然ながら、人であるユーザによって改訂されてもよいが、その場合であっても、ユーザの負担は、プロファイリング/最適化されるべきコードの領域群を手動選択する作業と比較して大いに低減される。図5は、最適化された最終的なプロファイリングコールグラフの一例を示している。この図は、メイン関数S0の他に、14個の関数S1-S14のうちの7個のみを含んでいる。使用されるメトリック、その基準値及び閾値に応じて、より多く、あるいはより少ない関数が本発明に係る方法によって除去され得る。故に、この単純な例においてのように元の関数群のうちの半分を退けるのではなく、90又はそれより多くが退けられてもよい。排除される関数の割合が前もって決定されて、所望の結果を達成するように、開始条件及び/又は処理を終了させる階層レベルが適切に変化されてもよい。上述の関数のサブセットは、更なるプロファイリング又は更に徹底的なプロファイリングに掛けられてもよいし、あるいは直接的に、例えば手動再設定又は特別な最適化コンパイラによる再コンパイルなどの最適化技術の対象とされてもよい。図5はまた、処理が進むにつれて関数の階層レベルがどのように変化し得るかを例示している。換言すれば、コールグラフは固定されたものではなく、反復ごとに改編される。見て取れるように、先に言及したS8はレベルを移動させている。上述のように、或る関数が2つ以上の上位関数によって呼び出される場合、該関数のレベルはメイン関数から数えた最小の呼び出し数によって決定される。図3に示したように、S8は元々はレベル2にあったS0→S3→S8。しかしながら、この経路はS3が除外された時に除去されている。故に、S8はCG1でのレベル2からCG3でのレベル4呼び出し経路S0→S2→S7→S13→S8によるに移動している。各レベルでメトリックを正確に計上するとともに、各レベルでプロファイリングオーバヘッドがどこに由来するかを知り、それにより関数を適切に除外することが重要である。これが意味することは、或る関数が複数のレベル内にある場合には、インスツルメンテーションを有する1つと有しない1つとの、関数の2つのインスタンスが存在する必要があるということである。インスツルメンテーションを有する計装された関数はプロファイリングコールグラフ内の関数から呼び出され、通常の関数は、未だ計装されていない関数によって呼び出される。この点を更に説明するために、図6は、或る関数ラベル3を付すが上位レベルにある複数の関数によって呼び出され得る様々なケースを例示している。この図において、Aはプロファイリングされていないすなわち、インスツルメンテーションコードを有しない、あるいは該コードが無効化されている関数を表し、Bはプロファイリングを付加/有効化した関数を表しているこのA/Bのラベルは、ここでは、コールグラフから関数を省略することの代替手段として使用されている。図6aに示すように、関数3は、プロファイリングされていない関数A3として未プロファイリング状態で開始し、最上位レベルの関数によって呼び出される2つの上位レベル関数1及び2によって呼び出されると仮定する。図6のb-dに示すように、最上位レベルの関数がプロファイリングされる、すなわち、B0と見なされるセットに含められるとする。B0から関数3には2つの別々のブランチが存在し、関数3のプロファイリングには以下の3つの可能性が存在する:i図6bに示すように、何れのブランチにおいてもプロファイリングされない;ii図6cに示すように、一方のブランチでプロファイリングされるが、他方ではされない。この場合、プロファイリングされる1つB3及びされない1つA3である関数3の2つのインスタンスを管理することが必要である;iii図6dに示すように、双方のブランチでプロファイリングされる。この場合、単一の計装された関数の複製B3が存在する。図7は、処理の様々な繰り返しでのコールグラフを、実行時間のインジケータとともに示している。図6においてのように、Aはプロファイリングされない関数を表し、Bはプロファイリングされる関数を表している。アプリケーションが図7aに示すコールグラフで8個の関数A0-A7を有しているとする。最初のステップにて、アプリケーションは、上述のように如何なるインスツルメンテーションもなく走らされ、プロファイリングメトリックこの場合、時間の基準値が提供される。これは図7bに反復0として示されている。次に、レベル1の関数B1、B2及びB3が検討中のセットに追加される。換言すれば、これらの関数に対してインスツルメンテーションが付加/有効化される。なお、関数B2はレベル1に関してのみ追加されている。換言すれば、関数2へと上位に戻るA6からの関数呼び出しは、図7cの右側の変更コールグラフに示されるように、この関数の第2の下位レベルインスタンスA2によって説明される。アプリケーションが再び走らされ反復1、図7cの左側部分に示すように、実行時間はプロファイリングオーバヘッドのために少々長くなる。この時点で、関数B3は、実行時間のうちの小さい部分図7cの下側のタイムバーのうちの最も右側の部分で指し示されるのみを占めるので落とされる。そして、関数A7はB3によってのみ呼び出されるので無視されることができる。残りの次レベルの関数A4、A5及びA6がセットに追加されてB4、B5及びB6になっている、反復2が実行される図7d。この場合、比較的長い実行時間になっている。反復1図7cと反復2図7dとの間で、プロファイリングによるオーバヘッドは、許容可能レベルを超えて増大している。レベル1の関数B1及びB2に関して報告される時間の変化を調べることにより、これがB1の子によるものであることが分かる。従って、B6に加えて、B1によってのみ呼び出される関数B4も落とされる。関数B1及びB2から呼び出される関数B5は、B1によって呼び出されるときは落とされ、B2によって呼び出されるときは残される。図7eには、より扱いやすい実行時間なおも反復2にあるを有する縮小された関数セットが、ラベル付けしたコールグラフとともに示されている。プロファイリングメトリックアプリケーションの性能を測定するために使用可能なプロファイリングメトリックは数多く存在する。この機構に関する主な要件は、特定の関数に関するメトリックの値が、親によって呼び出される全ての子の値を含むことである。経過時間:或る関数にて費やされる時間が、最も一般的に使用される性能メトリックである。メモリ:割り当てられるメモリ量も重要なメトリックである。しかしながら、子関数にて割り当てられるメモリの詳細は親関数には利用可能でない。これに対処するためには、malloc又は何らかの等価な関数がメモリを割り当てるとき常に共有カウンタを更新する代替的なシステムライブラリを用いてアプリケーションをリンクすることが必要である。そして、アプリケーションが或る関数に出入りする時にこのカウンタの値がアクセスされ、親関数及び子関数によって割り当てられたメモリ量が決定される。ディスク使用状況:ディスクに読み書きされるデータの量は性能に影響を及ぼす。これは、メモリ使用状況を測定することに関して概説したのと等価な手順を用いて測定することができる。ハードウェアカウンタ:ハードウェア性能カウンタは、例えば命令数、キャッシュミス及びTLBミスなどの有用なプロファイリング情報を測定している。或る関数に出入りする時に値を記録することにより、これらのカウンタをプロファイリングメトリックとして使用することができる。以上から明らかなように、一部のメトリックは、プログラム自体の外部の要因に依存し、故に、ライブラリ内においてか、あるいは場合によりディスクアクセスを捕捉するオペレーティングシステムレベルにおいてかの何れかで、実行ファイル自体の外部のプロファイリングフックを必要とする。上述のメトリックは、或る程度、相互に関係があり、しばしば、互いに逆の関係にある。例えば、非常に高速に動作するようにコード化された関数は、多くのメモリを占有し得る。あるいは、メモリ使用量を低く維持するように記述された関数は、多くのディスクアクセスを必要とし得る。従って、処理の最終結果は、使用されるメトリックに応じて異なったものとなり得る。本発明に係る方法は、異なる複数のメトリックを用いて繰り返されることが可能であり、関数のサブセットに磨きをかけるために、それぞれの結果を比較することができる。例えば、個々のメトリックの各々に関して特定された関数を組み合わせ、関数の上位集合を形成し得る。斯くして、2つ以上のメトリックの必要性とバランスさせて最適化が実行され得る。本発明に係る方法を実行した結果は、一般的に、プログラムを実行するコンピュータシステムのハードウェア構成にも依存する。しかしながら、このことは通常のプロファイリングの状況と異なるものではなく、最適化の目的はしばしば、特定のシステム上で良好に動作するようにプログラム恐らくは、元々において、異なるハードウェア技術用に、あるいは更には異なる言語で記述されるを最適化することである。故に、本発明の一実施形態は、以下の条件を満足しながらアプリケーションプロファイリングを実行し得る:例えば経過時間などの特定のメトリックのうちの高い割合を占める関数を決定する;それら関数のコールグラフを決定する;プロファイリングの時間歪みを最小化する;プロファイリングデータの量を最小化する;人の介入なく作動する。本発明の範囲内で様々な変形が可能である。以上の説明において、プロファイリングコードはコンパイラによって、あるいはコンパイル前にプリプロセッサによって付加されている。しかしながら、インスツルメンテーションはオブジェクトコードに付加されることも可能である。この変形は、上述のステップST20適切なプロファイリングフックを用いて再コンパイルを、バイナリインスツルメンテーションを実行してプロファイリングフックを付加/除去に変更することを必要とする。他の1つの変形は、全ての関数用のプロファイリングフックを前もって、例えばコンパイル中に設け、その後の実行時に、それらを選択的に有効化/無効化イネーブル/ディセーブルすることを伴う。関連した技術が、IBM社への米国特許第5960198号に記載されている。この場合にプロファイリングフックを無効化することは、リストから関数を除去することと等価であり、プロファイリングフックを有効化することは、対応する関数をリストに追加することである。故に、この例において、上述のステップST20及びST22は、選択されたプロファイリングフックを有効又は無効にしてプログラムを走らせることという単一のステップで置き換えられる。プロファイリングメトリックに基づいて閾値を指定することに代えて、あるいは加えて、最終的なサブセットに含めるべき関数の目標数を設定してもよい。以上の説明はプロファイリングメトリックの閾値割合を参照している。これは必ずしも不可欠なものではなく、より一般的には、メトリックに関する何らかの所定の基準を満たすあるいは満たさない関数を除去することが可能である。コールグラフを参照してきたが、実際のコールグラフをユーザに表示する必要はない。コールグラフはプロファイリング装置内に、単に概念的に、あるいは単に含蓄的に存在していてもよい。また、プロファイリング装置が図3の完全なコールグラフCG1を取得する必要はなく、これは単に理解を支援するものとして含められているに過ぎない。装置は単純に、未調査の下位レベルにある関数を意識することなく、処理の次の反復に必要な情報、換言すれば、それまでに選択された関数によって直接的に呼び出される関数だけを計算してもよい。上述のように、本発明に係る方法を実行するために使用される装置は、プログラムそれ自体を実行するために使用されるのと同一のコンピュータシステムであってもよいし、別個のコンピュータであってもよい。何れにしても、本発明はコンピュータ読み取り可能コードにて具現化され得る。このようなコードはコンピュータ読み取り可能媒体に格納され得る。一例として、図8は、本発明に係る方法を実行する装置を模式的に示している。実際には、この装置は、アプリケーションを走らせ、且つここに例示する特定のユニット又は部分を提供するように更にプログラムされた汎用コンピュータシステムの形態をとる。アプリケーション17は、例えば大型コンピュータシステムのハードディスクアレイなどのメモリ31内に保持されている。コード分析ユニット32が、アプリケーションコードを調べて、アプリケーション内の構成関数を最上位S0から最下位までレベルごとに分類する。関数記憶ユニット33が、検討中の現在の関数サブセットすなわち、上述のように、所与のレベルにある関数群を何らかの手法で記録する。これは、それぞれのコードブロック自体ではなく、各関数のポインタ又はIDを格納することによって達成され得る。インスツルメンテーションユニット34が、上述の技術のうちの1つを用いて、現在サブセット内の各関数用のプロファイリングコードを付加あるいは有効化し、これを格納されたアプリケーション17に適用する。実行ユニット36が、現在付加/有効化されているプロファイリングコードを含むアプリケーションを走らせ、それにより、現在の関数サブセットに関するプロファイリングデータを生成する。このプロファイリングデータはプロファイルデータ記憶ユニット37に格納される。プロファイリングデータの結果は関数選択ユニット38に利用可能にされ、関数選択ユニット38は、選択されたプロファイリングメトリック上述の説明を参照に基づいて、検討から除外されるべき関数を決定する。関数記憶ユニット33が、無視されるべきものとして関数選択ユニット38によって特定された関数を消去し、且つコード分析ユニット32によって提供される情報を用いて次レベルからの関数を追加することによって、関数のサブセットを更新する。そして、インスツルメンテーション、実行、及びプロファイリングデータの分析の処理が、上述のようにして繰り返される。以上の説明に関し、更に以下の付記を開示する。付記1メイン関数を含む複数の関数を有し、該関数間で階層的に呼び出しが行われるソフトウェアアプリケーションをプロファイリングする方法であって、前記複数の関数の各々を、前記メイン関数からの最小の呼び出し段数に従って、少なくとも最上位レベル及び最下位レベルを含む複数の階層レベルのうちの1つに分類するステップと、前記最上位レベルで開始して、現在レベルにおける関数群のサブセットを定めるステップと、前記サブセットの関数群に対してプロファイリングコードを付加あるいは有効化し、且つ前記ソフトウェアアプリケーションを実行することで、プロファイリングデータを生成するステップと、前記プロファイリングデータに基づいて前記関数群のうちの1つ以上を除去することにより、前記サブセットを縮小するステップと、前記サブセットを縮小するステップにて除去された関数によってのみ呼び出される関数に、選外関数としてマークを付すステップと、所定の階層レベルに到達するまで、前記現在レベルの下の次レベルから前記選外関数以外の関数群を前記縮小されたサブセットに追加して、前記プロファイリングデータを生成するステップ、前記サブセットを縮小するステップ、及び前記マークを付すステップを繰り返すステップと、を含む、方法。付記2前記分類するステップは更に、前記複数の関数のコールグラフを決定することを有し、前記サブセットを縮小するステップは更に、前記除去された関数及び前記選外関数を前記コールグラフから消去することを有すること特徴とする付記1に記載の方法。付記3前記関数はコンパイル可能なコードの形態を有すること特徴とする付記1又は2に記載の方法。付記4前記プロファイリングデータを生成するステップは、各関数をコンパイルする処理の間又は前に、前記プロファイリングコードを付加すること特徴とする付記3に記載の方法。付記5前記プロファイリングデータを生成するステップは、前記関数に既に設けられているプロファイリングコードを有効化することを特徴とする付記3に記載の方法。付記6前記分類するステップに先立って、プロファイリングメトリックを選択し、且つプロファイリングコードを用いずに前記ソフトウェアアプリケーションを実行することで、選択されたメトリックの基準値を確立するステップを更に有することを特徴とする、付記1乃至5の何れか一項に記載の方法。付記7前記サブセットを縮小するステップは、関数を、それに関連するプロファイリングデータが前記プロファイリングメトリックに関する所定の条件を満たすか否かに基づいて除去することを含む、ことを特徴とする付記6に記載の方法。付記8前記サブセットを縮小するステップは、前記プロファイリングメトリックに従って、プロファイリングされた関数をランク付けすることを含み、前記所定の条件は前記基準値のうちの所与の割合である、ことを特徴とする付記7に記載の方法。付記9前記プロファイリングメトリックは、実行時間、メモリ使用状況、ディスク使用状況、及びハードウェアカウンタに基づくメトリックのうちの少なくとも1つである、ことを特徴とする付記8に記載の方法。付記10前記所定の階層レベルは前記最下位レベルである、ことを特徴とする付記1乃至9の何れか一項に記載の方法。付記11前記所定の階層レベルは、目標とする数又は割合の関数が選外となるか、除去されることになった階層レベルである、ことを特徴とする付記1乃至9の何れか一項に記載の方法。付記12前記最適化されたコールグラフをユーザに表示するステップ、を更に有することを特徴とする付記2に記載の方法。付記13前記所定の階層レベルに到達したときに得られた前記サブセットに含まれる関数のコードを最適化するステップ、を更に有することを特徴とする付記1乃至12の何れか一項に記載の方法。付記14メイン関数を含む複数の関数を有し、該関数間で階層的に呼び出しが行われるソフトウェアアプリケーションを自動的にプロファイリングする装置であって、前記複数の関数の各々を、前記メイン関数からの最小の呼び出し段数に従って、少なくとも最上位レベル及び最下位レベルを含む複数の階層レベルのうちの1つに分類するように構成されたコード分析ユニットと、現在レベルにおける関数群のサブセットを記録するように構成された関数記憶ユニットと、前記サブセットの関数群の各々に対してプロファイリングコードを付加あるいは有効化するように構成されたインスツルメンテーションユニットと、前記ソフトウェアアプリケーションを実行して、プロファイリングデータを生成するように構成された実行ユニットと、前記実行ユニットによって生成されたプロファイリングデータを保持するプロファイルデータ記憶ユニットと、前記プロファイリングデータに基づいて関数を消去し、且つ消去された関数によってのみ呼び出される関数を除いた前記現在レベルの下の次レベルからの関数を記録するよう、前記関数記憶ユニットに命令するように構成された関数選択ユニットと、を含み、前記インスツルメンテーションユニット、前記実行ユニット、前記プロファイルデータ記憶ユニット、及び前記関数選択ユニットは、所定の階層レベルに到達するまで繰り返し動作するように構成される、装置。付記15メイン関数を含む複数の関数を有し、該関数間で階層的に呼び出しが行われるソフトウェアアプリケーションをプロファイリングさせるプログラムであって、コンピュータに、前記複数の関数の各々を、前記メイン関数からの最小の呼び出し段数に従って、少なくとも最上位レベル及び最下位レベルを含む複数の階層レベルのうちの1つに分類するステップと、前記最上位レベルで開始して、現在レベルにおける関数群のサブセットを定めるステップと、前記サブセットの関数群に対してプロファイリングコードを付加あるいは有効化し、且つ前記ソフトウェアアプリケーションを実行することで、プロファイリングデータを生成するステップと、前記プロファイリングデータに基づいて前記サブセットから関数群のうちの1つ以上を除去することにより、前記サブセットを縮小するステップと、前記サブセットを縮小するステップにて除去された関数によってのみ呼び出される関数に、選外関数としてマークを付すステップと、所定の階層レベルに到達するまで、前記現在レベルの下の次レベルから前記選外関数以外の関数群を前記縮小されたサブセットに追加して、前記プロファイリングデータを生成するステップ、前記サブセットを縮小するステップ、及び前記マークを付すステップを繰り返すステップと、を含む処理を実行させるプログラム。