我可以重用请求对象吗?
Can I reuse request objects?
在使用多个 MPI_Isend
和 MPI_Irecv
时,我应该重新声明 MPI_Request
请求,还是只声明一次并重新使用请求对象。如果我必须重新申报,你能举例回答吗?
是的,您可以重复使用 MPI_Request
个变量。这些变量只是句柄,无需初始化即可将它们传递给 MPI_Isend
或 MPI_Irecv
(它们仅标记为这些函数的 OUT 参数)。当然,当传递给任何完成它们的函数时,它们必须有效,例如 MPI_Wait
。这些函数还将在完成后将变量设置为 MPI_REQUEST_NULL
。
您甚至可以更进一步,使用持久通信请求。如果您在循环中有请求在多个调用中保留相同的参数列表。您可以将 MPI_Send_init
等与 MPI_Start
一起使用。这样可以有更好的性能。请注意,对于持久请求,完成函数(例如 MPI_Wait
)只会将请求标记为不活动,而不是将变量设置为 MPI_REQUEST_NULL
.
在使用多个 MPI_Isend
和 MPI_Irecv
时,我应该重新声明 MPI_Request
请求,还是只声明一次并重新使用请求对象。如果我必须重新申报,你能举例回答吗?
是的,您可以重复使用 MPI_Request
个变量。这些变量只是句柄,无需初始化即可将它们传递给 MPI_Isend
或 MPI_Irecv
(它们仅标记为这些函数的 OUT 参数)。当然,当传递给任何完成它们的函数时,它们必须有效,例如 MPI_Wait
。这些函数还将在完成后将变量设置为 MPI_REQUEST_NULL
。
您甚至可以更进一步,使用持久通信请求。如果您在循环中有请求在多个调用中保留相同的参数列表。您可以将 MPI_Send_init
等与 MPI_Start
一起使用。这样可以有更好的性能。请注意,对于持久请求,完成函数(例如 MPI_Wait
)只会将请求标记为不活动,而不是将变量设置为 MPI_REQUEST_NULL
.