able to build kernels as shared object file(dll),and minor changes to lstm.cpp and utils.cpp to overcome minor msvc build errors
This commit is contained in:
+9
-2
@@ -2,7 +2,13 @@ cmake_minimum_required(VERSION 3.5)
|
|||||||
|
|
||||||
project (tkDNN)
|
project (tkDNN)
|
||||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
||||||
|
if(LINUX)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fPIC -Wno-deprecated-declarations -Wno-unused-variable")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fPIC -Wno-deprecated-declarations -Wno-unused-variable")
|
||||||
|
endif()
|
||||||
|
if(WIN32)
|
||||||
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
|
set(CMAKE_CXX_FLAGS "/O2 /FS ")
|
||||||
|
endif()
|
||||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/tkDNN)
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/tkDNN)
|
||||||
|
|
||||||
# project specific flags
|
# project specific flags
|
||||||
@@ -18,7 +24,7 @@ add_definitions(-DTKDNN_PATH="${CMAKE_CURRENT_SOURCE_DIR}")
|
|||||||
find_package(CUDA 9.0 REQUIRED)
|
find_package(CUDA 9.0 REQUIRED)
|
||||||
SET(CUDA_SEPARABLE_COMPILATION ON)
|
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} -arch=sm_30 --compiler-options '-fPIC'")
|
||||||
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} --maxrregcount=32)
|
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} --maxrregcount=32 -arch=sm_61 )
|
||||||
|
|
||||||
find_package(CUDNN REQUIRED)
|
find_package(CUDNN REQUIRED)
|
||||||
include_directories(${CUDNN_INCLUDE_DIR})
|
include_directories(${CUDNN_INCLUDE_DIR})
|
||||||
@@ -28,6 +34,7 @@ include_directories(${CUDNN_INCLUDE_DIR})
|
|||||||
file(GLOB tkdnn_CUSRC "src/kernels/*.cu" "src/sorting.cu")
|
file(GLOB tkdnn_CUSRC "src/kernels/*.cu" "src/sorting.cu")
|
||||||
cuda_include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include ${CUDA_INCLUDE_DIRS} ${CUDNN_INCLUDE_DIRS})
|
cuda_include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include ${CUDA_INCLUDE_DIRS} ${CUDNN_INCLUDE_DIRS})
|
||||||
cuda_add_library(kernels SHARED ${tkdnn_CUSRC})
|
cuda_add_library(kernels SHARED ${tkdnn_CUSRC})
|
||||||
|
target_link_libraries(kernels ${CUDA_CUBLAS_LIBRARIES})
|
||||||
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
@@ -48,7 +55,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DOPENCV")
|
|||||||
file(GLOB tkdnn_SRC "src/*.cpp")
|
file(GLOB tkdnn_SRC "src/*.cpp")
|
||||||
set(tkdnn_LIBS kernels ${CUDA_LIBRARIES} ${CUDA_CUBLAS_LIBRARIES} ${CUDNN_LIBRARIES} ${OpenCV_LIBS} yaml-cpp)
|
set(tkdnn_LIBS kernels ${CUDA_LIBRARIES} ${CUDA_CUBLAS_LIBRARIES} ${CUDNN_LIBRARIES} ${OpenCV_LIBS} yaml-cpp)
|
||||||
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include ${CUDA_INCLUDE_DIRS} ${OPENCV_INCLUDE_DIRS} ${NVINFER_INCLUDES})
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include ${CUDA_INCLUDE_DIRS} ${OPENCV_INCLUDE_DIRS} ${NVINFER_INCLUDES})
|
||||||
add_library(tkDNN SHARED ${tkdnn_SRC})
|
add_library(tkDNN SHARED ${tkdnn_SRC})
|
||||||
target_link_libraries(tkDNN ${tkdnn_LIBS})
|
target_link_libraries(tkDNN ${tkdnn_LIBS})
|
||||||
|
|||||||
@@ -4,7 +4,12 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#ifdef __linux__
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#elif _WIN32
|
||||||
|
#include <Windows.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,13 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stdlib.h> /* srand, rand */
|
#include <stdlib.h> /* srand, rand */
|
||||||
|
|
||||||
|
#ifdef __linux__
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#elif _WIN32
|
||||||
|
#include <Windows.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <Eigen/Dense>
|
#include <Eigen/Dense>
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|||||||
@@ -12,7 +12,12 @@
|
|||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#ifdef __linux__
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#elif _WIN32
|
||||||
|
#include <Windows.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
|
||||||
#include "NvInfer.h"
|
#include "NvInfer.h"
|
||||||
|
|||||||
@@ -12,7 +12,12 @@
|
|||||||
#include <cublas_v2.h>
|
#include <cublas_v2.h>
|
||||||
#include <cudnn.h>
|
#include <cudnn.h>
|
||||||
|
|
||||||
|
#ifdef __linux__
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#elif _WIN32
|
||||||
|
#include <Windows.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <ios>
|
#include <ios>
|
||||||
|
|
||||||
|
|
||||||
@@ -39,6 +44,7 @@
|
|||||||
#define TKDNN_VERBOSE 0
|
#define TKDNN_VERBOSE 0
|
||||||
|
|
||||||
// Simple Timer
|
// Simple Timer
|
||||||
|
#ifdef __linux__
|
||||||
#define TKDNN_TSTART timespec start, end; \
|
#define TKDNN_TSTART timespec start, end; \
|
||||||
clock_gettime(CLOCK_MONOTONIC, &start);
|
clock_gettime(CLOCK_MONOTONIC, &start);
|
||||||
|
|
||||||
@@ -48,6 +54,8 @@
|
|||||||
if(show) std::cout<<col<<"Time:"<<std::setw(16)<<t_ns<<" ms\n"<<COL_END;
|
if(show) std::cout<<col<<"Time:"<<std::setw(16)<<t_ns<<" ms\n"<<COL_END;
|
||||||
|
|
||||||
#define TKDNN_TSTOP TKDNN_TSTOP_C(COL_CYANB, TKDNN_VERBOSE)
|
#define TKDNN_TSTOP TKDNN_TSTOP_C(COL_CYANB, TKDNN_VERBOSE)
|
||||||
|
#elif _WIN32
|
||||||
|
#endif
|
||||||
|
|
||||||
/********************************************************
|
/********************************************************
|
||||||
* Prints the error message, and exits
|
* Prints the error message, and exits
|
||||||
|
|||||||
+9
-4
@@ -87,17 +87,22 @@ LSTM::LSTM( Network *net, int hiddensize, bool returnSeq, std::string fname_weig
|
|||||||
checkCUDNN(cudnnCreateRNNDescriptor(&rnnDesc));
|
checkCUDNN(cudnnCreateRNNDescriptor(&rnnDesc));
|
||||||
|
|
||||||
#if CUDNN_MAJOR > 7
|
#if CUDNN_MAJOR > 7
|
||||||
checkCUDNN(cudnnSetRNNDescriptor_v6(net->cudnnHandle,
|
checkCUDNN(cudnnSetRNNDescriptor_v6(net->cudnnHandle,rnnDesc, stateSize, numLayers, dropoutDesc,
|
||||||
|
cudnnRNNInputMode_t::CUDNN_LINEAR_INPUT,
|
||||||
|
//(bidirectional ? cudnnDirectionMode_t::CUDNN_BIDIRECTIONAL : cudnnDirectionMode_t::CUDNN_UNIDIRECTIONAL),
|
||||||
|
cudnnDirectionMode_t::CUDNN_UNIDIRECTIONAL,
|
||||||
|
cudnnRNNMode_t::CUDNN_LSTM,
|
||||||
|
cudnnRNNAlgo_t::CUDNN_RNN_ALGO_STANDARD,
|
||||||
|
net->dataType));
|
||||||
#else
|
#else
|
||||||
checkCUDNN(cudnnSetRNNDescriptor(net->cudnnHandle,
|
checkCUDNN(cudnnSetRNNDescriptor(net->cudnnHandle,rnnDesc, stateSize, numLayers, dropoutDesc,
|
||||||
#endif
|
|
||||||
rnnDesc, stateSize, numLayers, dropoutDesc,
|
|
||||||
cudnnRNNInputMode_t::CUDNN_LINEAR_INPUT,
|
cudnnRNNInputMode_t::CUDNN_LINEAR_INPUT,
|
||||||
//(bidirectional ? cudnnDirectionMode_t::CUDNN_BIDIRECTIONAL : cudnnDirectionMode_t::CUDNN_UNIDIRECTIONAL),
|
//(bidirectional ? cudnnDirectionMode_t::CUDNN_BIDIRECTIONAL : cudnnDirectionMode_t::CUDNN_UNIDIRECTIONAL),
|
||||||
cudnnDirectionMode_t::CUDNN_UNIDIRECTIONAL,
|
cudnnDirectionMode_t::CUDNN_UNIDIRECTIONAL,
|
||||||
cudnnRNNMode_t::CUDNN_LSTM,
|
cudnnRNNMode_t::CUDNN_LSTM,
|
||||||
cudnnRNNAlgo_t::CUDNN_RNN_ALGO_STANDARD,
|
cudnnRNNAlgo_t::CUDNN_RNN_ALGO_STANDARD,
|
||||||
net->dataType));
|
net->dataType));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// Get temp space sizes
|
// Get temp space sizes
|
||||||
|
|||||||
+6
-1
@@ -170,6 +170,7 @@ void getMemUsage(double& vm_usage_kb, double& resident_set_kb){
|
|||||||
using std::ios_base;
|
using std::ios_base;
|
||||||
using std::ifstream;
|
using std::ifstream;
|
||||||
using std::string;
|
using std::string;
|
||||||
|
SYSTEM_INFO sysInfo;
|
||||||
|
|
||||||
vm_usage_kb = 0.0;
|
vm_usage_kb = 0.0;
|
||||||
resident_set_kb = 0.0;
|
resident_set_kb = 0.0;
|
||||||
@@ -191,8 +192,12 @@ void getMemUsage(double& vm_usage_kb, double& resident_set_kb){
|
|||||||
>> O >> itrealvalue >> starttime >> vsize >> rss;
|
>> O >> itrealvalue >> starttime >> vsize >> rss;
|
||||||
|
|
||||||
stat_stream.close();
|
stat_stream.close();
|
||||||
|
#ifdef __linux__
|
||||||
long page_size_kb = sysconf(_SC_PAGE_SIZE) / 1024; // in case x86-64 is configured to use 2MB pages
|
long page_size_kb = sysconf(_SC_PAGE_SIZE) / 1024; // in case x86-64 is configured to use 2MB pages
|
||||||
|
#elif _WIN32
|
||||||
|
long page_size_kb = sysInfo.dwPageSize/1024;
|
||||||
|
#endif
|
||||||
|
|
||||||
vm_usage_kb = vsize / 1024.0;
|
vm_usage_kb = vsize / 1024.0;
|
||||||
resident_set_kb = rss * page_size_kb;
|
resident_set_kb = rss * page_size_kb;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user