MPI 查找位移的不同方法
MPI Different methods to find displacements
假设我有一个结构类型,如下所示:
typedef struct {
float x, y, z;
float velocity;
int n, type;
} Particle;
我想发送它。我必须创建一个MPI_Type。我知道 4 种方法可以做到这一点。我在下面列出了它们。我想知道它们有什么区别、限制和好处。
使用
MPI_Type_extent
在
stddef.h
中使用offsetof()
,在这个答案中进行了解释: MPI 派生类型 发送答案使用
MPI_Get_address
,也是同一答案中的一个例子。使用
reinterpret_cast<const unsigned char*>
,我没有尝试,但这里有一个例子:MPI创建自定义数据
根据您链接的答案,选项 1 是错误的。
选项 2 是最直接的,其优点是作为常量表达式而不是函数调用。
选项 3 和 4 可能在功能上相同,但 3 更安全。考虑:
给用户的建议。
C 用户可能会试图避免使用 MPI_GET_ADDRESS 并依赖地址运算符 &.但请注意, 那个和cast-expression是一个指针,而不是一个地址。ISO C 不 要求指针的值(或转换为 int 的指针)为 指向---对象的绝对地址,尽管这是 通常情况。此外,引用可能没有唯一的 具有分段地址空间的计算机上的定义。用途 MPI_GET_ADDRESS"引用"C 变量保证了可移植性 这样的机器也是如此。( 对用户的建议结束。
来源: http://www.mpi-forum.org/docs/mpi-2.2/mpi22-report/node74.htm
就个人而言,我会选择选项 3,只是为了绝对确保获得的值与其他 MPI 调用兼容。您可能希望构建一个类似于在内部使用 MPI_Get_address()
的函数或宏offsetof()
。
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 查找定义我的 C/C++ 函数/宏的文件比'grep'更简单的方法
- 在向量中查找大于 0(或通常为 k)的最小元素的最佳方法是什么?
- 在目录中查找所有.cpp.h文件(include,src等)的传统方法
- Visual Studio 2015资源视图和资源编译器使用不同的方法在项目目录中查找图标文件.如何修复
- CMAKE:查找/添加Visual Studio或Windows SDK库和标头的正确方法?
- 我最近正在阅读opencv源代码。有没有更好的方法来在opencv库中查找类定义?
- 查找字符串是否包含字符串向量的任何一个元素的最佳方法
- 查找和替换子阵列的最佳方法
- 在矢量中查找映射键的最快方法
- 按名称查找进程 ID 的快速方法
- 需要帮助从12个字节生成新的24字节RGB查找阵列,或者是一种更好的编码方法
- 在参数相关查找之前进行模板替换的任何方法(或解决方法?
- 使用定点方法编码查找根的两个必要条件
- 这是查找向量中元素位置的合法方法吗?
- 在数组中查找模式的最有效方法?
- 查找系统调用需要多长时间的可能方法
- 使用unordered_map方法查找C++中最(多个)常用词
- 查找批号是否具有多个间隔的最快方法