Fixup oneDPL inclusion

This commit is contained in:
Tom Lin 2022-07-28 19:29:46 +01:00
parent 14844ceb56
commit 5a496a91b2
10 changed files with 39 additions and 49 deletions

View File

@ -102,10 +102,24 @@ if (USE_ONEDPL)
GIT_REPOSITORY https://github.com/oneapi-src/oneDPL.git GIT_REPOSITORY https://github.com/oneapi-src/oneDPL.git
GIT_TAG oneDPL-2021.7.0-release GIT_TAG oneDPL-2021.7.0-release
) )
string(TOLOWER ${USE_ONEDPL} ONEDPL_BACKEND)
# XXX oneDPL looks for omp instead of openmp, which mismatches(!) with ONEDPL_PAR_BACKEND if using find_package
if (ONEDPL_BACKEND STREQUAL "openmp")
set(ONEDPL_BACKEND omp)
endif ()
# Not using FetchContent_MakeAvailable (CMake>= 3.14) because we need EXCLUDE_FROM_ALL # Not using FetchContent_MakeAvailable (CMake>= 3.14) because we need EXCLUDE_FROM_ALL
FetchContent_GetProperties(oneDPL) FetchContent_GetProperties(oneDPL)
if (NOT oneDPL_POPULATED) if (NOT oneDPL_POPULATED)
FetchContent_Populate(oneDPL) FetchContent_Populate(oneDPL)
if (USE_TBB)
macro(find_package NAME)
if ("${NAME}" STREQUAL "TBB")
message(STATUS "Discarding oneDPL's call to find_package(${NAME} ${ARGN})")
else ()
_find_package(${NAME} ${ARGN})
endif ()
endmacro()
endif ()
add_subdirectory(${onedpl_SOURCE_DIR} ${onedpl_BINARY_DIR} EXCLUDE_FROM_ALL) add_subdirectory(${onedpl_SOURCE_DIR} ${onedpl_BINARY_DIR} EXCLUDE_FROM_ALL)
endif () endif ()
endif() endif()

View File

@ -71,10 +71,6 @@ macro(register_definitions)
list(APPEND IMPL_DEFINITIONS ${ARGN}) list(APPEND IMPL_DEFINITIONS ${ARGN})
endmacro() endmacro()
macro(register_directories)
list(APPEND IMPL_DIRECTORIES ${ARGN})
endmacro()
macro(register_flag_required NAME DESCRIPTION) macro(register_flag_required NAME DESCRIPTION)
list(APPEND CUSTOM_FLAGS_TRIPLE "${NAME}" "${DESCRIPTION}" ON "") list(APPEND CUSTOM_FLAGS_TRIPLE "${NAME}" "${DESCRIPTION}" ON "")
endmacro() endmacro()

View File

@ -1,27 +0,0 @@
if (USE_ONEDPL)
# # XXX see https://www.intel.com/content/www/us/en/develop/documentation/oneapi-dpcpp-library-guide/top/oneapi-dpc-library-onedpl-overview.html
# # this is to avoid the system TBB headers (if exists) from having precedence which isn't compatible with oneDPL's par implementation
# register_definitions(
# PSTL_USE_PARALLEL_POLICIES=0
# _GLIBCXX_USE_TBB_PAR_BACKEND=0
# )
register_definitions(USE_ONEDPL)
if (USE_ONEDPL STREQUAL "TBB")
register_definitions(ONEDPL_USE_TBB_BACKEND=1)
# TBB will either be linked later (USE_TBB==ON) or via extra libraries, don't do anything here
elseif (USE_ONEDPL STREQUAL "OPENMP")
register_definitions(ONEDPL_USE_OPENMP_BACKEND=1)
# Link OpenMP via CMAKE
find_package(OpenMP REQUIRED)
register_link_library(OpenMP::OpenMP_CXX)
elseif (USE_ONEDPL STREQUAL "SYCL")
register_definitions(ONEDPL_USE_DPCPP_BACKEND=1)
# This needs a SYCL compiler, will fail if CXX doesn't SYCL2020
register_append_cxx_flags(ANY -fsycl-unnamed-lambda -fsycl)
else ()
message(FATAL_ERROR "Unsupported USE_ONEDPL backend: ${USE_ONEDPL}, see USE_ONEDPL flag description for available values.")
endif ()
register_directories(ANY ${onedpl_SOURCE_DIR}/include)
endif ()

View File

@ -15,7 +15,7 @@
#include <oneapi/dpl/algorithm> #include <oneapi/dpl/algorithm>
#include <oneapi/dpl/numeric> #include <oneapi/dpl/numeric>
#ifdef ONEDPL_USE_DPCPP_BACKEND #if ONEDPL_USE_DPCPP_BACKEND
#include <CL/sycl.hpp> #include <CL/sycl.hpp>

View File

