Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 73 additions & 28 deletions cuFFT/lto_callback_window_1d/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -41,59 +41,104 @@ set(GENCODE_FLAGS_LTO --generate-code arch=compute_${CUDA_LTO_ARCHITECTURE},code

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

add_executable(r2c_c2r_lto_callback_example)
add_executable(r2c_c2r_lto_nvrtc_callback_example)
add_executable(r2c_c2r_legacy_callback_example)
add_executable(r2c_c2r_windowing_lto_callback_example)
add_executable(r2c_c2r_windowing_lto_nvrtc_callback_example)
add_executable(r2c_c2r_windowing_legacy_callback_example)
add_executable(r2c_c2r_padding_lto_callback_example)
add_executable(r2c_c2r_padding_legacy_callback_example)

target_include_directories(r2c_c2r_lto_callback_example
target_include_directories(r2c_c2r_windowing_lto_callback_example
PRIVATE ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}
${CMAKE_SOURCE_DIR}/src
${CMAKE_BINARY_DIR})
target_include_directories(r2c_c2r_lto_nvrtc_callback_example
target_include_directories(r2c_c2r_windowing_lto_nvrtc_callback_example
PRIVATE ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}
${CMAKE_SOURCE_DIR}/src
${CMAKE_BINARY_DIR})
target_include_directories(r2c_c2r_legacy_callback_example
target_include_directories(r2c_c2r_windowing_legacy_callback_example
PRIVATE ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}
${CMAKE_SOURCE_DIR}/src
${CMAKE_BINARY_DIR})
target_include_directories(r2c_c2r_padding_lto_callback_example
PRIVATE ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}
${CMAKE_SOURCE_DIR}/src
${CMAKE_BINARY_DIR})
target_include_directories(r2c_c2r_padding_legacy_callback_example
PRIVATE ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}
${CMAKE_SOURCE_DIR}/src
${CMAKE_BINARY_DIR})

target_sources(r2c_c2r_windowing_lto_callback_example
PRIVATE ${PROJECT_SOURCE_DIR}/src/r2c_c2r_windowing_lto_callback_example.cpp
${PROJECT_SOURCE_DIR}/src/common.cpp
${PROJECT_SOURCE_DIR}/src/r2c_c2r_windowing_reference.cu
${CMAKE_BINARY_DIR}/r2c_c2r_windowing_lto_callback_device_fatbin.h)

target_sources(r2c_c2r_windowing_lto_nvrtc_callback_example
PRIVATE ${PROJECT_SOURCE_DIR}/src/r2c_c2r_windowing_lto_nvrtc_callback_example.cpp
${PROJECT_SOURCE_DIR}/src/common.cpp
${PROJECT_SOURCE_DIR}/src/r2c_c2r_windowing_reference.cu)

target_sources(r2c_c2r_lto_callback_example
PRIVATE ${PROJECT_SOURCE_DIR}/src/r2c_c2r_lto_callback_example.cpp
target_sources(r2c_c2r_windowing_legacy_callback_example
PRIVATE ${PROJECT_SOURCE_DIR}/src/r2c_c2r_windowing_legacy_callback_example.cu
${PROJECT_SOURCE_DIR}/src/common.cpp
${PROJECT_SOURCE_DIR}/src/r2c_c2r_reference.cu
${CMAKE_BINARY_DIR}/r2c_c2r_lto_callback_device_fatbin.h)
${PROJECT_SOURCE_DIR}/src/r2c_c2r_windowing_reference.cu)

target_sources(r2c_c2r_lto_nvrtc_callback_example
PRIVATE ${PROJECT_SOURCE_DIR}/src/r2c_c2r_lto_nvrtc_callback_example.cpp
target_sources(r2c_c2r_padding_lto_callback_example
PRIVATE ${PROJECT_SOURCE_DIR}/src/r2c_c2r_padding_lto_callback_example.cpp
${PROJECT_SOURCE_DIR}/src/common.cpp
${PROJECT_SOURCE_DIR}/src/r2c_c2r_reference.cu)
${PROJECT_SOURCE_DIR}/src/r2c_c2r_padding_reference.cu
${CMAKE_BINARY_DIR}/r2c_c2r_padding_load_callback_fatbin.h
${CMAKE_BINARY_DIR}/r2c_c2r_padding_store_callback_fatbin.h)

