如何比较矢量化和非矢量化代码



我想知道如何将矢量化代码与其非矢量化版本进行比较?例如,我有一个简单的fortran代码,并用-O2编译它以实现自动向量化。之后,我可以从优化报告中看到,循环被矢量化了。现在,如果我想将这个矢量化代码与其非矢量化版本进行比较,我应该用-O2 -no-vec-O1甚至-O0编译相同的代码吗?根据我的经验,-O2 -no-vec-O1没有显著差异,尽管前者总是稍微好一点。然而,如果将-O2-O0进行比较,则结果差异显著,其大于矢量宽度的数量;因此,我相信人们不应该为了强调矢量化的好处而将这些进行比较。因此,我只想知道我应该将-O2-O2 -no-vec-O1进行比较,因为我读过许多期刊,这些期刊从未详细解释过这件事,只是举例说"…与非矢量化版本相比,矢量化代码实现了……">

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

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

你不应该选择较低的优化,因为这些其他的优化可能会增加数值差异。

最新更新