@ -24,13 +24,13 @@ STDDataStream<T>::STDDataStream(const int ARRAY_SIZE, int device)
#endif #endif
{ {
std::cout << "Backing storage typeid: " << typeid(a).name() << std::endl; std::cout << "Backing storage typeid: " << typeid(a).name() << std::endl;
#if USE_ONEDPL #ifdef USE_ONEDPL
std::cout << "Using oneDPL backend: "; std::cout << "Using oneDPL backend: ";
#if defined(ONEDPL_USE_DPCPP_BACKEND) #if ONEDPL_USE_DPCPP_BACKEND
std::cout << "SYCL USM (device=" << exe_policy.queue().get_device().get_info<sycl::info::device::name>() << ")"; std::cout << "SYCL USM (device=" << exe_policy.queue().get_device().get_info<sycl::info::device::name>() << ")";
#elif defined(ONEDPL_USE_TBB_BACKEND) #elif ONEDPL_USE_TBB_BACKEND
std::cout << "TBB " TBB_VERSION_STRING; std::cout << "TBB " TBB_VERSION_STRING;
#elif defined(ONEDPL_USE_OPENMP_BACKEND) #elif ONEDPL_USE_OPENMP_BACKEND
std::cout << "OpenMP"; std::cout << "OpenMP";
#else #else
std::cout << "Default"; std::cout << "Default";

View File

@ -41,9 +41,6 @@ register_flag_optional(USE_ONEDPL
macro(setup) macro(setup)
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD 17)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/shim_onedpl.cmake)
if (NVHPC_OFFLOAD) if (NVHPC_OFFLOAD)
set(NVHPC_FLAGS -stdpar -gpu=${NVHPC_OFFLOAD}) set(NVHPC_FLAGS -stdpar -gpu=${NVHPC_OFFLOAD})
# propagate flags to linker so that it links with the gpu stuff as well # propagate flags to linker so that it links with the gpu stuff as well
@ -56,4 +53,8 @@ macro(setup)
if (USE_TBB) if (USE_TBB)
register_link_library(TBB::tbb) register_link_library(TBB::tbb)
endif () endif ()
if (USE_ONEDPL)
register_definitions(USE_ONEDPL)
register_link_library(oneDPL)
endif ()
endmacro() endmacro()

View File

@ -32,13 +32,13 @@ noexcept : array_size{ARRAY_SIZE}, range(0, array_size),
#endif #endif
{ {
std::cout << "Backing storage typeid: " << typeid(a).name() << std::endl; std::cout << "Backing storage typeid: " << typeid(a).name() << std::endl;
#if USE_ONEDPL #ifdef USE_ONEDPL
std::cout << "Using oneDPL backend: "; std::cout << "Using oneDPL backend: ";
#if defined(ONEDPL_USE_DPCPP_BACKEND) #if ONEDPL_USE_DPCPP_BACKEND
std::cout << "SYCL USM (device=" << exe_policy.queue().get_device().get_info<sycl::info::device::name>() << ")"; std::cout << "SYCL USM (device=" << exe_policy.queue().get_device().get_info<sycl::info::device::name>() << ")";
#elif defined(ONEDPL_USE_TBB_BACKEND) #elif ONEDPL_USE_TBB_BACKEND
std::cout << "TBB " TBB_VERSION_STRING; std::cout << "TBB " TBB_VERSION_STRING;
#elif defined(ONEDPL_USE_OPENMP_BACKEND) #elif ONEDPL_USE_OPENMP_BACKEND
std::cout << "OpenMP"; std::cout << "OpenMP";
#else #else
std::cout << "Default"; std::cout << "Default";

View File

@ -41,7 +41,6 @@ register_flag_optional(USE_ONEDPL
macro(setup) macro(setup)
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD 17)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/shim_onedpl.cmake)
if (NVHPC_OFFLOAD) if (NVHPC_OFFLOAD)
set(NVHPC_FLAGS -stdpar -gpu=${NVHPC_OFFLOAD}) set(NVHPC_FLAGS -stdpar -gpu=${NVHPC_OFFLOAD})
# propagate flags to linker so that it links with the gpu stuff as well # propagate flags to linker so that it links with the gpu stuff as well
@ -54,4 +53,8 @@ macro(setup)
if (USE_TBB) if (USE_TBB)
register_link_library(TBB::tbb) register_link_library(TBB::tbb)
endif () endif ()
if (USE_ONEDPL)
register_definitions(USE_ONEDPL)
register_link_library(oneDPL)
endif ()
endmacro() endmacro()

View File

@ -32,13 +32,13 @@ noexcept : array_size{ARRAY_SIZE},
#endif #endif
{ {
std::cout << "Backing storage typeid: " << typeid(a).name() << std::endl; std::cout << "Backing storage typeid: " << typeid(a).name() << std::endl;
#if USE_ONEDPL #ifdef USE_ONEDPL
std::cout << "Using oneDPL backend: "; std::cout << "Using oneDPL backend: ";
#if defined(ONEDPL_USE_DPCPP_BACKEND) #if ONEDPL_USE_DPCPP_BACKEND
std::cout << "SYCL USM (device=" << exe_policy.queue().get_device().get_info<sycl::info::device::name>() << ")"; std::cout << "SYCL USM (device=" << exe_policy.queue().get_device().get_info<sycl::info::device::name>() << ")";
#elif defined(ONEDPL_USE_TBB_BACKEND) #elif ONEDPL_USE_TBB_BACKEND
std::cout << "TBB " TBB_VERSION_STRING; std::cout << "TBB " TBB_VERSION_STRING;
#elif defined(ONEDPL_USE_OPENMP_BACKEND) #elif ONEDPL_USE_OPENMP_BACKEND
std::cout << "OpenMP"; std::cout << "OpenMP";
#else #else
std::cout << "Default"; std::cout << "Default";

View File

@ -33,11 +33,14 @@ macro(setup)
unset(CMAKE_CXX_STANDARD) # drop any existing standard we have set by default unset(CMAKE_CXX_STANDARD) # drop any existing standard we have set by default
# and append our own: # and append our own:
register_append_cxx_flags(ANY -std=c++2a) register_append_cxx_flags(ANY -std=c++2a)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/shim_onedpl.cmake)
if (USE_VECTOR) if (USE_VECTOR)
register_definitions(USE_VECTOR) register_definitions(USE_VECTOR)
endif () endif ()
if (USE_TBB) if (USE_TBB)
register_link_library(TBB::tbb) register_link_library(TBB::tbb)
endif () endif ()
if (USE_ONEDPL)
register_definitions(USE_ONEDPL)
register_link_library(oneDPL)
endif ()
endmacro() endmacro()