+ -
当前位置:首页 → 问答吧 → 有用过sse指令集的吗?有个问题请教

有用过sse指令集的吗?有个问题请教

时间:2011-12-07

来源:互联网

一个向量乘矩阵的函数,如果参数1跟参数3传不同地址,速度很快,而传同样的地址,速度基本就慢了两倍,请问这是什么原理?

inline void VectorMulMatrixNoAlign(class vgVector4 *vec, vgMatrix *mat, class vgVector4 *result)
{
_asm
{
mov eax, vec
mov ebx, mat
mov ecx, result
movss xmm0, [eax]
shufps xmm0, xmm0, 0
movss xmm1, [eax+4]
shufps xmm1, xmm1, 0
movss xmm2, [eax+8]
shufps xmm2, xmm2, 0
movss xmm3, [eax+12]
shufps xmm3, xmm3, 0
movups xmm4, [ebx]
movups xmm5, [ebx+16]
movups xmm6, [ebx+32]
movups xmm7, [ebx+48]
mulps xmm0, xmm4
mulps xmm1, xmm5
mulps xmm2, xmm6
mulps xmm3, xmm7
addps xmm0, xmm1
addps xmm0, xmm2
addps xmm0, xmm3
movups [ecx], xmm0
}
}

作者: lizelglglg   发布时间: 2011-12-07

应该和cache有关吧。如参数1和参数3相同,则对同一内存地址先读后写,读后写这种内存访问形式可能会降低性能。

作者: liangbch   发布时间: 2011-12-07