gpt4 book ai didi

MPI - MPI_Init 和 MPI_Init_thread 的一个函数

转载 作者:行者123 更新时间:2023-12-03 04:28:05 25 4
gpt4 key购买 nike

是否可以用一个函数来包装MPI_InitMPI_Init_thread?这样做的目的是拥有更清晰的 API,同时保持向后兼容性。当 MPI 运行时不支持对 MPI_Init_thread 的调用时,会发生什么情况?当不支持 MPI_Init_thread 时,如何保持我的包装函数适用于 MPI 实现?

最佳答案

MPI_INIT_THREAD 是 15 年前发布的 MPI-2.0 规范的一部分。事实上,除了一些非常古老的实现之外,所有现有的 MPI 实现都符合 MPI-2。您可能无法获得所需级别的线程支持,但该函数应该存在,并且您仍然应该能够调用它而不是MPI_INIT

最好、最便携的选择是在 MPI 库中为 MPI_Init_thread 提供一个类似于 configure 的机制探针,例如通过尝试编译一个非常简单的 MPI 程序并查看它是否因未解析的符号引用而失败,或者您可以使用 nm (用于存档)或 objdump 直接检查 MPI 库的导出表 (对于共享 ELF 对象)。一旦确定 MPI 库具有 MPI_Init_thread,您就可以定义一个预处理器符号,例如CONFIG_HAS_INITTHREAD。然后将你的包装与此类似:

int init_mpi(int *pargc, char ***pargv, int desired, int *provided)
{
#if defined(CONFIG_HAS_INITTHREAD)
return MPI_Init_thread(pargc, pargv, desired, provided);
#else
*provided = MPI_THREAD_SINGLE;
return MPI_Init(pargc, pargv);
#endif
}

当然,如果 MPI 库缺少 MPI_INIT_THREAD,则 MPI_THREAD_SINGLE 和其他线程支持级别常量也不会在 mpi.h< 中定义,因此您可能需要在某处定义它们。

关于MPI - MPI_Init 和 MPI_Init_thread 的一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16226646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com