在使用不同语言(C和C ++)编写源代码的两个代码部分/函数之间进行通信时,是否需要做任何特殊的事情?
我已经在C ++代码中注入了具有不同等级的所有并行从属任务所使用的发送:
if (rank != 0)
{
const long bufferlength = 1000000;
char filename[300];
double array[bufferlength*4];
MPI_Send(filename, 300, MPI_CHAR, 0, rank, MPI_COMM_WORLD);
MPI_Send(array, bufferlength*4, MPI_DOUBLE, 0, rank, MPI_COMM_WORLD);
}
在C源代码中,相应的接收仅由主0进程放置和调用,因为存在多个子任务(此处为num_process
):
if (rank==0)
{
typedef struct array_s
{
char filename[300];//text for file name as identifier
double *t;//time buffer
double *x;//X coordinate buffer
double *y;//Y coordinate buffer
double *z;//Z coordinate buffer
} arraystruc;
arraystruc arraybuffer;
double array[bufferlength*4];
for(i=1;i<num_process;i++)
{
MPI_Recv(arraybuffer.filename, 300, MPI_CHAR, i, MPI_ANY_TAG, MPI_COMM_WORLD,&status);
MPI_Recv(array, bufferlength*4, MPI_DOUBLE, i, MPI_ANY_TAG, MPI_COMM_WORLD,&status);
}
}
字符数组正确到达,但不幸的是数组缓冲区没有正确到达主服务器。它只是空的。