C语言 MPI发送和接收结构



我的第一个进程创建了一个结构体链表,我想将列表中的一个元素发送给每个进程。在其他进程中接收元素后,我需要将网格传递给callMethod()。在发送MPI之前,我需要先转换这些文件吗?

struct grid {
int g[N][N];
};
typedef struct s_grids {
struct grid grid;
int start;
struct grids* next;
} grids;
(...MPI_Initialization...) 
grids* gridList;
if (rank == 0)
{
gridList= initParallel(process_count, &possibleSolutionsCount);
// Send one Grid to each process
grids* ptr;
ptr = gridList;
for (int i = 0; i < process_count; i++)
{
MPI_Send(&ptr->grid, sizeof(ptr), ...);
ptr = gridList->next;
}
}
else
{
// Receive struct element
MPI_Recv(...)
// Pass strcut element to a function 
callMethod(struct grid g)
}
(...)

你不能发送一个指针到另一个进程(或者在这个特定的例子中MPI排名),并期望它在另一端是有意义的。

你要做的是发送实际的数据。对于使用指针连接节点的数据结构,这需要将其转换为没有指针的序列化形式。例如,对于链表,将其转换为数组,或者对于树,您可以将所有元素放入数组中,而不是子/父指针,而是数组的整数索引。

最新更新