我有一个二维数组的一维数组表示:下面是一个 6x6 示例:
[00000012300456700890100234500000] => [------]
[|0123|]
[|4567|]
[|8901|]
[|2345|]
[------]
Run Code Online (Sandbox Code Playgroud)
典型的大小是 514*514 个元素(512 + 2 个光晕单元)。我必须在四个处理器之间分配数据:
Rank 0: Rank 1: Rank 2: Rank 3:
[----] [----] [|456] [567|]
[|012] [123|] [|890] [901|]
[|456] [567|] [|234] [345|]
[|890] [901|] [----] [----]
Run Code Online (Sandbox Code Playgroud)
也就是说,以某种方式,排名 0 的数据的最右边部分也必须转到排名 1 的数据的左侧部分,依此类推,所有其他邻居对。
我知道如何制作大小为 4x4 的数据类型,但不知道如何将该数组的最后一个元素作为新元素的开始重新发送到另一个等级。
如何分发具有重叠的数据?
===编辑===
在使用你的实现后,乔纳森......
我目前正在尝试使用字符数组(2D)来执行此操作,但是从处理器/列中收集它们时我收到了“垃圾”。我更改了类型和所有内容,但目前无法弄清楚问题出在哪里。
void distributeBySend_c(unsigned char **global, const int globalrows, const int globalcols,
const int localrows, const int localcols,
const int rank, const int size,
MPI_Comm cartcomm, const int dims[2], …Run Code Online (Sandbox Code Playgroud)