Re: [mpiwg-tools] Tool question about handling requests in completion calls
Hi all, Marc-Andre pointed me to MPI_Request_get_status during yesterday's call. The plan for next week's call is to talk about any/some/all versions of this call. Here is how I would use the function in test calls: int MPI_Test(MPI_Request* req, int* flag, MPI_Status* status){ int ret = PMPI_Request_get_status(*req, flag, status); if(*flag){ // tool code to handle the successful test PMPI_Test(req, flag, MPI_STATUS_IGNORE); } return ret; } int MPI_Testsome(int incount, MPI_Request req[], int* outcount, int* indices, MPI_Status* statuses[]){ int ret = PMPI_Request_get_status_some(incount, req, outcount, indices, statuses), flag; for(int i=0; i < *outcount; i++){ // tool code to handle the successful test on req[indices[i]] PMPI_Test(req[indices[i]], &flag, MPI_STATUS_IGNORE); } return ret; } int MPI_Testany(int count, MPI_Request req[], int* index, int* flag, MPI_Status* status){ int ret = PMPI_Request_get_status_any(count, req, index, flag, statuses); if(flag){ // tool code to handle the successful test on req[index] PMPI_Test(req[index], &flag, MPI_STATUS_IGNORE); } return ret; } int MPI_Testall(int count, MPI_Request req[], int* flag, MPI_Status* statuses[]){ int ret = PMPI_Request_get_status_all(count, req, flag, statuses); if(flag){ // tool code to handle the successful test on all req PMPI_Testall(req, &flag, MPI_STATUSES_IGNORE); } return ret; } However, I'm not convinced that I'll like to use a similar approach for MPI_Waitall: int MPI_Waitall(int count, MPI_Request req[], MPI_Status* statuses[]){ int flag; do{ int ret = PMPI_Request_get_status_all(incount, req, &flag, statuses); } while(!flag); // tool code to handle the successful test on all req PMPI_Testall(req, &flag, MPI_STATUSES_IGNORE); return ret; } Best Joachim Am 12.08.21 um 16:23 schrieb Joachim Protze via mpiwg-tools:
Hi all,
working on a tool, I'm wondering whether someone has a better solution than copying the whole array before calling the PMPI function.
In the tool, we want to observe the lifetime of requests and semantically bind information to the request handle (e.g. std::map<MPI_Request, tool_info*>). When we observe completion of the request, the request handle passed by the application is already reset to MPI_REQUEST_NULL and cannot be used for the lookup. So, we need to copy the whole array of requests in order to lookup the information for the request after the PMPI call.
For a call like MPI_Testany, this means to copy /count/ values to possibly use one of the values.
Is there any chance to improve the situation? Would it be possible to bind the request handle to the status object for reference? It is clear that the request handle is invalid at that moment, but could still be used for some lookup.
Alternatively, it would help to bind an info(?) object to the request handle, which moves to the status on completion.
Best Joachim
_______________________________________________ mpiwg-tools mailing list [email protected] https://lists.mpi-forum.org/mailman/listinfo/mpiwg-tools
-- Dipl.-Inf. Joachim Protze IT Center Group: High Performance Computing Division: Computational Science and Engineering RWTH Aachen University Seffenter Weg 23 D 52074 Aachen (Germany) Tel: +49 241 80- 24765 Fax: +49 241 80-624765 [email protected] www.itc.rwth-aachen.de
participants (1)
-
Joachim Protze