target_sources(r2c_c2r_legacy_callback_example
PRIVATE ${PROJECT_SOURCE_DIR}/src/r2c_c2r_legacy_callback_example.cu
target_sources(r2c_c2r_padding_legacy_callback_example
PRIVATE ${PROJECT_SOURCE_DIR}/src/r2c_c2r_padding_legacy_callback_example.cu
${PROJECT_SOURCE_DIR}/src/common.cpp
${PROJECT_SOURCE_DIR}/src/r2c_c2r_reference.cu)
${PROJECT_SOURCE_DIR}/src/r2c_c2r_padding_reference.cu)

if(CB_USE_CONSTANT_MEMORY)
target_compile_definitions(r2c_c2r_legacy_callback_example PRIVATE CB_USE_CONSTANT_MEMORY)
target_compile_definitions(r2c_c2r_lto_callback_example PRIVATE CB_USE_CONSTANT_MEMORY)
target_compile_definitions(r2c_c2r_lto_nvrtc_callback_example PRIVATE CB_USE_CONSTANT_MEMORY)
target_compile_definitions(r2c_c2r_windowing_legacy_callback_example PRIVATE CB_USE_CONSTANT_MEMORY)
target_compile_definitions(r2c_c2r_windowing_lto_callback_example PRIVATE CB_USE_CONSTANT_MEMORY)
target_compile_definitions(r2c_c2r_windowing_lto_nvrtc_callback_example PRIVATE CB_USE_CONSTANT_MEMORY)
endif()

target_compile_definitions(r2c_c2r_lto_nvrtc_callback_example PRIVATE CUDA_ARCH=${CUDA_LTO_ARCHITECTURE} CUDA_PATH=${CUDAToolkit_BIN_DIR}/.. -DSOURCE_PATH=${CMAKE_SOURCE_DIR}/src)
target_compile_definitions(r2c_c2r_windowing_lto_nvrtc_callback_example PRIVATE CUDA_ARCH=${CUDA_LTO_ARCHITECTURE} CUDA_PATH=${CUDAToolkit_BIN_DIR}/.. -DSOURCE_PATH=${CMAKE_SOURCE_DIR}/src)

set_target_properties(r2c_c2r_legacy_callback_example PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON
set_target_properties(r2c_c2r_windowing_legacy_callback_example PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON
CUDA_SEPARABLE_COMPILATION ON)

set_target_properties(r2c_c2r_padding_legacy_callback_example PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON
CUDA_SEPARABLE_COMPILATION ON)

message(STATUS "CMAKE_BINARY_DIR: ${CMAKE_BINARY_DIR}")
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/r2c_c2r_lto_callback_device.fatbin ${CMAKE_BINARY_DIR}/r2c_c2r_lto_callback_device_fatbin.h
DEPENDS ${CMAKE_SOURCE_DIR}/src/r2c_c2r_lto_callback_device.cu
COMMAND ${CMAKE_CUDA_COMPILER} --std=c++11 ${GENCODE_FLAGS_LTO} -dc -fatbin ${CMAKE_SOURCE_DIR}/src/r2c_c2r_lto_callback_device.cu -o ${CMAKE_BINARY_DIR}/r2c_c2r_lto_callback_device.fatbin
COMMAND ${CUDAToolkit_BIN_DIR}/bin2c --name window_callback --type longlong ${CMAKE_BINARY_DIR}/r2c_c2r_lto_callback_device.fatbin > ${CMAKE_BINARY_DIR}/r2c_c2r_lto_callback_device_fatbin.h
OUTPUT ${CMAKE_BINARY_DIR}/r2c_c2r_windowing_lto_callback_device.fatbin ${CMAKE_BINARY_DIR}/r2c_c2r_windowing_lto_callback_device_fatbin.h
DEPENDS ${CMAKE_SOURCE_DIR}/src/r2c_c2r_windowing_lto_callback_device.cu
COMMAND ${CMAKE_CUDA_COMPILER} --std=c++11 ${GENCODE_FLAGS_LTO} -dc -fatbin ${CMAKE_SOURCE_DIR}/src/r2c_c2r_windowing_lto_callback_device.cu -o ${CMAKE_BINARY_DIR}/r2c_c2r_windowing_lto_callback_device.fatbin
COMMAND ${CUDAToolkit_BIN_DIR}/bin2c --name window_callback --type longlong ${CMAKE_BINARY_DIR}/r2c_c2r_windowing_lto_callback_device.fatbin > ${CMAKE_BINARY_DIR}/r2c_c2r_windowing_lto_callback_device_fatbin.h
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)

