关于MPI中持久通信请求的问题
Question about persistent communication requests in MPI
我从文档“MPI:消息传递接口标准版本 4.0”中看到以下段落:
A persistent communication request is deallocated by a call to MPI_REQUEST_FREE
. The call to MPI_REQUEST_FREE
can occur at any point in the program
after the persistent request was created. However, the request will be deallocated only after it becomes inactive. Active receive requests should not be freed . Otherwise, it will not be possible to check that the receive has completed.
我试图理解这两个句子如何正确:
"请求只有在变为不活动后才会被释放"
"活动接收请求不应释放"
第一句好像暗示only inactive请求can被释放。但是第二个似乎是说active(接收)请求可以被释放但是不应该获得自由。
如果您对活动请求执行 MPI_Request_free
,您的句柄将变为空。但正如第 2 点所指出的,这不是一个好主意,因为您无法再检查通信状态。
然而,通过释放你只会失去句柄:在通信仍在进行的情况下,实际请求对象仍然存在,占用内存。只有当通信完成时,才会解除分配——意思是,由 MPI,而不是由你。
换句话说,MPI_Request_free
确实会取消分配请求对象,但只有当它对应于不活动的请求时才会立即取消分配。否则,当请求变为非活动状态时会发生释放。
我从文档“MPI:消息传递接口标准版本 4.0”中看到以下段落:
A persistent communication request is deallocated by a call to
MPI_REQUEST_FREE
. The call toMPI_REQUEST_FREE
can occur at any point in the program after the persistent request was created. However, the request will be deallocated only after it becomes inactive. Active receive requests should not be freed . Otherwise, it will not be possible to check that the receive has completed.
我试图理解这两个句子如何正确:
"请求只有在变为不活动后才会被释放"
"活动接收请求不应释放"
第一句好像暗示only inactive请求can被释放。但是第二个似乎是说active(接收)请求可以被释放但是不应该获得自由。
如果您对活动请求执行 MPI_Request_free
,您的句柄将变为空。但正如第 2 点所指出的,这不是一个好主意,因为您无法再检查通信状态。
然而,通过释放你只会失去句柄:在通信仍在进行的情况下,实际请求对象仍然存在,占用内存。只有当通信完成时,才会解除分配——意思是,由 MPI,而不是由你。
换句话说,MPI_Request_free
确实会取消分配请求对象,但只有当它对应于不活动的请求时才会立即取消分配。否则,当请求变为非活动状态时会发生释放。