Skip to content

Commit cff6960

Browse files
committed
[Code] Refactor code structure:
- Change folders layout - Fix code stucture - Remove redundant interface objects - Fix cubool lib build
1 parent 6f9c948 commit cff6960

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+1028
-2224
lines changed

.gitmodules

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[submodule "deps/gtest"]
2+
path = deps/gtest
3+
url = https://github.com/google/googletest.git
4+
[submodule "deps/cub"]
5+
path = deps/cub
6+
url = https://github.com/NVIDIA/cub.git

CMakeLists.txt

+15-90
Original file line numberDiff line numberDiff line change
@@ -1,122 +1,47 @@
11
# CuBool library Cmake config file
22
# Add this file as sub-directory to your project to use library functionality
3+
34
cmake_minimum_required(VERSION 3.17 FATAL_ERROR)
4-
project(CUBOOL LANGUAGES CXX CUDA)
5+
project(cubool LANGUAGES CXX)
56

67
# Exposed to the user build options
7-
option(CUBOOL_WITH_CUB "Build project with locally stored CUB library" ON)
8-
option(CUBOOL_WITH_NSPARSE "Build library with nsparse crs matrix multiplication backend" ON)
9-
option(CUBOOL_WITH_NAIVE "Build library with naive and naive-shared dense matrix multiplication" ON)
10-
option(CUBOOL_BUILD_TESTS "Build project unit-tests with gtest" ON)
8+
option(CUBOOL_WITH_CUDA "Build library with cuda backend (default)" ON)
9+
option(CUBOOL_WITH_CPU "Build library with cpu backend (fallback)" ON)
10+
option(CUBOOL_WITH_NAIVE "Build library with naive and naive-shared dense matrix multiplication" ON)
11+
option(CUBOOL_BUILD_TESTS "Build project unit-tests with gtest" ON)
1112

1213
set(CUBOOL_VERSION_MAJOR 1)
1314
set(CUBOOL_VERSION_MINOR 0)
1415

15-
# Configure dependencies
16-
if (CUBOOL_WITH_CUB)
16+
# Configure cuda dependencies
17+
if (CUBOOL_WITH_CUDA)
1718
message(STATUS "Add cub as cuda utility")
1819
set(CUB_ENABLE_HEADER_TESTING OFF CACHE BOOL "" FORCE)
1920
set(CUB_ENABLE_TESTING OFF CACHE BOOL "" FORCE)
2021
set(CUB_ENABLE_EXAMPLES OFF CACHE BOOL "" FORCE)
21-
add_subdirectory(thirdparty/cub)
22+
add_subdirectory(deps/cub)
2223
add_library(cub INTERFACE IMPORTED)
2324
target_link_libraries(cub INTERFACE CUB::CUB)
24-
endif()
2525

26-
if (CUBOOL_WITH_NSPARSE)
2726
message(STATUS "Add nsparse library as crs matrix multiplication backend")
28-
add_subdirectory(thirdparty/nsparse-um)
27+
add_subdirectory(deps/nsparse-um)
2928
endif()
3029

3130
if (CUBOOL_WITH_NAIVE)
3231
message(STATUS "Add naive library as dense matrix multiplication implementation for benchmarks")
33-
add_subdirectory(thirdparty/naive)
32+
add_subdirectory(deps/naive)
3433
endif()
3534

3635
if (CUBOOL_BUILD_TESTS)
3736
message(STATUS "Add googletest as unit-testing library")
38-
add_subdirectory(thirdparty/googletest)
37+
add_subdirectory(deps/gtest)
3938
endif()
4039

