Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
18e2d8e
cmake files installed, lib builds on Linux
Jan 9, 2015
76ae278
added build instructions for Linux and Mac
Jan 9, 2015
de24d01
fixed build on OSX, need to validate
Jan 12, 2015
3c29fb5
added libcuda dependency
Apr 7, 2015
a3f71ef
pulled in updates from master
Apr 14, 2015
f5f2caf
added documentation on how to build under Windows using Nsight and ho…
Apr 14, 2015
865e632
Merge branch 'adding_cmake' of https://github.com/psteinb/FourierConv…
Apr 14, 2015
f487ef8
* added unit tests to package (using boot unified test framework)
Apr 23, 2015
3443bea
added new file that contains padding utils, completed testing suite f…
Apr 23, 2015
9486df3
added more information on using the tests to the README.md
Apr 23, 2015
5836a2d
fixed cmake bugs for Win32 build, Win32 with Visual Studio 2013 runs …
Apr 23, 2015
debbdcb
defined location of cuda.lib explicitely when generating VS 2013 solu…
Apr 23, 2015
35dc7ee
commented unused code out that generated warnings
Apr 23, 2015
efb44ba
resolved merge conflict
Apr 23, 2015
fb428a8
large commit, added static library on windows to see if the tests wor…
Apr 24, 2015
9afae33
setup cmake build so that it works on Windows 7
May 5, 2015
22b542b
added VS 64bit support and safe-guard against 32bit builds with cuda …
May 5, 2015
7d00b4e
added cmake autogenerated file, swapped preprocessor macros
May 5, 2015
641d998
* moved declarations of standardCUDAfunctions.h to convolution3Dfft.h…
May 5, 2015
21ad39c
link failure still prevailing, :(
May 5, 2015
1474952
tests compile and run under windows with VS
May 11, 2015
7dcf38c
mingled with the release type, needs to be given on windows for visua…
May 11, 2015
1a9529b
replaced relative path in install statement by INSTALL_ variable, add…
May 11, 2015
03adcef
added code to use dynamically linked libraries if static boost utf li…
May 11, 2015
08842c9
merged in master
May 12, 2015
074d409
made find BOOST quiet in root CMakeLists.txt, so people are not panic…
May 22, 2015
10981f4
made root CMakeLists.txt file coherent in output, dropped WARNING fla…
May 22, 2015
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
166 changes: 166 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
# cmake compatibility issues
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

# project name
PROJECT(FourierConvolutionCUDALib CXX)
if(NOT(${CMAKE_VERSION} VERSION_LESS "3.0.0"))
cmake_policy(SET CMP0042 NEW)
endif()

if(${CMAKE_VERSION} VERSION_GREATER "3.1")
cmake_policy(SET CMP0054 NEW)
endif()


# version number
SET (FOURIERCONVOLUTIONCUDALIB_NAME "CUDA FOURIER CONVOLUTION LIBRARY")
SET (FOURIERCONVOLUTIONCUDALIB_CODENAME "${PROJECT_NAME}")
SET (FOURIERCONVOLUTIONCUDALIB_COPYRIGHT_YEARS "2013")
SET (FOURIERCONVOLUTIONCUDALIB_VERSION_MAJOR 2)
SET (FOURIERCONVOLUTIONCUDALIB_VERSION_MINOR 5)
SET (FOURIERCONVOLUTIONCUDALIB_VERSION_PATCH 0)
SET (FOURIERCONVOLUTIONCUDALIB_VERSION_TYPE SNAPSHOT)
SET (FOURIERCONVOLUTIONCUDALIB_VERSION_STRING "${FOURIERCONVOLUTIONCUDALIB_VERSION_MAJOR}.${FOURIERCONVOLUTIONCUDALIB_VERSION_MINOR}.${FOURIERCONVOLUTIONCUDALIB_VERSION_PATCH}-${CMAKE_BUILD_TYPE}")
SET (FOURIERCONVOLUTIONCUDALIB_VERSION "${FOURIERCONVOLUTIONCUDALIB_VERSION_MAJOR}.${FOURIERCONVOLUTIONCUDALIB_VERSION_MINOR}.${FOURIERCONVOLUTIONCUDALIB_VERSION_PATCH}")
SET (FOURIERCONVOLUTIONCUDALIB_VENDOR_ID "mpi cbg")
SET (FOURIERCONVOLUTIONCUDALIB_VENDOR_NAME "Max Planck Institute of Molecular Cell Biology and Genetics ")
SET (FOURIERCONVOLUTIONCUDALIB_VENDOR_URL "www.mpi-cbg.de")
SET (FOURIERCONVOLUTIONCUDALIB_ID "${FOURIERCONVOLUTIONCUDALIB_VENDOR_ID}.${PROJECT_NAME}")

# trying to setup paths so this package can be picked up
set(INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries")
set(INSTALL_INCLUDE_DIR include CACHE PATH "Installation directory for header files")
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING
"Choose the type of build, options are: Debug Release
RelWithDebInfo MinSizeRel."
FORCE)
endif(NOT CMAKE_BUILD_TYPE)
MESSAGE(">> Setting up ${CMAKE_BUILD_TYPE} build")

# shared path is architecture independent for now, TODO extend this to lib/bin/include
IF(UNIX)
IF(APPLE)
set(INSTALL_SHARE_DIR ${PROJECT_NAME}.app/Contents/Resources/ CACHE PATH "Installation directory for shared files")
#the following was tested with OSX 10.8.5 and Xcode 5.0.2
#seems to me that under apple the rpath is not stripped automatically when doing the install
#under linux it is
SET(CMAKE_SKIP_RPATH ON)
ELSE(APPLE)
set(INSTALL_SHARE_DIR lib/CMake/${PROJECT_NAME} CACHE PATH "Installation directory for shared files")
ENDIF(APPLE)
ELSE(UNIX)
IF(WIN32 AND NOT CYGWIN)
set(INSTALL_SHARE_DIR CMake CACHE PATH "Installation directory for shared files")
ELSE()
MESSAGE(FATAL_ERROR ">> UNKNOWN ARCHITECTURE .. unable to set share dir")
ENDIF()
ENDIF(UNIX)

# Make relative paths absolute (needed later on)
foreach(p LIB INCLUDE SHARE)
set(var INSTALL_${p}_DIR)
if(NOT IS_ABSOLUTE "${${var}}")
set(${var} "${CMAKE_INSTALL_PREFIX}/${${var}}")
endif()
endforeach()

#########################################################################################################
## CUDA related
# project options
OPTION(INCLUDE_CUDA "Set to OFF to not search for CUDA" ON)
# find project dependencies
# find cuda
IF(INCLUDE_CUDA)
FIND_PACKAGE(CUDA)
IF(CUDA_FOUND)
SET(CUDA_VERBOSE_BUILD ON)

set(CUDA_NVCC_FLAGS -gencode arch=compute_10,code=sm_10;-gencode arch=compute_20,code=sm_20)
SET(CUDA_HOST_COMPILER "${CMAKE_CXX_COMPILER}")
IF(APPLE)
IF(${CUDA_HOST_COMPILER} MATCHES "/usr/bin/.*cc" OR EXISTS "/usr/bin/llvm-g++")
MESSAGE(">> adapting CUDA_HOST_COMPILER (${CUDA_HOST_COMPILER}) to match a CUDA supported compiler (/usr/bin/llvm-g++-4.2)")
SET(CUDA_HOST_COMPILER "/usr/bin/llvm-g++")
SET(CMAKE_CXX_COMPILER ${CUDA_HOST_COMPILER})
SET(CMAKE_C_COMPILER "/usr/bin/llvm-gcc")
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -stdlib=libstdc++")

SET(CUDA_PROPAGATE_HOST_FLAGS OFF)
ELSE()
MESSAGE(WARNING ">> unknown CUDA_HOST_COMPILER (${CUDA_HOST_COMPILER}) or /usr/bin/llvm-g++-4.2 does not exist, cuda host compiler remains set to default")
ENDIF()
ENDIF(APPLE)
IF("${CUDA_VERSION}" VERSION_GREATER "5" OR "${CUDA_VERSION}" VERSION_EQUAL "5")
MESSAGE(">> compiling for Compute Capability 2.x, 3.0 and 3.5 only ")
set(CUDA_NVCC_FLAGS "-gencode arch=compute_20,code=sm_20;-gencode arch=compute_30,code=sm_30;-gencode arch=compute_35,code=sm_35")
ELSE()
MESSAGE(">> CUDA less than version 5.0 detected, compiling for Compute Capability 2.x only ")
set(CUDA_NVCC_FLAGS "-gencode arch=compute_20,code=sm_20;-gencode arch=compute_10,code=sm_10")
ENDIF()
set(CUDA_NVCC_FLAGS_RELEASE ${CUDA_NVCC_FLAGS_RELEASE};-O2;--use_fast_math)
set(CUDA_NVCC_FLAGS_DEBUG ${CUDA_NVCC_FLAGS_DEBUG};-g;-G)
ELSE(CUDA_FOUND)
MESSAGE(FATAL_ERROR ">> CUDA not found. Exiting ...")
ENDIF(CUDA_FOUND)

IF(WIN32)
IF(${CUDA_VERSION} VERSION_GREATER "7" OR ${CUDA_VERSION} VERSION_EQUAL "7")
IF(${CMAKE_SIZEOF_VOID_P} EQUAL 4)
message(FATAL_ERROR ">> CUDA version 7 or higher does not support 32bit builds on Windows (found CMAKE_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})")
ELSE()
message(">> [Windows] 64bit build detected, size of void pointer ${CMAKE_SIZEOF_VOID_P}")
ENDIF()

ENDIF()
SET(CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE OFF)

ENDIF(WIN32)
ENDIF(INCLUDE_CUDA)


# add subdirectories
ADD_SUBDIRECTORY(src)

FIND_PACKAGE (Boost 1.42 COMPONENTS system filesystem unit_test_framework thread QUIET)
IF(Boost_FOUND)
ADD_SUBDIRECTORY(tests)
enable_testing()
include("CTestLists.txt")
ELSE()
MESSAGE(">> Boost libraries not found, skipping building setting up tests")
ENDIF()

# Export the package for use from the build-tree
# (this registers the build-tree with a global CMake-registry)
# v = binary v = library

export(PACKAGE ${PROJECT_NAME})

# Create the fourierconvolutioncudalib-config.cmake and fourierconvolutioncudalib-config-version files
file(RELATIVE_PATH REL_INCLUDE_DIR "${INSTALL_SHARE_DIR}"
"${INSTALL_INCLUDE_DIR}")
# ... for the build tree
set(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}" "${PROJECT_BINARY_DIR}")
configure_file(fourierconvolutioncudalib-config.cmake.in
"${PROJECT_BINARY_DIR}/fourierconvolutioncudalib-config.cmake" @ONLY)
# ... for the install tree
set(CONF_INCLUDE_DIRS "\${FOURIERCONVOLUTIONCUDALIB}/${REL_INCLUDE_DIR}")
configure_file(fourierconvolutioncudalib-config.cmake.in
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/fourierconvolutioncudalib-config.cmake" @ONLY)
# ... for both
configure_file(fourierconvolutioncudalib-config-version.cmake.in
"${PROJECT_BINARY_DIR}/fourierconvolutioncudalib-config-version.cmake" @ONLY)

# Install the fourierconvolutioncudalib-config.cmake and fourierconvolutioncudalib-config-version.cmake
install(FILES
"${PROJECT_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/fourierconvolutioncudalib-config.cmake"
"${PROJECT_BINARY_DIR}/fourierconvolutioncudalib-config-version.cmake"
DESTINATION "${INSTALL_SHARE_DIR}" COMPONENT dev)

# Install the export set for use with the install-tree
install(EXPORT fourierconvolutioncudalib-targets
DESTINATION "${INSTALL_SHARE_DIR}" COMPONENT dev)



10 changes: 10 additions & 0 deletions CTestLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# include(BoostTestTargets)
# add_boost_test(Independent
# SOURCES
# test_Independent.cpp
# TESTS
# Independent_suite)


add_test(NAME gpu_convolve COMMAND test_gpu_convolve)

49 changes: 48 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,58 @@ FourierConvolutionCUDALib

Implementation of 3d non-separable convolution using CUDA & FFT Convolution, originally implemented by Fernando Amat for our Nature Methods paper (http://www.nature.com/nmeth/journal/v11/n6/full/nmeth.2929.html).

To compile it under Linux/Mac/Windows I suggest NSight. Clone this repository into your cuda-workspace directory. Then make a new shared library project with the same name as the directory.
Windows Build Instructions
--------------------------

To compile it under Windows, NSight available from the CUDA SDK is suggested. Clone this repository into your cuda-workspace directory. Then make a new shared library project with the same name as the directory.

Under Project > Properties > Build > Settings > Tool Settings > NVCC Linker add -lcufft and -lcuda to the command line pattern so that it looks like this:

${COMMAND} ${FLAGS} -lcufft -lcuda ${OUTPUT_FLAG} ${OUTPUT_PREFIX} ${OUTPUT} ${INPUTS}

Now build the .so/.dll library and put it into the Fiji directory.

The cmake build system is also supported under Windows 7 64bit now!

```bash
$ cd X:\path\to\repo
$ mkdir build
$ cd build
$ cmake.exe -G "Visual Studio 12 2013 Win64" -DCMAKE_INSTALL_PREFIX=C:/msys64/home/steinbac/ftmp -DBOOST_LIBRARYDIR=C:/boost_1_58_0/msvc-12-x86_64/lib64-msvc-12.0 -DBOOST_ROOT=C:/boost_1_58_0/msvc-12-x86_64 ..
$ cmake.exe --build . --target ALL_BUILD --config Release
$ ctest.exe -C Release #(optional) the above builds in Release mode
$ cmake.exe --build . --target install --config Release
```

OSX/Linux Build Instructions
----------------------------

First, make sure that CUDA must be available through `PATH`, `LD_LIBRARY_PATH` or equivalent. The build system is based on cmake, so please install this at any version higher or equal than 2.8.

```bash
$ cd /path/to/repo
$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/directory/of/your/choice .. #default is /usr/lib/ or /usr/lib64 depending on your OS
$ make
$ ctest #(optional) in case you'd like to make sure the library does what it should on your system
$ make install
```


Dependencies
------------

The unit tests that come with the library require boost (version 1.42 or higher) to be available to the cmake build system. If cmake is unable to detect them, try:

```
$ cmake -DCMAKE_INSTALL_PREFIX=/directory/of/your/choice -DBOOST_ROOT=/path/to/boost/root .. #default is /usr/lib/ or /usr/lib64 depending on your OS
```

Here, ```/path/to/boost/root``` should contain the boost libraries and the boost headers.


How to get Help
===============

In case something does not work, do not hesitate to open a ticket on our github page: https://github.com/StephanPreibisch/FourierConvolutionCUDALib
11 changes: 11 additions & 0 deletions fourierconvolutioncudalib-config-version.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
set(PACKAGE_VERSION "@FOURIERCONVOLUTIONCUDALIB_VERSION@")

# Check whether the requested PACKAGE_FIND_VERSION is compatible
if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}")
set(PACKAGE_VERSION_COMPATIBLE FALSE)
else()
set(PACKAGE_VERSION_COMPATIBLE TRUE)
if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}")
set(PACKAGE_VERSION_EXACT TRUE)
endif()
endif()
33 changes: 33 additions & 0 deletions fourierconvolutioncudalib-config.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# - Config file for the FooBar package
# It defines the following variables
# FOURIERCONVOLUTIONCUDALIB_INCLUDE_DIRS - include directories for fourierconvolutioncudalib
# FOURIERCONVOLUTIONCUDALIB_LIBRARIES - libraries to link against
# FOURIERCONVOLUTIONCUDALIB_EXECUTABLE - the bar executable

# Compute paths
get_filename_component(FOURIERCONVOLUTIONCUDALIB_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)


# Our library dependencies (contains definitions for IMPORTED targets)
include("${FOURIERCONVOLUTIONCUDALIB_CMAKE_DIR}/fourierconvolutioncudalib-targets.cmake")

# These are IMPORTED targets created by fourierconvolutioncudalib-targets.cmake
IF(UNIX)
IF(APPLE)
get_filename_component(FOURIERCONVOLUTIONCUDALIB_INCLUDE_DIRS "${FOURIERCONVOLUTIONCUDALIB_CMAKE_DIR}/../../include" ABSOLUTE)
get_filename_component(FOURIERCONVOLUTIONCUDALIB_LIB_DIRS "${FOURIERCONVOLUTIONCUDALIB_CMAKE_DIR}/../../lib" ABSOLUTE)
get_filename_component(FOURIERCONVOLUTIONCUDALIB_BIN_DIRS "${FOURIERCONVOLUTIONCUDALIB_CMAKE_DIR}/../../bin" ABSOLUTE)
ELSE(APPLE)
get_filename_component(FOURIERCONVOLUTIONCUDALIB_INCLUDE_DIRS "${FOURIERCONVOLUTIONCUDALIB_CMAKE_DIR}/../../../include" ABSOLUTE)
get_filename_component(FOURIERCONVOLUTIONCUDALIB_LIB_DIRS "${FOURIERCONVOLUTIONCUDALIB_CMAKE_DIR}/../../../lib" ABSOLUTE)
get_filename_component(FOURIERCONVOLUTIONCUDALIB_BIN_DIRS "${FOURIERCONVOLUTIONCUDALIB_CMAKE_DIR}/../../../bin" ABSOLUTE)
ENDIF(APPLE)
ENDIF(UNIX)

set(FOURIERCONVOLUTIONCUDALIB_LIBRARIES "${FOURIERCONVOLUTIONCUDALIB_LIB_DIRS}/libFourierConvolutionCUDALib.so")

set(FOURIERCONVOLUTIONCUDALIB_VERSION "@FOURIERCONVOLUTIONCUDALIB_VERSION@")
set(FOURIERCONVOLUTIONCUDALIB_VERSION_MAJOR "@FOURIERCONVOLUTIONCUDALIB_VERSION_MAJOR@")
set(FOURIERCONVOLUTIONCUDALIB_VERSION_MINOR "@FOURIERCONVOLUTIONCUDALIB_VERSION_MINOR@")
set(FOURIERCONVOLUTIONCUDALIB_VERSION_PATCH "@FOURIERCONVOLUTIONCUDALIB_VERSION_PATCH@")
set(FOURIERCONVOLUTIONCUDALIB_BUILD_TYPE "@CMAKE_BUILD_TYPE@")
39 changes: 39 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# include directories
# src directory
INCLUDE_DIRECTORIES(.)

# build and link
FIND_PACKAGE(CUDA QUIET)
CUDA_ADD_LIBRARY(${PROJECT_NAME} convolution3Dfft.cu standardCUDAfunctions.cu SHARED)
CUDA_ADD_LIBRARY(${PROJECT_NAME}_static convolution3Dfft.cu standardCUDAfunctions.cu)
CUDA_ADD_CUFFT_TO_TARGET(${PROJECT_NAME})
CUDA_ADD_CUFFT_TO_TARGET(${PROJECT_NAME}_static)

IF(WIN32)
IF(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
include (GenerateExportHeader)
GENERATE_EXPORT_HEADER( ${PROJECT_NAME}
BASE_NAME ${PROJECT_NAME}
EXPORT_MACRO_NAME ${PROJECT_NAME}_EXPORT
EXPORT_FILE_NAME ${PROJECT_NAME}_Export.h
STATIC_DEFINE ${PROJECT_NAME}_BUILT_AS_STATIC
)
set_target_properties(${PROJECT_NAME}_static PROPERTIES COMPILE_FLAGS "-D${PROJECT_NAME}_BUILT_AS_STATIC")
INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR}/src)
ENDIF()
ENDIF()

