From 18cc6abbb65f8ce17ac062f66447422003d0576b Mon Sep 17 00:00:00 2001 From: perseusdg Date: Tue, 7 Sep 2021 23:57:52 +0530 Subject: [PATCH] DeformableConvRT.h fixes ,cmake cuda arch auto detection --- .gitignore | 3 +- CMakeLists.txt | 68 +++++++++++++++++++--- cmake/getCudaArch.cu | 20 +++++++ include/tkDNN/pluginsRT/DeformableConvRT.h | 2 +- 4 files changed, 82 insertions(+), 11 deletions(-) create mode 100644 cmake/getCudaArch.cu diff --git a/.gitignore b/.gitignore index c1d362c..683834c 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,5 @@ demo/BDD100K_val cmake-build-minsizerel/* scripts/COCO_val2017/* scripts/COCO_val2017.zip -scripts/all_labels.txt \ No newline at end of file +scripts/all_labels.txt +/cmake/cuda_script diff --git a/CMakeLists.txt b/CMakeLists.txt index 9191adc..c10f6ac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,15 +1,67 @@ cmake_minimum_required(VERSION 3.15) - -project (tkDNN) +project(tkDNN) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) -if(UNIX) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -fPIC -Wno-deprecated-declarations -Wno-unused-variable -O3") +set(CMAKE_CXX_STANDARD 14) + +find_package(CUDA 9.0 REQUIRED) +if (CUDA_FOUND) + #Get CUDA compute capability + set(OUTPUTFILE ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cuda_script) # No suffix required + set(CUDAFILE ${CMAKE_CURRENT_SOURCE_DIR}/cmake/getCudaArch.cu) + execute_process(COMMAND nvcc -lcuda ${CUDAFILE} -o ${OUTPUTFILE}) + execute_process(COMMAND ${OUTPUTFILE} + RESULT_VARIABLE CUDA_RETURN_CODE + OUTPUT_VARIABLE ARCH) + + if(${CUDA_RETURN_CODE} EQUAL 0) + set(CUDA_SUCCESS "TRUE") + else() + set(CUDA_SUCCESS "FALSE") + endif() + + if (${CUDA_SUCCESS}) + message(STATUS "CUDA Architecture: ${ARCH}") + message(STATUS "CUDA Version: ${CUDA_VERSION_STRING}") + message(STATUS "CUDA Path: ${CUDA_TOOLKIT_ROOT_DIR}") + message(STATUS "CUDA Libararies: ${CUDA_LIBRARIES}") + message(STATUS "CUDA Performance Primitives: ${CUDA_npp_LIBRARY}") + + set(CUDA_NVCC_FLAGS "${ARCH}") + add_definitions(-DGPU) #You may not require this + + else() + message(WARNING ${ARCH}) + endif() endif() + +SET(CUDA_SEPARABLE_COMPILATION ON) + + +if(UNIX) + if(CMAKE_BUILD_TYPE MATCHES Release) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wno-deprecated-declarations -Wno-unused-variable -O3") + set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} --maxrregcount=32) + endif() + + if(CMAKE_BUILD_TYPE MATCHES Debug) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wno-deprecated-declarations -Wno-unused-variable -g3") + set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} --maxrregcount=32 -G -g) + endif() +endif() + if(WIN32) -set(CMAKE_CXX_STANDARD 11) -set(CMAKE_CXX_FLAGS "/O2 /FS /EHsc") + if(CMAKE_BUILD_TYPE MATCHES Release) + set(CMAKE_CXX_FLAGS "/O2 /FS /EHsc") + set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} --maxrregcount=32 -arch=sm_61) + endif() + + if(CMAKE_BUILD_TYPE MATCHES Debug) + set(CMAKE_CXX_FLAGS "/Od /FS /EHsc") + set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} --maxrregcount=32 -arch=sm_61 -G -g) + endif() set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) endif(WIN32) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/tkDNN) # project specific flags @@ -28,10 +80,8 @@ endif() #------------------------------------------------------------------------------- # CUDA #------------------------------------------------------------------------------- -find_package(CUDA 9.0 REQUIRED) -SET(CUDA_SEPARABLE_COMPILATION ON) + #set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -arch=sm_30 --compiler-options '-fPIC'") -set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} --maxrregcount=32 -arch=sm_61) find_package(CUDNN REQUIRED) diff --git a/cmake/getCudaArch.cu b/cmake/getCudaArch.cu new file mode 100644 index 0000000..1d66199 --- /dev/null +++ b/cmake/getCudaArch.cu @@ -0,0 +1,20 @@ +#include + +int main(int argc, char **argv){ + cudaDeviceProp dP; + float min_cc = 5.0; + + int rc = cudaGetDeviceProperties(&dP, 0); + if(rc != cudaSuccess) { + cudaError_t error = cudaGetLastError(); + printf("CUDA error: %s", cudaGetErrorString(error)); + return rc; /* Failure */ + } + if((dP.major+(dP.minor/10)) < min_cc) { + printf("Min Compute Capability of %2.1f required: %d.%d found\n Not Building CUDA Code", min_cc, dP.major, dP.minor); + return 1; /* Failure */ + } else { + printf("-arch=sm_%d%d", dP.major, dP.minor); + return 0; /* Success */ + } +} \ No newline at end of file diff --git a/include/tkDNN/pluginsRT/DeformableConvRT.h b/include/tkDNN/pluginsRT/DeformableConvRT.h index adc5554..1cbf55d 100644 --- a/include/tkDNN/pluginsRT/DeformableConvRT.h +++ b/include/tkDNN/pluginsRT/DeformableConvRT.h @@ -110,6 +110,6 @@ namespace nvinfer1 { static std::vector mPluginAttributes; std::string mPluginNamespace; }; - + REGISTER_TENSORRT_PLUGIN(DeformableConvRTPluginCreator); }; #endif