如何使用 MPI 更改 Fortran 中的默认精度?
How to change default precision in Fortran with MPI?
我想更改大型 Fortran 90 程序以使用双精度而不是单精度。我认为最简单的方法是向编译器添加以下标志:
-fdefault-real-8
但是,这似乎并没有更新 MPI 命令。例如,我需要像这样更改命令:
CALL MPI_RECV(x, n, MPI_REAL, rankstart, tag, comm, stat, ierr)
到
CALL MPI_RECV(x, n, MPI_REAL8, rankstart, tag, comm, stat, ierr)
你知道是否有编译器标志可以将 MPI_REAL
的默认值更改为 MPI_REAL8
吗?如果没有,您是否知道另一种方法可以轻松更改程序的精度,而无需我自己手动调整代码中的所有命令?
您可以在配置 MPI 库进行编译时使用相同的标志。在那种情况下,如果库编程正确,默认的 real 应该对应于您选择的默认类型。
图书馆可能要求默认整数和逻辑值与新的放大实数具有相同的存储大小。
请注意 MPI 是一个外部库。它是单独编译的。它不会对您在编译程序时提供给编译器的标志做出反应。它只知道用于编译库的标志。
在 Fortran 90 程序中更改精度的最简单方法是使用工作类型参数
integer, parameter :: rp = kind(1.d0)
并将您的真实变量声明为
real(rp) :: x
您稍后可以将参数值更改为任何其他值,如 Fortran 90 kind parameter
所示
我想更改大型 Fortran 90 程序以使用双精度而不是单精度。我认为最简单的方法是向编译器添加以下标志:
-fdefault-real-8
但是,这似乎并没有更新 MPI 命令。例如,我需要像这样更改命令:
CALL MPI_RECV(x, n, MPI_REAL, rankstart, tag, comm, stat, ierr)
到
CALL MPI_RECV(x, n, MPI_REAL8, rankstart, tag, comm, stat, ierr)
你知道是否有编译器标志可以将 MPI_REAL
的默认值更改为 MPI_REAL8
吗?如果没有,您是否知道另一种方法可以轻松更改程序的精度,而无需我自己手动调整代码中的所有命令?
您可以在配置 MPI 库进行编译时使用相同的标志。在那种情况下,如果库编程正确,默认的 real 应该对应于您选择的默认类型。
图书馆可能要求默认整数和逻辑值与新的放大实数具有相同的存储大小。
请注意 MPI 是一个外部库。它是单独编译的。它不会对您在编译程序时提供给编译器的标志做出反应。它只知道用于编译库的标志。
在 Fortran 90 程序中更改精度的最简单方法是使用工作类型参数
integer, parameter :: rp = kind(1.d0)
并将您的真实变量声明为
real(rp) :: x
您稍后可以将参数值更改为任何其他值,如 Fortran 90 kind parameter
所示