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

10-13 08:27