diff --git a/runtime/starpu/CMakeLists.txt b/runtime/starpu/CMakeLists.txt index 2fdfe5266a4f03e16b811a94ff2644ea6dbfecaa..e073ad6f9763c79d515f6d771d7e759ff9b9b24d 100644 --- a/runtime/starpu/CMakeLists.txt +++ b/runtime/starpu/CMakeLists.txt @@ -84,8 +84,11 @@ if ( STARPU_FOUND ) set(CHAMELEON_USE_MIGRATE "OFF") message("-- ${Blue}CHAMELEON_USE_MIGRATE is turned OFF because starpu_mpi_data_migrate not found${ColourReset}") endif() + check_function_exists(starpu_mpi_interface_datatype_node_register HAVE_STARPU_MPI_INTERFACE_DATATYPE_NODE_REGISTER) check_function_exists(starpu_mpi_interface_datatype_register HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER) - if ( HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER ) + if ( HAVE_STARPU_MPI_INTERFACE_DATATYPE_NODE_REGISTER ) + message("-- ${Blue}Add definition HAVE_STARPU_MPI_INTERFACE_DATATYPE_NODE_REGISTER${ColourReset}") + elseif ( HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER ) message("-- ${Blue}Add definition HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER${ColourReset}") else() if( CHAMELEON_USE_MPI_DATATYPES ) diff --git a/runtime/starpu/include/chameleon_starpu.h.in b/runtime/starpu/include/chameleon_starpu.h.in index 89e6fc7848ec3335b238cd0708a03ceeb6363809..848f5c175e9b450ce61b2f3e3322163f4c8a97a5 100644 --- a/runtime/starpu/include/chameleon_starpu.h.in +++ b/runtime/starpu/include/chameleon_starpu.h.in @@ -38,9 +38,10 @@ #cmakedefine HAVE_STARPU_MPI_COMM_GET_ATTR #cmakedefine HAVE_STARPU_MPI_INIT_CONF #cmakedefine HAVE_STARPU_MPI_WAIT_FOR_ALL +#cmakedefine HAVE_STARPU_MPI_INTERFACE_DATATYPE_NODE_REGISTER #cmakedefine HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER -#if !defined(HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER) && defined(CHAMELEON_USE_MPI_DATATYPES) +#if (!defined(HAVE_STARPU_MPI_INTERFACE_DATATYPE_NODE_REGISTER) && !defined(HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER)) && defined(CHAMELEON_USE_MPI_DATATYPES) #error "This version of StarPU does not support MPI datatypes (Please compile with -DCHAMELEON_USE_MPI_DATATYPES=OFF)" #endif diff --git a/runtime/starpu/interface/cham_tile_interface.c b/runtime/starpu/interface/cham_tile_interface.c index ea335c6404d8d52ec38a477c73c11c7909bc1c90..019cc78c1ed3fd6789a4bc1784cb8c5f4a9532c7 100644 --- a/runtime/starpu/interface/cham_tile_interface.c +++ b/runtime/starpu/interface/cham_tile_interface.c @@ -500,13 +500,14 @@ cti_handle_get_allocsize( starpu_data_handle_t handle ) #if defined(CHAMELEON_USE_MPI_DATATYPES) int -cti_allocate_datatype( starpu_data_handle_t handle, - MPI_Datatype *datatype ) +cti_allocate_datatype_node( starpu_data_handle_t handle, + unsigned node, + MPI_Datatype *datatype ) { int ret; starpu_cham_tile_interface_t *cham_tile_interface = (starpu_cham_tile_interface_t *) - starpu_data_get_interface_on_node( handle, STARPU_MAIN_RAM ); + starpu_data_get_interface_on_node( handle, node ); size_t m = cham_tile_interface->tile.m; size_t n = cham_tile_interface->tile.n; @@ -522,6 +523,13 @@ cti_allocate_datatype( starpu_data_handle_t handle, return 0; } +int +cti_allocate_datatype( starpu_data_handle_t handle, + MPI_Datatype *datatype ) +{ + return cti_allocate_datatype_node( handle, STARPU_MAIN_RAM, datatype ); +} + void cti_free_datatype( MPI_Datatype *datatype ) { @@ -536,9 +544,15 @@ starpu_cham_tile_interface_init() { starpu_interface_cham_tile_ops.interfaceid = starpu_data_interface_get_next_id(); #if defined(CHAMELEON_USE_MPI_DATATYPES) + #if defined(HAVE_STARPU_MPI_INTERFACE_DATATYPE_NODE_REGISTER) + starpu_mpi_interface_datatype_node_register( starpu_interface_cham_tile_ops.interfaceid, + cti_allocate_datatype_node, + cti_free_datatype ); + #else starpu_mpi_interface_datatype_register( starpu_interface_cham_tile_ops.interfaceid, cti_allocate_datatype, cti_free_datatype ); + #endif #endif } }