SIMD 加法指令(任何算术运算)

问题描述 投票:0回答:0

给定两个任意大小的数组 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;
}
c simd sse intrinsics
© www.soinside.com 2019 - 2024. All rights reserved.