2

当我需要 MPI_Bcast 一个 64 位整数时,这一切就开始了。由于 MPI 不知道如何处理它,我做了:

template<typename T>
inline int BcastObjects(T* pointer, 
                        int count, 
                        int root, 
                        MPI_Comm comm)
{
    return MPI_Bcast(pointer, 
                     count * sizeof(*pointer), 
                     MPI_BYTE, 
                     root,
                     comm);
}

现在我可以这样做:

int64_t i = 0;
BcastObjects(&i, 1, root_rank, some_communicator);

然后我开始使用 BcastObjects 发送一个结构数组。我想知道这样做可以吗?

关于 MPI_Datatype 的手册侧重于如何做,而不是我为什么要这样做。

4

1 回答 1

3

为什么不直接使用MPI_INT64_T

你总是可以用你自己的数据类型来模拟你自己的数据类型MPI_Byte;数据类型的东西在那里,所以你不必。在许多情况下,这要容易得多;如果您想发送其中有“漏洞”的数据(例如,多维数组的切片,结构中存在间隙的数据),您可以使用数据类型相当直接地映射出来,而您必须手动数出字节字符串并使用类似的东西MPI_Pack。当然,如果您的数据结构中的某些内容发生变化,那么在更高级别上描述数据肯定不会那么脆弱。

于 2013-01-14T18:12:01.633 回答