gpt4 book ai didi

c++ - SSE2 内在函数在哪里存储结果?

转载 作者:太空狗 更新时间:2023-10-29 19:47:36 26 4
gpt4 key购买 nike

我正在向 C++ 中的 SSE2 迈出第一步。 Here's我现在正在学习的内在:

__m128d _mm_add_pd (__m128d a, __m128d b)

文档说:在a和b中添加打包的 double (64位)浮点元素,并将结果存储在dst中。

但我从未将 dst 传递给该函数。那么,如果我不传递它,它如何将我传递(通过指针)的两个 double 添加到结果数组呢?

最佳答案

内部函数返回计算结果,因此您可以将其存储在变量中或用作另一个参数。

这里需要注意的重要一点是,大多数 SIMD 指令不直接在内存上操作,但您需要显式加载 (_mm_load(u)_pd) 和存储 (_mm_store( u)_pd) double 值,就像您在汇编中所做的那样。中间值很可能存储在 SSE 寄存器中,或者如果使用了太多寄存器,则存储在堆栈中。

所以如果你想对两个 double 组求和,你会做类似的事情

double a[N];
double b[N];
double c[N];
for (int i = 0; i < N; i += 2) { // We load two doubles every time
auto x = _mm_loadu_pd(a + i); // We don't know anything about alignment
auto y = _mm_loadu_pd(b + i); // So I assume the load is unaligned
auto sum = _mm_add_pd(x, y); // Compute the vector sum
_mm_storeu_pd(c + i, sum); // The store is unaligned as well
}

关于c++ - SSE2 内在函数在哪里存储结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53749482/

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