x86-64架构的SSE指令(向量指令)在哪些情况下优于普通指令。因为我所看到的是,执行SSE指令所需的频繁加载和存储正在抵消由于向量计算而获得的任何收益。那么,有人能给我一个SSE代码示例,展示它比普通代码更好吗?
也许是因为我按照此方式单独传递每个参数...
__m128i a = _mm_set_epi32(pa[0], pa[1], pa[2], pa[3]);
__m128i b = _mm_set_epi32(pb[0], pb[1], pb[2], pb[3]);
__m128i res = _mm_add_epi32(a, b);
for( i = 0; i < 4; i++ )
po[i] = res.m128i_i32[i];
有没有一种方式可以一次性传递所有4个整数,我的意思是一次性传递整个128字节的pa
?并且一次性将res.m128i_i32
赋值给po
?
_mm_set_epi32()
。使用_mm_load_si128()
。如果无法对齐数据,则可以使用_mm_loadu_si128()
,但会影响性能。 - Mysticial_mm_load_si128()
和_mm_store_si128()
,对于3个内存访问只有1个操作。这就是为什么您没有得到任何加速的原因。 - Mysticial