【问题标题】:MPI: Sending an array of a structure containing a pointerMPI:发送包含指针的结构数组
【发布时间】:2016-09-18 18:47:04
【问题描述】:

我有以下 C 结构:

typedef struct chromosome{
int *genes;
float cout;
}chromosome;

我想使用 MPI_Send 发送一组染色体。我已经定义了这样的 MPI_CHROMOSOME 数据类型:

MPI_Datatype MPI_CHROMOSOME;
MPI_Datatype TYPES_ELEMENTAIRES[2] = {MPI_INT, MPI_FLOAT};
int blocklengths[2] = {NB_SOMMETS,1}; //NB_SOMMET is a known integer value at this point (number of elements of the "genes" array)
MPI_Aint offsets[2];

offsets[0] = offsetof(chromosome, genes);
offsets[1] = offsetof(chromosome, cout);

MPI_Type_create_struct(2, blocklengths, offsets, TYPES_ELEMENTAIRES, &MPI_CHROMOSOME);
MPI_Type_commit(&MPI_CHROMOSOME);

然后我尝试发送一组染色体:

chromosome *sub_pop = malloc(taille_sub_pop*sizeof(chromosome));//taille_sub_pop is a known integer value
/* ... Fills sub_pop with chromosomes ...*/
MPI_Send(sub_pop,taille_sub_pop,MPI_CHROMOSOME, 1, 3, MPI_COMM_WORLD);

...但是我收到一个错误(您的一个应用程序进程错误终止...退出代码 139...您的应用程序以退出字符串终止:分段错误(信号 11))。

我怎样才能正确发送这个数组?我会很感激你的帮助。非常感谢。

【问题讨论】:

    标签: c arrays mpi


    【解决方案1】:

    您不能使用 MPI 发送指向其他进程的指针。嗯,从技术上讲你可以,但是因为每个进程都有自己的内存空间和地址,一个在一个进程上有效的指针很可能指向另一个进程上的无效内存。无论如何,您要发送指针指向的数据,而不是指针本身。

    看到这个问题: Creating an MPI_Datatype for a structure containing pointers

    【讨论】:

    • 您好,感谢您的回答。在你发给我的链接中,我实际上是想发送一个这种结构的数组,而不仅仅是一个元素......
    猜你喜欢
    • 2015-11-19
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2014-01-20
    • 1970-01-01
    • 2013-04-22
    • 2013-12-12
    相关资源
    最近更新 更多