我使用 gfortran 多年,但对 nvfortran 还很陌生。我想问是否有人可以给我推荐 nvfortran 编译器在调试和构建模式下有用的标志?
我所知道的 Debug模式是:
-C -g -Mbounds -traceback
构建模式(带优化)是:
-O3 -Mconcur
最佳答案
我们通常建议使用“-fast”、“-O3”或“-fast -O3”以获得一般性能。 “-Mconcur”启用自动并行化,这可能有帮助,也可能没有帮助。一般来说,最好通过 OpenACC 或 OpenMP 指令或 Fortran“DO CONCURRENT”使用显式并行化。
其他可能有用的优化标志:
-Mnouniform - 允许 SIMD 和标量代码的非均匀计算。更快,但可能会降低一些准确性。
-Mstack_arrays - 在堆栈而不是堆上分配自动数组。更快但使用更多堆栈。您可能需要在 shell 环境中增加程序的堆栈。
-Bstatic-nvidia - 静态链接编译器运行时库,而不是动态链接。
-Mfprelaxed - 允许使用更快但精度降低的内在函数和浮点计算。
-mp[=gpu] - 启用 OpenMP 指令并可选择启用目标卸载到 GPU。
-acc[=多核] - 启用 OpenACC 指令,默认卸载到 GPU,使用“多核”来定位多核 CPU。
-stdpar[=gpu] - 启用 DO CONCURRENT 到主机或 GPU 的并行化。
调试标志很好,尽管“-C”和“-Mbounds”都启用边界检查,因此只需要一个。
开发过程中使用的另一个有用的标志是“-Minfo”。编译器将提供有关正在应用或无法应用哪些优化的反馈消息。它可能有很多消息,因此您可以使用子选项将输出限制为特定类型,例如“-Minfo=vect”以查看哪个循环已被矢量化或未被矢量化。请参阅“nvfortran -help -Minfo”以获取子选项的完整列表。
关于fortran - nvfortran 编译器有用标志的推荐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71641704/