c++ - 如何比较矢量化和非矢量化代码

标签 c++ fortran vectorization

我想知道应该如何将矢量化代码与其非矢量化版本进行比较?例如,我有一个简单的 Fortran 代码,我用 -O2 编译它以启用自动矢量化。之后,我可以从优化报告中看到,循环被矢量化了。现在,如果我想将此矢量化代码与其非矢量化版本进行比较,我应该使用 -O2 -no-vec-O1 还是 -O0?好吧,根据我的经验,-O2 -no-vec-O1 都没有显着差异,尽管前者总是稍微好一点。但是,如果我比较 -O2-O0,结果会明显不同,这比 vector 宽度的数量还要多;因此,我相信人们不应该为了强调矢量化的好处而比较它们。所以,我只想知道我应该将 -O2-O2 -no-vec 还是 -O1 进行比较,因为我阅读了许多期刊从未详细解释此事,仅举例说明“......与其非矢量化版本相比,矢量化代码实现......”

最佳答案

编译器优化级别包含许多单独的优化,而不仅仅是矢量化。可以是数学模型,循环展开...

所有这些结果都会不同,所以是的,停用您的编译器(未指定...)矢量化例程以查看仅由矢量化产生的差异。

您不应该进行较低的优化,因为完成的这些其他优化可能会自行增加数值差异。

关于c++ - 如何比较矢量化和非矢量化代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53630376/

相关文章:

C++在线性搜索中查找最后一次出现的int

c++ - 调整大小并保留 vector

c++ - 我在我的程序中使用 ffmpeg 库来录制视频和音频

fortran - 意外的数据声明语句

python - f2py 不喜欢子程序中的显式数组

c++ - 带展开循环的矢量化

c++ - 当我直接解析 Mat 时,未检测到 OpenCv Aruco 标记

python - 具有 Ctypes 的独立 CDLL 库实例

matlab - 按照模式创建多维数组

python - 在 NumPy 中最优雅地实现 MATLAB 的 "vec"函数