oprofile を用いるとキャッシュミスの測定や、TLB ミスの測定を行える。
イベント一覧の表示
$ sudo opcontrol --list-events
イベントの設定
$ sudo opcontrol --event=DTLB_MISSES:500:0x01
初期化する
$ sudo opcontrol --shutdown
$ sudo opcontrol --start
実行
$ sudo opcontrol --reset
$ ./a.out
$ sudo opcontrol --dump
テーブルの表示
$ opreport -c ./a.out
ソースコードレベルでのプロファイル情報の表示
(-a でアセンブリコード、-s でソースコードの表示)
$ opannotate -a -s ./a.out
一時停止
$ opcontrol --stop
終了する
$ opcontrol --shutdown
p2p タイプの10クエリを1スレッドで解いた際のサンプリング結果を一部のせておく。
・バケット法
2181704 99.6357 dijkstra_with_heap
4150 0.1895 quicksort_by_tail
1017 0.0464 read_dimacs_graph
・2分ヒープ
1540940 99.4507 dijkstra_with_bucket
4108 0.2651 quicksort_by_tail
1022 0.0660 read_dimacs_graph
やはりダイクストラ法のループ内で大量の TLB ミスが起こってしまっている。
特にポテンシャルを比較するところである。これを減らしていくことが今後の目標だ。
イベント一覧の表示
$ sudo opcontrol --list-events
イベントの設定
$ sudo opcontrol --event=DTLB_MISSES:500:0x01
初期化する
$ sudo opcontrol --shutdown
$ sudo opcontrol --start
実行
$ sudo opcontrol --reset
$ ./a.out
$ sudo opcontrol --dump
テーブルの表示
$ opreport -c ./a.out
ソースコードレベルでのプロファイル情報の表示
(-a でアセンブリコード、-s でソースコードの表示)
$ opannotate -a -s ./a.out
一時停止
$ opcontrol --stop
終了する
$ opcontrol --shutdown
p2p タイプの10クエリを1スレッドで解いた際のサンプリング結果を一部のせておく。
・バケット法
2181704 99.6357 dijkstra_with_heap
4150 0.1895 quicksort_by_tail
1017 0.0464 read_dimacs_graph
・2分ヒープ
1540940 99.4507 dijkstra_with_bucket
4108 0.2651 quicksort_by_tail
1022 0.0660 read_dimacs_graph
やはりダイクストラ法のループ内で大量の TLB ミスが起こってしまっている。
特にポテンシャルを比較するところである。これを減らしていくことが今後の目標だ。