gpt4 book ai didi

fortran - Fortran 中具有不同窗口大小的 MPI 共享内存

转载 作者:行者123 更新时间:2023-12-04 21:02:45 24 4
gpt4 key购买 nike

我正在尝试采用我的代码来利用 MPI 共享内存。

为了让事情尽可能简单,假设我只有两个核心。核心A需要核心b的size_b数组,核心b需要核心a的size_a数组

在核心 A 上执行时,我可以执行以下操作吗?

 call MPI_WIN_ALLOCATE_SHARED(size_a_in_BYTES, disp_unit, MPI_INFO_NULL, comm_shm, ptr, win_a, mpierr)
call C_F_pointer(ptr, fptr, (/size_a/))

和核心B

 call MPI_WIN_ALLOCATE_SHARED(size_b_in_BYTES, disp_unit, MPI_INFO_NULL, comm_shm, ptr, win_b, mpierr)
call C_F_pointer(ptr, fptrb, (/size_b/))

现在假设我之后通过 MPI_SEND/RECV win_a 和 win_b 分别与核心 B 和核心 a 进行通信。现在的逻辑是按以下方式进行两个查询

核心A:

        call MPI_WIN_SHARED_QUERY( win_b
& , rank_of_core_B
& , size_b
& , disp_unit
& , ptr_buf
& , mpierr )
call C_F_pointer(ptr_buf, fptr_query_A, (/size_b/))

核心B反之亦然

假设我知道在 Core B 中将我的指针 fptrb 指向一个数组,即

  fptrb = GIVEN_ARRAY_OF_SIZEB

然后我是否能够通过访问 fptr_query_A 来检索 CORE a 中的内存

   fptr_recv = fptr_query_A

其中 fptr_recv 是在核心 A 中声明的指针,与 fptr_query_A

我问这个是因为手册中并不清楚例程 MPI_WIN_ALLOCATE_SHARED 除了是 comm_shm 的集体之外,是否必须对所有共享内存核心具有相同的 win 和大小

请在回答时,我认为我的一些困惑源于以下

1) 当调用 MPI_WIN_ALLOCATE_SHARED 时,我是否将本地内存从调用处理器分配给共享环境,即共享通信组。

1.a) 如果是,则意味着每个处理器都声明了它想要共享的内容,并且从接收者(想要访问共享内存的处理器)的审查点,它调用了 MPI_WIN_SHARED_QUERY 知道处理器在内存中的哪个位置存储了它的可共享数据?

最后,如果后两点总体上有效,我不确定我是否理解如何执行 MPI_WIN_SHARED_QUERY 调用。

我的理解是 MPI_WIN_SHARED_QUERY( win, rank, size,disp_unit, baseptr) win 是我们想要检索数据的任何核心的窗口,对于大小和等级。那么从本质上讲,这是否意味着我总是需要传达胜利和大小才能做出决定?

最佳答案

同时我已经能够自己回答这个问题,答案是

1) When calling MPI_WIN_ALLOCATE_SHARED am I allocating a local memory from the calling processor to the shared environment i.e. the shared communication group.

是的,每个 Rank 将分配一个单独的缓冲区,该缓冲区具有各自的大小,供共享通信器组中的所有其他 Rank 访问。即使 rank 不需要分配共享缓冲区,它也应该调用零大小的函数。

If yes, It then means that each processor declares what it wants to share and from the receiver's (the processor that wants to access shared memory) point of review, it make a call to MPI_WIN_SHARED_QUERY to know where in memory a processor has stored its shareable data?

我是这么理解的

My understanding is MPI_WIN_SHARED_QUERY( win, rank, size,disp_unit, baseptr) that win is the window of whatever core we want to retrieve the data, similarly for the size and rank. So essentially does that mean I always need to communicate the win and size in order to make that call?

由于所有 MPI 等级都必须调用 MPI_WIN_ALLOCATE_SHARED,因此每个等级都将拥有自己的 MPI 句柄 win。因此,您使用此句柄调用 MPI_WIN_SHARED_QUERY 以获得指向由 MPI 等级 rank 分配的共享缓冲区的指针。此函数还查询列的共享内存的大小。

关于fortran - Fortran 中具有不同窗口大小的 MPI 共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55479776/

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