mirror of
https://github.com/slsdetectorgroup/aare.git
synced 2026-06-04 17:08:42 +02:00
e894bdac9b
- Add bind_ClusterFinderCUDA.hpp with pybind11 bindings for ClusterFinderCUDA - Build CUDA bindings as separate _aare_cuda.so to avoid segfaults from mixing nvcc and gcc compiled code in the same shared object - Re-export CUDA classes onto _aare in __init__.py so user code uses `from aare import ClusterFinderCUDA` regardless of which .so hosts the class - Factory in ClusterFinder.py selects backend; RuntimeError if GPU requested on CPU-only build - Update python/CMakeLists.txt: _aare_cuda module gated behind AARE_CUDA and AARE_PYTHON_BINDINGS - Add validation notebook: ~20x speedup vs sequential ClusterFinder
119 lines
3.5 KiB
CMake
119 lines
3.5 KiB
CMake
# SPDX-License-Identifier: MPL-2.0
|
|
|
|
find_package (Python 3.10 COMPONENTS Interpreter Development.Module REQUIRED)
|
|
set(PYBIND11_FINDPYTHON ON) # Needed for RH8
|
|
|
|
# Download or find pybind11 depending on configuration
|
|
if(AARE_FETCH_PYBIND11)
|
|
FetchContent_Declare(
|
|
pybind11
|
|
GIT_REPOSITORY https://github.com/pybind/pybind11
|
|
GIT_TAG v2.13.6
|
|
)
|
|
FetchContent_MakeAvailable(pybind11)
|
|
else()
|
|
find_package(pybind11 2.13 REQUIRED)
|
|
endif()
|
|
|
|
# ---- Main CPU module --------------------------------------------------------
|
|
# module.cpp is the only source for the main module. When AARE_CUDA=ON, the
|
|
# CUDA bindings live in a *separate* Python extension (_aare_cuda.so) loaded
|
|
# independently at runtime. This isolates the nvcc-compiled translation unit
|
|
# into its own ELF image so pybind11's type registry cannot be corrupted by
|
|
# weak-symbol collisions between gcc-emitted and nvcc-emitted template
|
|
# instantiations.
|
|
pybind11_add_module(_aare NO_EXTRAS src/module.cpp)
|
|
|
|
target_link_libraries(_aare PRIVATE aare_core aare_compiler_flags)
|
|
|
|
target_include_directories(_aare SYSTEM PRIVATE
|
|
$<TARGET_PROPERTY:Minuit2::Minuit2,INTERFACE_INCLUDE_DIRECTORIES>
|
|
)
|
|
|
|
set_target_properties(_aare PROPERTIES
|
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/aare
|
|
INTERPROCEDURAL_OPTIMIZATION FALSE
|
|
)
|
|
|
|
# ---- CUDA module (separate .so) --------------------------------------------
|
|
if(AARE_CUDA)
|
|
pybind11_add_module(_aare_cuda NO_EXTRAS src/cuda_bindings.cu)
|
|
|
|
target_link_libraries(_aare_cuda PRIVATE aare_cuda aare_compiler_flags)
|
|
|
|
target_include_directories(_aare_cuda SYSTEM PRIVATE
|
|
$<TARGET_PROPERTY:Minuit2::Minuit2,INTERFACE_INCLUDE_DIRECTORIES>
|
|
)
|
|
|
|
set_target_properties(_aare_cuda PROPERTIES
|
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/aare
|
|
INTERPROCEDURAL_OPTIMIZATION FALSE
|
|
CUDA_RESOLVE_DEVICE_SYMBOLS ON
|
|
CUDA_SEPARABLE_COMPILATION ON
|
|
)
|
|
|
|
target_compile_options(_aare_cuda PRIVATE
|
|
$<$<COMPILE_LANGUAGE:CUDA>:--expt-relaxed-constexpr>
|
|
$<$<COMPILE_LANGUAGE:CUDA>:--extended-lambda>
|
|
$<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=-fvisibility=hidden>
|
|
$<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=-fPIC>
|
|
)
|
|
endif()
|
|
|
|
# List of python files to be copied to the build directory
|
|
set( PYTHON_FILES
|
|
aare/__init__.py
|
|
aare/CtbRawFile.py
|
|
aare/ClusterFinder.py
|
|
aare/ClusterVector.py
|
|
aare/Cluster.py
|
|
aare/calibration.py
|
|
aare/func.py
|
|
aare/RawFile.py
|
|
aare/transform.py
|
|
aare/ScanParameters.py
|
|
aare/utils.py
|
|
)
|
|
|
|
|
|
# Copy the python files to the build directory
|
|
foreach(FILE ${PYTHON_FILES})
|
|
configure_file(${FILE} ${CMAKE_BINARY_DIR}/${FILE} )
|
|
endforeach(FILE ${PYTHON_FILES})
|
|
|
|
# set_target_properties(_aare PROPERTIES
|
|
# LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/aare
|
|
# )
|
|
|
|
set(PYTHON_EXAMPLES
|
|
examples/play.py
|
|
examples/fits.py
|
|
)
|
|
|
|
|
|
# Copy the python examples to the build directory
|
|
foreach(FILE ${PYTHON_EXAMPLES})
|
|
configure_file(${FILE} ${CMAKE_BINARY_DIR}/${FILE} )
|
|
message(STATUS "Copying ${FILE} to ${CMAKE_BINARY_DIR}/${FILE}")
|
|
endforeach(FILE ${PYTHON_EXAMPLES})
|
|
|
|
|
|
if(AARE_INSTALL_PYTHONEXT)
|
|
set(AARE_PY_INSTALL_TARGETS _aare)
|
|
if(AARE_CUDA)
|
|
list(APPEND AARE_PY_INSTALL_TARGETS _aare_cuda)
|
|
endif()
|
|
|
|
install(
|
|
TARGETS ${AARE_PY_INSTALL_TARGETS}
|
|
EXPORT "${TARGETS_EXPORT_NAME}"
|
|
LIBRARY DESTINATION aare
|
|
COMPONENT python
|
|
)
|
|
|
|
install(
|
|
FILES ${PYTHON_FILES}
|
|
DESTINATION aare
|
|
COMPONENT python
|
|
)
|
|
endif() |