Skip to content

Commit d80436c

Browse files
committed
sycl smart search
1 parent 5450db2 commit d80436c

3 files changed

Lines changed: 73 additions & 23 deletions

File tree

CMakeLists.txt

Lines changed: 59 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ cmake_minimum_required(VERSION 3.20)
22
project(fdm)
33
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
44

5-
find_program(ICPX_EXECUTABLE
6-
NAMES icpx
5+
find_program(SYCL_COMPILER_EXECUTABLE
6+
NAMES icpx acpp
77
HINTS
88
ENV SYCL_ROOT
9+
$ENV{HOME}/opt/adaptivecpp/bin
910
/opt/intel/oneapi/compiler/latest/bin
1011
$ENV{ONEAPI_ROOT}/compiler/latest/bin
1112
)
@@ -16,21 +17,58 @@ find_path(ONEMATH_INCLUDE_DIR
1617
/usr/local/include
1718
)
1819

19-
if (ICPX_EXECUTABLE AND ONEMATH_INCLUDE_DIR)
20-
message(STATUS "Found icpx: ${ICPX_EXECUTABLE}")
21-
message(STATUS "Found oneapi/math.hpp in: ${ONEMATH_INCLUDE_DIR}")
22-
set(SYCL_FOUND TRUE CACHE BOOL "Found SYCL/icpx + oneapi/math.hpp")
20+
find_library(ONEMATH_LIBRARY
21+
NAMES onemath
22+
HINTS
23+
/usr/local/lib
24+
)
25+
26+
if (SYCL_COMPILER_EXECUTABLE)
27+
get_filename_component(_sycl_compiler_name ${SYCL_COMPILER_EXECUTABLE} NAME)
28+
if (_sycl_compiler_name STREQUAL "icpx")
29+
set(_sycl_flags_default "-fsycl -fsycl-targets=nvptx64-nvidia-cuda,spir64 -qopenmp")
30+
set(_sycl_omp_libraries_default "")
31+
else()
32+
# acpp on macOS needs explicit libomp
33+
if (APPLE)
34+
find_library(LIBOMP_LIBRARY NAMES omp
35+
HINTS /opt/homebrew/opt/libomp/lib)
36+
find_path(LIBOMP_INCLUDE_DIR NAMES omp.h
37+
HINTS /opt/homebrew/opt/libomp/include)
38+
if (LIBOMP_LIBRARY AND LIBOMP_INCLUDE_DIR)
39+
get_filename_component(_libomp_lib_dir ${LIBOMP_LIBRARY} DIRECTORY)
40+
set(_sycl_flags_default "--acpp-targets=generic -fopenmp -I${LIBOMP_INCLUDE_DIR}")
41+
set(_sycl_omp_libraries_default "${_libomp_lib_dir}")
42+
else()
43+
set(_sycl_flags_default "--acpp-targets=generic")
44+
set(_sycl_omp_libraries_default "")
45+
endif()
46+
else()
47+
set(_sycl_flags_default "--acpp-targets=generic -fopenmp")
48+
set(_sycl_omp_libraries_default "")
49+
endif()
50+
endif()
51+
set(SYCL_FLAGS "${_sycl_flags_default}" CACHE STRING "Flags passed to the SYCL compiler")
52+
set(SYCL_OMP_LIBRARIES "${_sycl_omp_libraries_default}" CACHE STRING "OpenMP libraries for SYCL compiler (auto-set for acpp on macOS)")
53+
54+
message(STATUS "Found SYCL compiler: ${SYCL_COMPILER_EXECUTABLE}")
55+
message(STATUS "SYCL flags: ${SYCL_FLAGS}")
56+
set(SYCL_FOUND TRUE CACHE BOOL "Found SYCL compiler (icpx or acpp)")
57+
set(CMAKE_CXX_COMPILER ${SYCL_COMPILER_EXECUTABLE} CACHE FILEPATH "C++ compiler for SYCL" FORCE)
58+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SYCL_FLAGS}")
2359
else()
24-
message(WARNING "SYCL compiler (icpx) or oneapi/math.hpp not found")
25-
set(SYCL_FOUND FALSE CACHE BOOL "Found SYCL/icpx + oneapi/math.hpp")
60+
message(STATUS "SYCL compiler (icpx/acpp) not found — SYCL targets will be skipped")
61+
set(SYCL_FOUND FALSE CACHE BOOL "Found SYCL compiler (icpx or acpp)")
2662
endif()
2763

