浏览代码

mpi: Make _starpu_mpi_submit_ready_request take progress_mutex later

We'd rather avoid keeping the progress_mutex while calling
starpu_malloc_on_node_flags.
Samuel Thibault 4 年之前
父节点
当前提交
75372681c4
共有 1 个文件被更改,包括 4 次插入2 次删除
  1. 4 2
      mpi/src/mpi/starpu_mpi_mpi.c

+ 4 - 2
mpi/src/mpi/starpu_mpi_mpi.c

@@ -182,8 +182,6 @@ void _starpu_mpi_submit_ready_request(void *arg)
 
 	_STARPU_MPI_DEBUG(0, "new req %p srcdst %d tag %"PRIi64" and type %s %d\n", req, req->node_tag.node.rank, req->node_tag.data_tag, _starpu_mpi_request_type(req->request_type), req->backend->is_internal_req);
 
-	STARPU_PTHREAD_MUTEX_LOCK(&progress_mutex);
-
 	if (req->request_type == RECV_REQ)
 	{
 		/* Case : the request is the internal receive request submitted
@@ -206,9 +204,11 @@ void _starpu_mpi_submit_ready_request(void *arg)
 				req->ptr = (void *)starpu_malloc_on_node_flags(req->node, req->count, 0);
 			}
 
+			STARPU_PTHREAD_MUTEX_LOCK(&progress_mutex);
 			_STARPU_MPI_DEBUG(3, "Pushing internal starpu_mpi_irecv request %p type %s tag %"PRIi64" src %d data %p ptr %p datatype '%s' count %d registered_datatype %d \n",
 					  req, _starpu_mpi_request_type(req->request_type), req->node_tag.data_tag, req->node_tag.node.rank, req->data_handle, req->ptr,
 					  req->datatype_name, (int)req->count, req->registered_datatype);
+
 			_starpu_mpi_req_list_push_front(&ready_recv_requests, req);
 			_STARPU_MPI_INC_READY_REQUESTS(+1);
 
@@ -218,6 +218,7 @@ void _starpu_mpi_submit_ready_request(void *arg)
 		}
 		else
 		{
+			STARPU_PTHREAD_MUTEX_LOCK(&progress_mutex);
 			/* test whether some data with the given tag and source have already been received by StarPU-MPI*/
 			struct _starpu_mpi_early_data_handle *early_data_handle = _starpu_mpi_early_data_find(&req->node_tag);
 
@@ -291,6 +292,7 @@ void _starpu_mpi_submit_ready_request(void *arg)
 	}
 	else
 	{
+		STARPU_PTHREAD_MUTEX_LOCK(&progress_mutex);
 		if (req->request_type == SEND_REQ)
 			_starpu_mpi_req_prio_list_push_front(&ready_send_requests, req);
 		else