diff --git a/CMakeLists.txt b/CMakeLists.txt index 179faa457c8d379b86fca865faf6984a400cfde1..3b60a6d5dd5b5949a8713fe1ead88091adc435a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -577,325 +577,6 @@ else (NOT CHAMELEON_SIMULATION) endif(NOT CHAMELEON_SIMULATION) - -# CHAMELEON depends on a runtime -# ------------------------------- -if( CHAMELEON_SCHED_STARPU ) - - set(CHAMELEON_STARPU_VERSION "1.3" CACHE STRING "oldest STARPU version desired") - - # create list of components in order to make a single call to find_package(starpu...) - if(NOT CHAMELEON_SIMULATION) - set(STARPU_COMPONENT_LIST "HWLOC") - if(CHAMELEON_USE_CUDA) - list(APPEND STARPU_COMPONENT_LIST "CUDA") - endif() - else() - set(STARPU_COMPONENT_LIST "SIMGRID") - endif() - if(CHAMELEON_USE_MPI) - list(APPEND STARPU_COMPONENT_LIST "MPI") - endif() - - find_package(STARPU ${CHAMELEON_STARPU_VERSION} REQUIRED - COMPONENTS ${STARPU_COMPONENT_LIST}) - - # Add definition and include_dir if found - if ( STARPU_FOUND ) - message("-- ${Blue}Add definition CHAMELEON_SCHED_STARPU" - " - Activate StarPU in Chameleon${ColourReset}") - if (STARPU_INCLUDE_DIRS_DEP) - include_directories(${STARPU_INCLUDE_DIRS_DEP}) - set(CMAKE_REQUIRED_INCLUDES "${STARPU_INCLUDE_DIRS_DEP}") - endif() - if(STARPU_CFLAGS_OTHER_DEP) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${STARPU_CFLAGS_OTHER_DEP}") - string(REPLACE ";" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - set(CMAKE_REQUIRED_FLAGS "${STARPU_CFLAGS_OTHER_DEP}") - endif() - if(STARPU_LDFLAGS_OTHER_DEP) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${STARPU_LDFLAGS_OTHER_DEP}") - string(REPLACE ";" " " CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") - set(CMAKE_REQUIRED_LDFLAGS "${STARPU_LDFLAGS_OTHER_DEP}") - endif() - if(STARPU_LIBRARY_DIRS_DEP) - list(APPEND CMAKE_INSTALL_RPATH "${STARPU_LIBRARY_DIRS_DEP}") - endif() - if (STARPU_LIBRARIES_DEP) - list(INSERT CHAMELEON_DEP 0 ${STARPU_LIBRARIES_DEP}) - set(CMAKE_REQUIRED_LIBRARIES "${STARPU_LIBRARIES_DEP}") - endif() - string(REPLACE ";" " " CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") - check_function_exists(starpu_data_idle_prefetch_on_node HAVE_STARPU_IDLE_PREFETCH) - if ( HAVE_STARPU_IDLE_PREFETCH ) - message("-- ${Blue}Add definition HAVE_STARPU_IDLE_PREFETCH${ColourReset}") - endif() - check_function_exists(starpu_iteration_push HAVE_STARPU_ITERATION_PUSH) - if ( HAVE_STARPU_ITERATION_PUSH ) - message("-- ${Blue}Add definition HAVE_STARPU_ITERATION_PUSH${ColourReset}") - endif() - check_function_exists(starpu_data_wont_use HAVE_STARPU_DATA_WONT_USE) - if ( HAVE_STARPU_DATA_WONT_USE ) - message("-- ${Blue}Add definition HAVE_STARPU_DATA_WONT_USE${ColourReset}") - endif() - check_function_exists(starpu_data_set_coordinates HAVE_STARPU_DATA_SET_COORDINATES) - if ( HAVE_STARPU_DATA_SET_COORDINATES ) - message("-- ${Blue}Add definition HAVE_STARPU_DATA_SET_COORDINATES${ColourReset}") - endif() - check_function_exists(starpu_malloc_on_node_set_default_flags HAVE_STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS) - if ( HAVE_STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS ) - message("-- ${Blue}Add definition HAVE_STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS${ColourReset}") - endif() - check_function_exists(starpu_data_set_ooc_flag HAVE_STARPU_DATA_SET_OOC_FLAG) - if ( HAVE_STARPU_DATA_SET_OOC_FLAG ) - message("-- ${Blue}Add definition HAVE_STARPU_DATA_SET_OOC_FLAG${ColourReset}") - endif() - check_function_exists(starpu_mpi_init_conf HAVE_STARPU_MPI_INIT_CONF) - if ( HAVE_STARPU_MPI_INIT_CONF ) - message("-- ${Blue}Add definition HAVE_STARPU_MPI_INIT_CONF${ColourReset}") - endif() - check_function_exists(starpu_mpi_wait_for_all HAVE_STARPU_MPI_WAIT_FOR_ALL) - if ( HAVE_STARPU_MPI_WAIT_FOR_ALL ) - message("-- ${Blue}Add definition HAVE_STARPU_MPI_WAIT_FOR_ALL${ColourReset}") - endif() - check_function_exists(starpu_mpi_data_migrate HAVE_STARPU_MPI_DATA_MIGRATE) - if ( HAVE_STARPU_MPI_DATA_MIGRATE ) - message("-- ${Blue}Add definition HAVE_STARPU_MPI_DATA_MIGRATE${ColourReset}") - elseif(CHAMELEON_USE_MIGRATE) - 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_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}") - else() - if( CHAMELEON_USE_MPI_DATATYPES ) - set( CHAMELEON_USE_MPI_DATATYPES OFF ) - endif() - 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) - if ( HAVE_STARPU_MPI_DATA_REGISTER ) - message("-- ${Blue}Add definition HAVE_STARPU_MPI_DATA_REGISTER - Activate" - " use of starpu_mpi_data_register() in Chameleon with StarPU${ColourReset}") - endif() - check_function_exists(starpu_mpi_comm_rank HAVE_STARPU_MPI_COMM_RANK) - if ( HAVE_STARPU_MPI_COMM_RANK ) - message("-- ${Blue}Add definition HAVE_STARPU_MPI_COMM_RANK - Activate" - " use of starpu_mpi_comm_rank() in Chameleon with StarPU${ColourReset}") - endif() - check_function_exists(starpu_mpi_cached_receive HAVE_STARPU_MPI_CACHED_RECEIVE) - if ( HAVE_STARPU_MPI_CACHED_RECEIVE ) - message("-- ${Blue}Add definition HAVE_STARPU_MPI_CACHED_RECEIVE${ColourReset}") - endif() - check_function_exists(starpu_mpi_comm_get_attr HAVE_STARPU_MPI_COMM_GET_ATTR) - if ( HAVE_STARPU_MPI_COMM_GET_ATTR ) - message("-- ${Blue}Add definition HAVE_STARPU_MPI_COMM_GET_ATTR${ColourReset}") - endif() - endif() - else ( STARPU_FOUND ) - if(CHAMELEON_VERBOSE_FIND_PACKAGE) - if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES) - if (NOT HWLOC_hwloc.h_DIRS) - Print_Find_Header_Status(hwloc hwloc.h) - endif () - if (NOT HWLOC_hwloc_LIBRARY) - Print_Find_Library_Status(hwloc libhwloc) - endif () - endif() - if(CHAMELEON_SIMULATION AND (NOT SIMGRID_FOUND OR NOT SIMGRID_LIBRARIES)) - if (NOT SIMGRID_simgrid.h_DIRS) - Print_Find_Header_Status(simgrid simgrid.h) - endif () - if (NOT SIMGRID_simgrid_LIBRARY) - Print_Find_Library_Status(simgrid libsimgrid) - endif () - endif() - if( (NOT STARPU_SHM_FOUND) OR (NOT STARPU_SHM_LIBRARIES) OR - ( STARPU_LOOK_FOR_MPI AND (NOT STARPU_MPI_FOUND OR NOT STARPU_MPI_LIBRARIES) ) - ) - foreach(starpu_hdr ${STARPU_hdrs_to_find}) - if (NOT STARPU_${starpu_hdr}_INCLUDE_DIRS) - Print_Find_Header_Status(starpu ${starpu_hdr}) - endif () - endforeach() - if(STARPU_VERSION_STRING) - foreach(starpu_lib ${STARPU_libs_to_find}) - if (NOT STARPU_${starpu_lib}_LIBRARY) - Print_Find_Library_Status(starpu ${starpu_lib}) - endif () - endforeach() - endif () - endif () - else(CHAMELEON_VERBOSE_FIND_PACKAGE) - message(WARNING "StarPU library has not been found and CHAMELEON_VERBOSE_FIND_PACKAGE is set to OFF." - " Try to activate CHAMELEON_VERBOSE_FIND_PACKAGE option (-DCHAMELEON_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection") - endif(CHAMELEON_VERBOSE_FIND_PACKAGE) - if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES) - message(FATAL_ERROR "hwloc library is required but has not been found") - endif() - if(CHAMELEON_SIMULATION AND (NOT SIMGRID_FOUND OR NOT SIMGRID_LIBRARIES)) - message(FATAL_ERROR "SimGrid library is required but has not been found") - endif() - if( (NOT STARPU_SHM_FOUND) OR (NOT STARPU_SHM_LIBRARIES) OR - ( STARPU_LOOK_FOR_MPI AND (NOT STARPU_MPI_FOUND OR NOT STARPU_MPI_LIBRARIES) ) - ) - message(FATAL_ERROR "StarPU library is required but has not been found") - endif() - endif ( STARPU_FOUND ) - -endif( CHAMELEON_SCHED_STARPU ) - -if( CHAMELEON_SCHED_PARSEC ) - - # create list of components in order to make a single call to find_package(starpu...) - set(PARSEC_COMPONENT_LIST "HWLOC") - if(CHAMELEON_USE_MPI) - list(APPEND PARSEC_COMPONENT_LIST "MPI") - endif() - if(CHAMELEON_USE_CUDA) - list(APPEND PARSEC_COMPONENT_LIST "CUDA") - endif() - find_package(PARSEC COMPONENTS ${PARSEC_COMPONENT_LIST}) - if(PARSEC_FOUND) - message("-- ${Blue}Add definition CHAMELEON_SCHED_PARSEC" - " - Activate PaRSEC in Chameleon${ColourReset}") - if (PARSEC_INCLUDE_DIRS_DEP) - include_directories(${PARSEC_INCLUDE_DIRS_DEP}) - endif() - if(PARSEC_CFLAGS_OTHER_DEP) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PARSEC_CFLAGS_OTHER_DEP}") - string(REPLACE ";" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - endif() - if(PARSEC_LDFLAGS_OTHER_DEP) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PARSEC_LDFLAGS_OTHER_DEP}") - string(REPLACE ";" " " CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") - endif() - if(PARSEC_LIBRARY_DIRS_DEP) - list(APPEND CMAKE_INSTALL_RPATH "${PARSEC_LIBRARY_DIRS_DEP}") - endif() - if (PARSEC_LIBRARIES_DEP) - list(INSERT CHAMELEON_DEP 0 ${PARSEC_LIBRARIES_DEP}) - endif() - string(REPLACE ";" " " CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") - # to test if symbols exist, e.g. - # set(CMAKE_REQUIRED_INCLUDES "${PARSEC_INCLUDE_DIRS_DEP}") - # set(CMAKE_REQUIRED_FLAGS "${PARSEC_CFLAGS_OTHER_DEP}") - # set(CMAKE_REQUIRED_LDFLAGS "${PARSEC_LDFLAGS_OTHER_DEP}") - # set(CMAKE_REQUIRED_LIBRARIES "${PARSEC_LIBRARIES_DEP}") - # check_function_exists(parsec_init HAVE_PARSEC_INIT) - else ( PARSEC_FOUND ) - if(CHAMELEON_VERBOSE_FIND_PACKAGE) - if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES) - if (NOT HWLOC_hwloc.h_DIRS) - Print_Find_Header_Status(hwloc hwloc.h) - endif () - if (NOT HWLOC_hwloc_LIBRARY) - Print_Find_Library_Status(hwloc libhwloc) - endif () - endif() - if( (NOT PARSEC_FOUND) OR (NOT PARSEC_LIBRARIES_DEP) ) - foreach(parsec_hdr ${PARSEC_hdrs_to_find}) - if (NOT PARSEC_${parsec_hdr}_INCLUDE_DIRS) - Print_Find_Header_Status(parsec ${parsec_hdr}) - endif () - endforeach() - if(PARSEC_VERSION_STRING) - foreach(parsec_lib ${PARSEC_libs_to_find}) - if (NOT PARSEC_${parsec_lib}_LIBRARY) - Print_Find_Library_Status(parsec ${parsec_lib}) - endif () - endforeach() - endif() - endif() - else(CHAMELEON_VERBOSE_FIND_PACKAGE) - message(WARNING "PaRSEC library has not been found and CHAMELEON_VERBOSE_FIND_PACKAGE is set to OFF." - " Try to activate CHAMELEON_VERBOSE_FIND_PACKAGE option (-DCHAMELEON_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection") - endif(CHAMELEON_VERBOSE_FIND_PACKAGE) - if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES) - message(FATAL_ERROR "hwloc library is required but has not been found") - endif() - if( (NOT PARSEC_FOUND) OR (NOT PARSEC_LIBRARIES_DEP) ) - message(FATAL_ERROR "PaRSEC library is required but has not been found") - endif() - endif ( PARSEC_FOUND ) - -endif( CHAMELEON_SCHED_PARSEC ) - - # try to find quark runtime -if( CHAMELEON_SCHED_QUARK ) - - find_package(QUARK COMPONENTS HWLOC) - - # Add definition and include_dir if found - if(QUARK_FOUND) - message("-- ${Blue}Add definition CHAMELEON_SCHED_QUARK" - " - Activate QUARK in Chameleon${ColourReset}") - if (QUARK_INCLUDE_DIRS_DEP) - include_directories(${QUARK_INCLUDE_DIRS_DEP}) - endif() - if(QUARK_CFLAGS_OTHER_DEP) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${QUARK_CFLAGS_OTHER_DEP}") - string(REPLACE ";" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - endif() - if(QUARK_LDFLAGS_OTHER_DEP) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${QUARK_LDFLAGS_OTHER_DEP}") - string(REPLACE ";" " " CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") - endif() - if(QUARK_LIBRARY_DIRS_DEP) - list(APPEND CMAKE_INSTALL_RPATH "${QUARK_LIBRARY_DIRS_DEP}") - endif() - if (QUARK_LIBRARIES_DEP) - list(INSERT CHAMELEON_DEP 0 ${QUARK_LIBRARIES_DEP}) - endif() - else(QUARK_FOUND) - if(CHAMELEON_VERBOSE_FIND_PACKAGE) - if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES) - if (NOT HWLOC_hwloc.h_DIRS) - Print_Find_Header_Status(hwloc hwloc.h) - endif () - if (NOT HWLOC_hwloc_LIBRARY) - Print_Find_Library_Status(hwloc libhwloc) - endif () - endif() - if (NOT QUARK_quark.h_DIRS) - Print_Find_Header_Status(quark quark.h) - endif () - if (NOT QUARK_quark_LIBRARY) - Print_Find_Library_Status(quark libquark) - endif () - else() - message(WARNING "QUARK library has not been found and CHAMELEON_VERBOSE_FIND_PACKAGE is set to OFF." - " Try to activate CHAMELEON_VERBOSE_FIND_PACKAGE option (-DCHAMELEON_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection") - endif() - if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES) - message(FATAL_ERROR "hwloc library is required but has not been found") - endif() - message(FATAL_ERROR "QUARK library is required but has not been found") - endif(QUARK_FOUND) - -endif() - -if( CHAMELEON_SCHED_OPENMP ) - find_package(OpenMP REQUIRED) - - if ( OPENMP_FOUND ) - message("-- ${Blue}Add definition CHAMELEON_SCHED_OPENMP" - " - Activate OpenMP in Chameleon${ColourReset}") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${OpenMP_Fortran_FLAGS}") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_C_FLAGS}") - # TODO: check for compiler support for "_Pragma" - else ( OPENMP_FOUND ) - message(FATAL_ERROR "Something went wrong when finding OpenMP") - endif ( OPENMP_FOUND ) -endif( CHAMELEON_SCHED_OPENMP ) - # getopt unset(CMAKE_REQUIRED_LIBRARIES) check_include_files(getopt.h CHAMELEON_HAVE_GETOPT_H) diff --git a/cmake_modules/PrintOpts.cmake b/cmake_modules/PrintOpts.cmake index 9fa5551b5f3f207e8aebbd5aee751ccd0f1f2f94..2a6a34e75213e163254c2c68d2e4c207e2573ee1 100644 --- a/cmake_modules/PrintOpts.cmake +++ b/cmake_modules/PrintOpts.cmake @@ -48,6 +48,7 @@ set(dep_message "${dep_message}" " MPI .................: ${CHAMELEON_USE_MPI}\n" "\n" " Runtime specific\n" +" OPENMP ..............: ${CHAMELEON_SCHED_OPENMP}\n" " PARSEC ..............: ${CHAMELEON_SCHED_PARSEC}\n" " QUARK ...............: ${CHAMELEON_SCHED_QUARK}\n" " STARPU ..............: ${CHAMELEON_SCHED_STARPU}\n" diff --git a/include/chameleon/simulate.h b/include/chameleon/simulate.h index 4b93f67525d2295b750a9b074b852618657f4bfc..4e5ca845a009ca2ed9c6e0ce7c360c0314beb050 100644 --- a/include/chameleon/simulate.h +++ b/include/chameleon/simulate.h @@ -22,11 +22,20 @@ #include "chameleon/config.h" /* we need this when starpu is compiled with simgrid enabled */ -#if defined(CHAMELEON_SCHED_STARPU) && defined(CHAMELEON_SIMULATION) -#include <starpu_simgrid_wrap.h> +#if defined(CHAMELEON_SIMULATION) + +#if !defined(CHAMELEON_SCHED_STARPU) +#error "CHAMELEON_SIMULATION can not be enabled without StarPU support" +#endif + +#ifndef main +#define main starpu_main +#endif + #if defined(CHAMELEON_USE_MPI) #define starpu_main smpi_simulated_main_ #endif + #endif #endif /* _chameleon_simulate_h_ */ diff --git a/runtime/openmp/CMakeLists.txt b/runtime/openmp/CMakeLists.txt index fba0c9b16c939d369d3cf535923c053dd917efdb..ae6e6264b74b67145e4548ea51a0b24e34602614 100644 --- a/runtime/openmp/CMakeLists.txt +++ b/runtime/openmp/CMakeLists.txt @@ -27,6 +27,20 @@ ### cmake_minimum_required(VERSION 2.8) +find_package(OpenMP REQUIRED) + +if ( OPENMP_FOUND ) + message("-- ${Blue}Add definition CHAMELEON_SCHED_OPENMP" + " - Activate OpenMP in Chameleon${ColourReset}") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${OpenMP_Fortran_FLAGS}") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_C_FLAGS}") + # TODO: check for compiler support for "_Pragma" +else ( OPENMP_FOUND ) + message(FATAL_ERROR "Something went wrong when finding OpenMP") + return() +endif ( OPENMP_FOUND ) + include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/include ) include_directories( ${CMAKE_CURRENT_BINARY_DIR}/include ) diff --git a/runtime/parsec/CMakeLists.txt b/runtime/parsec/CMakeLists.txt index 7ff91b30dbe28e7824072a328f3fa18e7c8653f6..fd99b8d0a8544101f411825cf199f8696b3228a3 100644 --- a/runtime/parsec/CMakeLists.txt +++ b/runtime/parsec/CMakeLists.txt @@ -27,6 +27,82 @@ ### cmake_minimum_required(VERSION 2.8) +# create list of components in order to make a single call to find_package(starpu...) +set(PARSEC_COMPONENT_LIST "HWLOC") +if(CHAMELEON_USE_MPI) + list(APPEND PARSEC_COMPONENT_LIST "MPI") +endif() +if(CHAMELEON_USE_CUDA) + list(APPEND PARSEC_COMPONENT_LIST "CUDA") +endif() + +find_package( PARSEC REQUIRED + COMPONENTS ${PARSEC_COMPONENT_LIST} ) + +if(PARSEC_FOUND) + message("-- ${Blue}Add definition CHAMELEON_SCHED_PARSEC" + " - Activate PaRSEC in Chameleon${ColourReset}") + if (PARSEC_INCLUDE_DIRS_DEP) + include_directories(${PARSEC_INCLUDE_DIRS_DEP}) + endif() + if(PARSEC_CFLAGS_OTHER_DEP) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PARSEC_CFLAGS_OTHER_DEP}") + string(REPLACE ";" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") + endif() + if(PARSEC_LDFLAGS_OTHER_DEP) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PARSEC_LDFLAGS_OTHER_DEP}") + string(REPLACE ";" " " CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") + endif() + if(PARSEC_LIBRARY_DIRS_DEP) + list(APPEND CMAKE_INSTALL_RPATH "${PARSEC_LIBRARY_DIRS_DEP}") + endif() + if (PARSEC_LIBRARIES_DEP) + list(INSERT CHAMELEON_DEP 0 ${PARSEC_LIBRARIES_DEP}) + endif() + string(REPLACE ";" " " CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + # to test if symbols exist, e.g. + # set(CMAKE_REQUIRED_INCLUDES "${PARSEC_INCLUDE_DIRS_DEP}") + # set(CMAKE_REQUIRED_FLAGS "${PARSEC_CFLAGS_OTHER_DEP}") + # set(CMAKE_REQUIRED_LDFLAGS "${PARSEC_LDFLAGS_OTHER_DEP}") + # set(CMAKE_REQUIRED_LIBRARIES "${PARSEC_LIBRARIES_DEP}") + # check_function_exists(parsec_init HAVE_PARSEC_INIT) +else ( PARSEC_FOUND ) + if(CHAMELEON_VERBOSE_FIND_PACKAGE) + if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES) + if (NOT HWLOC_hwloc.h_DIRS) + Print_Find_Header_Status(hwloc hwloc.h) + endif () + if (NOT HWLOC_hwloc_LIBRARY) + Print_Find_Library_Status(hwloc libhwloc) + endif () + endif() + if( (NOT PARSEC_FOUND) OR (NOT PARSEC_LIBRARIES_DEP) ) + foreach(parsec_hdr ${PARSEC_hdrs_to_find}) + if (NOT PARSEC_${parsec_hdr}_INCLUDE_DIRS) + Print_Find_Header_Status(parsec ${parsec_hdr}) + endif () + endforeach() + if(PARSEC_VERSION_STRING) + foreach(parsec_lib ${PARSEC_libs_to_find}) + if (NOT PARSEC_${parsec_lib}_LIBRARY) + Print_Find_Library_Status(parsec ${parsec_lib}) + endif () + endforeach() + endif() + endif() + else(CHAMELEON_VERBOSE_FIND_PACKAGE) + message(WARNING "PaRSEC library has not been found and CHAMELEON_VERBOSE_FIND_PACKAGE is set to OFF." + " Try to activate CHAMELEON_VERBOSE_FIND_PACKAGE option (-DCHAMELEON_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection") + endif(CHAMELEON_VERBOSE_FIND_PACKAGE) + if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES) + message(FATAL_ERROR "hwloc library is required but has not been found") + endif() + if( (NOT PARSEC_FOUND) OR (NOT PARSEC_LIBRARIES_DEP) ) + message(FATAL_ERROR "PaRSEC library is required but has not been found") + endif() + return() +endif ( PARSEC_FOUND ) + include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/include ) include_directories( ${CMAKE_CURRENT_BINARY_DIR}/include ) diff --git a/runtime/quark/CMakeLists.txt b/runtime/quark/CMakeLists.txt index 347279ce02c7f7757dde41719e068b911da65169..099da938107b63d5c5576ca2c093b498ae056956 100644 --- a/runtime/quark/CMakeLists.txt +++ b/runtime/quark/CMakeLists.txt @@ -27,6 +27,57 @@ ### cmake_minimum_required(VERSION 2.8) +find_package( QUARK REQUIRED + COMPONENTS HWLOC ) + +# Add definition and include_dir if found +if(QUARK_FOUND) + message("-- ${Blue}Add definition CHAMELEON_SCHED_QUARK" + " - Activate QUARK in Chameleon${ColourReset}") + if (QUARK_INCLUDE_DIRS_DEP) + include_directories(${QUARK_INCLUDE_DIRS_DEP}) + endif() + if(QUARK_CFLAGS_OTHER_DEP) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${QUARK_CFLAGS_OTHER_DEP}") + string(REPLACE ";" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") + endif() + if(QUARK_LDFLAGS_OTHER_DEP) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${QUARK_LDFLAGS_OTHER_DEP}") + string(REPLACE ";" " " CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") + endif() + if(QUARK_LIBRARY_DIRS_DEP) + list(APPEND CMAKE_INSTALL_RPATH "${QUARK_LIBRARY_DIRS_DEP}") + endif() + if (QUARK_LIBRARIES_DEP) + list(INSERT CHAMELEON_DEP 0 ${QUARK_LIBRARIES_DEP}) + endif() +else(QUARK_FOUND) + if(CHAMELEON_VERBOSE_FIND_PACKAGE) + if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES) + if (NOT HWLOC_hwloc.h_DIRS) + Print_Find_Header_Status(hwloc hwloc.h) + endif () + if (NOT HWLOC_hwloc_LIBRARY) + Print_Find_Library_Status(hwloc libhwloc) + endif () + endif() + if (NOT QUARK_quark.h_DIRS) + Print_Find_Header_Status(quark quark.h) + endif () + if (NOT QUARK_quark_LIBRARY) + Print_Find_Library_Status(quark libquark) + endif () + else() + message(WARNING "QUARK library has not been found and CHAMELEON_VERBOSE_FIND_PACKAGE is set to OFF." + " Try to activate CHAMELEON_VERBOSE_FIND_PACKAGE option (-DCHAMELEON_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection") + endif() + if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES) + message(FATAL_ERROR "hwloc library is required but has not been found") + endif() + message(FATAL_ERROR "QUARK library is required but has not been found") + return() +endif(QUARK_FOUND) + include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/include ) include_directories( ${CMAKE_CURRENT_BINARY_DIR}/include ) diff --git a/runtime/starpu/CMakeLists.txt b/runtime/starpu/CMakeLists.txt index f02a8bbb0e195d2a72fe0503f19f6418a05334d1..af2095e2702c39297d68a5ca8b03824c81b2f035 100644 --- a/runtime/starpu/CMakeLists.txt +++ b/runtime/starpu/CMakeLists.txt @@ -27,6 +27,173 @@ ### cmake_minimum_required(VERSION 2.8) +set(CHAMELEON_STARPU_VERSION "1.3" CACHE STRING "oldest STARPU version desired") + +# create list of components in order to make a single call to find_package(starpu...) +if(NOT CHAMELEON_SIMULATION) + set(STARPU_COMPONENT_LIST "HWLOC") + if(CHAMELEON_USE_CUDA) + list(APPEND STARPU_COMPONENT_LIST "CUDA") + endif() +else() + set(STARPU_COMPONENT_LIST "SIMGRID") +endif() +if(CHAMELEON_USE_MPI) + list(APPEND STARPU_COMPONENT_LIST "MPI") +endif() + +find_package(STARPU ${CHAMELEON_STARPU_VERSION} REQUIRED + COMPONENTS ${STARPU_COMPONENT_LIST}) + +# Add definition and include_dir if found +if ( STARPU_FOUND ) + message("-- ${Blue}Add definition CHAMELEON_SCHED_STARPU" + " - Activate StarPU in Chameleon${ColourReset}") + if (STARPU_INCLUDE_DIRS_DEP) + include_directories(${STARPU_INCLUDE_DIRS_DEP}) + set(CMAKE_REQUIRED_INCLUDES "${STARPU_INCLUDE_DIRS_DEP}") + endif() + if(STARPU_CFLAGS_OTHER_DEP) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${STARPU_CFLAGS_OTHER_DEP}") + string(REPLACE ";" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") + set(CMAKE_REQUIRED_FLAGS "${STARPU_CFLAGS_OTHER_DEP}") + endif() + if(STARPU_LDFLAGS_OTHER_DEP) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${STARPU_LDFLAGS_OTHER_DEP}") + string(REPLACE ";" " " CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") + set(CMAKE_REQUIRED_LDFLAGS "${STARPU_LDFLAGS_OTHER_DEP}") + endif() + if(STARPU_LIBRARY_DIRS_DEP) + list(APPEND CMAKE_INSTALL_RPATH "${STARPU_LIBRARY_DIRS_DEP}") + endif() + if (STARPU_LIBRARIES_DEP) + list(INSERT CHAMELEON_DEP 0 ${STARPU_LIBRARIES_DEP}) + set(CMAKE_REQUIRED_LIBRARIES "${STARPU_LIBRARIES_DEP}") + endif() + string(REPLACE ";" " " CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + check_function_exists(starpu_data_idle_prefetch_on_node HAVE_STARPU_IDLE_PREFETCH) + if ( HAVE_STARPU_IDLE_PREFETCH ) + message("-- ${Blue}Add definition HAVE_STARPU_IDLE_PREFETCH${ColourReset}") + endif() + check_function_exists(starpu_iteration_push HAVE_STARPU_ITERATION_PUSH) + if ( HAVE_STARPU_ITERATION_PUSH ) + message("-- ${Blue}Add definition HAVE_STARPU_ITERATION_PUSH${ColourReset}") + endif() + check_function_exists(starpu_data_wont_use HAVE_STARPU_DATA_WONT_USE) + if ( HAVE_STARPU_DATA_WONT_USE ) + message("-- ${Blue}Add definition HAVE_STARPU_DATA_WONT_USE${ColourReset}") + endif() + check_function_exists(starpu_data_set_coordinates HAVE_STARPU_DATA_SET_COORDINATES) + if ( HAVE_STARPU_DATA_SET_COORDINATES ) + message("-- ${Blue}Add definition HAVE_STARPU_DATA_SET_COORDINATES${ColourReset}") + endif() + check_function_exists(starpu_malloc_on_node_set_default_flags HAVE_STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS) + if ( HAVE_STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS ) + message("-- ${Blue}Add definition HAVE_STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS${ColourReset}") + endif() + check_function_exists(starpu_data_set_ooc_flag HAVE_STARPU_DATA_SET_OOC_FLAG) + if ( HAVE_STARPU_DATA_SET_OOC_FLAG ) + message("-- ${Blue}Add definition HAVE_STARPU_DATA_SET_OOC_FLAG${ColourReset}") + endif() + check_function_exists(starpu_mpi_init_conf HAVE_STARPU_MPI_INIT_CONF) + if ( HAVE_STARPU_MPI_INIT_CONF ) + message("-- ${Blue}Add definition HAVE_STARPU_MPI_INIT_CONF${ColourReset}") + endif() + check_function_exists(starpu_mpi_wait_for_all HAVE_STARPU_MPI_WAIT_FOR_ALL) + if ( HAVE_STARPU_MPI_WAIT_FOR_ALL ) + message("-- ${Blue}Add definition HAVE_STARPU_MPI_WAIT_FOR_ALL${ColourReset}") + endif() + check_function_exists(starpu_mpi_data_migrate HAVE_STARPU_MPI_DATA_MIGRATE) + if ( HAVE_STARPU_MPI_DATA_MIGRATE ) + message("-- ${Blue}Add definition HAVE_STARPU_MPI_DATA_MIGRATE${ColourReset}") + elseif(CHAMELEON_USE_MIGRATE) + 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_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}") + else() + if( CHAMELEON_USE_MPI_DATATYPES ) + set( CHAMELEON_USE_MPI_DATATYPES OFF ) + endif() + 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) + if ( HAVE_STARPU_MPI_DATA_REGISTER ) + message("-- ${Blue}Add definition HAVE_STARPU_MPI_DATA_REGISTER - Activate" + " use of starpu_mpi_data_register() in Chameleon with StarPU${ColourReset}") + endif() + check_function_exists(starpu_mpi_comm_rank HAVE_STARPU_MPI_COMM_RANK) + if ( HAVE_STARPU_MPI_COMM_RANK ) + message("-- ${Blue}Add definition HAVE_STARPU_MPI_COMM_RANK - Activate" + " use of starpu_mpi_comm_rank() in Chameleon with StarPU${ColourReset}") + endif() + check_function_exists(starpu_mpi_cached_receive HAVE_STARPU_MPI_CACHED_RECEIVE) + if ( HAVE_STARPU_MPI_CACHED_RECEIVE ) + message("-- ${Blue}Add definition HAVE_STARPU_MPI_CACHED_RECEIVE${ColourReset}") + endif() + check_function_exists(starpu_mpi_comm_get_attr HAVE_STARPU_MPI_COMM_GET_ATTR) + if ( HAVE_STARPU_MPI_COMM_GET_ATTR ) + message("-- ${Blue}Add definition HAVE_STARPU_MPI_COMM_GET_ATTR${ColourReset}") + endif() + endif() +else ( STARPU_FOUND ) + if(CHAMELEON_VERBOSE_FIND_PACKAGE) + if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES) + if (NOT HWLOC_hwloc.h_DIRS) + Print_Find_Header_Status(hwloc hwloc.h) + endif () + if (NOT HWLOC_hwloc_LIBRARY) + Print_Find_Library_Status(hwloc libhwloc) + endif () + endif() + if(CHAMELEON_SIMULATION AND (NOT SIMGRID_FOUND OR NOT SIMGRID_LIBRARIES)) + if (NOT SIMGRID_simgrid.h_DIRS) + Print_Find_Header_Status(simgrid simgrid.h) + endif () + if (NOT SIMGRID_simgrid_LIBRARY) + Print_Find_Library_Status(simgrid libsimgrid) + endif () + endif() + if( (NOT STARPU_SHM_FOUND) OR (NOT STARPU_SHM_LIBRARIES) OR + ( STARPU_LOOK_FOR_MPI AND (NOT STARPU_MPI_FOUND OR NOT STARPU_MPI_LIBRARIES) ) + ) + foreach(starpu_hdr ${STARPU_hdrs_to_find}) + if (NOT STARPU_${starpu_hdr}_INCLUDE_DIRS) + Print_Find_Header_Status(starpu ${starpu_hdr}) + endif () + endforeach() + if(STARPU_VERSION_STRING) + foreach(starpu_lib ${STARPU_libs_to_find}) + if (NOT STARPU_${starpu_lib}_LIBRARY) + Print_Find_Library_Status(starpu ${starpu_lib}) + endif () + endforeach() + endif () + endif () + else(CHAMELEON_VERBOSE_FIND_PACKAGE) + message(WARNING "StarPU library has not been found and CHAMELEON_VERBOSE_FIND_PACKAGE is set to OFF." + " Try to activate CHAMELEON_VERBOSE_FIND_PACKAGE option (-DCHAMELEON_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection") + endif(CHAMELEON_VERBOSE_FIND_PACKAGE) + if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES) + message(FATAL_ERROR "hwloc library is required but has not been found") + endif() + if(CHAMELEON_SIMULATION AND (NOT SIMGRID_FOUND OR NOT SIMGRID_LIBRARIES)) + message(FATAL_ERROR "SimGrid library is required but has not been found") + endif() + if( (NOT STARPU_SHM_FOUND) OR (NOT STARPU_SHM_LIBRARIES) OR + ( STARPU_LOOK_FOR_MPI AND (NOT STARPU_MPI_FOUND OR NOT STARPU_MPI_LIBRARIES) ) + ) + message(FATAL_ERROR "StarPU library is required but has not been found") + endif() +endif ( STARPU_FOUND ) + include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/include ) include_directories( ${CMAKE_CURRENT_BINARY_DIR}/include )