gpt4 book ai didi

c - 如何在 C 中为两个 for 循环编写 SSE 指令?

转载 作者:太空宇宙 更新时间:2023-11-04 02:10:03 25 4
gpt4 key购买 nike

使用库“immintrin.h”,我能够为简单的 for 循环和操作编写 SSE 指令。但是,如何为显示的语句编写 SSE 指令?

for (int i =0; i<n; i++){
for (int j=0; j<n; j++) {
x[i] += a[i] + a[j];
}}

x 和 a 是 float* 使用 _mm_malloc() 初始化的。内存访问模式可以用作 __m128 和 4 字节的展开策略。

对不起,如果我不太清楚,但就像

for (int i = 0; i < vecsize; i+=4) {
__m128 a = _mm_load_ps(a+i);
__m128 x = _mm_add_ps(x,a);
_mm_store_ps(x+i, x);
}

(仅适用于 1 个循环),我想要与上面显示的循环类似的东西。

编辑:我 (EricPostpischil) 从评论中插入这段文字,因为它对问题陈述重要。作者 NeilDA 应该对此进行扩展:

… in my program 'a' is always changing and hence I want 'x' that changes with it.

我已经做到了!!我提交了答案..

最佳答案

这只是部分答案,但对于评论来说太长/太详细了。

我质疑你的问题是否写对了。如图所示,对于每个 x[i],它添加 a[i] n 次并添加每个 a[j] 一次,对于 0≤j<n。所以它等同于:

sum = 0;
for (j = 0; j < n; ++j)
sum += a[j];
for (i = 0; i < n; ++i)
x[i] += n*a[i] + sum;

与其他可能的数组操作相比,这将使用更简单的 SSE 代码来实现。当然,按照上面的方式简单地重写它会产生比原始公式快得多的代码。

关于c - 如何在 C 中为两个 for 循环编写 SSE 指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15349191/

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