我想知道如何将矢量化代码与其非矢量化版本进行比较?例如,我有一个简单的fortran代码,并使用-O2
进行编译以启用自动矢量化。然后,从优化报告中可以看到,循环是矢量化的。现在,如果我想将此向量化代码与其非向量化版本进行比较,是否应该使用-O2 -no-vec
或-O1
甚至甚至是-O0
编译相同的代码?好吧,根据我的经验,-O2 -no-vec
和-O1
并没有明显的区别,尽管前者总是略胜一筹。但是,如果我比较-O2
和-O0
,结果将有很大的不同,这超出了矢量宽度的数量。因此,我敢肯定,在强调矢量化的好处时,不应将它们进行比较。因此,我只想知道应该将-O2
与-O2 -no-vec
还是-O1
进行比较,因为我读过许多期刊,它们从没有详细解释过这个问题,而只是说“ ...到其非矢量化版本,矢量化代码可实现...”
答案 0 :(得分:2)
编译器优化级别包含许多单独的优化,而不仅仅是矢量化。可以是数学模型,可以展开循环...
所有这些结果将有所不同,因此可以停用编译器(未指定...)矢量化例程,以查看仅矢量化带来的差异。
您不应该进行较低的优化,因为完成的其他优化可能会自己增加数值差异。