我有一個相當複雜的程序,我必須與MPI並行。我爲此使用MPICH3。MPI從結構中創建MPI_Datatype包含結構與typedef結構
我知道做一個新MPI_Datatype結合的方式:
typedef struct{
float x;
float y;
int centroid;
} point;
typedef struct{
int csize;//the current size
int tsize;//the total size
point * data;//the data carried
} ArrayList;
const int nfields=3;
MPI_Aint disps[nfields];
int blocklens[] = {1,1,1};
MPI_Datatype types[] = {MPI_FLOAT, MPI_FLOAT, MPI_INT};
disps[0] = offsetof(point, x);
disps[1] = offsetof(point, y);
disps[2] = offsetof(point, centroid);
MPI_Datatype istruct, pstruct;
MPI_Type_create_struct(nfields, blocklens, disps, types, &istruct);
MPI_Type_create_resized(istruct, 0, (char *)&(points[1]) - (char *)(&points[0]), &pstruct);
MPI_Type_commit(&pstruct);
但我必須做下面的結構BigInteger的一個MPI_Datatype:
struct mylimb
{
int x;
};
typedef struct mylimb limb;
typedef enum eBoolean
{
FALSE = 0,
TRUE,
} boolean;
enum eSign
{
SIGN_POSITIVE = 0,
SIGN_NEGATIVE,
};
typedef struct BigInteger
{
limb limbs[1000];
int nbrLimbs;
enum eSign sign;
} BigInteger;
的結構被廣泛應用於碼所以我不能簡單地將它改爲更簡單的方法。那麼任何人都可以告訴我如何從BigInteger執行MPI_Datatype? 我的主要問題是肢體這是一個mylimb我怎麼可以連接到我的MPI_Datatype
在此先感謝! chrigi