From 0d0a84317e021e7039e035efe283e404215f30bb Mon Sep 17 00:00:00 2001 From: zhiguo Date: Wed, 22 Oct 2025 12:51:48 +0800 Subject: [PATCH 1/9] add github ci --- .github/workflows/cmake.yml | 77 ++++++++++++++++++++++++ .gitignore | 3 + CMakeLists.txt | 1 + CMakePresets.json | 48 +++++++++++++++ src/muda/launch/details/parallel_for.inl | 2 +- test/eigen_test/CMakeLists.txt | 2 + test/linear_system_test/CMakeLists.txt | 16 ++--- test/spgrid_test/CMakeLists.txt | 4 +- test/unit_test/CMakeLists.txt | 4 +- 9 files changed, 147 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/cmake.yml create mode 100644 CMakePresets.json diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml new file mode 100644 index 00000000..fa0c9d3e --- /dev/null +++ b/.github/workflows/cmake.yml @@ -0,0 +1,77 @@ +name: cmake + +on: + pull_request: + branches: + - 'mini20' + paths-ignore: + - '.clang-format' + - '.clangd' + - '.gitignore' + - 'LICENSE' + - 'README.md' + - 'docs/**' + - '.github/workflows/xmake.yml' + - '**/xmake.lua' + - '**/*.bazel' + - '**/*.bzl' + - '**/*.bazelrc' + +jobs: + build_and_test: + strategy: + matrix: + os: [windows-2022, ubuntu-22.04] + + runs-on: ${{ matrix.os }} + + concurrency: + group: ${{ github.ref }}-${{ github.base_ref }}-${{ github.head_ref }}-cmake-${{ matrix.os }} + cancel-in-progress: true + + steps: + - name: Maximize build space + if: matrix.os == 'ubuntu-22.04' + uses: AdityaGarg8/remove-unwanted-software@v4.1 + with: + remove-android: 'true' + remove-haskell: 'true' + remove-codeql: 'true' + + - name: Setup cuda + uses: Jimver/cuda-toolkit@v0.2.20 + id: cuda-toolkit + with: + cuda: '12.6.3' + + - name: Setup ninja and Eigen3 on Ubuntu + if: matrix.os == 'ubuntu-22.04' + run: | + sudo apt update + sudo apt install ninja-build libeigen3-dev + + - name: Setup ninja on Windows + if: matrix.os == 'windows-2022' + uses: seanmiddleditch/gha-setup-ninja@master + + - name: Setup msvc sysroot for cmake on Windows + if: matrix.os == 'windows-2022' + uses: ilammy/msvc-dev-cmd@v1 + + - name: Install Eigen3 on Windows + if: matrix.os == 'windows-2022' + uses: kupns-aka-kupa/setup-eigen3@v1 + with: + version: 3.4.0 + env: + CMAKE_GENERATOR: Ninja + + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: true + + - name: Build and Test MUDA + run: | + cmake --preset ci-release + cmake --build --preset ci-release --parallel 4 \ No newline at end of file diff --git a/.gitignore b/.gitignore index a7004ca8..b3a2b78a 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,6 @@ vsxmake2022 # CMake Cache CMakeBuild/ + +# IntelliJ IDEA +.idea/ diff --git a/CMakeLists.txt b/CMakeLists.txt index e9992f67..5f255052 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -109,5 +109,6 @@ if(MUDA_BUILD_EXAMPLE) endif() if(MUDA_BUILD_TEST) + enable_testing() add_subdirectory("test") endif() \ No newline at end of file diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 00000000..bc16b324 --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,48 @@ +{ + "version": 6, + "cmakeMinimumRequired": { + "major": 3, + "minor": 20, + "patch": 0 + }, + "configurePresets": [ + { + "name": "config-base", + "displayName": "base Configuration", + "hidden": true, + "description": "Default build using Ninja generator", + "generator": "Ninja", + "binaryDir": "${sourceDir}/build", + "cacheVariables": { + "MUDA_FORCE_CHECK": "ON", + "MUDA_WITH_CHECK": "ON", + "MUDA_WITH_COMPUTE_GRAPH": "ON", + "MUDA_WITH_NVTX3": "ON" + } + }, + { + "name": "ci-release", + "displayName": "CI-Release Configuration", + "inherits": ["config-base"], + "description": "Configuration for CI builds", + "cacheVariables": { + "MUDA_BUILD_TEST": "ON", + "MUDA_BUILD_EXAMPLE": "OFF", + "CMAKE_CUDA_ARCHITECTURES": "89", + "CMAKE_BUILD_TYPE": "Release" + } + } + ], + "buildPresets": [ + { + "name": "ci-release", + "configurePreset": "ci-release" + } + ], + "testPresets": [ + { + "name": "ci-release", + "configurePreset": "ci-release" + } + ] +} diff --git a/src/muda/launch/details/parallel_for.inl b/src/muda/launch/details/parallel_for.inl index 528afb50..98685cfd 100644 --- a/src/muda/launch/details/parallel_for.inl +++ b/src/muda/launch/details/parallel_for.inl @@ -127,7 +127,7 @@ MUDA_HOST MUDA_NODISCARD auto ParallelFor::as_node_parms(int count, F&& f) { using CallableType = raw_type_t; - check_input(count); + // check_input(count); auto parms = std::make_shared>(std::forward(f), count); if(m_grid_dim <= 0) // dynamic grid dim diff --git a/test/eigen_test/CMakeLists.txt b/test/eigen_test/CMakeLists.txt index 80822078..3f68f249 100644 --- a/test/eigen_test/CMakeLists.txt +++ b/test/eigen_test/CMakeLists.txt @@ -11,3 +11,5 @@ target_include_directories(muda_eigen_test PRIVATE target_link_libraries(muda_eigen_test PRIVATE muda Eigen3::Eigen) source_group(TREE "${PROJECT_SOURCE_DIR}/test" PREFIX "test" FILES ${SOURCE}) source_group(TREE "${PROJECT_SOURCE_DIR}/src" PREFIX "src" FILES ${MUDA_HEADER_FILES}) + +add_test(NAME muda_eigen_test COMMAND muda_eigen_test) diff --git a/test/linear_system_test/CMakeLists.txt b/test/linear_system_test/CMakeLists.txt index db29b783..f7c8e64f 100644 --- a/test/linear_system_test/CMakeLists.txt +++ b/test/linear_system_test/CMakeLists.txt @@ -4,13 +4,15 @@ file(GLOB_RECURSE SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.cu" "${CMAKE_CURRENT_SOURCE_DIR}/*.h") -add_executable(muda_linear_sysytem_test) -target_sources(muda_linear_sysytem_test PRIVATE ${SOURCE} ${MUDA_HEADER_FILES}) -target_compile_features(muda_linear_sysytem_test PRIVATE cxx_std_20) -set_target_properties(muda_linear_sysytem_test PROPERTIES CUDA_SEPARABLE_COMPILATION ON) -target_include_directories(muda_linear_sysytem_test PRIVATE +add_executable(muda_linear_system_test) +target_sources(muda_linear_system_test PRIVATE ${SOURCE} ${MUDA_HEADER_FILES}) +target_compile_features(muda_linear_system_test PRIVATE cxx_std_20) +set_target_properties(muda_linear_system_test PROPERTIES CUDA_SEPARABLE_COMPILATION ON) +target_include_directories(muda_linear_system_test PRIVATE "${PROJECT_SOURCE_DIR}/test" "${PROJECT_SOURCE_DIR}/external") -target_link_libraries(muda_linear_sysytem_test PRIVATE muda cusparse cublas cusolver Eigen3::Eigen) +target_link_libraries(muda_linear_system_test PRIVATE muda cusparse cublas cusolver Eigen3::Eigen) source_group(TREE "${PROJECT_SOURCE_DIR}/test" PREFIX "test" FILES ${SOURCE}) -source_group(TREE "${PROJECT_SOURCE_DIR}/src" PREFIX "src" FILES ${MUDA_HEADER_FILES}) \ No newline at end of file +source_group(TREE "${PROJECT_SOURCE_DIR}/src" PREFIX "src" FILES ${MUDA_HEADER_FILES}) + +add_test(NAME muda_linear_system_test COMMAND muda_linear_system_test) diff --git a/test/spgrid_test/CMakeLists.txt b/test/spgrid_test/CMakeLists.txt index ae271781..3048418a 100644 --- a/test/spgrid_test/CMakeLists.txt +++ b/test/spgrid_test/CMakeLists.txt @@ -12,4 +12,6 @@ set_target_properties(muda_spgrid_test PROPERTIES CUDA_SEPARABLE_COMPILATION ON) target_include_directories(muda_spgrid_test PRIVATE "${PROJECT_SOURCE_DIR}/test" "${PROJECT_SOURCE_DIR}/external") - target_link_libraries(muda_spgrid_test PRIVATE muda Eigen3::Eigen) \ No newline at end of file +target_link_libraries(muda_spgrid_test PRIVATE muda Eigen3::Eigen) + +add_test(NAME muda_spgrid_test COMMAND muda_spgrid_test) diff --git a/test/unit_test/CMakeLists.txt b/test/unit_test/CMakeLists.txt index 87043c98..6f1b86bc 100644 --- a/test/unit_test/CMakeLists.txt +++ b/test/unit_test/CMakeLists.txt @@ -14,4 +14,6 @@ target_include_directories(muda_unit_test PRIVATE target_link_libraries(muda_unit_test PRIVATE muda cusparse cublas cusolver Eigen3::Eigen) target_compile_definitions(muda_unit_test PRIVATE "-DMUDA_TEST_DATA_DIR=R\"(${PROJECT_SOURCE_DIR}/test/data)\"") source_group(TREE "${PROJECT_SOURCE_DIR}/test" PREFIX "test" FILES ${SOURCE}) -source_group(TREE "${PROJECT_SOURCE_DIR}/src" PREFIX "src" FILES ${MUDA_HEADER_FILES}) \ No newline at end of file +source_group(TREE "${PROJECT_SOURCE_DIR}/src" PREFIX "src" FILES ${MUDA_HEADER_FILES}) + +add_test(NAME muda_unit_test COMMAND muda_unit_test) From c63e762396b0fd05eec9667f081edd476494e7c2 Mon Sep 17 00:00:00 2001 From: zhiguo Date: Wed, 22 Oct 2025 13:36:48 +0800 Subject: [PATCH 2/9] remove run on windows --- .github/workflows/cmake.yml | 64 +++++++++++++++---------------------- 1 file changed, 26 insertions(+), 38 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index fa0c9d3e..8a6aae93 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -3,75 +3,63 @@ name: cmake on: pull_request: branches: - - 'mini20' + - "mini20" paths-ignore: - - '.clang-format' - - '.clangd' - - '.gitignore' - - 'LICENSE' - - 'README.md' - - 'docs/**' - - '.github/workflows/xmake.yml' - - '**/xmake.lua' - - '**/*.bazel' - - '**/*.bzl' - - '**/*.bazelrc' + - ".clang-format" + - ".clangd" + - ".gitignore" + - "LICENSE" + - "README.md" + - "docs/**" + - ".github/workflows/xmake.yml" + - "**/xmake.lua" + - "**/*.bazel" + - "**/*.bzl" + - "**/*.bazelrc" jobs: build_and_test: strategy: matrix: - os: [windows-2022, ubuntu-22.04] + os: [ubuntu-22.04] runs-on: ${{ matrix.os }} concurrency: - group: ${{ github.ref }}-${{ github.base_ref }}-${{ github.head_ref }}-cmake-${{ matrix.os }} - cancel-in-progress: true + group: ${{ github.ref }}-${{ github.base_ref }}-${{ github.head_ref }}-cmake-${{ matrix.os }} + cancel-in-progress: true steps: - name: Maximize build space if: matrix.os == 'ubuntu-22.04' uses: AdityaGarg8/remove-unwanted-software@v4.1 with: - remove-android: 'true' - remove-haskell: 'true' - remove-codeql: 'true' + remove-android: "true" + remove-haskell: "true" + remove-codeql: "true" - name: Setup cuda uses: Jimver/cuda-toolkit@v0.2.20 id: cuda-toolkit with: - cuda: '12.6.3' + cuda: "12.6.3" - name: Setup ninja and Eigen3 on Ubuntu if: matrix.os == 'ubuntu-22.04' run: | sudo apt update - sudo apt install ninja-build libeigen3-dev - - - name: Setup ninja on Windows - if: matrix.os == 'windows-2022' - uses: seanmiddleditch/gha-setup-ninja@master - - - name: Setup msvc sysroot for cmake on Windows - if: matrix.os == 'windows-2022' - uses: ilammy/msvc-dev-cmd@v1 - - - name: Install Eigen3 on Windows - if: matrix.os == 'windows-2022' - uses: kupns-aka-kupa/setup-eigen3@v1 - with: - version: 3.4.0 - env: - CMAKE_GENERATOR: Ninja + sudo apt install ninja-build libeigen3-dev -y - name: Checkout repository uses: actions/checkout@v4 with: submodules: true - - name: Build and Test MUDA + - name: Build MUDA run: | cmake --preset ci-release - cmake --build --preset ci-release --parallel 4 \ No newline at end of file + cmake --build --preset ci-release --parallel 4 + + - name: Run Tests + run: | + ctest --preset ci-release --output-on-failure From 275ad1f52e9671ff84be7a3cf7fc45c38716e16d Mon Sep 17 00:00:00 2001 From: zhiguo Date: Wed, 22 Oct 2025 14:07:14 +0800 Subject: [PATCH 3/9] use cuda 12.8 --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 8a6aae93..746cb7a2 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -42,7 +42,7 @@ jobs: uses: Jimver/cuda-toolkit@v0.2.20 id: cuda-toolkit with: - cuda: "12.6.3" + cuda: "12.8.61" - name: Setup ninja and Eigen3 on Ubuntu if: matrix.os == 'ubuntu-22.04' From 71b0fc42351685b51e47a88907523967e388f2f5 Mon Sep 17 00:00:00 2001 From: zhiguo Date: Wed, 22 Oct 2025 14:20:49 +0800 Subject: [PATCH 4/9] update --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 746cb7a2..eb1eb07f 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -42,7 +42,7 @@ jobs: uses: Jimver/cuda-toolkit@v0.2.20 id: cuda-toolkit with: - cuda: "12.8.61" + cuda: "12.8" - name: Setup ninja and Eigen3 on Ubuntu if: matrix.os == 'ubuntu-22.04' From a8746f30289b41eb5e6aac452c0a1d14a69cf8b0 Mon Sep 17 00:00:00 2001 From: zhiguo Date: Wed, 22 Oct 2025 14:31:43 +0800 Subject: [PATCH 5/9] test container of cuda --- .github/workflows/cmake.yml | 63 ++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index eb1eb07f..1d70c96a 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -25,41 +25,48 @@ jobs: runs-on: ${{ matrix.os }} + container: + image: nvidia/cuda:12.8.1-cudnn-devel-ubuntu22.04 + options: --gpus all + concurrency: group: ${{ github.ref }}-${{ github.base_ref }}-${{ github.head_ref }}-cmake-${{ matrix.os }} cancel-in-progress: true steps: - - name: Maximize build space - if: matrix.os == 'ubuntu-22.04' - uses: AdityaGarg8/remove-unwanted-software@v4.1 - with: - remove-android: "true" - remove-haskell: "true" - remove-codeql: "true" + - name: TEST NVIDIA_SMI + run: nvidia-smi + + # - name: Maximize build space + # if: matrix.os == 'ubuntu-22.04' + # uses: AdityaGarg8/remove-unwanted-software@v4.1 + # with: + # remove-android: "true" + # remove-haskell: "true" + # remove-codeql: "true" - - name: Setup cuda - uses: Jimver/cuda-toolkit@v0.2.20 - id: cuda-toolkit - with: - cuda: "12.8" + # - name: Setup cuda + # uses: Jimver/cuda-toolkit@v0.2.20 + # id: cuda-toolkit + # with: + # cuda: "12.8" - - name: Setup ninja and Eigen3 on Ubuntu - if: matrix.os == 'ubuntu-22.04' - run: | - sudo apt update - sudo apt install ninja-build libeigen3-dev -y + # - name: Setup ninja and Eigen3 on Ubuntu + # if: matrix.os == 'ubuntu-22.04' + # run: | + # sudo apt update + # sudo apt install ninja-build libeigen3-dev -y - - name: Checkout repository - uses: actions/checkout@v4 - with: - submodules: true + # - name: Checkout repository + # uses: actions/checkout@v4 + # with: + # submodules: true - - name: Build MUDA - run: | - cmake --preset ci-release - cmake --build --preset ci-release --parallel 4 + # - name: Build MUDA + # run: | + # cmake --preset ci-release + # cmake --build --preset ci-release --parallel 4 - - name: Run Tests - run: | - ctest --preset ci-release --output-on-failure + # - name: Run Tests + # run: | + # ctest --preset ci-release --output-on-failure From 1d572dc2083ef697748384ab7f204ca42ee95bab Mon Sep 17 00:00:00 2001 From: zhiguo Date: Wed, 22 Oct 2025 14:41:09 +0800 Subject: [PATCH 6/9] update --- .github/workflows/cmake.yml | 63 +++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 35 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 1d70c96a..d45d975e 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -25,48 +25,41 @@ jobs: runs-on: ${{ matrix.os }} - container: - image: nvidia/cuda:12.8.1-cudnn-devel-ubuntu22.04 - options: --gpus all - concurrency: group: ${{ github.ref }}-${{ github.base_ref }}-${{ github.head_ref }}-cmake-${{ matrix.os }} cancel-in-progress: true steps: - - name: TEST NVIDIA_SMI - run: nvidia-smi - - # - name: Maximize build space - # if: matrix.os == 'ubuntu-22.04' - # uses: AdityaGarg8/remove-unwanted-software@v4.1 - # with: - # remove-android: "true" - # remove-haskell: "true" - # remove-codeql: "true" + - name: Maximize build space + if: matrix.os == 'ubuntu-22.04' + uses: AdityaGarg8/remove-unwanted-software@v4.1 + with: + remove-android: "true" + remove-haskell: "true" + remove-codeql: "true" - # - name: Setup cuda - # uses: Jimver/cuda-toolkit@v0.2.20 - # id: cuda-toolkit - # with: - # cuda: "12.8" + - name: Setup cuda + uses: Jimver/cuda-toolkit@v0.2.20 + id: cuda-toolkit + with: + cuda: "12.8.1" - # - name: Setup ninja and Eigen3 on Ubuntu - # if: matrix.os == 'ubuntu-22.04' - # run: | - # sudo apt update - # sudo apt install ninja-build libeigen3-dev -y + - name: Setup ninja and Eigen3 on Ubuntu + if: matrix.os == 'ubuntu-22.04' + run: | + sudo apt update + sudo apt install ninja-build libeigen3-dev -y - # - name: Checkout repository - # uses: actions/checkout@v4 - # with: - # submodules: true + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: true - # - name: Build MUDA - # run: | - # cmake --preset ci-release - # cmake --build --preset ci-release --parallel 4 + - name: Build MUDA + run: | + cmake --preset ci-release + cmake --build --preset ci-release --parallel 4 - # - name: Run Tests - # run: | - # ctest --preset ci-release --output-on-failure + - name: Run Tests + run: | + ctest --preset ci-release --output-on-failure From a9af97f2dea916cf479a3d984c62794e667f510b Mon Sep 17 00:00:00 2001 From: zhiguo Date: Wed, 22 Oct 2025 14:50:28 +0800 Subject: [PATCH 7/9] update --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index d45d975e..9702ccd7 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -39,7 +39,7 @@ jobs: remove-codeql: "true" - name: Setup cuda - uses: Jimver/cuda-toolkit@v0.2.20 + uses: Jimver/cuda-toolkit@v0.2.28 id: cuda-toolkit with: cuda: "12.8.1" From 2eedad5b4cfcf2a4c53cb508c63cb26efffa27be Mon Sep 17 00:00:00 2001 From: zhiguo Date: Wed, 22 Oct 2025 15:29:47 +0800 Subject: [PATCH 8/9] remove test --- .github/workflows/cmake.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 9702ccd7..da3ad918 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -59,7 +59,3 @@ jobs: run: | cmake --preset ci-release cmake --build --preset ci-release --parallel 4 - - - name: Run Tests - run: | - ctest --preset ci-release --output-on-failure From f1e0a62bb1652fc43951f7798f211c96ea299113 Mon Sep 17 00:00:00 2001 From: zhiguo Date: Thu, 23 Oct 2025 11:29:54 +0800 Subject: [PATCH 9/9] fix --- src/muda/launch/parallel_for.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/muda/launch/parallel_for.h b/src/muda/launch/parallel_for.h index 87007cf2..05fbe122 100644 --- a/src/muda/launch/parallel_for.h +++ b/src/muda/launch/parallel_for.h @@ -82,10 +82,10 @@ class ParallelForDetails private: template - friend MUDA_GLOBAL void details::parallel_for_kernel(ParallelForCallable f); + friend MUDA_GLOBAL void details::parallel_for_kernel(details::ParallelForCallable f); template - friend MUDA_GLOBAL void details::grid_stride_loop_kernel(ParallelForCallable f); + friend MUDA_GLOBAL void details::grid_stride_loop_kernel(details::ParallelForCallable f); MUDA_DEVICE ParallelForDetails(ParallelForType type, int i, int total_num) MUDA_NOEXCEPT : m_type(type), @@ -169,6 +169,7 @@ class ParallelFor : public LaunchBase m_block_dim(blockDim), m_shared_mem_size(shared_mem_size) { + std::cout << "[DEBUG]" << "blockDim: " << blockDim << std::endl; }