我想知道如何将矢量化代码与其非矢量化版本进行比较?例如,我有一个简单的fortran代码,并用-O2
编译它以实现自动向量化。之后,我可以从优化报告中看到,循环被矢量化了。现在,如果我想将这个矢量化代码与其非矢量化版本进行比较,我应该用-O2 -no-vec
、-O1
甚至-O0
编译相同的代码吗?根据我的经验,-O2 -no-vec
和-O1
没有显著差异,尽管前者总是稍微好一点。然而,如果将-O2
和-O0
进行比较,则结果差异显著,其大于矢量宽度的数量;因此,我相信人们不应该为了强调矢量化的好处而将这些进行比较。因此,我只想知道我应该将-O2
与-O2 -no-vec
或-O1
进行比较,因为我读过许多期刊,这些期刊从未详细解释过这件事,只是举例说"…与非矢量化版本相比,矢量化代码实现了……">
编译器优化级别包含许多单独的优化,而不仅仅是矢量化。它可以是数学模型,循环展开。。。
所有这些的结果都会不同,所以是的,停用编译器(未指定…(的矢量化例程,以查看仅矢量化所产生的差异。
你不应该选择较低的优化,因为这些其他的优化可能会增加数值差异。