Mentions légales du service

Skip to content
Snippets Groups Projects
Commit ef2d5e22 authored by THIBAULT Samuel's avatar THIBAULT Samuel Committed by Mathieu Faverge
Browse files

StarPU: Add support for registering MPI data types

Fixes #97
parent 80f20a19
No related branches found
No related tags found
1 merge request!204Add support for registering MPI data types
...@@ -656,6 +656,10 @@ if( CHAMELEON_SCHED_STARPU ) ...@@ -656,6 +656,10 @@ if( CHAMELEON_SCHED_STARPU )
set(CHAMELEON_USE_MIGRATE "OFF") set(CHAMELEON_USE_MIGRATE "OFF")
message("-- ${Blue}CHAMELEON_USE_MIGRATE is turned OFF because starpu_mpi_data_migrate not found${ColourReset}") message("-- ${Blue}CHAMELEON_USE_MIGRATE is turned OFF because starpu_mpi_data_migrate not found${ColourReset}")
endif() endif()
check_function_exists(starpu_mpi_interface_datatype_register HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER)
if ( HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER )
message("-- ${Blue}Add definition HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER${ColourReset}")
endif()
check_function_exists(starpu_interface_copy2d HAVE_STARPU_INTERFACE_COPY2D) check_function_exists(starpu_interface_copy2d HAVE_STARPU_INTERFACE_COPY2D)
if ( HAVE_STARPU_INTERFACE_COPY2D ) if ( HAVE_STARPU_INTERFACE_COPY2D )
message("-- ${Blue}Add definition HAVE_STARPU_INTERFACE_COPY2D${ColourReset}") message("-- ${Blue}Add definition HAVE_STARPU_INTERFACE_COPY2D${ColourReset}")
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#cmakedefine HAVE_STARPU_MPI_COMM_GET_ATTR #cmakedefine HAVE_STARPU_MPI_COMM_GET_ATTR
#cmakedefine HAVE_STARPU_MPI_INIT_CONF #cmakedefine HAVE_STARPU_MPI_INIT_CONF
#cmakedefine HAVE_STARPU_MPI_WAIT_FOR_ALL #cmakedefine HAVE_STARPU_MPI_WAIT_FOR_ALL
#cmakedefine HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER
#if defined(CHAMELEON_USE_MPI) #if defined(CHAMELEON_USE_MPI)
#include <starpu_mpi.h> #include <starpu_mpi.h>
......
...@@ -481,6 +481,37 @@ cti_handle_get_allocsize( starpu_data_handle_t handle ) ...@@ -481,6 +481,37 @@ cti_handle_get_allocsize( starpu_data_handle_t handle )
return cham_tile_interface->allocsize; return cham_tile_interface->allocsize;
} }
#if defined(HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER)
int
cti_allocate_datatype( starpu_data_handle_t handle,
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 );
size_t m = cham_tile_interface->tile.m;
size_t n = cham_tile_interface->tile.n;
size_t ld = cham_tile_interface->tile.ld;
size_t elemsize = CHAMELEON_Element_Size( cham_tile_interface->flttype );
ret = MPI_Type_vector( n, m * elemsize, ld * elemsize, MPI_BYTE, datatype );
STARPU_ASSERT_MSG(ret == MPI_SUCCESS, "MPI_Type_vector failed");
ret = MPI_Type_commit( datatype );
STARPU_ASSERT_MSG(ret == MPI_SUCCESS, "MPI_Type_commit failed");
return 0;
}
void
cti_free_datatype( MPI_Datatype *datatype )
{
MPI_Type_free( datatype );
}
#endif
void void
starpu_cham_tile_interface_init() __attribute__((constructor)); starpu_cham_tile_interface_init() __attribute__((constructor));
...@@ -490,5 +521,10 @@ starpu_cham_tile_interface_init() ...@@ -490,5 +521,10 @@ starpu_cham_tile_interface_init()
if ( starpu_interface_cham_tile_ops.interfaceid == STARPU_UNKNOWN_INTERFACE_ID ) if ( starpu_interface_cham_tile_ops.interfaceid == STARPU_UNKNOWN_INTERFACE_ID )
{ {
starpu_interface_cham_tile_ops.interfaceid = starpu_data_interface_get_next_id(); starpu_interface_cham_tile_ops.interfaceid = starpu_data_interface_get_next_id();
#if defined(HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER)
starpu_mpi_interface_datatype_register( starpu_interface_cham_tile_ops.interfaceid,
cti_allocate_datatype,
cti_free_datatype );
#endif
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment