タダでソフト開発の生産性と品質を上げる方法(10):プログラムの実行速度を瞬時に測定する「gprof」山浦恒央の“くみこみ”な話(100)(3/3 ページ)

» 2017年11月15日 10時00分 公開
前のページへ 1|2|3       

(b)使用方法

 gprofを使う時は、次のようなコマンドを入力します。

  • gcc -pg -o 実行ファイル名 ファイル名.c
  • ./実行ファイル名
  • gprof 実行ファイル名

 上記のコマンドを入力すると、gprofはフラットプロファイル(図1)というログを表示します。実際には、コールグラフというログも表示しますが、説明を割愛します。

図1 図1 フラットプロファイル

 図1は、gprofの実行結果を一部抜粋したものです。ログの中央に、「% time」「cumulative seconds」「self seconds」「calls」「self ms/call」「total ms/call」「name」の表示があります。それぞれ計測項目の意味を表1に記します。

% time 実行時間の割合
cumulative seconds 累積の実行時間
self seconds 関数単体の実行時間
calls 呼び出し回数
self ms/call 1回のあたりの実行時間
total ms/call 1回のあたりの実行時間(サブルーティンの実行時間も含む)
name 計測した関数の名前
表1 フラットプロファイルの計測項目

 図1と表1を見比べると、ログは次のように解釈できます。

  • fncCの呼び出しに全体の実行時間の98.47%費やし、ボトルネックとなっている
  • fncCの実行時間を関数単体で見ると41.73秒かかっている
  • fncCの呼び出し回数は、1千万回である
  • fncBの1回あたりの実行時間は、0.13s/1000=0.13msである
  • fncBのサブルーティンを含む1回あたりの実行時間は、41.73+(0.13/1000)=41.86ms

 上記のデータを事前に把握すると、不具合発生時の原因の切り分けに非常に効果的です。また、実行速度を早くする場合、fncCのようなボトルネックを見つけ、改善できます。

5.まとめ

 今回の内容を以下にまとめます。

  • gprofは、プログラムの実行速度を簡単に、瞬時に、測定するツールである
  • gprofを実行すると、フラットプロファイルという実行速度を計測したログを表示する
  • プログラムの実行速度をあらかじめ知ると、バグ発生時のトラブルシュートに使える

6.終わりに

 今回は、プログラムの実行速度を計測するgprofを紹介しました。ハードウェアがどんなに進化しても、ソフトウェアの実行速度は重要です。あらかじめ実行速度を把握すると、問題発生時の原因の切り分けに役立ちます。

 今回は説明できませんでしたが、フラットプロファイルのほかに、コールグラフと呼ぶログがあります。コールグラフでは、関数の呼び出し関係に着目した実行速度が計測できますので、より高度に分析できます。詳しくは、参考文献をご参照ください。

 これまで10回に渡り、6つのツールを取り上げた「タダでソフト開発の生産性と品質を上げる方法」シリーズは、ここで終了し、次回から別のテーマを取り上げます。本シリーズで、筆者が伝えたかったことは、「できる限り楽に仕事しよう」です。面倒な作業、機械的な作業は、極力、人間が実行してはなりません。解決策の1つが、無料ツールを使うことです。本シリーズで紹介したツールは、必ず、役に立ちます。役に立つと実感した時は、シリーズの記事をさかのぼってみてください。

参考文献

[1]「UNIXプログラミング道具箱」(工藤智行、2004、技術評論社)

[2]「Cプログラム高速化研究班 コードを高速化する20の実験と達人の技」(片山善夫、2012、USP研究所)


山浦恒央氏が連載100回突破記念の講演を行います!

 本連載を執筆している山浦恒央氏が、2017年12月6日開催の@ITとMONOistの共催セミナーに登壇します。講演タイトルは「組み込みソフトウェアで変わったこと、変わらないこと」。MONOist10周年記念で寄稿していただいた内容について、さらに掘り下げていただきます。山浦氏以外にも多くの講演がありますので、ぜひご参加ください(参加費無料)。

セミナー名:AI/IoT時代のソフトウェア開発〜ITとOTの出会う場所〜
開催日時:2017年12月6日(水)10:00〜18:05(受付開始9:30〜)
場所:ザ ストリングス 表参道(旧 青山ダイヤモンドホール)
申込Webサイトhttps://itmedia.smartseminar.jp/public/application/add/1651


【 筆者紹介 】
山浦 恒央(やまうら つねお)

東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)


1977年、日立ソフトウェアエンジニアリングに入社、2006年より、東海大学情報理工学部ソフトウェア開発工学科助教授、2007年より、同大学大学院組込み技術研究科准教授、2016年より非常勤講師。

主な著書・訳書は、「Advances in Computers」 (Academic Press社、共著)、「ピープルウエア 第2版」「ソフトウェアテスト技法」「実践的プログラムテスト入門」「デスマーチ 第2版」「ソフトウエア開発プロフェッショナル」(以上、日経BP社、共訳)、「ソフトウエア開発 55の真実と10のウソ」「初めて学ぶソフトウエアメトリクス」(以上、日経BP社、翻訳)。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.