11cmake_minimum_required (VERSION 3.22)
22project (Tensorium LANGUAGES C CXX)
33
4- # ─────────────────────────────── Options ───────────────────────────────
54option (USE_MPI "Enable MPI support" OFF )
65option (USE_KNL "Tune for Intel KNL" OFF )
76option (AVX512 "Enable AVX-512" OFF )
@@ -17,7 +16,6 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
1716
1817message (STATUS "Detecting architecture..." )
1918
20- # ─────────────────────────────── Architecture detection ───────────────────────────────
2119if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64" )
2220 message (STATUS "→ Building for x86_64 (AVX/AVX2/AVX512 enabled)" )
2321 add_compile_definitions (TENSORIUM_X86)
@@ -30,9 +28,55 @@ else()
3028 add_compile_definitions (TENSORIUM_FALLBACK)
3129endif ()
3230
31+ find_package (CUDAToolkit QUIET )
32+
33+ execute_process (
34+ COMMAND bash -c "command -v nvidia-smi >/dev/null && nvidia-smi --query-gpu=name --format=csv,noheader | head -n 1 || echo none"
35+ OUTPUT_VARIABLE GPU_NAME OUTPUT_STRIP_TRAILING_WHITESPACE
36+ )
37+
38+ if (NOT GPU_NAME STREQUAL "none" )
39+ message (STATUS "Detected NVIDIA GPU: ${GPU_NAME} " )
40+ add_compile_definitions (TENSORIUM_GPU_PRESENT)
41+ else ()
42+ message (WARNING "⚠️ Aucun GPU NVIDIA détecté (ou nvidia-smi absent)" )
43+ endif ()
44+
45+
46+ option (USE_CUDA "Enable CUDA kernels (requires nvcc)" OFF )
47+
48+ if (USE_CUDA)
49+ if (NOT CUDAToolkit_FOUND)
50+ message (FATAL_ERROR "USE_CUDA=ON mais aucun CUDA toolkit détecté ⚠️" )
51+ endif ()
52+
53+ message (STATUS "CUDA toolkit found at: ${CUDAToolkit_ROOT} " )
54+ message (STATUS "→ Version: ${CUDAToolkit_VERSION} " )
55+ add_compile_definitions (TENSORIUM_CUDA)
56+
57+ enable_language (CUDA)
58+ set (CMAKE_CUDA_COMPILER "${CUDAToolkit_NVCC_EXECUTABLE} " )
59+ message (STATUS "Using NVCC for CUDA compilation: ${CMAKE_CUDA_COMPILER} " )
60+
61+ set (CMAKE_CUDA_ARCHITECTURES 61 70 75 80 86 90)
62+ add_compile_definitions (TENSORIUM_CUDA_ARCH=${CMAKE_CUDA_ARCHITECTURES} )
63+
64+ set (CMAKE_CUDA_STANDARD 17)
65+ set (CMAKE_CUDA_STANDARD_REQUIRED ON )
66+ set (CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -O3 -Xcompiler=-fPIC" )
67+ set (CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --use_fast_math -lineinfo -Wno-deprecated-gpu-targets" )
68+
69+ include_directories (${CUDAToolkit_INCLUDE_DIRS} )
70+ link_directories (${CUDAToolkit_LIBRARY_DIR} )
71+
72+ message (STATUS "→ CUDA architectures: ${CMAKE_CUDA_ARCHITECTURES} " )
73+
74+ else ()
75+ message (STATUS "CUDA support disabled (USE_CUDA=OFF)" )
76+ add_compile_definitions (TENSORIUM_NO_CUDA)
77+ endif ()
3378include_directories (${CMAKE_SOURCE_DIR} /Includes)
3479
35- # ─────────────────────────────── CPU optimization flags ───────────────────────────────
3680if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "amd64" )
3781 message (STATUS "Configuring for x86_64: enabling AVX2/FMA or AVX512" )
3882 set (BASE_FLAGS "-O3 -mtune=native -Wno-ignored-attributes -Rpass-analysis=tensorium-align" )
@@ -60,7 +104,6 @@ endif()
60104
61105message (STATUS "Detected architecture: ${CMAKE_SYSTEM_PROCESSOR} " )
62106
63- # ─────────────────────────────── OpenMP handling ───────────────────────────────
64107if (APPLE )
65108 if (CMAKE_SYSTEM_PROCESSOR MATCHES "arm64" )
66109 message (STATUS "Configuring OpenMP manually for macOS ARM64 (Apple Clang)" )
@@ -81,12 +124,10 @@ else()
81124 endif ()
82125endif ()
83126
84- # ─────────────────────────────── Plugins ───────────────────────────────
85127if (BUILD_PLUGINS)
86128 add_subdirectory (Plugins)
87129endif ()
88130
89- # ─────────────────────────────── Tests ───────────────────────────────
90131if (BUILD_TESTS)
91132 add_subdirectory (Tests)
92133endif ()
0 commit comments