@@ -7,14 +7,14 @@ cmake_minimum_required(VERSION 3.20.1)
7
7
8
8
project (GRAPHBLAS_CUDA VERSION 0.1 LANGUAGES CXX CUDA)
9
9
10
- set (CMAKE_CUDA_FLAGS "-cudart=static -lineinfo -G " )
10
+ set (CMAKE_CUDA_FLAGS "-cudart=static -lineinfo " )
11
11
set (CMAKE_CXX_STANDARD 17)
12
12
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++17 -fPIC " )
13
13
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DGBNCPUFEAT" )
14
14
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGBNCPUFEAT" )
15
15
set (CMAKE_C_STANDARD 11)
16
16
17
- message (STATUS "${CMAKE_CXX_FLAGS} " )
17
+ message (STATUS "C++ flags for CUDA:" " ${CMAKE_CXX_FLAGS} " )
18
18
19
19
file (GLOB GRAPHBLAS_CUDA_SOURCES "*.cu" "*.c" "*.cpp" )
20
20
@@ -32,21 +32,37 @@ set(GRAPHBLAS_CUDA_INCLUDES
32
32
../Include
33
33
../CUDA)
34
34
35
- message (STATUS "${GRAPHBLAS_CUDA_INCLUDES} " )
35
+ message (STATUS "GraphBLAS CUDA includes: " " ${GRAPHBLAS_CUDA_INCLUDES} " )
36
36
37
- target_include_directories (graphblascuda PUBLIC ${CUDAToolkit_INCLUDE_DIRS} ${GRAPHBLAS_CUDA_INCLUDES} )
37
+ set (EXTERNAL_INCLUDES_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /external_includes)
38
+
39
+ IF (NOT EXISTS ${EXTERNAL_INCLUDES_DIRECTORY} )
40
+ file (MAKE_DIRECTORY ${EXTERNAL_INCLUDES_DIRECTORY} )
41
+ endif ()
42
+
43
+ IF (NOT EXISTS ${EXTERNAL_INCLUDES_DIRECTORY} /cuco)
44
+ execute_process (
45
+ COMMAND git clone "https://github.com/NVIDIA/cuCollections.git" --branch main --recursive cuco
46
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /external_includes)
47
+ endif ()
48
+
49
+ include_directories (${CMAKE_CURRENT_BINARY_DIR} /external_includes/cuco/include )
50
+
51
+ target_include_directories (graphblascuda PUBLIC
52
+ ${CMAKE_CURRENT_BINARY_DIR} /external_includes/cuco/include
53
+ ${CUDAToolkit_INCLUDE_DIRS}
54
+ ${GRAPHBLAS_CUDA_INCLUDES} )
38
55
set_target_properties (graphblascuda PROPERTIES POSITION_INDEPENDENT_CODE ON )
39
56
set_target_properties (graphblascuda PROPERTIES CUDA_SEPARABLE_COMPILATION ON )
40
57
set_target_properties (graphblascuda PROPERTIES CUDA_ARCHITECTURES "75" )
41
58
42
- target_link_libraries (graphblascuda CUDA::nvrtc CUDA::cudart_static)
59
+ target_link_libraries (graphblascuda CUDA::nvrtc CUDA::cudart_static CUDA::nvToolsExt )
43
60
44
61
install ( TARGETS graphblascuda
45
62
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
46
63
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
47
64
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} )
48
65
49
-
50
66
# 1. Execute enumify/stringify/jitify logic to compile ptx kernels and compile/link w/ relevant *.cu files.
51
67
52
68
# TODO: Need to do this piece in cmake
@@ -58,11 +74,12 @@ set(CUDA_TEST_SUITES
58
74
)
59
75
60
76
#
61
- set (CUDA_TEST_MONOIDS PLUS) # MIN MAX TIMES ANY)
62
- set (CUDA_TEST_BINOPS TIMES) # PLUS MIN MAX DIV MINUS RDIV RMINUS FIRST SECOND PAIR)
63
- set (CUDA_TEST_SEMIRINGS PLUS_TIMES) # MIN_PLUS MAX_PLUS)
64
- set (CUDA_TEST_DATATYPES int32_t ) # int64_t uint32_t uint64_t float double)
77
+ set (CUDA_TEST_MONOIDS PLUS MIN MAX) # TIMES ANY)
78
+ set (CUDA_TEST_BINOPS TIMES PLUS MIN MAX DIV) # MINUS RDIV RMINUS FIRST SECOND PAIR)
79
+ set (CUDA_TEST_SEMIRINGS PLUS_TIMES MIN_PLUS MAX_PLUS)
80
+ set (CUDA_TEST_DATATYPES int32_t int64_t uint32_t uint64_t float double)
65
81
set (CUDA_TEST_KERNELS vsvs) # mp vsvs dndn spdn vssp)
82
+ set (CUDA_TEST_FORMATS sparse dense sparse_dense reduce)
66
83
67
84
68
85
# TODO: Update testGen.py to accept the above CUDA_TEST_* params as arguments
@@ -77,23 +94,25 @@ set(CUDA_TEST_CPP_FILES "")
77
94
foreach (var ${CUDA_TEST_SUITES} )
78
95
foreach (semiring ${CUDA_TEST_SEMIRINGS} )
79
96
foreach (kernel ${CUDA_TEST_KERNELS} )
80
-
81
- # TODO: Have Python script also build separate cudaTest.cpp (named something
82
- # like AxB_dot3_cuda_tests.cpp) for each suite. This way we should be able to
83
- # easily ignore them from the build
84
- add_custom_command (
85
- OUTPUT
86
- ${CMAKE_CURRENT_BINARY_DIR} /${var} _${semiring} _test_instances.hpp
87
- ${CMAKE_CURRENT_BINARY_DIR} /${var} _${semiring} _cuda_tests.cpp
88
- DEPENDS
89
- jitFactory.hpp
90
- COMMAND python3 ${CMAKE_CURRENT_SOURCE_DIR} /test /testGen_cmake.py "\" ${CMAKE_CURRENT_SOURCE_DIR} \" " "\" ${var} \" " "\" ${CUDA_TEST_MONOIDS} \" "
91
- "\" ${CUDA_TEST_BINOPS} \" " "\" ${semiring} \" " "\" ${CUDA_TEST_DATATYPES} \" "
92
- "\" ${kernel} \" "
93
- )
94
-
95
- # Construct final list of files to compile (in parallel)
96
- list (APPEND CUDA_TEST_CPP_FILES ${CMAKE_CURRENT_BINARY_DIR} /${var} _${semiring} _cuda_tests.cpp)
97
+ foreach (format ${CUDA_TEST_FORMATS} )
98
+
99
+ # TODO: Have Python script also build separate cudaTest.cpp (named something
100
+ # like AxB_dot3_cuda_tests.cpp) for each suite. This way we should be able to
101
+ # easily ignore them from the build
102
+ add_custom_command (
103
+ OUTPUT
104
+ ${CMAKE_CURRENT_BINARY_DIR} /${var} _${semiring} _${format} _test_instances.hpp
105
+ ${CMAKE_CURRENT_BINARY_DIR} /${var} _${semiring} _${format} _cuda_tests.cpp
106
+ DEPENDS
107
+ jitFactory.hpp
108
+ COMMAND python3 ${CMAKE_CURRENT_SOURCE_DIR} /test /testGen_cmake.py "\" ${CMAKE_CURRENT_SOURCE_DIR} \" " "\" ${var} \" " "\" ${CUDA_TEST_MONOIDS} \" "
109
+ "\" ${CUDA_TEST_BINOPS} \" " "\" ${semiring} \" " "\" ${CUDA_TEST_DATATYPES} \" "
110
+ "\" ${kernel} \" "
111
+ )
112
+
113
+ # Construct final list of files to compile (in parallel)
114
+ list (APPEND CUDA_TEST_CPP_FILES ${CMAKE_CURRENT_BINARY_DIR} /${var} _${semiring} _${format} _cuda_tests.cpp)
115
+ endforeach ()
97
116
endforeach ()
98
117
endforeach ()
99
118
endforeach ()
@@ -127,13 +146,13 @@ endif()
127
146
# 3. Compile/link individual {test_suite_name}_cuda_tests.cpp files into a gtest executable
128
147
set (GRAPHBLAS_CUDA_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR} /test )
129
148
130
- message (STATUS "${CUDA_TEST_CPP_FILES} " )
149
+ message (STATUS "CUDA tests files: " " ${CUDA_TEST_CPP_FILES} " )
131
150
132
151
add_executable (graphblascuda_test ${CUDA_TEST_CPP_FILES} ${CMAKE_CURRENT_SOURCE_DIR} /test /run_tests.cpp)
133
152
134
153
set_target_properties (graphblascuda_test PROPERTIES POSITION_INDEPENDENT_CODE ON )
135
154
set_target_properties (graphblascuda_test PROPERTIES CUDA_SEPARABLE_COMPILATION ON )
136
- set_target_properties (graphblascuda_test PROPERTIES CUDA_ARCHITECTURES "70 " )
155
+ set_target_properties (graphblascuda_test PROPERTIES CUDA_ARCHITECTURES "75 " )
137
156
138
157
include (GoogleTest)
139
158
0 commit comments