如何比较向量化和非向量化的代码

时间:2018-12-05 10:38:36

标签: c++ fortran vectorization

我想知道如何将矢量化代码与其非矢量化版本进行比较?例如,我有一个简单的fortran代码,并使用-O2进行编译以启用自动矢量化。然后,从优化报告中可以看到,循环是矢量化的。现在,如果我想将此向量化代码与其非向量化版本进行比较,是否应该使用-O2 -no-vec-O1甚至甚至是-O0编译相同的代码?好吧,根据我的经验,-O2 -no-vec-O1并没有明显的区别,尽管前者总是略胜一筹。但是,如果我比较-O2-O0,结果将有很大的不同,这超出了矢量宽度的数量。因此,我敢肯定,在强调矢量化的好处时,不应将它们进行比较。因此,我只想知道应该将-O2-O2 -no-vec还是-O1进行比较,因为我读过许多期刊,它们从没有详细解释过这个问题,而只是说“ ...到其非矢量化版本,矢量化代码可实现...”

1 个答案:

答案 0 :(得分:2)

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

所有这些结果将有所不同,因此可以停用编译器(未指定...)矢量化例程,以查看仅矢量化带来的差异。

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