给定两个任意大小的数组 n 我们要添加(或任何算术运算,如乘法)。 arr = [1,2,3,4,5,6,7,8] brr = [1,2,3,4,5,6,7,8]
我试过给定的代码,但它没有给出正确的输出。 代码以 SIMD 格式编写。 期望是输出应该是数组中每个单独元素的总和。 在这种情况下,在添加之后 crr = [2,4,6,8,10.....]
我还想通过仅更改内部函数调用来使用相同的概念进行乘法和减法。 目前在下面的程序中我们只使用加法,但我的结果是错误的。
#include <bits/stdc++.h>
using namespace std;
#include <nmmintrin.h>
#pragma GCC target("avx2")
int n;
int arr[200005], brr[200005];
long long crr[200005];
int main() {
scanf("%d", & n);
for (int i = 0; i < n; i++) {
scanf("%d", & arr[i]);
}
for (int i = 0; i < n; i++) {
scanf("%d", & brr[i]);
}
for (int i = 0; i < n; i += 4) {
__m128i a = _mm_loadu_si128((__m128i * ) & arr[i]);
__m128i b = _mm_loadu_si128((__m128i * ) & brr[i]);
__m128i sm = _mm_sub_epi32(a, b);
_mm_storeu_si128((__m128i * ) & crr[i], sm);
}
for (int i = 0; i < n; i++) {
printf("%lld ", crr[i]);
}
printf("\n");
return 0;
}