-1

Intel Vtune を使用したパケット処理アプリケーションの分析。

この命令だけでは時間の使用率が低い

add $0x100, %r8 (7%)

1 回の if チェックでの時間の使用率が低い

if(unlikely(VALUE == some_value)

この some_value は uint16_t であり、(int*)&some_value として渡され、(uint8_t*)some_value としてさらにアクセスされます。

以下にマップします

movzxw 0x3e(%rsp),%eax
test %ax,%ax ---- Leads in poor time utilization
jz Block x

変数をスタックにプッシュする関数での時間の使用率が低く、他の関数が同じ変数をプッシュして時間がかかりません

pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbp
pushq %rbx 
sub $0x48, %rsp
movq %rsi, 0x18(%rsp)

メモリアクセス解析、分岐予測ミス解析などで同じ問題が発生する。この問題を解決する方法がわからない

4

1 に答える 1

1

Intel パフォーマンス カウンターはサイクル精度ではありません。近くの命令が、別の命令のストールのサイクル カウントを取得することがあります。(近く = 1 または 2 命令離れた場所)。

本当に奇妙なデコードのボトルネックがない限り、add $0x100, %r8他の近くの命令に比べて実際に多くの時間を取っている方法はありません。準備が整う前に の値が必要であることにうんざりしていない限り%r8、おそらく。パフォーマンス カウンターがそのように機能する場合は IDK。

ペアはtest / jz単一の uop にマクロ融合します。時間は からではなくtest、おそらく支店からのものです。かなりの誤算ですか?

変数のプッシュが遅い: その関数は再帰的ですか? それとも、長い呼び出しチェーンの最後ですか? しばらくアクセスされていないメモリのキャッシュライン (またはさらに悪い場合はページ) に値をプッシュすると、L1 キャッシュに存在せず、アクセスが遅くなります。

すべての場合において、明確なことを言うには、より多くの文脈が必要です。1 つの命令だけでは、パフォーマンス分析にはほとんど役に立ちません。

于 2015-06-25T14:04:19.070 に答える