【发布时间】:2013-06-23 19:21:31
【问题描述】:
我有两个无符号向量,大小均为 4
vector<unsigned> v1 = {2, 4, 6, 8}
vector<unsigned> v2 = {1, 10, 11, 13}
现在我想将这两个向量相乘得到一个新的向量
vector<unsigned> v_result = {2*1, 4*10, 6*11, 8*13}
要使用什么 SSE 操作?是跨平台还是只有 在某些特定平台上?
添加: 如果我的目标是加法而不是乘法,我可以超快地完成:
__m128i a = _mm_set_epi32(1,2,3,4);
__m128i b = _mm_set_epi32(1,2,3,4);
__m128i c;
c = _mm_add_epi32(a,b);
【问题讨论】:
-
即使编译器可以推断出足够多的大小、对齐方式等来满足矢量化,我怀疑它会在这里使用 SSE,因为涉及的加载/存储成本。
-
你知道
_mm_mul_ps吗? -
@rwols:
mulps进行单精度乘法,OP 需要无符号整数乘法。 -
是的,但我不确定平台,它是否随处可用?如果不是,解决方法是什么?
标签: c++ x86 sse simd intrinsics