gpt4 book ai didi

c - 最适合 "block decomposition"的 MPI_Datatype ?

转载 作者:行者123 更新时间:2023-11-30 14:28:07 26 4
gpt4 key购买 nike

Jonathan Dursi的帮助下和 osgx ,我现在已经完成了进程之间的“行分解”:

row http://img535.imageshack.us/img535/9118/ghostcells.jpg

<小时/>

现在,我想尝试“ block 分解”方法(如下图所示): block http://img836.imageshack.us/img836/9682/ghostcellsblock.jpg

应该怎样做呢?这次,MPI_Datatype 是必要的,对吗? 哪种数据类型最合适/易于使用?或者在没有数据类型的情况下是否可以完成?

最佳答案

您始终可以在没有数据类型的情况下通过创建缓冲区并将缓冲区复制为基础类型的计数来解决;这在概念上是最简单的。另一方面,它速度较慢,并且实际上涉及更多代码行。尽管如此,当您尝试让某些东西发挥作用时,它仍然很方便,然后您可以同时实现 datatype-y 版本并确保您获得相同的答案。

对于幽灵细胞填充,在 i 方向上你不需要类型,因为它与你一直在做的类似;但您可以使用一个,MPI_Type_contiguous ,它只是指定某种类型的计数(您无论如何都可以在发送/接收中执行此操作)。

对于 j 方向的鬼细胞填充,最简单的方法可能是使用 MPI_Type_Vector 。如果您要发送(比方说)i=0..N-1、j=0..M-1 的数组的最右列,您希望发送 count=N、blocksize=1、stride=M 的 vector 。也就是说,您要发送 1 个值的计数 block ,每个 block 由数组中的 M 个值分隔。

您还可以使用MPI_Type_create_subarray仅拉出您想要的数组区域;在这种情况下,这可能有点矫枉过正。

现在,如果像上一个问题一样,您希望能够在某个时刻将所有子数组收集到一个处理器上,那么您可能会使用子数组,并且部分问题在这里得到了回答:MPI_Type_create_subarray and MPI_Gather 。请注意,如果您的数组 block 的大小不同,那么事情就会开始变得有点棘手。

(实际上,为什么要在一个处理器上进行收集?这最终会成为可扩展性瓶颈。如果您是针对 I/O 进行此操作,一旦您熟悉了数据类型,就可以使用MPI-IO 为此..)

关于c - 最适合 "block decomposition"的 MPI_Datatype ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6598578/

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