私はMPIと並列化する必要がある非常に複雑なプログラムを持っています。私はこれにMPICH3を使用します。MPI structとtypedefで構造体を含む構造体からMPI_Datatypeを作成します
私は、新しい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をどうやって行うことができるか教えてもらえますか? 私の主な問題は、私のMPI_Datatypeにこれをどのようにつなぐことができるのですか?
ありがとうございます! BigInteger
を書き換える chrigi