このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。
一週間で三回ぐらい聞かれたので知っている範囲で書いておきます。
全命令をカウントするINST_RETIREDがありますが、もう少し詳細な値も取れます。
http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html の、Volume 3B: part2 Chapter19 から対応するCPUを探して、欲しいカウンタを探してみましょう。
VTune なら、そのまま名前を指定してカウントが取れると思います(使ったことないのでよくわからないです)
perf なら、
$ perf stat -e r01b1 ./a.out # 01b1 = Event=0xb1, Umask=0x01
のようにすればとれます
と、いうような話をすると、「別にポートごとに取れてもあんまりよくわからないんだが…」みたいな、至極もっともな意見をいただきました。確かに、そのとおりだと思います。
追記
pin を使った emulator の sde の標準機能で同様のことができるとの情報をもらいました。
https://twitter.com/xmmymmzmm/status/658914067323613185
$ sde -omix mix.txt — ./a.out
のようにすると、命令や基本ブロック、関数毎の実行回数がmix.txtに出力されます。
というわけで、何の役にも立たないと言われたので少し考えたのですが、pin を使えばそれっぽい値が取れそうな気がしたのでやってみました。
pinは…ひとことで説明するのは難しいので、 公式サイト からリンクが貼られている https://software.intel.com/en-us/file/cgo2013pdf/download?token=TOO_aGtH などを見てもらったほうがよいのですが、x86 の命令や関数にフックを入れて、x86機械語に自分の処理を埋め込めるツールです。
pin には xed というx86機械語を解析するライブラリも含まれているので、これを使うと、実行中のプログラムの機械語の挙動を調べるといったことも可能になります。Intel社のメモリデバッガであるInspectorもこのpinを使って実装されています。
これを使えば実行された全命令をカウントすることも可能ですね。ちょうどサンプルに全命令数をカウントするというサンプルがあったので(source/tools/ManualExamples/inscount0.cpp)、それを改造して命令を種類ごとにカウントするtoolを作ってみました。
https://bitbucket.org/fixstars/blog/src/master/pin/inscount0.cpp?fileviewer=file-view-default
ビルドは面倒なので、pinのサンプルを書き換えて、サンプルのmakefileをそのまま使うのがよいと思います。
で a.out の命令カウントができます
#include <stdio.h>
int main()
{
int i;
for (i=0; i<100000000; i++) {
asm volatile ("paddd %%xmm0, %%xmm0":::"memory");
}
return 0;
}
を実行すると、inscount.outに
..(略)..
NOP : 275
NOT : 6
OR : 237
PADDD : 100000000
PCMPEQB : 14
PMOVMSKB : 8
..(略)..
などと出力されて、paddd が 100000000回実行されていることが確認できます
コンピュータビジョンセミナーvol.2 開催のお知らせ - ニュース一覧 - 株式会社フィックスターズ in Realizing Self-Driving Cars with General-Purpose Processors 日本語版
[…] バージョンアップに伴い、オンラインセミナーを開催します。 本セミナーでは、...
【Docker】NVIDIA SDK Managerでエラー無く環境構築する【Jetson】 | マサキノート in NVIDIA SDK Manager on Dockerで快適なJetsonライフ
[…] 参考:https://proc-cpuinfo.fixstars.com/2019/06/nvidia-sdk-manager-on-docker/ […]...
Windowsカーネルドライバを自作してWinDbgで解析してみる① - かえるのほんだな in Windowsデバイスドライバの基本動作を確認する (1)
[…] 参考:Windowsデバイスドライバの基本動作を確認する (1) - Fixstars Tech Blog /proc/cpuinfo ...
2021年版G検定チートシート | エビワークス in ニューラルネットの共通フォーマット対決! NNEF vs ONNX
[…] ONNX(オニキス):Open Neural Network Exchange formatフレームワーク間のモデル変換ツー...
YOSHIFUJI Naoki in CUDAデバイスメモリもスマートポインタで管理したい
ありがとうございます。別に型にこだわる必要がないので、ユニバーサル参照を受けるよ...