代码之家  ›  专栏  ›  技术社区  ›  imronuke

nvfortran编译器有用标志的建议

  •  1
  • imronuke  · 技术社区  · 2 年前

    我使用gfortran已经很多年了,但对nvfortran来说还是个新手。我想问一下,是否有人能给我推荐nvfortran编译器的有用标志,用于调试和构建模式?

    我对调试模式的了解如下:

    -C -g -Mbounds -traceback
    

    对于构建模式(具有优化功能)而言:

    -O3 -Mconcur
    
    0 回复  |  直到 2 年前
        1
  •  2
  •   Mat Colgrove    2 年前

    我们通常建议使用“-fast”、““-O3”或“-fast-O3”来实现一般性能。“-Mconcur”启用自动并行化,这可能有帮助,也可能没有帮助。一般来说,最好通过OpenACC或OpenMP指令或Fortran“DO CONCURRENT”使用显式并行化。

    其他可能有用的优化标志:

    -Mnouniform-允许对SIMD和标量代码进行非统一计算。速度更快,但可能会降低一些准确性。

    -Mstack_数组——在堆栈而不是堆上自动分配数组。更快,但使用更多堆栈。您可能需要在shell环境中增加程序的堆栈。

    -Bstatic nvidia-静态链接编译器运行库,而不是动态链接。

    -Mfprelaxed-允许使用更快但精度更低的内部函数和浮点计算。

    -mp[=gpu]-启用OpenMP指令,并可选地启用目标卸载到gpu。

    -acc[=多核]-启用OpenACC指令,默认卸载到GPU,使用“多核”以多核CPU为目标。

    -stdpar[=gpu]-支持并行化DO并发到主机或gpu。

    调试标志很好,不过“-C”和“-Mbounds”都支持边界检查,所以只需要一个。

    在开发过程中使用的另一个有用的标志是“-Minfo”。编译器将给出反馈消息,说明它正在应用或无法应用什么优化。它可能包含大量消息,因此可以使用子选项将输出限制为特定类型,例如“-Minfo=vect”,以查看哪个循环被矢量化或未被矢量化。有关子选项的完整列表,请参阅“nvfortran-help-Minfo”。