From 3ca733be3a4e82a802b981c7d10204d0956c9cae Mon Sep 17 00:00:00 2001 From: Greg Eisenhauer Date: Fri, 13 Jan 2023 19:58:22 -0500 Subject: [PATCH] Enforce minimum UCX version, add capability to disable UCX at the ADIOS level --- CMakeLists.txt | 3 ++- cmake/DetectOptions.cmake | 8 +++++++- cmake/FindUCX.cmake | 26 +++++++++++++++++++++----- cmake/adios2-config-common.cmake.in | 2 +- 4 files changed, 31 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cd8d453fd8..680c4e1791 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -161,6 +161,7 @@ adios_option(IME "Enable support for DDN IME transport" AUTO) adios_option(Python "Enable support for Python bindings" AUTO) adios_option(Fortran "Enable support for Fortran bindings" AUTO) adios_option(SysVShMem "Enable support for SysV Shared Memory IPC on *NIX" AUTO) +adios_option(UCX "Enable support for UCX DataPlane in SST" AUTO) adios_option(Profiling "Enable support for profiling" AUTO) adios_option(Endian_Reverse "Enable support for Little/Big Endian Interoperability" AUTO) adios_option(Sodium "Enable support for Sodium for encryption" AUTO) @@ -227,7 +228,7 @@ endif() set(ADIOS2_CONFIG_OPTS BP5 DataMan DataSpaces HDF5 HDF5_VOL MHS SST CUDA Fortran MPI Python Blosc Blosc2 - BZip2 LIBPRESSIO MGARD PNG SZ ZFP DAOS IME O_DIRECT Sodium Catalyst SysVShMem ZeroMQ + BZip2 LIBPRESSIO MGARD PNG SZ ZFP DAOS IME O_DIRECT Sodium Catalyst SysVShMem UCX ZeroMQ Profiling Endian_Reverse GPU_Support AWSSDK ) diff --git a/cmake/DetectOptions.cmake b/cmake/DetectOptions.cmake index 63300ec613..ee6637a73a 100644 --- a/cmake/DetectOptions.cmake +++ b/cmake/DetectOptions.cmake @@ -405,9 +405,15 @@ if(ADIOS2_USE_SST AND NOT WIN32) ADIOS2_HAVE_MPI_CLIENT_SERVER) unset(CMAKE_REQUIRED_LIBRARIES) endif() - find_package(UCX) + # UCX + if(ADIOS2_USE_UCX STREQUAL AUTO) + find_package(UCX 1.9.0) + elseif(ADIOS2_USE_UCX) + find_package(UCX 1.9.0) + endif() if(UCX_FOUND) set(ADIOS2_SST_HAVE_UCX TRUE) + set(ADIOS2_HAVE_UCX TRUE) endif() endif() diff --git a/cmake/FindUCX.cmake b/cmake/FindUCX.cmake index 55673d74c9..a303fd7ebf 100644 --- a/cmake/FindUCX.cmake +++ b/cmake/FindUCX.cmake @@ -52,24 +52,40 @@ if(NOT (PC_UCX_FOUND STREQUAL "IGNORE")) set(UCX_INCLUDE_DIRS ${PC_UCX${_PC_TYPE}_INCLUDE_DIRS}) set(UCX_LIBRARIES ${PC_UCX${_PC_TYPE}_LINK_LIBRARIES}) set(UCX_LIBRARY_DIRS ${PC_UCX${_PC_TYPE}_LIBRARY_DIRS}) + set(UCX_FOUND ${PC_UCX_FOUND}) endif() endif() endif() +if(NOT ${PC_UCX_VERSION}) + set(_UCX_VER_FILE "${UCX_INCLUDE_DIRS}/ucp/api/ucp_version.h") + if(EXISTS "${_UCX_VER_FILE}") + file(READ "${_UCX_VER_FILE}" _ver) + string(REGEX MATCH "#define UCP_API_MAJOR *([0-9]*)" _ ${_ver}) + set(_major ${CMAKE_MATCH_1}) + string(REGEX MATCH "#define UCP_API_MINOR *([0-9]*)" _ ${_ver}) + set(_minor ${CMAKE_MATCH_1}) + set(UCX_VERSION "${_major}.${_minor}") + endif() +else() + set(UCX_VERSION ${PC_UCX_VERSION}) +endif() + include(FindPackageHandleStandardArgs) -# handle the QUIETLY and REQUIRED arguments and set LIBXML2_FOUND to TRUE +# handle the QUIETLY and REQUIRED arguments and set UCX_FOUND to TRUE # if all listed variables are TRUE -find_package_handle_standard_args(UCX DEFAULT_MSG UCX_LIBRARIES) +find_package_handle_standard_args(UCX + FOUND_VAR UCX_FOUND + VERSION_VAR UCX_VERSION + REQUIRED_VARS UCX_LIBRARIES) if(UCX_FOUND) - message("Found UCX: ") if(NOT TARGET ucx::ucx) add_library(ucx::ucx INTERFACE IMPORTED) if(UCX_INCLUDE_DIRS) set_target_properties(ucx::ucx PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${UCX_INCLUDE_DIRS}" ) - message("'${UCX_INCLUDE_DIRS}'") endif() if(UCX_LIBRARIES) set_target_properties(ucx::ucx PROPERTIES @@ -78,4 +94,4 @@ if(UCX_FOUND) ) endif() endif() -endif() \ No newline at end of file +endif() diff --git a/cmake/adios2-config-common.cmake.in b/cmake/adios2-config-common.cmake.in index 88efce6254..edaf1312f6 100644 --- a/cmake/adios2-config-common.cmake.in +++ b/cmake/adios2-config-common.cmake.in @@ -176,7 +176,7 @@ if(NOT @BUILD_SHARED_LIBS@) set(ADIOS2_SST_HAVE_UCX @ADIOS2_SST_HAVE_UCX@) if(ADIOS2_SST_HAVE_UCX) - find_dependency(UCX) + find_dependency(UCX 1.9.0) endif() find_dependency(EVPath)