fortran - nvfortran 编译器有用标志的推荐

标签 fortran compiler-optimization compiler-flags pgi

我使用 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/

相关文章:

matlab - 如何在 fortran mex 文件中使用 mxCalloc

c++ - GCC w/inline assembly & -Ofast 为内存操作数生成额外代码

c - GCC Wunused-variable 对已使用的变量发出警告

c++ - 如何升级到 C++17?

fortran - 如何在 Fortran 函数中使用意图 (inout)

linux - IMSL 和 MPI 之间的冲突

compiler-errors - 最大艾芬特18艾芬特19

java - 循环中java缓存数组长度计算

java - 方法调用的编译器优化

gcc - 如何使用 -DN 标志在 g++ 编译期间传递值