MPI重用MPI_Request

时间:2014-03-14 16:34:49

标签: mpi hpc

将完成的MPI_Request重新用于其他请求是否安全?我一直在使用MPI_Request池来提高性能,没有错误。但肯定知道会很好。

2 个答案:

答案 0 :(得分:5)

类型MPI_Request的变量本身不是请求对象,而是实际MPI请求对象的不透明句柄(类似于抽象指针)。为这样的变量赋值不会影响MPI对象,只会破坏与它的关联。因此,如果程序中没有句柄,则该对象可能无法访问,因此无法再将其传递给MPI调用。这与丢失指向动态分配的内存块的指针相同,从而泄漏它。

当涉及异步请求句柄时,一旦操作完成,MPI就会销毁请求对象,并且MPI_Wait* / MPI_Test*在返回时将传递的句柄变量设置为MPI_REQUEST_NULL。此外,对MPI_Request_free的调用将标记删除请求,并在返回时将句柄设置为MPI_REQUEST_NULL。此时,您可以重用该变量并在其中存储不同的请求句柄。

这同样适用于通信器的句柄(类型为MPI_Comm),数据类型的句柄(类型为MPI_Datatype),减少操作的句柄(类型为MPI_Op),等等

答案 1 :(得分:4)

只要重新使用MPI_Request对象,再次使用它们(通过完成请求或使用{{1}手动释放请求对象),就可以重复使用MPI_REQUEST_FREE个对象。 })。