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
89 changes: 41 additions & 48 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
cmake_minimum_required(VERSION 3.11)
project(VkFFT_TestSuite)
cmake_minimum_required(VERSION 3.21 FATAL_ERROR)
project(VkFFT_TestSuite LANGUAGES CXX)

if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "" FORCE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE)
# Set a default build type only for single-config generators (do not force cache)
if(NOT CMAKE_CONFIGURATION_TYPES)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type")
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "RelWithDebInfo" "MinSizeRel")
endif()
endif()

if (NOT DEFINED GLSLANG_GIT_TAG)
Expand Down Expand Up @@ -93,28 +96,24 @@ else()
benchmark_scripts/vkFFT_scripts/src/sample_1003_benchmark_VkFFT_single_3d_2_512.cpp
benchmark_scripts/vkFFT_scripts/src/sample_1004_benchmark_VkFFT_quadDoubleDouble_2_4096.cpp)
endif()
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_11)
add_definitions(-DVKFFT_BACKEND=${VKFFT_BACKEND})
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_11)
target_compile_definitions(${PROJECT_NAME} PUBLIC VKFFT_BACKEND=${VKFFT_BACKEND})
if(${VKFFT_BACKEND} EQUAL 0)
find_package(Vulkan REQUIRED)
elseif(${VKFFT_BACKEND} EQUAL 1)
find_package(CUDA 9.0 REQUIRED)
enable_language(CUDA)
if (MSVC)
else()
set_source_files_properties(VkFFT_TestSuite.cpp PROPERTIES LANGUAGE CUDA)
endif()
set_property(TARGET ${PROJECT_NAME} PROPERTY CUDA_ARCHITECTURES 60 70 75 80 86)
target_compile_options(${PROJECT_NAME} PUBLIC "$<$<COMPILE_LANGUAGE:CUDA>:SHELL:
-std=c++11
-DVKFFT_BACKEND=${VKFFT_BACKEND}
-gencode arch=compute_60,code=compute_60
-gencode arch=compute_70,code=compute_70
-gencode arch=compute_75,code=compute_75
-gencode arch=compute_80,code=compute_80
-gencode arch=compute_86,code=compute_86>")
set_target_properties(${PROJECT_NAME} PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
set_target_properties(${PROJECT_NAME} PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON)
enable_language(CUDA)
find_package(CUDAToolkit REQUIRED)
if (MSVC)
else()
set_source_files_properties(VkFFT_TestSuite.cpp PROPERTIES LANGUAGE CUDA)
endif()
set_property(TARGET ${PROJECT_NAME} PROPERTY CUDA_ARCHITECTURES all-major)
set_target_properties(${PROJECT_NAME} PROPERTIES
CUDA_SEPARABLE_COMPILATION ON
CUDA_RESOLVE_DEVICE_SYMBOLS ON
CUDA_STANDARD 11
CUDA_STANDARD_REQUIRED YES)
target_compile_definitions(${PROJECT_NAME} PUBLIC CUDA_TOOLKIT_ROOT_DIR="${CUDAToolkit_LIBRARY_ROOT}")
elseif(${VKFFT_BACKEND} EQUAL 2)
list(APPEND CMAKE_PREFIX_PATH /opt/rocm/hip /opt/rocm)
find_package(hip)
Expand Down Expand Up @@ -147,7 +146,7 @@ elseif(${VKFFT_BACKEND} EQUAL 5)
target_include_directories(${PROJECT_NAME} PUBLIC "metal-cpp/")
endif()

target_compile_definitions(${PROJECT_NAME} PUBLIC -DVK_API_VERSION=11)#10 - Vulkan 1.0, 11 - Vulkan 1.1, 12 - Vulkan 1.2
target_compile_definitions(${PROJECT_NAME} PUBLIC VK_API_VERSION=11) # 10 - Vulkan 1.0, 11 - Vulkan 1.1, 12 - Vulkan 1.2
if(VkFFT_use_FP128_Bluestein_RaderFFT)
target_compile_definitions(${PROJECT_NAME} PUBLIC -DVkFFT_use_FP128_Bluestein_RaderFFT)
endif()
Expand All @@ -173,7 +172,7 @@ endif()

add_library(VkFFT INTERFACE)
target_include_directories(VkFFT INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/vkFFT/)
target_compile_definitions(VkFFT INTERFACE -DVKFFT_BACKEND=${VKFFT_BACKEND})
target_compile_definitions(VkFFT INTERFACE VKFFT_BACKEND=${VKFFT_BACKEND})

add_library(half INTERFACE)
target_include_directories(half INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/half_lib/)
Expand All @@ -183,10 +182,8 @@ target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/be
if(${VKFFT_BACKEND} EQUAL 0)
target_link_libraries(${PROJECT_NAME} PUBLIC SPIRV glslang Vulkan::Vulkan VkFFT half)
elseif(${VKFFT_BACKEND} EQUAL 1)
find_library(CUDA_NVRTC_LIB libnvrtc nvrtc HINTS "${CUDA_TOOLKIT_ROOT_DIR}/lib64" "${LIBNVRTC_LIBRARY_DIR}" "${CUDA_TOOLKIT_ROOT_DIR}/lib/x64" /usr/lib64 /usr/local/cuda/lib64)
add_definitions(-DCUDA_TOOLKIT_ROOT_DIR="${CUDA_TOOLKIT_ROOT_DIR}")
target_link_libraries(${PROJECT_NAME} PUBLIC ${CUDA_LIBRARIES} cuda ${CUDA_NVRTC_LIB} VkFFT half)
target_include_directories(${PROJECT_NAME} PUBLIC ${CUDA_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PUBLIC CUDA::cudart CUDA::cuda_driver CUDA::nvrtc VkFFT half)
target_include_directories(${PROJECT_NAME} PUBLIC ${CUDAToolkit_INCLUDE_DIRS})
elseif(${VKFFT_BACKEND} EQUAL 2)
target_link_libraries(${PROJECT_NAME} PUBLIC hip::host VkFFT half)
elseif(${VKFFT_BACKEND} EQUAL 3)
Expand All @@ -198,8 +195,8 @@ elseif(${VKFFT_BACKEND} EQUAL 5)
endif()

if(build_VkFFT_FFTW_precision OR VkFFT_use_FP128_Bluestein_RaderFFT)
add_definitions(-DUSE_FFTW)
set(FFTW3_LIB_DIR "/usr/lib/x86_64-linux-gnu/")
target_compile_definitions(${PROJECT_NAME} PUBLIC USE_FFTW)
set(FFTW3_LIB_DIR "/usr/lib/x86_64-linux-gnu/")
set(FFTW3_INCLUDE_DIR "/usr/include/")
find_library(
FFTW_LIB
Expand Down Expand Up @@ -240,9 +237,9 @@ endif()
endif()

if(build_VkFFT_cuFFT_benchmark)
add_definitions(-DUSE_cuFFT)
find_package(CUDA 9.0 REQUIRED)
enable_language(CUDA)
target_compile_definitions(${PROJECT_NAME} PUBLIC USE_cuFFT)
find_package(CUDAToolkit REQUIRED)
enable_language(CUDA)
if(build_VkFFT_FFTW_precision)
add_library(cuFFT_scripts STATIC
benchmark_scripts/cuFFT_scripts/src/user_benchmark_cuFFT.cu
Expand Down Expand Up @@ -274,23 +271,19 @@ if(build_VkFFT_cuFFT_benchmark)
benchmark_scripts/cuFFT_scripts/src/sample_1001_benchmark_cuFFT_double_2_4096.cu
benchmark_scripts/cuFFT_scripts/src/sample_1003_benchmark_cuFFT_single_3d_2_512.cu)
endif()
set_property(TARGET cuFFT_scripts PROPERTY CUDA_ARCHITECTURES 60 70 75 80 86)
CUDA_ADD_CUFFT_TO_TARGET(cuFFT_scripts)
target_compile_options(cuFFT_scripts PRIVATE "$<$<COMPILE_LANGUAGE:CUDA>:SHELL:
-std=c++11
-gencode arch=compute_60,code=compute_60
-gencode arch=compute_70,code=compute_70
-gencode arch=compute_75,code=compute_75
-gencode arch=compute_80,code=compute_80
-gencode arch=compute_86,code=compute_86>")
set_property(TARGET cuFFT_scripts PROPERTY CUDA_ARCHITECTURES all-major)
target_include_directories(cuFFT_scripts PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/benchmark_scripts/cuFFT_scripts/include)
target_include_directories(cuFFT_scripts PUBLIC ${CUDA_INCLUDE_DIRS})
set_target_properties(cuFFT_scripts PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
set_target_properties(cuFFT_scripts PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON)
target_include_directories(cuFFT_scripts PUBLIC ${CUDAToolkit_INCLUDE_DIRS})
set_target_properties(cuFFT_scripts PROPERTIES
CUDA_SEPARABLE_COMPILATION ON
CUDA_RESOLVE_DEVICE_SYMBOLS ON
CUDA_STANDARD 11
CUDA_STANDARD_REQUIRED YES)
target_link_libraries(cuFFT_scripts PRIVATE CUDA::cufft CUDA::cudart)
target_link_libraries(${PROJECT_NAME} PUBLIC cuFFT_scripts)
endif()
if(build_VkFFT_rocFFT_benchmark)
add_definitions(-DUSE_rocFFT)
target_compile_definitions(${PROJECT_NAME} PUBLIC USE_rocFFT)
list(APPEND CMAKE_PREFIX_PATH /opt/rocm/hip /opt/rocm)
find_package(hip)
find_package(hipfft)
Expand Down
20 changes: 12 additions & 8 deletions VkFFT_TestSuite.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
#include <OpenCL/opencl.h>
#else
#include <CL/cl.h>
#endif
#endif
#elif(VKFFT_BACKEND==4)
#include <ze_api.h>
#elif(VKFFT_BACKEND==5)
Expand Down Expand Up @@ -104,7 +104,7 @@
#include "sample_1000_benchmark_cuFFT_single_2_4096.h"
#include "sample_1001_benchmark_cuFFT_double_2_4096.h"
#include "sample_1003_benchmark_cuFFT_single_3d_2_512.h"
#endif
#endif
#ifdef USE_rocFFT
#include "user_benchmark_rocFFT.h"
#include "sample_0_benchmark_rocFFT_single.h"
Expand All @@ -116,7 +116,7 @@
#include "sample_1000_benchmark_rocFFT_single_2_4096.h"
#include "sample_1001_benchmark_rocFFT_double_2_4096.h"
#include "sample_1003_benchmark_rocFFT_single_3d_2_512.h"
#endif
#endif
#ifdef USE_FFTW
#include "fftw3.h"
#endif
Expand All @@ -127,13 +127,13 @@ VkFFTResult launchVkFFT(VkGPU* vkGPU, uint64_t sample_id, bool file_output, FILE

#if(VKFFT_BACKEND==0)
VkResult res = VK_SUCCESS;
//create instance - a connection between the application and the Vulkan library
//create instance - a connection between the application and the Vulkan library
res = createInstance(vkGPU, sample_id);
if (res != 0) {
//printf("Instance creation failed, error code: %" PRIu64 "\n", res);
return VKFFT_ERROR_FAILED_TO_CREATE_INSTANCE;
}
//set up the debugging messenger
//set up the debugging messenger
res = setupDebugMessenger(vkGPU);
if (res != 0) {
//printf("Debug messenger creation failed, error code: %" PRIu64 "\n", res);
Expand All @@ -151,7 +151,7 @@ VkFFTResult launchVkFFT(VkGPU* vkGPU, uint64_t sample_id, bool file_output, FILE
//printf("Device creation failed, error code: %" PRIu64 "\n", res);
return VKFFT_ERROR_FAILED_TO_CREATE_DEVICE;
}
//create fence for synchronization
//create fence for synchronization
res = createFence(vkGPU);
if (res != 0) {
//printf("Fence creation failed, error code: %" PRIu64 "\n", res);
Expand All @@ -176,7 +176,11 @@ VkFFTResult launchVkFFT(VkGPU* vkGPU, uint64_t sample_id, bool file_output, FILE
if (res2 != cudaSuccess) return VKFFT_ERROR_FAILED_TO_SET_DEVICE_ID;
res = cuDeviceGet(&vkGPU->device, (int)vkGPU->device_id);
if (res != CUDA_SUCCESS) return VKFFT_ERROR_FAILED_TO_GET_DEVICE;
#if CUDA_VERSION >= 13000
res = cuCtxCreate(&vkGPU->context,nullptr, 0, (int)vkGPU->device);
#else
res = cuCtxCreate(&vkGPU->context, 0, (int)vkGPU->device);
#endif
if (res != CUDA_SUCCESS) return VKFFT_ERROR_FAILED_TO_CREATE_CONTEXT;
#elif(VKFFT_BACKEND==2)
hipError_t res = hipSuccess;
Expand Down Expand Up @@ -496,7 +500,7 @@ VkFFTResult launchVkFFT(VkGPU* vkGPU, uint64_t sample_id, bool file_output, FILE
resFFT = sample_1003_benchmark_VkFFT_single_3d_2_512(vkGPU, file_output, output, isCompilerInitialized);
break;
}
#ifdef VKFFT_USE_DOUBLEDOUBLE_FP128
#ifdef VKFFT_USE_DOUBLEDOUBLE_FP128
case 1004:
{
resFFT = sample_1004_benchmark_VkFFT_quadDoubleDouble_2_4096(vkGPU, file_output, output, isCompilerInitialized);
Expand Down Expand Up @@ -583,7 +587,7 @@ int main(int argc, char* argv[])
printf(" -vkfft X: launch VkFFT sample X:\n");
printf(" 0 - FFT + iFFT C2C benchmark 1D batched in single precision\n");
printf(" 1 - FFT + iFFT C2C benchmark 1D batched in double precision LUT\n");
printf(" 2 - FFT + iFFT C2C benchmark 1D batched in half precision\n");
printf(" 2 - FFT + iFFT C2C benchmark 1D batched in half precision\n");
printf(" 3 - FFT + iFFT C2C multidimensional benchmark in single precision\n");
printf(" 4 - FFT + iFFT C2C multidimensional benchmark in single precision, native zeropadding\n");
printf(" 5 - FFT + iFFT C2C benchmark 1D batched in single precision, no reshuffling\n");
Expand Down