您可以使用以下的几个选项来汇编程序:
- -qhot -qnostrict (for Fortran)
- -qhot -qnostrict –qignerrno (for C/C++)
- -qhot -O3
- -O4
- -O5
自动向量化的汇编器选项
您可以使用以下的几个选项来汇编程序:
- -qhot -qnostrict (for Fortran)
- -qhot -qnostrict –qignerrno (for C/C++)
- -qhot -O3
- -O4
- -O5
当您在使用这些选项集中的一个时,通过调用等价 MASS 向量函数(除了对以下函数的访问除外:vatan2、vsatan2、 vdnint、 vdint、 vcosisin、vscosisin、vqdrt、vsqdrt、vrqdrt、vsrqdrt、vpopcnt4、vpopcnt8、vexp2、vexp2m1、vsexp2、 vsexp2m1、vlog2、 vlog21p、 vslog2 和 vslog21p),汇编器会自动尝试对系统数学函数的访问向量化。如果汇编器不能对程序进行向量化,它会自动试着调用等价 MASS 标量函数。对于自动化的标量或者向量,汇编器会使用汇编器库 libxlopt.a 中包含的 MASS 函数的版本。您不需要向代码中的 MASS 函数添加任何特意的调用,或者链接 xlopt 库。
除了一系列的选项之外,当 -qipa 选项处于可用状态时,如果汇编器不能进行向量化,那么它会试着在决定调用它们之前去内联 MASS 标量函数。
如果您想要取消自动向量化的激活,那么您可以添加选项 –qhot=novector。
接下来的部分是一个实际程序的范例 — 一个离散的 Fourier 转变(DFT) — 显示了在汇编不同汇编器选项时的改善结果。程序已经足够简单以方便演示,然后又足够的复杂以提供非琐细的优化机会。
两个程序的计时都是在附录 3 中给出的驱动器程序完成的,运行的环境是在 4.704 GHz 下运行的 POWER6 电脑。
附录 1 显示了 Fortran DFT 源程序。它包含了一个嵌套的循环,该循环会调用 exp()、cos() 以及 sin(),接下来是一个调用 sin() 和 sqrt() 的循环。程序会使用 -O3(它并不能进行自动向量化) 并使用 –O4 (它能使用自动向量化)。结果如图 1 所示 。
注意自动向量化带来的好处会随着问题规模的增加而增加,最终当问题的规模达到 2000 时加速的程度会达到 8.94x 。
图 1:DFT Fortran 性能与汇编选项 -O3 和 -O4 在各种规格问题上的比较
附录 2 显示了附录 1 中 Fortran DFT 程序的 C 版本(它包含了一个虚 consume() 路径,这样汇编器的内部程序化分析[IPA]就不能看到,计算的结果实际上在演示范例中并没有用得上,并因此可以改善整个的程序)。
程序将会使用 -O3(它并不会提供自动向量化) ,使用 -O4 (它提供自动向量化),使用 –O5 (它提供自动向量化并提供 IPA)。结果如图 2 所示。
正如在 Fortran 范例中演示的那样,自动向量化带来的好处随着问题规模的增加而增加,最后当 n=2000 的时候达到了。另外,IPA 在 -O5 处提供的活化能够提供一个额外的 1.22x 加速,因为它可以决定输入与输出没有别名(这就是说,它没有在内存中重叠),允许它去向量化进行极坐标的转变。-O5 在 –O3 的基础上加速的程度是 7.33x 。
图 2:DFT C 性能与汇编选项 -O3, -O4 与 -O5 对于不同规格问题的比较
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16896827/viewspace-1036476/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/16896827/viewspace-1036476/