gpt4 book ai didi

fortran - 在 Fortran 中处理 MPI 通信器的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-02 11:35:39 25 4
gpt4 key购买 nike

我读到建议使用 MPI 模块而不是包含 mpif.h 文件。但是,我收到以下错误

Error: There is no specific subroutine for the generic ‘mpi_comm_split’

当我运行这个程序时

program hello_world
use mpi_f08
implicit none
! include 'mpif.h'
integer :: ierr, num_procs, my_id,newcomm
integer :: color,key

call MPI_INIT ( ierr )
color =1; key=0
call MPI_COMM_RANK (MPI_COMM_WORLD, my_id, ierr)
call MPI_COMM_SIZE (MPI_COMM_WORLD, num_procs, ierr)

call MPI_Comm_split(MPI_COMM_WORLD, color,key,newcomm, ierr)

call MPI_FINALIZE ( ierr )

end

如果我包含“mpif.h”而不是使用 MPI 模块,错误就会消失。这是为什么?

最佳答案

use mpi_f08 接口(interface)为不同的 MPI 句柄对象引入了不同的包装器类型。在 mpif.huse mpi 接口(interface)中,所有句柄都只是 INTEGER,而在 use mpi_f08 接口(interface)中有 TYPE(MPI_Comm)TYPE(MPI_File) 等。这允许编译器执行检查,例如在需要文件句柄的地方传递通信器句柄。

这是源代码级别的重大更改,因为必须重写代码,例如,

INTEGER :: newcomm

变成了

TYPE(MPI_Comm) :: newcomm

在二进制级别上没有任何变化,因为所有这些 MPI_Xyz 类型只是包装在 TYPE 说明符中的 INTEGER,这使得它们布局兼容。旧的 Fortran 代码仍然可以与现代 Fortran 代码交换 MPI 句柄,反之亦然 - 可以通过 newcomm%MPI_VAL 设置或提取 INTEGER 句柄值。

关于fortran - 在 Fortran 中处理 MPI 通信器的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41508117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com