性能情報(プロフィール)は、アプリケーションの性能を分析するために使います。
アプリケーションの性能は、関数が何回、呼ばれるか、これらの関数を実行するのに、どのくらい時間がかかるか、そして、どの関数が他の関数を呼ぶかかによって、測定することができます。
これは、実行するために時間が長くかかるか、またはあまりに何回も実行されるかもしれない、そして、最適化のために見直すの価値がある関数を、特定するために役立ちます。
FreeBASIC は、アプリケーションの実行を分析するのに GPROF を使用します。
プロファイラー情報は、プログラムが動いている間、集められます。そして、GPROF は、その後集まったデータを報告するために、使われます。
プログラムの性能情報を描く3つの基本的なステップは、以下の通りです。
- 1)
プログラムを、性能情報のために用意するために、ソースを -profile オプションでコンパイルします。
- 2)
プログラムを動かして、収集情報(gmon.out に格納されます)します。
- 3)
GPROF を使って、集められた情報を分析します。
GPROF に関する完全な解説は、下記で参照下さい:
https://ftp.gnu.org/old-gnu/Manuals/gprof-2.9.1/html_mono/gprof.html
上の文書のURLが変更になっていたら、「GNU GPROF」で、ウェブを検索してください。そうすれば、関連リンクが見つかるでしょう。
FreeBASIC は、関数プロファイリングをサポートします。
ベーシック・ブロックや、行単位のプロファイリングでは、ありません。
プロファイリングのために、プログラムを準備する
コードを、
-profile コマンドライン・オプションでコンパイルするだけで、性能情報を描くことができます。
-profile オプションを、FreeBASIC コンパイラに渡すと、プログラムの性能情報を描くように準備されます。
これは、それぞれの関数の始めだけでなく、アプリケーションの始めに、特別なスタートアップ・コードを挿入するように、コンパイラに伝えます。
プログラムの性能情報を描く
プログラムの実行を分析するのに必要な情報は、プログラムが動いている間に、集められます。
プログラムを動かして、関数呼び出し情報を、収集してください。
この情報は、自動的に、プログラムと同じディレクトリの gmon.out という名前のファイルに、格納されます。
プログラムの出力を、分析する
GPROF を使って、出力を分析します。
GPROF のためのデフォルト・レポートは、それぞれの値の項目が意味することの記述を含んでいます。
GPROF を、始めて使うときには、最初に、デフォルト・レポートを作って、記述を読み通すとよいでしょう。
GPROF からの出力は、出力先変更で、ファイルに保存できます。
GPROF からの出力を、
profile.txt に保存する場合:
gprof program[.exe] > profile.txt
記述なしで、単純なレポートを表示させる場合:
gprof program[.exe] --brief --flat-profile > profile.txt
複数のセッションの結果を結合する
GPROF には、複数の実行セッションから結果を結合するのに便利な '--sum' オプションがあります。
使用可能な例を紹介します:
-
一度、あなたのプログラムを動かします。
これで、gmon.out が作成されます。
-
以下のコマンドを使用します:
mv gmon.out gmon.sum
または
rename gmon.out gmon.sum.
-
もう一度、あなたのプログラムを動かします。
これは、gmon.out に、新しいデータを作成します。
-
コマンドを使って、gmon.out の新しいデータを、gmon.sum に合併します:
gprof --sum program[.exe] gmon.out gmon.sum
-
必要に応じて、後の2つのステップを繰り返します。
-
コマンドを使って、合体したデータを分析します:
gprof program[.exe] gmon.sum > profile.txt
FreeBASIC Profiling Internals
FreeBASIC 内部の性能情報
'-profile' オプションを有効にすると、コードの 1 ないし複数のビットが、プログラムに追加されます。
-
プロファイリング・ライブラリを初期化するために、暗黙のメインの始めで、"_monstartup()" を呼びます。
-
それぞれの手続きの始めで、"mcount()" を呼びます。
This is how the profiling library keeps track of what function is being and by which other function.
これは、プロファイリング・ライブラリが、どんな関数が存在するか、どの他の関数によって、動向をおさえる方法です。
-
追加プログラム始動オブジェクト・コードのリンク。
(例えば、gcrt?.o )
プロファイリング・ライブラリ自体は、共有ライブラリか、C ランタイム・ライブラリの一部として、あります。
-
mingw は、gcrt2.o と libgmon.a を必要とします。
-
cygwin は、gcrt0.o と libgmon.a を必要とします。
-
dos は、gcrt0.o を必要とします。
(プロファイラー・コードが、libc.a にあります。)
-
linux は、gcrt1.o を必要とします。
(プロファイラー・コードが、libc.a にあります。)
詳細は、FreeBASIC の、あるバージョンと次のバージョンで異なるかもしれません。しかし、FreeBASIC でプロファイルするために構築されたソースコードは、GPROF をサポートする他の言語と、互換性があるでしょう。