LoginSignup
8
5

More than 5 years have passed since last update.

C++でのプロファイリングの仕方

Last updated at Posted at 2017-01-18

以下の方法はXcode 8以下でしか使えません。
Xcode 9以降では iprofiler -timeprofiler <executable> <args>
instruments -l 10000 -t "Time Profiler" <executable> <args>で置き換えることができるという話もあるのですが、自分の場合はうまくデバック情報が付与されずに使い物になりませんでした。

代替案として、以下のようにします。

https://developer.apple.com/download/more/ より Xcode8.3.3 をダウンロード (~/Xcode8というディレクトリ以下にxipファイルを解凍下とする)

以下のiprofilerを全て~/Xcode8/Xcode.app/Contents/Developer/usr/bin/iprofilerに置き換えて実行する。

dtpsファイルの出力を見る際はopen ~/Xcode8/Xcode.app/Contents/Applications/Instruments.app/でXcode8のInsrumentsを開いた上でそこにドラッグ&ドロップして結果を見る


Macの場合はXCodeについてくるiprofilerと言うものを使うだけでしっかりプロファイリングができる。

Kobito.o894Ls.png

プロファイリングの仕組みとしては定期的にポーリングし、そのなときにどこの部分を処理していたかを取得する方法で、実行時間が長くかかっているところなどを見つけることができる模様。

iprofilerの使い方

C++のexecutableを作る

まず、デバッグ情報付与つき(-g)でコンパイルする。最適化オプション(-O2)はつけないと実行時間が大きく変わってしまうのでつけたほうが良い。

$ c++ -g -O2 -o main main.cpp

iprofilerを使う

iprofilerは以下のように使用する

iprofiler -timeprofiler <executable> <args>

この時、デフォルトの10秒間プロファイリングが走る。
例えば1分間上のmainというプログラムを-n 10というオプション付きで走らせたいときはこうなる

$ iprofiler -timeprofiler -T 60 ./main -n 10
8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5