MPI重用MPI_Request

w00*_*00d 4 hpc mpi

将完成的MPI_Request重新用于另一个请求是否安全?我一直在使用MPI_Request池来提高性能,没有错误.但肯定知道这将是件好事.

Hri*_*iev 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)的句柄等.