当我需要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的手册重点介绍了如何操作,但没有关于我为什么要这样做。
答案 0 :(得分:3)
为什么不使用MPI_INT64_T
?
您始终可以使用MPI_Byte
模拟自己的数据类型,或者拥有您的数据类型;数据类型的东西是存在的,所以你不必。在许多情况下,它更容易;如果你想发送其中有“漏洞”的数据(例如,多维数组的切片,具有间隙的结构中的数据),你可以用数据类型相当直接地映射,而你必须手动计算字节字符串,否则使用类似MPI_Pack
的字符串。当然,如果数据结构中的某些内容发生变化,那么在较高级别描述数据肯定不那么脆弱。