41-
# Library sources
42-
set(CUBOOL_SOURCES
43-
# Public sources
44-
include/cubool/cubool.h
45-
# Private sources
46-
src/cubool/config.hpp
47-
src/cubool/cubool.cu
48-
src/cubool/version.hpp
49-
src/cubool/instance.cu
50-
src/cubool/instance.cpp
51-
src/cubool/instance.hpp
52-
src/cubool/matrix_base.hpp
53-
src/cubool/matrix_dense.cu
54-
src/cubool/matrix_dense.hpp
55-
src/cubool/matrix_csr.hpp
56-
src/cubool/matrix_csr.cu
57-
src/cubool/matrix_csr_multiply_sum.cu
58-
src/cubool/matrix_csr_multiply_add.cu
59-
src/cubool/matrix_csr_ewise_add.cu
60-
src/cubool/matrix_csr_kron.cu
61-
src/cubool/matrix_csr_transpose.cu
62-
src/cubool/kernels/matrix_dense_multiply_add.cuh
63-
src/cubool/kernels/matrix_dense_common.cuh
64-
src/cubool/kernels/matrix_csr_spkron.cuh
65-
src/cubool/kernels/matrix_csr_spmerge.cuh
66-
src/cubool/kernels/matrix_csr_sptranspose.cuh
67-
src/cubool/details/error.hpp
68-
src/cubool/details/device_allocator.cuh
69-
src/cubool/details/host_allocator.hpp
70-
)
71-
72-
# Shared library object config
73-
add_library(cubool SHARED ${CUBOOL_SOURCES})
74-
75-
target_include_directories(cubool PUBLIC ${CMAKE_CURRENT_LIST_DIR}/include)
76-
target_include_directories(cubool PRIVATE ${CMAKE_CURRENT_LIST_DIR}/src)
77-
78-
target_compile_definitions(cubool PRIVATE CUBOOL_VERSION_MAJOR=${CUBOOL_VERSION_MAJOR})
79-
target_compile_definitions(cubool PRIVATE CUBOOL_VERSION_MINOR=${CUBOOL_VERSION_MINOR})
80-
81-
target_link_libraries(cubool PRIVATE nsparse_um)
82-
target_compile_features(cubool PUBLIC cxx_std_14)
83-
84-
set_target_properties(cubool PROPERTIES CXX_STANDARD 17)
85-
set_target_properties(cubool PROPERTIES CXX_STANDARD_REQUIRED ON)
86-
set_target_properties(cubool PROPERTIES CUDA_STANDARD 14)
87-
set_target_properties(cubool PROPERTIES CUDA_STANDARD_REQUIRED ON)
88-
set_target_properties(cubool PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
89-
90-
91-
set(CUBOOL_DUMMY_SOURCES
92-
include/cubool/cubool.h
93-
src/cubool-dummy/cubool.cpp
94-
src/cubool-dummy/version.hpp
95-
src/cubool-dummy/instance.hpp
96-
src/cubool-dummy/matrix.hpp
97-
)
98-
99-
# Create dummy library instance for testing purposes
100-
add_library(cubool_dummy SHARED ${CUBOOL_DUMMY_SOURCES})
101-
102-
target_include_directories(cubool_dummy PUBLIC ${CMAKE_CURRENT_LIST_DIR}/include)
103-
target_include_directories(cubool_dummy PRIVATE ${CMAKE_CURRENT_LIST_DIR}/src)
104-
105-
target_compile_definitions(cubool_dummy PRIVATE CUBOOL_VERSION_MAJOR=${CUBOOL_VERSION_MAJOR})
106-
target_compile_definitions(cubool_dummy PRIVATE CUBOOL_VERSION_MINOR=${CUBOOL_VERSION_MINOR})
107-
108-
target_compile_features(cubool_dummy PUBLIC cxx_std_11)
109-
110-
set_target_properties(cubool_dummy PROPERTIES CXX_STANDARD 11)
111-
set_target_properties(cubool_dummy PROPERTIES CXX_STANDARD_REQUIRED ON)
112-
113-
# If tests enabled, add tests sources to the build
114-
if (CUBOOL_BUILD_TESTS)
115-
add_subdirectory(tests)
116-
endif()
40+
# Actual cxx implementation
41+
add_subdirectory(cubool)
11742

11843
# Copy scripts into binary directory
11944
file(COPY scripts DESTINATION ${CMAKE_BINARY_DIR}/)
12045

12146
# Copy python related stuff
122-
file(COPY python DESTINATION ${CMAKE_BINARY_DIR}/)
47+
file(COPY pycubool DESTINATION ${CMAKE_BINARY_DIR}/)

cubool/CMakeLists.txt

+88
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
if (CUBOOL_WITH_CUDA)
2+
# If Cuda backend is compiled, we must tell cmake, that we will use Cuda
3+
project(cubool-cpp LANGUAGES CXX CUDA)
4+
else()
5+
# Otherwise only C++
6+
project(cubool-cpp LANGUAGES CXX)
7+
endif()
8+
9+
# Notify user about selected backend options
10+
if (CUBOOL_WITH_CPU)
11+
message(STATUS "Add SuiteSparse based CPU backend as fallback")
12+
endif()
13+
if (CUBOOL_WITH_CUDA)
14+
message(STATUS "Add CUDA backend for GPGPU computations")
15+
endif()
16+
17+
set(CUBOOL_SOURCES)
18+
19+
# Library sources
20+
set(CUBOOL_SOURCES
21+
# Public sources
22+
include/cubool/cubool.h
23+
# Private sources
24+
sources/core/config.hpp
25+
sources/core/version.hpp
26+
sources/core/error.hpp
27+
)
28+
29+
set(CUBOOL_C_API_SOURCES
30+
sources/cuBool_About_Get.cpp
31+
sources/cuBool_LicenseInfo_Get.cpp
32+
sources/cuBool_Initialize.cpp)
33+
34+
set(CUBOOL_BACKEND_SOURCES
35+
sources/backend/backend_base.hpp
36+
sources/backend/matrix_base.hpp)
37+
38+
set(CUBOOL_CUDA_SOURCES)
39+
set(CUBOOL_CPU_SOURCES)
40+
41+
# Cuda backend sources
42+
if (CUBOOL_WITH_CUDA)
43+
set(CUBOOL_CUDA_SOURCES
44+
sources/cuda/instance.hpp
45+
sources/cuda/instance.cu
46+
sources/cuda/instance.cpp
47+
sources/cuda/matrix_csr.hpp
48+
sources/cuda/matrix_csr.cu
49+
sources/cuda/matrix_csr_ewiseadd.cu
50+
sources/cuda/matrix_csr_kronecker.cu
51+
sources/cuda/matrix_csr_multiply_add.cu
52+
sources/cuda/matrix_csr_multiply_sum.cu
53+
sources/cuda/matrix_csr_transpose.cu)
54+
endif()
55+
56+
# Shared library object config
57+
add_library(cubool SHARED
58+
${CUBOOL_SOURCES}
59+
${CUBOOL_C_API_SOURCES}
60+
${CUBOOL_CUDA_SOURCES}
61+
${CUBOOL_CPU_SOURCES}
62+
${CUBOOL_BACKEND_SOURCES})
63+
64+
target_include_directories(cubool PUBLIC ${CMAKE_CURRENT_LIST_DIR}/include)
65+
target_include_directories(cubool PRIVATE ${CMAKE_CURRENT_LIST_DIR}/sources)
66+
67+
target_compile_definitions(cubool PRIVATE CUBOOL_VERSION_MAJOR=${CUBOOL_VERSION_MAJOR})
68+
target_compile_definitions(cubool PRIVATE CUBOOL_VERSION_MINOR=${CUBOOL_VERSION_MINOR})
69+
70+
target_compile_features(cubool PUBLIC cxx_std_14)
71+
72+
set_target_properties(cubool PROPERTIES CXX_STANDARD 17)
73+
set_target_properties(cubool PROPERTIES CXX_STANDARD_REQUIRED ON)
74+
75+
# Cuda specifics
76+
if (CUBOOL_WITH_CUDA)
77+
set_target_properties(cubool PROPERTIES CUDA_STANDARD 14)
78+
set_target_properties(cubool PROPERTIES CUDA_STANDARD_REQUIRED ON)
79+
set_target_properties(cubool PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
80+
81+
target_link_libraries(cubool PRIVATE nsparse_um)
82+
endif()
83+
84+
# If tests enabled, add tests sources to the build
85+
if (CUBOOL_BUILD_TESTS)
86+
message(STATUS "Add unit tests directory to the project")
87+
add_subdirectory(tests)
88+
endif()

0 commit comments

Comments
 (0)