Repository navigation
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
148 lines (134 loc) · 6 KB
/
Copy pathCMakeLists.txt
File metadata and controls
148 lines (134 loc) · 6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
cmake_minimum_required(VERSION 3.27.0)
project(Nabla4Benchmark)
option(IS_GPU "Enable GPU execution" OFF)
option(INDEX_TYPE "Index type" "int")
option(BUILD_SLIDES "Build slides" OFF)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(IS_GPU)
include(CheckLanguage)
check_language(CUDA)
if (CMAKE_CUDA_COMPILER)
enable_language(CUDA)
set(CMAKE_CUDA_STANDARD 20)
set(CMAKE_CUDA_EXTENSIONS OFF)
endif()
endif()
# Find or fetch GridTools
if(NOT _gridtools_already_fetched)
find_package(GridTools "2" QUIET)
endif()
if(NOT GridTools_FOUND)
set(_gridtools_repository "https://github.com/GridTools/gridtools.git")
set(_gridtools_tag "master")
if(NOT _gridtools_already_fetched)
message(STATUS "Fetching GridTools ${_gridtools_tag} from ${_gridtools_repository}")
endif()
include(FetchContent)
FetchContent_Declare(
gridtools
GIT_REPOSITORY ${_gridtools_repository}
GIT_TAG ${_gridtools_tag}
OVERRIDE_FIND_PACKAGE
)
FetchContent_MakeAvailable(gridtools)
set(_gridtools_already_fetched ON CACHE INTERNAL "")
else()
message(STATUS "Using GridTools from ${GridTools_DIR}")
endif()
set(BENCHMARK_SOURCES
src/wrapper_nabla4_unstructured.cpp
src/wrapper_nabla4_structured.cpp
src/wrapper_interpolate_verts2cells.cpp
src/wrapper_nabla4_interpolate_separate.cpp
src/wrapper_nabla4_interpolate_inlined.cpp
src/wrapper_nabla4_interpolate_inlined_v2v.cpp
src/wrapper_nabla4_interpolate_inlined_v2v_general.cpp
src/wrapper_nabla4_interpolate_inlined_cached.cpp
src/wrapper_nabla4_interpolate_roofline.cpp
src/wrapper_nabla4_interpolate_verts2cells_separate.cpp
src/wrapper_nabla4_interpolate_verts2cells_inlined.cpp
src/wrapper_nabla4_interpolate_verts2cells_inlined_v2v.cpp
src/wrapper_nabla4_interpolate_verts2cells_inlined_c2v.cpp
src/wrapper_nabla4_interpolate_verts2cells_inlined_cached.cpp
src/wrapper_nabla4_interpolate_verts2cells_inlined_cached_pipeline.cpp
)
add_library(benchmark ${BENCHMARK_SOURCES})
set_property(TARGET benchmark PROPERTY POSITION_INDEPENDENT_CODE ON)
target_include_directories(benchmark PRIVATE include GridTools)
target_link_libraries(benchmark PUBLIC GridTools::gridtools GridTools::stencil_naive GridTools::storage_cpu_ifirst GridTools::storage_cpu_kfirst)
if (${INDEX_TYPE} STREQUAL "sizet")
message(STATUS "Using size_t as index type")
target_compile_definitions(benchmark PUBLIC INDEX_TYPE_SIZE_T)
elseif(${INDEX_TYPE} STREQUAL "int64")
message(STATUS "Using int64 as index type")
target_compile_definitions(benchmark PUBLIC INDEX_TYPE_INT64)
elseif(${INDEX_TYPE} STREQUAL "uint32")
message(STATUS "Using uint32 as index type")
target_compile_definitions(benchmark PUBLIC INDEX_TYPE_UINT32_T)
elseif(${INDEX_TYPE} STREQUAL "int")
message(STATUS "Using int as index type")
target_compile_definitions(benchmark PUBLIC INDEX_TYPE_INT)
else()
message(FATAL_ERROR "Invalid value for INDEX_TYPE ${INDEX_TYPE}. Valid values are sizet, uint32, or int.")
endif()
if(IS_GPU)
target_link_libraries(benchmark PUBLIC GridTools::storage_gpu)
set_source_files_properties(${BENCHMARK_SOURCES} PROPERTIES LANGUAGE CUDA)
endif()
add_executable(nabla4_benchmark src/main.cpp)
target_link_libraries(nabla4_benchmark PRIVATE benchmark)
target_include_directories(nabla4_benchmark PRIVATE include GridTools)
find_package(Python 3.9.6 COMPONENTS Interpreter Development.Module REQUIRED)
# Find nanobind module
execute_process(
COMMAND "${Python_EXECUTABLE}" -m nanobind --cmake_dir
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE NB_DIR)
list(APPEND CMAKE_PREFIX_PATH "${NB_DIR}")
find_package(nanobind CONFIG REQUIRED)
# Test if we have the right version.
execute_process(
COMMAND "${Python_EXECUTABLE}" -m nanobind --version
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE NB_VER)
if(${NB_VER} VERSION_LESS 2.0.0)
message(FATAL_ERROR "Require nanobind version greater than 2.0.0, but found ${NB_VER}")
endif()
nanobind_add_module(icon_benchmark python/extensions.cpp)
target_include_directories(icon_benchmark PRIVATE include)
target_link_libraries(icon_benchmark PRIVATE benchmark)
nanobind_add_module(nabla4_gtfn python/nabla4_gtfn_bindings.cpp)
target_include_directories(nabla4_gtfn PRIVATE include GridTools)
target_link_libraries(nabla4_gtfn PRIVATE benchmark GridTools::gridtools GridTools::stencil_naive GridTools::storage_cpu_ifirst GridTools::storage_cpu_kfirst)
if(IS_GPU)
target_compile_definitions(nabla4_gtfn PRIVATE IS_GPU)
target_link_libraries(nabla4_gtfn PUBLIC GridTools::storage_gpu)
set_source_files_properties(python/nabla4_gtfn_bindings.cpp PROPERTIES LANGUAGE CUDA)
add_library(nabla4_cutile STATIC src/nabla4_cutile.cu src/nabla4_unstructured_cutile.cu)
target_include_directories(nabla4_cutile PRIVATE include GridTools)
target_link_libraries(nabla4_cutile PUBLIC GridTools::storage_gpu)
target_compile_options(nabla4_cutile PRIVATE
$<$<COMPILE_LANGUAGE:CUDA>:--enable-tile>
)
if (${INDEX_TYPE} STREQUAL "sizet")
message(STATUS "Using size_t as index type")
target_compile_definitions(nabla4_cutile PUBLIC INDEX_TYPE_SIZE_T)
elseif(${INDEX_TYPE} STREQUAL "int64")
message(STATUS "Using int64 as index type")
target_compile_definitions(nabla4_cutile PUBLIC INDEX_TYPE_INT64)
elseif(${INDEX_TYPE} STREQUAL "uint32")
message(STATUS "Using uint32 as index type")
target_compile_definitions(nabla4_cutile PUBLIC INDEX_TYPE_UINT32_T)
elseif(${INDEX_TYPE} STREQUAL "int")
message(STATUS "Using int as index type")
target_compile_definitions(nabla4_cutile PUBLIC INDEX_TYPE_INT)
else()
message(FATAL_ERROR "Invalid value for INDEX_TYPE ${INDEX_TYPE}. Valid values are sizet, uint32, or int.")
endif()
set_property(TARGET nabla4_cutile PROPERTY POSITION_INDEPENDENT_CODE ON)
target_link_libraries(benchmark PUBLIC nabla4_cutile)
endif()
if(BUILD_SLIDES)
include(slides-support/Marp.cmake)
add_marp_slides(icon-structured-slides icon_structured_slides.md)
add_marp_slides(icon-structured-slides-3kernels icon_structured_slides_3kernels.md)
endif()