我想知道应该如何将矢量化代码与其非矢量化版本进行比较?例如,我有一个简单的 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/