MPI P2P отправить получить связь между кодами C и C++
Нужно ли делать что-то особенное при обмене данными между двумя частями / функцией кода, где источники написаны на разных языках (C и C++)?
Я вставил в код C++ send, который используется всеми параллельными подчиненными задачами с разными рангами:
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 соответствующий прием помещается и вызывается только процессом master 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);
}
}
Массив символов поступает корректно, но, к сожалению, буфер массива не поступает на мастер правильно. Это просто пусто.