diff --git a/.github/workflows/concrete_cuda_test.yml b/.github/workflows/concrete_cuda_test.yml index c93a76fdc..cb4973baf 100644 --- a/.github/workflows/concrete_cuda_test.yml +++ b/.github/workflows/concrete_cuda_test.yml @@ -13,10 +13,13 @@ jobs: - name: Set up Clang run: | sudo apt-get install clang-format-11 + - name: Install cmake-format + run: | + pip install cmakelang - name: Format Concrete-cuda run: | cd backends/concrete-cuda/implementation - ./clang-format.sh + ./format_concrete_cuda.sh - name: Check diff run: git diff --exit-code diff --git a/backends/concrete-cuda/implementation/CMakeLists.txt b/backends/concrete-cuda/implementation/CMakeLists.txt index 15d4b32a1..3b35fca97 100644 --- a/backends/concrete-cuda/implementation/CMakeLists.txt +++ b/backends/concrete-cuda/implementation/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.8 FATAL_ERROR) +cmake_minimum_required(VERSION 3.24 FATAL_ERROR) project(concrete_cuda LANGUAGES CXX CUDA) # See if the minimum CUDA version is available. If not, only enable documentation building. @@ -7,60 +7,59 @@ include(CheckLanguage) # See if CUDA is available check_language(CUDA) # If so, enable CUDA to check the version. -if (CMAKE_CUDA_COMPILER) - enable_language(CUDA) -endif () +if(CMAKE_CUDA_COMPILER) + enable_language(CUDA) +endif() # If CUDA is not available, or the minimum version is too low do not build -if (NOT CMAKE_CUDA_COMPILER) - message(FATAL_ERROR "Cuda compiler not found.") +if(NOT CMAKE_CUDA_COMPILER) + message(FATAL_ERROR "Cuda compiler not found.") endif() -if (CMAKE_CUDA_COMPILER_VERSION VERSION_LESS ${MINIMUM_SUPPORTED_CUDA_VERSION}) - message(FATAL_ERROR "CUDA ${MINIMUM_SUPPORTED_CUDA_VERSION} or greater is required for compilation.") +if(CMAKE_CUDA_COMPILER_VERSION VERSION_LESS ${MINIMUM_SUPPORTED_CUDA_VERSION}) + message(FATAL_ERROR "CUDA ${MINIMUM_SUPPORTED_CUDA_VERSION} or greater is required for compilation.") endif() -#Get CUDA compute capability +# Get CUDA compute capability set(OUTPUTFILE ${CMAKE_CURRENT_SOURCE_DIR}/cuda_script) # No suffix required set(CUDAFILE ${CMAKE_CURRENT_SOURCE_DIR}/check_cuda.cu) execute_process(COMMAND nvcc -lcuda ${CUDAFILE} -o ${OUTPUTFILE}) -execute_process(COMMAND ${OUTPUTFILE} - RESULT_VARIABLE CUDA_RETURN_CODE - OUTPUT_VARIABLE ARCH) +execute_process( + COMMAND ${OUTPUTFILE} + RESULT_VARIABLE CUDA_RETURN_CODE + OUTPUT_VARIABLE ARCH) file(REMOVE ${OUTPUTFILE}) -if (${CUDA_RETURN_CODE} EQUAL 0) - set(CUDA_SUCCESS "TRUE") -else () - set(CUDA_SUCCESS "FALSE") -endif () +if(${CUDA_RETURN_CODE} EQUAL 0) + set(CUDA_SUCCESS "TRUE") +else() + set(CUDA_SUCCESS "FALSE") +endif() -if (${CUDA_SUCCESS}) - message(STATUS "CUDA Architecture: ${ARCH}") - message(STATUS "CUDA Version: ${CUDA_VERSION_STRING}") - message(STATUS "CUDA Path: ${CUDA_TOOLKIT_ROOT_DIR}") - message(STATUS "CUDA Libraries: ${CUDA_LIBRARIES}") - message(STATUS "CUDA Performance Primitives: ${CUDA_npp_LIBRARY}") +if(${CUDA_SUCCESS}) + message(STATUS "CUDA Architecture: ${ARCH}") + message(STATUS "CUDA Version: ${CUDA_VERSION_STRING}") + message(STATUS "CUDA Path: ${CUDA_TOOLKIT_ROOT_DIR}") + message(STATUS "CUDA Libraries: ${CUDA_LIBRARIES}") + message(STATUS "CUDA Performance Primitives: ${CUDA_npp_LIBRARY}") - set(CUDA_NVCC_FLAGS "${ARCH}") - #add_definitions(-DGPU) #You may not require this + set(CUDA_NVCC_FLAGS "${ARCH}") + # add_definitions(-DGPU) #You may not require this -else () - message(WARNING ${ARCH}) -endif () +else() + message(WARNING ${ARCH}) +endif() -if (NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE Release) -endif () +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") -if (NOT CUDA_NVCC_FLAGS) - set(CUDA_NVCC_FLAGS -arch=sm_70) -endif () +if(NOT CUDA_NVCC_FLAGS) + set(CUDA_NVCC_FLAGS -arch=sm_70) +endif() -# in production, should use -arch=sm_70 -# --ptxas-options=-v to see register spills -# -lineinfo for better debugging +# in production, should use -arch=sm_70 --ptxas-options=-v to see register spills -lineinfo for better debugging set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -ccbin ${CMAKE_CXX_COMPILER} -O3 ${CUDA_NVCC_FLAGS} \ -std=c++17 --no-exceptions --expt-relaxed-constexpr -rdc=true --use_fast_math -Xcompiler -fPIC") @@ -76,13 +75,12 @@ install(TARGETS concrete_cuda DESTINATION lib) # Define a function to add a lint target. find_file(CPPLINT NAMES cpplint cpplint.exe) -if (CPPLINT) - # Add a custom target to lint all child projects. Dependencies are specified in child projects. - add_custom_target(all_lint) - # Don't trigger this target on ALL_BUILD or Visual Studio 'Rebuild Solution' - set_target_properties(all_lint PROPERTIES EXCLUDE_FROM_ALL TRUE) - # set_target_properties(all_lint PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD TRUE) -endif () +if(CPPLINT) + # Add a custom target to lint all child projects. Dependencies are specified in child projects. + add_custom_target(all_lint) + # Don't trigger this target on ALL_BUILD or Visual Studio 'Rebuild Solution' + set_target_properties(all_lint PROPERTIES EXCLUDE_FROM_ALL TRUE) + # set_target_properties(all_lint PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD TRUE) +endif() enable_testing() - diff --git a/backends/concrete-cuda/implementation/clang-format.sh b/backends/concrete-cuda/implementation/clang-format.sh deleted file mode 100755 index 850ebfdb2..000000000 --- a/backends/concrete-cuda/implementation/clang-format.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -find ./{include,src,test} -iregex '^.*\.\(cpp\|cu\|h\|cuh\)$' -print | xargs clang-format-11 -i -style='file' - diff --git a/backends/concrete-cuda/implementation/format_concrete_cuda.sh b/backends/concrete-cuda/implementation/format_concrete_cuda.sh new file mode 100755 index 000000000..0a4cbafac --- /dev/null +++ b/backends/concrete-cuda/implementation/format_concrete_cuda.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +find ./{include,src,test} -iregex '^.*\.\(cpp\|cu\|h\|cuh\)$' -print | xargs clang-format-11 -i -style='file' +cmake-format -i CMakeLists.txt -c ../../../compilers/concrete-compiler/compiler/.cmake-format-config.py + +find ./{include,src,test} -type f -name "CMakeLists.txt" | xargs -I % sh -c 'cmake-format -i % -c ../../../compilers/concrete-compiler/compiler/.cmake-format-config.py' + diff --git a/backends/concrete-cuda/implementation/src/CMakeLists.txt b/backends/concrete-cuda/implementation/src/CMakeLists.txt index 282249b23..e5c43b565 100644 --- a/backends/concrete-cuda/implementation/src/CMakeLists.txt +++ b/backends/concrete-cuda/implementation/src/CMakeLists.txt @@ -1,15 +1,13 @@ -set(SOURCES - ${CMAKE_SOURCE_DIR}/${INCLUDE_DIR}/boolean_gates.h - ${CMAKE_SOURCE_DIR}/${INCLUDE_DIR}/bootstrap.h - ${CMAKE_SOURCE_DIR}/${INCLUDE_DIR}/keyswitch.h - ${CMAKE_SOURCE_DIR}/${INCLUDE_DIR}/linear_algebra.h - ${CMAKE_SOURCE_DIR}/${INCLUDE_DIR}/vertical_packing.h - ${CMAKE_SOURCE_DIR}/${INCLUDE_DIR}/circuit_bootstrap.h) -file(GLOB SOURCES - "*.cu" - "*.h" - "fft/*.cu") +set(SOURCES + ${CMAKE_SOURCE_DIR}/${INCLUDE_DIR}/boolean_gates.h ${CMAKE_SOURCE_DIR}/${INCLUDE_DIR}/bootstrap.h + ${CMAKE_SOURCE_DIR}/${INCLUDE_DIR}/keyswitch.h ${CMAKE_SOURCE_DIR}/${INCLUDE_DIR}/linear_algebra.h + ${CMAKE_SOURCE_DIR}/${INCLUDE_DIR}/vertical_packing.h ${CMAKE_SOURCE_DIR}/${INCLUDE_DIR}/circuit_bootstrap.h) +file(GLOB SOURCES "*.cu" "*.h" "fft/*.cu") add_library(concrete_cuda STATIC ${SOURCES}) -set_target_properties(concrete_cuda PROPERTIES CUDA_SEPARABLE_COMPILATION ON CUDA_RESOLVE_DEVICE_SYMBOLS ON) +set_target_properties( + concrete_cuda + PROPERTIES CUDA_SEPARABLE_COMPILATION ON + CUDA_RESOLVE_DEVICE_SYMBOLS ON + CUDA_ARCHITECTURES native) target_link_libraries(concrete_cuda PUBLIC cudart) target_include_directories(concrete_cuda PRIVATE .) diff --git a/backends/concrete-cuda/implementation/test/CMakeLists.txt b/backends/concrete-cuda/implementation/test/CMakeLists.txt index c5a1b6720..3d1a9b67b 100644 --- a/backends/concrete-cuda/implementation/test/CMakeLists.txt +++ b/backends/concrete-cuda/implementation/test/CMakeLists.txt @@ -1,10 +1,10 @@ include(FetchContent) -FetchContent_Declare( - googletest - URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip -) +FetchContent_Declare(googletest + URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip) # For Windows: Prevent overriding the parent project's compiler/linker settings -set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) +set(gtest_force_shared_crt + ON + CACHE BOOL "" FORCE) FetchContent_MakeAvailable(googletest) # Enable ExternalProject CMake module @@ -15,26 +15,29 @@ set(CONCRETE_CPU_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../concrete-cpu") # Add rust_example as a CMake target ExternalProject_Add( - concrete_cpu - SOURCE_DIR ${CONCRETE_CPU_SOURCE_DIR} - DOWNLOAD_COMMAND "" - CONFIGURE_COMMAND "" - BUILD_COMMAND cargo build --release COMMAND cargo build --release - BINARY_DIR ${CONCRETE_CPU_BINARY_DIR} - BUILD_ALWAYS true - INSTALL_COMMAND "" - LOG_BUILD ON) + concrete_cpu + SOURCE_DIR ${CONCRETE_CPU_SOURCE_DIR} + DOWNLOAD_COMMAND "" + CONFIGURE_COMMAND "" + BUILD_COMMAND cargo build --release + COMMAND cargo build --release + BINARY_DIR ${CONCRETE_CPU_BINARY_DIR} + BUILD_ALWAYS true + INSTALL_COMMAND "" + LOG_BUILD ON) include_directories(${CONCRETE_CPU_SOURCE_DIR}/include) add_library(concrete_cpu_lib STATIC IMPORTED) -set_target_properties(concrete_cpu_lib PROPERTIES IMPORTED_LOCATION - ${CONCRETE_CPU_BINARY_DIR}/libconcrete_cpu.a) +set_target_properties(concrete_cpu_lib PROPERTIES IMPORTED_LOCATION ${CONCRETE_CPU_BINARY_DIR}/libconcrete_cpu.a) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--no-as-needed -ldl") set(BINARY test_concrete_cuda) -file(GLOB_RECURSE TEST_SOURCES LIST_DIRECTORIES false *.h *.cpp) +file( + GLOB_RECURSE TEST_SOURCES + LIST_DIRECTORIES false + *.h *.cpp) set(SOURCES ${TEST_SOURCES}) @@ -42,14 +45,14 @@ add_executable(${BINARY} ${TEST_SOURCES}) add_test(NAME ${BINARY} COMMAND ${BINARY}) -set_target_properties(test_concrete_cuda PROPERTIES CUDA_SEPARABLE_COMPILATION ON - CUDA_RESOLVE_DEVICE_SYMBOLS ON) -target_link_libraries(test_concrete_cuda PUBLIC GTest::gtest_main concrete_cpu_lib - concrete_cuda cudart) -find_package(CUDA REQUIRED) +set_target_properties( + test_concrete_cuda + PROPERTIES CUDA_SEPARABLE_COMPILATION ON + CUDA_RESOLVE_DEVICE_SYMBOLS ON + CUDA_ARCHITECTURES native) +target_link_libraries(test_concrete_cuda PUBLIC GTest::gtest_main concrete_cpu_lib concrete_cuda cudart) +find_package(CUDA REQUIRED) include_directories("${CUDA_INCLUDE_DIRS}" "${CMAKE_CURRENT_SOURCE_DIR}") include(GoogleTest) gtest_discover_tests(test_concrete_cuda) - -