add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/r2c_c2r_padding_load_callback.fatbin ${CMAKE_BINARY_DIR}/r2c_c2r_padding_load_callback_fatbin.h
DEPENDS ${CMAKE_SOURCE_DIR}/src/r2c_c2r_padding_lto_load_callback_device.cu
COMMAND ${CMAKE_CUDA_COMPILER} --std=c++11 ${GENCODE_FLAGS_LTO} -dc -fatbin ${CMAKE_SOURCE_DIR}/src/r2c_c2r_padding_lto_load_callback_device.cu -o ${CMAKE_BINARY_DIR}/r2c_c2r_padding_load_callback.fatbin
COMMAND ${CUDAToolkit_BIN_DIR}/bin2c --name padding_load_callback --type longlong ${CMAKE_BINARY_DIR}/r2c_c2r_padding_load_callback.fatbin > ${CMAKE_BINARY_DIR}/r2c_c2r_padding_load_callback_fatbin.h
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Compiling padding LTO load callback device code"
)

add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/r2c_c2r_padding_store_callback.fatbin ${CMAKE_BINARY_DIR}/r2c_c2r_padding_store_callback_fatbin.h
DEPENDS ${CMAKE_SOURCE_DIR}/src/r2c_c2r_padding_lto_store_callback_device.cu
COMMAND ${CMAKE_CUDA_COMPILER} --std=c++11 ${GENCODE_FLAGS_LTO} -dc -fatbin ${CMAKE_SOURCE_DIR}/src/r2c_c2r_padding_lto_store_callback_device.cu -o ${CMAKE_BINARY_DIR}/r2c_c2r_padding_store_callback.fatbin
COMMAND ${CUDAToolkit_BIN_DIR}/bin2c --name padding_store_callback --type longlong ${CMAKE_BINARY_DIR}/r2c_c2r_padding_store_callback.fatbin > ${CMAKE_BINARY_DIR}/r2c_c2r_padding_store_callback_fatbin.h
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Compiling padding LTO store callback device code"
)

