【发布时间】:2015-05-09 09:59:22
【问题描述】:
我有一些流程。每个进程都有一个从 rank 0 开始的数组“A”,其中数组 A 的期望也有一个数组 B。
我需要每个进程将A数组发送到秩为0的B数组。我需要按顺序进行发送和接收,即先秩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。
【问题讨论】:
-
A 和 B 怎么样:它们是数组 (
int A[xxx];) 还是指针 (int *A)?你能说明你是如何分配它们的吗? -
嘿,是的,我现在会更新我的答案。
标签: c parallel-processing mpi