使用MPI_type_contiguous获取多维数据集卷

时间:2019-05-01 02:40:25

标签: c mpi

我正在编写一些代码,用于使用MPI_type连续的一个非常简单的问题(获取多维数据集的体积)。我的问题是,除了声明新的MPI_TYPE之外,我真的不知道如何使用MPI计算多维数据集的体积(我是paralell计算的新手)。到目前为止,这是我的代码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "mpi.h"

typedef struct{
    int x;
    int y;
    int z;
}COORD;

// Data on the COORD struct
#define N 3

// Coordinates of the cube
#define C 8

COORD* array(int tam)
{
    COORD* arr;
    COORD = (COORD*)malloc(tam*sizeof(COORD));

    return arr;
}

// Construct a new coordinate
COORD constructor(int a, int b, int c)
{
    COORD cord;

    cord.x = a;
    cord.y = b;
    cord.z = c;

    return cord; 
}

// Main
void main(int argc,char* argv[])
{
    int idProc, numProc;
    COORD a, b, c, d, e, f, g, h;
    COORD* array;
    MPI_Status status;

    MPI_Init(&argc,&argv);
    MPI_Comm_rank(MPI_COMM_WORLD,&idProc);
    MPI_Comm_size(MPI_COMM_WORLD,&numProc);

    MPI_Type_contiguous(N, MPI_INT, &COORD);
    MPI_Type_commit(&COORD);

    if(idProc == 0)
    {   
        int i, x, y, z;     
        array = GeneraArreglo(C);

        for(i = 0; i < 8; i++)
        {
            printf("X %d: \n", i);
            scanf(%d, &x);
            printf("Y %d: \n", i);
            scanf(%d, &y);
            printf("Z %d: \n", i);
            scanf(%d, &z);

            array[i] = constructor(x, y , z); 
        }

        MPI_Send(array, C, COORD, 1, 0, MPI_COMM_WORLD);
    }
    else
    {
        printf("Cube volume: \n");
        MPI_Recv(buffer, 4, COORD, 0, 0, MPI_COMM_WORLD, &status);


    }

    MPI_Finalize();
}

如您所见,我几乎可以看到我在做什么,但是,我对该程序的MPI_Recieve部分有疑问。

0 个答案:

没有答案