gpt4 book ai didi

c - 发送数组以按顺序排名

转载 作者:太空宇宙 更新时间:2023-11-04 03:40:42 24 4
gpt4 key购买 nike

我有一些流程。每个进程都有一个数组“A”expect from rank 0,其中数组 A 的 expect 也有一个数组 B。

我需要每个进程将A数组发送到rank 0的B数组,我需要发送和接收按顺序进行,即先将rank 0将数组A的内容发送到B,然后排名 1,排名 2 等

我的问题是,每个数组 A 的大小都不相同!这是我的代码中尝试这样做的部分:

   if(my_rank!=0)
{
MPI_Send(&A, Asize, MPI_INT, 0, rank, MPI_COMM_WORLD);
}

if(my_rank==0)
{
for(i=1; i<number_of_process; i++)
{
MPI_Recv(&B, n, MPI_INT, i, i, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
}
}

然后我需要将内容从 rank0 A 传输到 B,因为这是唯一没有传输的内容。不幸的是,这会导致运行时错误:

=====================================================================================
= BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
= EXIT CODE: 139
= CLEANING UP REMAINING PROCESSES
= YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
=====================================================================================
APPLICATION TERMINATED WITH THE EXIT STRING: Segmentation fault (signal 11)

数组声明:

int *A = (int*) malloc( sizeof(int)*n );
int *B = (int*) malloc( sizeof(int)*n );

但有时数组 A 的大小小于 n。

最佳答案

函数MPI_Send() and MPI_Recv()两者都希望将指向包含您的数据的区域的指针作为参数:

你给他们指针本身的地址(即 &A)而不是区域的地址(即由 A 的值指向)。结果指针将被覆盖并且堆栈将被破坏,因此您的段错误。

更正如下:

  MPI_Send(A, Asize, MPI_INT, 0, rank, MPI_COMM_WORLD);  // no &
...
MPI_Recv(B, n, MPI_INT, i, i, MPI_COMM_WORLD, MPI_STATUS_IGNORE); // no &

关于c - 发送数组以按顺序排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28921795/

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