AVX汇编程序循环通过vunpcklpd指令减慢3倍

时间:2015-03-28 23:55:45

标签: performance nasm avx

我正在努力使用AVX优化此循环(仅限摘录,NASM语法):

.repete:
vmulpd ymm4, ymm1, ymm2
vhaddpd ymm5, ymm4, ymm4 
vextractf128 xmm6, ymm5, 1
vaddsd xmm5, xmm5, xmm6

vcvtss2sd xmm7, [MSI + MCX * 4]
vmulsd xmm3, xmm7, xmm0

vaddsd xmm5, xmm5, xmm3

; Store result.
vcvtsd2ss xmm6, xmm5, xmm5
vmovss [MDI + MCX * 4], xmm6

vunpcklpd xmm7, xmm5, xmm7 (!!!!!!!!!!!!!!!!!!!!)
MSSE_SHUFFLEAVX(ymm2, ymm2, ymm7, 2, 0)

inc ecx
cmp ecx, edx
jl .repete

当存在(!!!!)标记指令时,它大约慢3倍。如果我将其更改为“vmovapd ymm7,ymm5”(仅用于测试),同样的事情。显然,对xmm5的依赖是问题所在。我试图通过将xmm5计算移动到开头来绕过它,但没有运气。

任何想法如何绕过它?或者它可能是别的吗?有关于这些事情的指南吗?最后AVX真正被vmulpd和vhaddpd所利用,所以也许它不值得吗?

0 个答案:

没有答案