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