From b19363060125282b24c4e9a403e39ba01a06edfd Mon Sep 17 00:00:00 2001 From: Samuel Thibault <samuel.thibault@ens-lyon.org> Date: Mon, 10 Feb 2020 10:50:39 +0100 Subject: [PATCH] starpu: Add data transfer support to new interface Fixes #86 --- CMakeLists.txt | 4 +++ runtime/starpu/include/chameleon_starpu.h.in | 1 + .../starpu/interface/cham_tile_interface.c | 34 ++++++++++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 15ea0144e..3ca797c21 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -656,6 +656,10 @@ if( CHAMELEON_SCHED_STARPU ) 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_interface_copy2d HAVE_STARPU_INTERFACE_COPY2D) + if ( HAVE_STARPU_INTERFACE_COPY2D ) + message("-- ${Blue}Add definition HAVE_STARPU_INTERFACE_COPY2D${ColourReset}") + endif() if (CHAMELEON_USE_MPI) # Check if a specific function exist check_function_exists(starpu_mpi_data_register_comm HAVE_STARPU_MPI_DATA_REGISTER) diff --git a/runtime/starpu/include/chameleon_starpu.h.in b/runtime/starpu/include/chameleon_starpu.h.in index 7fb15f321..fed67ec50 100644 --- a/runtime/starpu/include/chameleon_starpu.h.in +++ b/runtime/starpu/include/chameleon_starpu.h.in @@ -30,6 +30,7 @@ #cmakedefine HAVE_STARPU_DATA_SET_COORDINATES #cmakedefine HAVE_STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS #cmakedefine HAVE_STARPU_DATA_SET_OOC_FLAG +#cmakedefine HAVE_STARPU_INTERFACE_COPY2D #cmakedefine HAVE_STARPU_MPI_DATA_MIGRATE #cmakedefine HAVE_STARPU_MPI_DATA_REGISTER #cmakedefine HAVE_STARPU_MPI_COMM_RANK diff --git a/runtime/starpu/interface/cham_tile_interface.c b/runtime/starpu/interface/cham_tile_interface.c index 549ed65f1..93ecebfc1 100644 --- a/runtime/starpu/interface/cham_tile_interface.c +++ b/runtime/starpu/interface/cham_tile_interface.c @@ -361,6 +361,36 @@ cti_describe( void *data_interface, char *buf, size_t size ) (unsigned) cham_tile_interface->flttype ); } +#ifdef HAVE_STARPU_INTERFACE_COPY2D +static int cti_copy_any_to_any(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, void *async_data) +{ + starpu_cham_tile_interface_t *cham_tile_src = (starpu_cham_tile_interface_t *) src_interface; + starpu_cham_tile_interface_t *cham_tile_dst = (starpu_cham_tile_interface_t *) dst_interface; + size_t elemsize = CHAMELEON_Element_Size( cham_tile_src->flttype ); + size_t m = cham_tile_src->tile.m; + size_t n = cham_tile_src->tile.n; + size_t ld_src = cham_tile_src->tile.ld; + size_t ld_dst = cham_tile_dst->tile.ld; + int ret = 0; + + if (starpu_interface_copy2d( (uintptr_t) cham_tile_src->tile.mat, 0, src_node, + (uintptr_t) cham_tile_dst->tile.mat, 0, dst_node, + m * elemsize, + n, ld_src * elemsize, ld_dst * elemsize, + async_data) ) + ret = -EAGAIN; + + starpu_interface_data_copy( src_node, dst_node, (size_t) n*m*elemsize ); + + return ret; +} + +static const struct starpu_data_copy_methods cti_copy_methods = +{ + .any_to_any = cti_copy_any_to_any, +}; +#endif + struct starpu_data_interface_ops starpu_interface_cham_tile_ops = { .init = cti_init, @@ -379,7 +409,9 @@ struct starpu_data_interface_ops starpu_interface_cham_tile_ops = .pack_data = cti_pack_data, .unpack_data = cti_unpack_data, .describe = cti_describe, - //.copy_methods =&cti_copy_methods, +#ifdef HAVE_STARPU_INTERFACE_COPY2D + .copy_methods =&cti_copy_methods, +#endif .interfaceid = STARPU_UNKNOWN_INTERFACE_ID, .interface_size = sizeof(starpu_cham_tile_interface_t), .name = "STARPU_CHAM_TILE_INTERFACE" -- GitLab