gprofを使う時は、次のようなコマンドを入力します。
上記のコマンドを入力すると、gprofはフラットプロファイル(図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を見比べると、ログは次のように解釈できます。
上記のデータを事前に把握すると、不具合発生時の原因の切り分けに非常に効果的です。また、実行速度を早くする場合、fncCのようなボトルネックを見つけ、改善できます。
今回の内容を以下にまとめます。
今回は、プログラムの実行速度を計測するgprofを紹介しました。ハードウェアがどんなに進化しても、ソフトウェアの実行速度は重要です。あらかじめ実行速度を把握すると、問題発生時の原因の切り分けに役立ちます。
今回は説明できませんでしたが、フラットプロファイルのほかに、コールグラフと呼ぶログがあります。コールグラフでは、関数の呼び出し関係に着目した実行速度が計測できますので、より高度に分析できます。詳しくは、参考文献をご参照ください。
これまで10回に渡り、6つのツールを取り上げた「タダでソフト開発の生産性と品質を上げる方法」シリーズは、ここで終了し、次回から別のテーマを取り上げます。本シリーズで、筆者が伝えたかったことは、「できる限り楽に仕事しよう」です。面倒な作業、機械的な作業は、極力、人間が実行してはなりません。解決策の1つが、無料ツールを使うことです。本シリーズで紹介したツールは、必ず、役に立ちます。役に立つと実感した時は、シリーズの記事をさかのぼってみてください。
[1]「UNIXプログラミング道具箱」(工藤智行、2004、技術評論社)
[2]「Cプログラム高速化研究班 コードを高速化する20の実験と達人の技」(片山善夫、2012、USP研究所)
本連載を執筆している山浦恒央氏が、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
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.