target_link_libraries(r2c_c2r_lto_callback_example PRIVATE CUDA::cufft CUDA::cudart CUDA::nvJitLink)
target_link_libraries(r2c_c2r_lto_nvrtc_callback_example PRIVATE CUDA::cufft CUDA::cudart CUDA::nvJitLink CUDA::nvrtc)
target_link_libraries(r2c_c2r_legacy_callback_example PRIVATE CUDA::cufft_static CUDA::cudart CUDA::culibos)
target_link_libraries(r2c_c2r_windowing_lto_callback_example PRIVATE CUDA::cufft CUDA::cudart CUDA::nvJitLink)
target_link_libraries(r2c_c2r_windowing_lto_nvrtc_callback_example PRIVATE CUDA::cufft CUDA::cudart CUDA::nvJitLink CUDA::nvrtc)
target_link_libraries(r2c_c2r_windowing_legacy_callback_example PRIVATE CUDA::cufft_static CUDA::cudart CUDA::culibos)
target_link_libraries(r2c_c2r_padding_lto_callback_example PRIVATE CUDA::cufft CUDA::cudart CUDA::nvJitLink)
target_link_libraries(r2c_c2r_padding_legacy_callback_example PRIVATE CUDA::cufft_static CUDA::cudart CUDA::culibos)
60 changes: 45 additions & 15 deletions cuFFT/lto_callback_window_1d/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -47,40 +47,70 @@ DEFINES = -DCUDA_ARCH=$(CUDA_LTO_ARCH) -DCUDA_PATH=$(CUDA_PATH) -DSOURCE_PATH=${
###########################################################################################################
# Rules

all: bin/r2c_c2r_lto_callback_example bin/r2c_c2r_lto_nvrtc_callback_example bin/r2c_c2r_legacy_callback_example
all: bin/r2c_c2r_windowing_lto_callback_example bin/r2c_c2r_windowing_lto_nvrtc_callback_example bin/r2c_c2r_windowing_legacy_callback_example bin/r2c_c2r_padding_lto_callback_example bin/r2c_c2r_padding_legacy_callback_example

# LTO example
bin/r2c_c2r_lto_callback_example: build/r2c_c2r_lto_callback_example.o build/r2c_c2r_reference.o build/common.o
# Windowing LTO example
bin/r2c_c2r_windowing_lto_callback_example: build/r2c_c2r_windowing_lto_callback_example.o build/r2c_c2r_windowing_reference.o build/common.o
$(CXX) $(LIBS) $^ -o $@ -lcufft -lcudart

build/r2c_c2r_lto_callback_example.o: src/r2c_c2r_lto_callback_example.cpp build/r2c_c2r_lto_callback_device_fatbin.h
build/r2c_c2r_windowing_lto_callback_example.o: src/r2c_c2r_windowing_lto_callback_example.cpp build/r2c_c2r_windowing_lto_callback_device_fatbin.h
$(CXX) $(INCLUDES) -c $< -o $@

build/r2c_c2r_lto_callback_device_fatbin.h: build/r2c_c2r_lto_callback_device.fatbin
build/r2c_c2r_windowing_lto_callback_device_fatbin.h: build/r2c_c2r_windowing_lto_callback_device.fatbin
$(BIN2C) --name window_callback --type longlong $< > $@

build/r2c_c2r_lto_callback_device.fatbin: src/r2c_c2r_lto_callback_device.cu
build/r2c_c2r_windowing_lto_callback_device.fatbin: src/r2c_c2r_windowing_lto_callback_device.cu
$(NVCC) --std=c++11 $(GENCODE_FLAGS_LTO) $(CB_SWITCH) -dc -fatbin $< -o $@

# NVRTC + LTO example
bin/r2c_c2r_lto_nvrtc_callback_example: build/r2c_c2r_lto_nvrtc_callback_example.o build/r2c_c2r_reference.o build/common.o
$(CXX) $(LIBS) $^ -o $@ -lcufft -lnvrtc -lcudart
# Padding LTO example
bin/r2c_c2r_padding_lto_callback_example: build/r2c_c2r_padding_lto_callback_example.o build/r2c_c2r_padding_reference.o build/common.o build/r2c_c2r_padding_load_callback_fatbin.h build/r2c_c2r_padding_store_callback_fatbin.h
$(CXX) $(LIBS) $^ -o $@ -lcufft -lcudart -lnvJitLink

build/r2c_c2r_lto_nvrtc_callback_example.o: src/r2c_c2r_lto_nvrtc_callback_example.cpp
build/r2c_c2r_padding_lto_callback_example.o: src/r2c_c2r_padding_lto_callback_example.cpp build/r2c_c2r_padding_load_callback_fatbin.h build/r2c_c2r_padding_store_callback_fatbin.h
$(CXX) $(INCLUDES) -c $< -o $@

build/r2c_c2r_padding_load_callback_fatbin.h: build/r2c_c2r_padding_load_callback.fatbin
$(BIN2C) --name padding_load_callback --type longlong $< > $@

build/r2c_c2r_padding_store_callback_fatbin.h: build/r2c_c2r_padding_store_callback.fatbin
$(BIN2C) --name padding_store_callback --type longlong $< > $@

build/r2c_c2r_padding_load_callback.fatbin: src/r2c_c2r_padding_lto_load_callback_device.cu
$(NVCC) --std=c++11 $(GENCODE_FLAGS_LTO) $(CB_SWITCH) -dc -fatbin $< -o $@

build/r2c_c2r_padding_store_callback.fatbin: src/r2c_c2r_padding_lto_store_callback_device.cu
$(NVCC) --std=c++11 $(GENCODE_FLAGS_LTO) $(CB_SWITCH) -dc -fatbin $< -o $@

# Windowing NVRTC + LTO example
bin/r2c_c2r_windowing_lto_nvrtc_callback_example: build/r2c_c2r_windowing_lto_nvrtc_callback_example.o build/r2c_c2r_windowing_reference.o build/common.o
$(CXX) $(LIBS) $^ -o $@ -lcufft -lnvrtc -lcudart -lnvJitLink

build/r2c_c2r_windowing_lto_nvrtc_callback_example.o: src/r2c_c2r_windowing_lto_nvrtc_callback_example.cpp
$(CXX) $(INCLUDES) $(DEFINES) $(CB_SWITCH) -c $< -o $@

# Regular callback example
# Windowing Regular callback example
# NOTE: we compile the sample with nvcc and do device-linking against the static library. With the
# LTO sample, on the other hand, we only need to do separate compilation of the callback function;
# we can use the dynamic library and compile the host code with the host compiler
build/r2c_c2r_legacy_callback_example.o: src/r2c_c2r_legacy_callback_example.cu
build/r2c_c2r_windowing_legacy_callback_example.o: src/r2c_c2r_windowing_legacy_callback_example.cu
$(NVCC) $(INCLUDES) --std=c++11 $(GENCODE_FLAGS) $(CB_SWITCH) -dc -c $< -o $@

bin/r2c_c2r_legacy_callback_example: build/r2c_c2r_legacy_callback_example.o build/r2c_c2r_reference.o build/common.o
bin/r2c_c2r_windowing_legacy_callback_example: build/r2c_c2r_windowing_legacy_callback_example.o build/r2c_c2r_windowing_reference.o build/common.o
$(NVCC) $(LIBS) $(GENCODE_FLAGS) $(CB_SWITCH) -o $@ $^ -lcufft_static -lcudart -lculibos

# Reference
build/r2c_c2r_reference.o: src/r2c_c2r_reference.cu
# Padding Regular callback example
build/r2c_c2r_padding_legacy_callback_example.o: src/r2c_c2r_padding_legacy_callback_example.cu
$(NVCC) $(INCLUDES) --std=c++11 $(GENCODE_FLAGS) $(CB_SWITCH) -dc -c $< -o $@

bin/r2c_c2r_padding_legacy_callback_example: build/r2c_c2r_padding_legacy_callback_example.o build/r2c_c2r_padding_reference.o build/common.o
$(NVCC) $(LIBS) $(GENCODE_FLAGS) $(CB_SWITCH) -o $@ $^ -lcufft_static -lcudart -lculibos

# Windowing Reference
build/r2c_c2r_windowing_reference.o: src/r2c_c2r_windowing_reference.cu
$(NVCC) $(INCLUDES) --std=c++11 $(GENCODE_FLAGS) -c $< -o $@

# Padding Reference
build/r2c_c2r_padding_reference.o: src/r2c_c2r_padding_reference.cu
$(NVCC) $(INCLUDES) --std=c++11 $(GENCODE_FLAGS) -c $< -o $@

build/common.o: src/common.cpp
Expand Down
Loading