gpt4 book ai didi

c - 对用 C 编码的 4 个整数大小的数组进行 SSE 操作

转载 作者:行者123 更新时间:2023-11-30 21:18:48 26 4
gpt4 key购买 nike

对于之前的非描述性问题,我们深表歉意。请允许我再次重新表述一下问题:

设置:

我需要使用SSE同时对4个数组中的4个32位值进行ADD和一些按位操作,这4个数组中的所有元素都是整数大小(32位)。结果存入第 5 个数组。

所以我的问题是:

  1. 我需要包含哪些头文件和编译器标志才能使用 C 运行 SSE?
  2. Paul stills 提供的示例代码有效吗?

另一个问题,如果我需要读取整数 A 的最后一位和整数 B 的第一位,并用我刚刚读取的值替换整数 C 的最后一位和第一位,我可以在这里使用 SSE 吗?或者有什么快速的方法可以做到吗?而不是正常情况下的 3 次访问?

再次对之前的帖子表示歉意,并感谢您的任何意见...^_^

最佳答案

假设:

  • 您想要添加 4 个输入数组中相应的整数,并将总和存储在第五个(输出)数组中
  • 整数是 32 位
  • 数组大小 (N) 是 4 的倍数
  • 所有数组均按 16 字节对齐

那么这应该可以做到:

#include <stdint.h>
#include <emmintrin.h>

const size_t N = 4096; // size of input/output arrays

int32_t array0[N]; // 4 x input arrays
int32_t array1[N];
int32_t array2[N];
int32_t array3[N];
int32_t array_sum[N]; // output array

for (size_t i = 0; i < N; i += 4)
{
__m128i v0 = _mm_load_si128(&array0[i]); // load 4 x vectors of 4 x int
__m128i v1 = _mm_load_si128(&array1[i]);
__m128i v2 = _mm_load_si128(&array2[i]);
__m128i v3 = _mm_load_si128(&array3[i]);
__m128i vsum = _mm_add_epi32(v0, v1); // sum vectors
__m128i vsum = _mm_add_epi32(vsum, v2);
__m128i vsum = _mm_add_epi32(vsum, v3);
_mm_store_si128(&array_out[i], vsum); // store sum
}

关于c - 对用 C 编码的 4 个整数大小的数组进行 SSE 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13528791/

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