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);
    }
}

Массив символов поступает корректно, но, к сожалению, буфер массива не поступает на мастер правильно. Это просто пусто.

0 ответов

Другие вопросы по тегам