我正在编写一些代码,用于使用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部分有疑问。