如何解决如何加快不相关数据的for循环?
一个非常简单的示例,将整数数组传递给如下所示的for循环。如果这些整数彼此无关,我如何才能使“ for循环”同时遍历所有整数?
!!
我得到的
时钟1:华夫饼[0] = 0;
时钟2:华夫饼[1] = 1;
时钟3:华夫饼[2] = 2;
我想要的
时钟1:华夫饼[0] = 0,华夫饼[1] = 1,华夫饼[2] = 2
解决方法
这实际上可以使用SIMD指令(例如AVX指令)完成,尽管实现起来并不容易。您可能想要100%确保您遇到了特定循环的瓶颈,并且确实需要在此处提高性能。
这可能https://stackoverflow.blog/2020/07/08/improving-performance-with-simd-intrinsics-in-three-use-cases/
有帮助(我知道这不是一个完整的答案,但是我还不能发表评论,仍然有帮助)
,@FrançoisAndrieux的评论指出:
编译器很可能会将循环展开为目标平台最有效的形式。
查看此代码如何在Godbolt的Compler Explorer here中进行编译。
Clang使用相同的指令放置0和1:
movabs rax,4294967296
mov qword ptr [rsp + 12],rax
mov dword ptr [rsp + 20],2
gcc使用相同的指令放置1和2:
mov DWORD PTR [rsp],0
mov QWORD PTR [rsp+4],rax
更大的数组将导致向量指令一次放置更多数据(请参见here)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。