2

アセンブリ ループ レベルのプロファイラを知っている人はいますか?

私は gprof を使用してきましたが、gprof はループを非表示にし、関数レベルのプロファイリングですが、コードを最適化するには、何かをループ レベルに移動させたいと考えています。自動化して、gprof のような出力を提供したいだけです。dtrace に行くように勧められましたが、始めるべきかどうかわかりません。とにかく誰かが私を導くことができますか?例えば

main:

pushl   %ebp     
movl    %esp, %ebp     
subl    $16, %esp     
movl    $5000000, -4(%ebp)     
movl    $0, -12(%ebp)     
movl    $0, -8(%ebp)    
jmp .L2 

.L3:   

 movl    -8(%ebp), %eax    
 addl    %eax, -12(%ebp)    
 addl    $1, -8(%ebp) 

.L2:    

movl    -8(%ebp), %eax    
cmpl    -4(%ebp), %eax    
jl  .L3     
movl    $0, %eax    
leave     ret 

たとえば、gprof では、main が 1 回実行され、foo が 100 回実行されたということになります。それでも、L2 または L3 が 1M 回実行された場合、最適化に集中できるかどうかを知りたいです。私の質問があいまいな場合は、さらに説明するように依頼してください ありがとう

4

4 に答える 4

4

使用している OS によって異なりますが、この種のプロファイリングでは、通常、インストルメント化されたプロファイラーではなく、サンプリングプロファイラーを使用します。

于 2011-01-04T10:26:02.417 に答える
1

Callgrind ( Valgrindツールの 1 つで、通常はそれと共にインストールされます) を使用することをお勧めします。これにより、はるかに細かいレベルで統計を収集でき、kcachegrindツールは結果を視覚化するのに非常に適しています。

于 2011-01-04T10:20:02.977 に答える
1

Linux を使用している場合は、Zoomが最適です。

Windows を使用している場合は、LTProfで実行できる可能性があります。

どのプラットフォームでも、ローテク手法のランダム一時停止は信頼できます。

命令が実行された回数を調べないでください。ほとんどの場合、プログラム カウンターが検出される場所を探します。(それらは同じものではありません。) これにより、最適化の取り組みをどこに集中すべきかがわかります。

于 2011-01-04T13:03:48.970 に答える
0

KCachegrind は、ソース コードの各行のプロファイリング情報を提供します (このスクリーンショットを参照)。これには、CPU 時間、キャッシュ ミスなどが含まれます。

ただし、プロファイラー内でコードを実行すると非常に遅くなります (ネイティブより数十倍遅くなります)。

于 2011-01-04T10:18:50.093 に答える