diff options
author | Lukas Stockner <lukas.stockner@freenet.de> | 2018-08-20 11:17:34 +0300 |
---|---|---|
committer | Lukas Stockner <lukas.stockner@freenet.de> | 2018-08-23 05:54:59 +0300 |
commit | b3ac3d13a2abdb3bd15b677b4e478a83118f4c0a (patch) | |
tree | abc7b4e619328e1fb64e3f701d1957af8328f75e /intern/cycles/kernel/CMakeLists.txt | |
parent | 53527ac10f23f0850677f88b5eb0e30180b51698 (diff) |
Cycles: Add option for building CUDA kernels sequentially
Building the CUDA kernels takes quite a bit of memory, and when building all of
them the combined usage can be too much on some systems (especially VMs).
Therefore, this patch adds an option to force the build system to build them
sequentially by making each build step depend on the previous kernel.
Reviewers: brecht, sergey
Differential Revision: https://developer.blender.org/D3623
Diffstat (limited to 'intern/cycles/kernel/CMakeLists.txt')
-rw-r--r-- | intern/cycles/kernel/CMakeLists.txt | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/intern/cycles/kernel/CMakeLists.txt b/intern/cycles/kernel/CMakeLists.txt index c4cad17429d..118e18374a1 100644 --- a/intern/cycles/kernel/CMakeLists.txt +++ b/intern/cycles/kernel/CMakeLists.txt @@ -357,8 +357,14 @@ if(WITH_CYCLES_CUDA_BINARIES) ) set(cuda_cubins) - macro(CYCLES_CUDA_KERNEL_ADD arch name flags sources experimental) + macro(CYCLES_CUDA_KERNEL_ADD arch prev_arch name flags sources experimental) set(cuda_cubin ${name}_${arch}.cubin) + + set(kernel_sources ${sources}) + if(NOT ${prev_arch} STREQUAL "none") + set(kernel_sources ${kernel_sources} ${name}_${prev_arch}.cubin) + endif() + set(cuda_kernel_src "/kernels/cuda/${name}.cu") set(cuda_flags @@ -402,7 +408,7 @@ if(WITH_CYCLES_CUDA_BINARIES) ${cuda_flags} -v -cuda-toolkit-dir "${CUDA_TOOLKIT_ROOT_DIR}" - DEPENDS ${sources} cycles_cubin_cc) + DEPENDS ${kernel_sources} cycles_cubin_cc) else() add_custom_command( OUTPUT ${cuda_cubin} @@ -413,7 +419,7 @@ if(WITH_CYCLES_CUDA_BINARIES) ${CMAKE_CURRENT_SOURCE_DIR}${cuda_kernel_src} --ptxas-options="-v" ${cuda_flags} - DEPENDS ${sources}) + DEPENDS ${kernel_sources}) endif() delayed_install("${CMAKE_CURRENT_BINARY_DIR}" "${cuda_cubin}" ${CYCLES_INSTALL_PATH}/lib) list(APPEND cuda_cubins ${cuda_cubin}) @@ -421,18 +427,23 @@ if(WITH_CYCLES_CUDA_BINARIES) unset(cuda_debug_flags) endmacro() + set(prev_arch "none") foreach(arch ${CYCLES_CUDA_BINARIES_ARCH}) if(${arch} MATCHES "sm_2.") message(STATUS "CUDA binaries for ${arch} are no longer supported, skipped.") else() # Compile regular kernel - CYCLES_CUDA_KERNEL_ADD(${arch} filter "" "${cuda_filter_sources}" FALSE) - CYCLES_CUDA_KERNEL_ADD(${arch} kernel "" "${cuda_sources}" FALSE) - endif() + CYCLES_CUDA_KERNEL_ADD(${arch} ${prev_arch} filter "" "${cuda_filter_sources}" FALSE) + CYCLES_CUDA_KERNEL_ADD(${arch} ${prev_arch} kernel "" "${cuda_sources}" FALSE) - if(WITH_CYCLES_CUDA_SPLIT_KERNEL_BINARIES) - # Compile split kernel - CYCLES_CUDA_KERNEL_ADD(${arch} kernel_split "-D __SPLIT__" ${cuda_sources} FALSE) + if(WITH_CYCLES_CUDA_SPLIT_KERNEL_BINARIES) + # Compile split kernel + CYCLES_CUDA_KERNEL_ADD(${arch} ${prev_arch} kernel_split "-D __SPLIT__" "${cuda_sources}" FALSE) + endif() + + if(WITH_CYCLES_CUDA_BUILD_SERIAL) + set(prev_arch ${arch}) + endif() endif() endforeach() |