gpt4 book ai didi

c++ - MPJ Express Scatterv和Gatherv,int[]位移的目的是什么?

转载 作者:行者123 更新时间:2023-11-30 03:01:50 31 4
gpt4 key购买 nike

问题#1。

Scatterv 的“位移”参数的用途是什么?它与 Gatherv 有何不同?以及它如何支持地址空间上的“重叠”?您的平均 joe 位移阵列是什么样的?

Scatterv( Object sendbuf, int sendoffset, int[] sendcounts,
int[] displs, Datatype sendtype, Object recvbuf,
int recvoffset, int recvcount, Datatype recvtype,
int root )

Gatherv( Object sendbuf, Object sendbuf, int sendoffset,
int sendcount, Datatype sendtype, Object recvbuf,
int[] recvcounts, int[] displs, Datatype recvtype,
int root )

问题#2。

在 Gatherv 中,两个 sendbuf 参数中的哪一个正在接收或发送?

最佳答案

Q1。分散 vector 和聚集 vector 操作中的空间和计数的目的是相同的。两者都指定大缓冲区中的位置(sendbuf 在 scatter 中,recvbuf 在 gather 中)从每个数据 block 开始的位置以及它有多少元素。在 Scatterv 中,这些用于定义来自 sendbuf 的 block ,这些 block 将分散到通信器中的所有进程。在 Gatherv 中,这些用于定义 recvbuf 中的什么位置,以便将来自所有进程的不同数据片段放入通信器中。 MPI 标准规定在分散期间不应多次读取单个位置,在收集期间不应多次写入单个位置,即各个 block 不应重叠,但出于性能原因,大多数(如果不是全部的话)现有的 MPI 实现不会严格执行该约束。 Joe 的平均位移数组看起来会有所不同,具体取决于 Joe 在他的 MPI 代码中所做的事情。由于 ScattervGatherv 主要用于在其元素数量不能被通信器中的进程数量整除时启用数据的分散和收集,在大多数情况下 displs[0] = 0displs[i] = sendcounts[0] + sendcounts[1] + ... + sendcounts[i-1](或 recvcounts 分别)。

Q2。 sendbufsendoffsetsendcount 指定要收集的数据的本地部分。 recvbufrecvcounts[]displs[] 指定大缓冲区中要收集这些本地片段的部分。

它都是用 MPI 标准编写的,恕我直言,这是为数不多的普通人可读的标准之一。

关于c++ - MPJ Express Scatterv和Gatherv,int[]位移的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10715204/

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