首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动向量化与手工向量化代码

自动向量化与手工向量化代码
EN

Stack Overflow用户
提问于 2009-01-03 18:40:39
回答 2查看 3.1K关注 0票数 5

在某种意义上,使用显式编译指示手动向量化代码更好,还是依赖或使用自动向量化更好?为了使用自动矢量化获得最佳性能,必须监视编译器输出,以确保循环被矢量化,或者修改它们,直到它们可矢量化。

使用手工编码,可以确定所需的指令正在发出,但现在代码可能无法移植(无论是到其他体系结构还是其他编译器)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-01-03 18:52:34

自动矢量化对我来说从来都不是很好的效果。对我来说,目前自动向量化似乎只适用于非常微不足道的循环。

我使用了杂注/内部方法,并查看了程序集。如果编译器生成不好的代码(如将SSE寄存器溢出到堆栈上或添加冗余的移动),我会对整个循环体使用内联汇编程序。

顺便说一句,可移植性不是问题。通常,您从一个C/C++循环开始,然后使用内部函数对其进行优化。只需保留旧循环,并将其用作SIMD实现的单元测试/回退。此外,能够通过编译时定义从项目中删除所有SIMD代码始终是明智的。通过这种方式调试应用程序要容易得多。同样的定义也可以用于交叉编译。

票数 14
EN

Stack Overflow用户

发布于 2009-01-03 20:01:11

我永远不会依赖任何编译器的自动向量化。对于gcc,我会格外小心,因为gcc优化的效果总是因版本而异,我认识的几乎每个依赖特殊优化或gcc扩展的人在新的gcc版本发布时都必须处理破坏问题。

你通常可以信任编译指示和内部机制,但你应该密切关注新的gcc版本的发行说明,并且你应该告诉你自己的用户编译你的代码需要哪个gcc版本。

有一两次当向量化真的很重要时,我们在测试套件中添加了一些东西来调用objdump,并验证向量指令是否真的在使用中。如果能够自动检测“坏的向量代码”( Nils所描述的),那就太好了,但我们从来没有走到这一步。

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

https://stackoverflow.com/questions/409560

复制
相关文章

相似问题

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