Pārlūkot izejas kodu

The cache aware send and receive function calls the callback directly if the data is already shared.

Romain LION 5 gadi atpakaļ
vecāks
revīzija
d7250e7cfa

+ 2 - 4
mpi/src/mpi_failure_tolerance/starpu_mpi_checkpoint.c

@@ -79,9 +79,8 @@ void _starpu_mpi_push_cp_ack_recv_cb(struct _starpu_mpi_cp_ack_arg_cb* arg)
 void _recv_internal_dup_ro_cb(void* _args)
 {
 	struct _starpu_mpi_cp_ack_arg_cb* arg = (struct _starpu_mpi_cp_ack_arg_cb*) _args;
-
-	starpu_data_release(arg->copy_handle);
 	_starpu_mpi_store_data_and_send_ack_cb(arg);
+	starpu_data_release(arg->copy_handle);
 }
 
 void _recv_cp_external_data_cb(void* _args)
@@ -104,8 +103,7 @@ void _send_cp_external_data_cb(void* _args)
 }
 
 void _send_cp_internal_data_cb(void* _args) {
-	struct _starpu_mpi_cp_ack_arg_cb *arg = (struct _starpu_mpi_cp_ack_arg_cb *) _args;
-	_starpu_mpi_push_cp_ack_recv_cb(arg);
+	_starpu_mpi_push_cp_ack_recv_cb(_args);
 }
 
 void _send_internal_data_stats(struct _starpu_mpi_cp_ack_arg_cb* arg)

+ 4 - 0
mpi/src/starpu_mpi.c

@@ -191,6 +191,8 @@ struct _starpu_mpi_req* _starpu_mpi_isend_cache_aware(starpu_data_handle_t data_
 	{
 		_STARPU_MPI_DEBUG(1, "STARPU CACHE: Data already sent\n");
 		*cache_flag = 1;
+		if (callback)
+			callback(_arg);
 	}
 	return req;
 }
@@ -274,6 +276,8 @@ struct _starpu_mpi_req* _starpu_mpi_irecv_cache_aware(starpu_data_handle_t data_
 	{
 		_STARPU_MPI_DEBUG(1, "STARPU CACHE: Data already received\n");
 		*cache_flag =1;
+		if (callback)
+			callback(_arg);
 	}
 	return req;
 }