TARGET_LINK_LIBRARIES(${PROJECT_NAME}_static ${CUDA_CUDA_LIBRARY})
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${CUDA_CUDA_LIBRARY})

SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER "${PROJECT_SOURCE_DIR}/src/convolution3Dfft.h;${PROJECT_NAME}_Export.h")
SET_TARGET_PROPERTIES(${PROJECT_NAME}_static PROPERTIES PUBLIC_HEADER "${PROJECT_SOURCE_DIR}/src/convolution3Dfft.h;${PROJECT_NAME}_Export.h")

INSTALL(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_static
EXPORT fourierconvolutioncudalib-targets
LIBRARY DESTINATION ${INSTALL_LIB_DIR}
ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
PUBLIC_HEADER DESTINATION ${INSTALL_INCLUDE_DIR}
)


41 changes: 41 additions & 0 deletions src/FourierConvolutionCUDALib_Export.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@

#ifndef FourierConvolutionCUDALib_EXPORT_H
#define FourierConvolutionCUDALib_EXPORT_H

#ifdef FourierConvolutionCUDALib_BUILT_AS_STATIC
# define FourierConvolutionCUDALib_EXPORT
# define FOURIERCONVOLUTIONCUDALIB_NO_EXPORT
#else
# ifndef FourierConvolutionCUDALib_EXPORT
# ifdef FourierConvolutionCUDALib_EXPORTS
/* We are building this library */
# define FourierConvolutionCUDALib_EXPORT __declspec(dllexport)
# else
/* We are using this library */
# define FourierConvolutionCUDALib_EXPORT __declspec(dllimport)
# endif
# endif

# ifndef FOURIERCONVOLUTIONCUDALIB_NO_EXPORT
# define FOURIERCONVOLUTIONCUDALIB_NO_EXPORT
# endif
#endif

#ifndef FOURIERCONVOLUTIONCUDALIB_DEPRECATED
# define FOURIERCONVOLUTIONCUDALIB_DEPRECATED __declspec(deprecated)
#endif

#ifndef FOURIERCONVOLUTIONCUDALIB_DEPRECATED_EXPORT
# define FOURIERCONVOLUTIONCUDALIB_DEPRECATED_EXPORT FourierConvolutionCUDALib_EXPORT FOURIERCONVOLUTIONCUDALIB_DEPRECATED
#endif

#ifndef FOURIERCONVOLUTIONCUDALIB_DEPRECATED_NO_EXPORT
# define FOURIERCONVOLUTIONCUDALIB_DEPRECATED_NO_EXPORT FOURIERCONVOLUTIONCUDALIB_NO_EXPORT FOURIERCONVOLUTIONCUDALIB_DEPRECATED
#endif

#define DEFINE_NO_DEPRECATED 0
#if DEFINE_NO_DEPRECATED
# define FOURIERCONVOLUTIONCUDALIB_NO_DEPRECATED
#endif

#endif
Loading