首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何加快不相关数据的for循环?

如何加快不相关数据的for循环?
EN

Stack Overflow用户
提问于 2020-09-06 16:40:40
回答 2查看 80关注 0票数 0

下面是将整数数组传递给for循环的一个非常简单的例子。如果这些整数是互不相关的,我如何才能使"for循环“同时对它们进行迭代呢?

代码语言:javascript
运行
复制
int waffles[3] = { 0 };

for (int i = 0; i < 3; i++) {
    waffles[i] = i;
}

我得到了什么

时钟1:华夫饼= 0;

时钟2: waffles1 = 1;

时钟3: waffles2 = 2;

我想要的

时钟1:华夫饼= 0,waffles1 = 1,waffles2 =2

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-06 17:00:59

正如@Fran ois Andrieux评论指出的那样:

编译器很可能会将该循环展开为目标平台最有效的形式。

看看这些代码是如何在戈德波特的Compler 这里中编译的。

Clang使用相同的指令将0和1放在一起:

代码语言:javascript
运行
复制
        movabs  rax, 4294967296
        mov     qword ptr [rsp + 12], rax
        mov     dword ptr [rsp + 20], 2

gcc使用相同的指令将1和2放在一起:

代码语言:javascript
运行
复制
        mov     DWORD PTR [rsp], 0
        mov     QWORD PTR [rsp+4], rax

较大的数组将导致向量化指令,这些指令一次放入更多的数据(参见这里)

票数 0
EN

Stack Overflow用户

发布于 2020-09-06 16:58:16

这实际上可以使用SIMD指令来完成,就像AVX指令一样,尽管实现起来并不简单。你可能想要100%地确保你被一个特定的循环所阻碍,并且真的需要在那里提高性能。

这可能对https://stackoverflow.blog/2020/07/08/improving-performance-with-simd-intrinsics-in-three-use-cases/有帮助

(我知道这不是一个完整的答案,但我还不能发表评论,而且可能会有帮助。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63766506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档