我应该何时使用MPI_Datatype而不是手动序列化?

时间:2013-01-14 17:59:21

标签: mpi

当我需要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的手册重点介绍了如何操作,但没有关于我为什么要这样做。

1 个答案:

答案 0 :(得分:3)

为什么不使用MPI_INT64_T

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