連載
タダでソフト開発の生産性と品質を上げる方法(10):プログラムの実行速度を瞬時に測定する「gprof」:山浦恒央の“くみこみ”な話(100)(2/3 ページ)
ついに連載第100回を迎えた「山浦恒央の“くみこみ”な話」。今回の「タダでソフト開発の生産性と品質を上げる方法」の第10回では、プログラムの実行速度を瞬時に測定する「gprof」を紹介します。
3.「gprof」とは
参考文献[1]によると、ほんの数行のコードがプログラムの80%の実行時間を消費しているそうです。そのため、「ほんの数行」をあらかじめ把握し、問題発生時のトラブルシュートに活用しましょう。
プログラムの実行速度を計測するツールは、いろいろありますが、C言語系で一般的なものが「gprof」です。gprofは、GCC(GNU Compiler Collection)にあるプログラムの実行速度を計測するツールです。このツールは、プログラムのコンパイル時に記録用のコードを埋め込み、プログラム実行の際に計測します。なお、環境構築は、GCCを導入していれば使用できます。筆者は、本コラムの第95回目で導入したCygwinを使います。構築手順は、そちらをご参照ください。
本ツールの機能は幾つかありますが、「フラットプロファイル」という標準的な測定ログの見方を説明します。フラットプロファイルは「関数の実行時間」「呼び出し回数」などを表示するものです。
4.使い方
gprofの使い方を説明します。今回はリスト1のプログラムで試してみましょう。
(a)例題プログラム
void fncA(); void fncB(); void fncC(); int main() { int i; for (i = 1; i <= 1000; i++){ fncA(); fncB(); } return 0; } void fncA() { int i; for (i = 1; i <= 10000; i++){} } void fncB() { int i; for (i = 1; i <= 10000; i++) fncC(); } void fncC() { int i; for (i = 1; i <= 1000; i++){} }
リスト1 例題プログラム
リスト1は、今回使用する例題プログラムです。実行順序は、以下となります。
- main関数で関数fncA、fncBを1回コールする
- fncAでは、1万回無意味なループする
- fncBは、1万回ループ内に、fncCをコールする
- fncCは、1000回ループする
無理やり無意味なループを入れたのは、PCの実行速度が早すぎて、意味のある計測結果が得られないためです。
Copyright © ITmedia, Inc. All Rights Reserved.