diff --git a/runtime/starpu/control/runtime_descriptor.c b/runtime/starpu/control/runtime_descriptor.c index ee0698dff7f140da49c46f6cde749320256a8dea..f87818993dc99bef845d53f44fd2d8caa32521a3 100644 --- a/runtime/starpu/control/runtime_descriptor.c +++ b/runtime/starpu/control/runtime_descriptor.c @@ -416,11 +416,23 @@ void RUNTIME_data_migrate( const RUNTIME_sequence_t *sequence, lhandle = *handle; if ( lhandle == NULL ) { + int involved; + + old_rank = A->get_rankof( A, Am, An ); + involved = (A->myrank == old_rank) || (A->myrank == new_rank); + + /* Quick return */ + if ( !involved ) { + return; + } + /* Register the data */ lhandle = RUNTIME_data_getaddr( A, Am, An ); } - old_rank = starpu_mpi_data_get_rank( lhandle ); + /* Update the rank if has been moved already (cf qr for example) */ + old_rank = starpu_mpi_data_get_rank( lhandle ); + assert( old_rank == A->get_rankof( A, Am, An ) ); if ( old_rank != new_rank ) { starpu_mpi_data_migrate( MPI_COMM_WORLD, lhandle, new_rank ); }