gpt4 book ai didi

c++ - 支持 SIMD 的代码?

转载 作者:行者123 更新时间:2023-11-30 02:01:17 26 4
gpt4 key购买 nike

什么代码可以使用 SIMD 指令集的严格定义是什么?是否可以并行运行计算?

如果我有:

for(int i=0; i<100; i++){
sum += array[i];
}

这可以利用 SIMD,因为我们可以运行:

for(int i=0; i<100;i=i+4){
sum0 += array[i];
sum1 += array[i+1];
sum2 += array[i+2];
sum3 += array[i+3];
}

sum = sum0 + sum1 + sum2 + sum3;

?

是不是必须是float类型,还是可以是double和integer类型?

最佳答案

假设您谈论的是 x86(SSE et al),那么支持的算术类型是 8、16、32 和 64 位整数,以及单精度和 double float 。但请注意,并非所有数据类型都支持所有算术运算 - SSE 在这方面缺乏正交性。

假设 32 位整数和适当对齐的数组(16 字节对齐),那么您可以将上述循环示例实现为:

#include <emmintrin.h>                     // SSE2 intrinsics

int32_t a[100] __attribute__ ((aligned(16)));
// suitably aligned array

__m128i vsum = _mm_set1_epi32(0); // init vsum = { 0, 0, 0, 0 }
for (int i = 0; i < 100; i += 4)
{
__m128i v = _mm_load_si128(&a[i]); // load 4 ints from a[i]..a[i+3]
vsum = _mm_add_epi32(vsum, v); // accumulate 4 partial sums
}
// final horizontal sum of partial sums
vsum = _mm_add_epi32(vsum, _mm_srli_si128(vsum, 8));
int32_t sum = _mm_cvtsi128_si32(vsum); // sum = scalar sum of a[]

关于c++ - 支持 SIMD 的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14258179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com