【发布时间】:2014-10-06 14:29:45
【问题描述】:
使用 Intel Vtune 分析数据包处理应用程序。
仅在这条指令中时间利用率很低
add $0x100, %r8 (7%)
单次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)
在内存访问分析、分支错误预测分析等中显示相同的问题。不明白如何克服这个问题
【问题讨论】:
-
如果您显示数据并指出您认为时间利用率不佳的原因,这会有所帮助。
-
这种选角对我来说看起来很狡猾,不仅仅是从性能的角度来看。
-
这可能是试图让编译器将此变量保留在内存中(有点像尝试使用 volatile 来做到这一点,这通常是错误的)。
标签: c assembly x86 intel intel-vtune