28-
if (SYCL_FOUND)
29-
set(CMAKE_CXX_COMPILER ${ICPX_EXECUTABLE} CACHE FILEPATH "C++ compiler for SYCL target" FORCE)
30-
set(CMAKE_CXX_FLAGS
31-
"${CMAKE_CXX_FLAGS} -qopenmp -fsycl -fsycl-targets=nvptx64-nvidia-cuda,spir64 -DHAVE_ONEMATH"
32-
)
33-
endif ()
64+
if (ONEMATH_INCLUDE_DIR AND ONEMATH_LIBRARY)
65+
message(STATUS "Found oneapi/math.hpp in: ${ONEMATH_INCLUDE_DIR}")
66+
message(STATUS "Found onemath library: ${ONEMATH_LIBRARY}")
67+
set(ONEMATH_FOUND TRUE CACHE BOOL "Found oneMath headers and library")
68+
else()
69+
message(STATUS "oneMath not found (oneapi/math.hpp or libonemath) — HAVE_ONEMATH disabled")
70+
set(ONEMATH_FOUND FALSE CACHE BOOL "Found oneMath headers and library")
71+
endif()
3472

3573
find_package(PkgConfig REQUIRED)
3674
find_package(OpenMP)
@@ -171,10 +209,14 @@ target_link_directories(fdm PUBLIC ${PLPLOT_LIBRARY_DIRS} ${BLAS_LIBRARY_DIRS} $
171209
target_link_libraries(fdm PUBLIC ${PLPLOT_LIBRARIES} ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES} arpack superlu umfpack ${FFTW3_LIBRARIES} ${FFTW3F_LIBRARIES} ${NETCDF_LIBRARIES})
172210
if (OpenMP_CXX_FOUND)
173211
target_link_libraries(fdm PUBLIC OpenMP::OpenMP_CXX)
212+
elseif (SYCL_OMP_LIBRARIES)
213+
target_link_directories(fdm PUBLIC ${SYCL_OMP_LIBRARIES})
214+
endif()
215+
if (ONEMATH_FOUND)
216+
target_compile_definitions(fdm PUBLIC HAVE_ONEMATH)
217+
target_include_directories(fdm PUBLIC ${ONEMATH_INCLUDE_DIR})
218+
target_link_libraries(fdm PUBLIC onemath_dft_mklgpu ${ONEMATH_LIBRARY})
174219
endif()
175-
if (SYCL_FOUND)
176-
target_link_libraries(fdm PUBLIC onemath_dft_mklgpu onemath)
177-
endif ()
178220

179221
add_subdirectory(test)
180222
add_subdirectory(utils)

test/CMakeLists.txt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,15 @@ add_executable(test_tdiag_bench test_tdiag_bench.cpp)
5454
target_link_libraries(test_tdiag_bench fdm)
5555

5656
if (SYCL_FOUND)
57-
add_executable(test_mandelbrot test_mandelbrot.cpp)
58-
target_link_libraries(test_mandelbrot fdm)
59-
6057
add_executable(test_tile_bench test_tile_bench.cpp)
6158
target_link_libraries(test_tile_bench fdm)
59+
60+
find_package(Boost QUIET)
61+
if (Boost_FOUND)
62+
add_executable(test_mandelbrot test_mandelbrot.cpp)
63+
target_link_libraries(test_mandelbrot fdm)
64+
target_include_directories(test_mandelbrot PRIVATE ${Boost_INCLUDE_DIRS})
65+
else()
66+
message(STATUS "Boost not found — test_mandelbrot skipped")
67+
endif()
6268
endif ()

utils/CMakeLists.txt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ project(utils)
33
add_definitions(-DTEST)
44
add_executable(fdm_topo30_mesh fdm_srtm_rel.cpp)
55

6-
if (OPENMP_FOUND)
7-
set_target_properties(fdm_topo30_mesh PROPERTIES LINK_FLAGS ${OpenMP_C_FLAGS})
8-
endif ()
6+
if (OpenMP_CXX_FOUND)
7+
target_link_libraries(fdm_topo30_mesh PRIVATE OpenMP::OpenMP_CXX)
8+
elseif (SYCL_OMP_LIBRARIES)
9+
target_link_directories(fdm_topo30_mesh PRIVATE ${SYCL_OMP_LIBRARIES})
10+
endif()

0 commit comments

Comments
 (0)