Instruments と xctrace を使った macOS でのプロファイリング



環境変数

環境変数は --env オプションを使って xctrace1 コマンドに渡されます。 環境変数の設定(たとえば export で出力したもの)を記述したファイル env.dat がある場合、 xctrace に渡す必要のあるオプションを生成するには、次のワンライナーを使えます:

xcrun --find xctrace
 awk '{print "--env "$0" \\"}' env.dat


テンプレート

プロファイリングで最もよく使われるテンプレートは Time Profiler で、CPU 使用状況のプロファイリングに利用できます。

利用可能なすべてのテンプレートを一覧表示するには、次を使います:

xcrun xctrace list templates

--template オプションでテンプレートを選択できます。たとえば:

 --template 'Time Profiler'  


その他のオプション


例

以下のコマンドは、Time Profiler テンプレートで gemc をプロファイリングするために使用したものです:


 rm -rf cpu.trace ; xcrun xctrace record \
  --template 'Time Profiler' \
  --output cpu.trace \
  --target-stdout gemc.log \
  --env C12BFIELDS=/opt/projects/ceInstall/macosx15-clang17/clas12_cmag/1.1 \
  --env CLAS12_CMAG=/opt/projects/ceInstall/macosx15-clang17/clas12_cmag/1.1 \
  --env DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH \
  --env FIELD_DIR=/opt/projects/ceInstall/noarch/data/magfield  \
  --env G4ABLADATA=$G4ABLADATA \
  --env G4DATA_DIR=$G4DATA_DIR \
  --env G4ENSDFSTATEDATA=$G4ENSDFSTATEDATA \
  --env G4INCLDATA=$G4INCLDATA \
  --env G4LEDATA=$G4LEDATA \
  --env G4LEVELGAMMADATA=$G4LEVELGAMMADATA \
  --env G4LIB=$G4LIB \
  --env G4NEUTRONHPDATA=$G4NEUTRONHPDATA \
  --env G4PARTICLEXSDATA=$G4PARTICLEXSDATA \
  --env G4PIIDATA=$G4PIIDATA \
  --env G4RADIOACTIVEDATA=$G4RADIOACTIVEDATA \
  --env G4REALSURFACEDATA=$G4REALSURFACEDATA \
  --env G4SAIDXSDATA=$G4SAIDXSDATA \
  --env G4TENDLDATA=$G4TENDLDATA \
  --env GEMC_DATA_DIR=$GEMC_DATA_DIR \
  --launch -- /opt/projects/gemc/clas12Tags/source/gemc \
    /Users/ungaro/rga_spring2019.gcard \
    -USE_GUI=0 -N=100 -PRINT_EVENT=1 -BEAM_P="e-, 4*GeV, 20*deg, 20*deg"





valgrind を使った Linux でのプロファイリング




前提条件

プロファイリングを有効にするため、実行ファイルが以下のフラグ付きでコンパイルされていることを確認してください:




Valgrind の使い方

Valgrind は Linux 上で C++ アプリケーションをプロファイリングするために使えます:

valgrind --tool=callgrind --callgrind-out-file=callgrind.out.%p \
  --dump-instr=yes --skip-plt=yes \
  /path/to/your/application options

オプションの説明




結果の表示

qcachegrind callgrind.out.<PID>

次の操作で出力をより読みやすくできます:




  1. xctrace が Xcode のものを指していることを確認してください: ↩