在 C++ 中使用 SSE 将两个 32 位整数向量相乘的最快方法

Wha*_*rld 5 c++ x86 sse simd intrinsics

我有两个无符号向量,大小均为 4

vector<unsigned> v1 = {2, 4, 6, 8}
vector<unsigned> v2 = {1, 10, 11, 13}
Run Code Online (Sandbox Code Playgroud)

现在我想将这两个向量相乘并得到一个新向量

vector<unsigned> v_result = {2*1, 4*10, 6*11, 8*13}
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

fat*_*ihk 0

std::transform将给定函数应用于一个范围并将结果存储在另一个范围中

std::vector<unsigned> result;

std::transform( v1.begin()+1, v1.end(), v2.begin()+1, v.begin(),std::multiplies<unsigned>() );
Run Code Online (Sandbox Code Playgroud)