From 321994df2b3d0f51e4242b4aa303cb1b01e5b4a6 Mon Sep 17 00:00:00 2001 From: augustin64 Date: Sat, 13 May 2023 22:42:13 +0200 Subject: [PATCH] Fix cuda compilation --- src/cnn/cnn.c | 1 + src/cnn/convolution.c | 7 ++++++- src/cnn/convolution.cu | 7 ++++++- src/cnn/include/convolution.h | 6 ++++++ src/cnn/include/make.h | 4 +++- src/cnn/make.c | 5 ++++- src/cnn/make.cu | 5 ++++- 7 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/cnn/cnn.c b/src/cnn/cnn.c index 90de023..1493fa3 100644 --- a/src/cnn/cnn.c +++ b/src/cnn/cnn.c @@ -9,6 +9,7 @@ #include "../common/include/utils.h" #include "include/backpropagation.h" #include "include/initialisation.h" +#include "include/convolution.h" #include "include/function.h" #include "include/creation.h" #include "include/update.h" diff --git a/src/cnn/convolution.c b/src/cnn/convolution.c index 653f11a..be96644 100644 --- a/src/cnn/convolution.c +++ b/src/cnn/convolution.c @@ -7,7 +7,9 @@ #include "include/config.h" - +#ifdef __CUDACC__ +__host__ __device__ +#endif int convolution_not_outside(int x, int y, int lower_bound, int upper_bound) { return !(x < lower_bound || y < lower_bound || x >= upper_bound || y>= upper_bound); } @@ -86,6 +88,9 @@ void make_convolution_device(Kernel_cnn* kernel, float*** input, float*** output } #endif +#ifdef __CUDACC__ +extern "C" +#endif void make_convolution(Kernel_cnn* kernel, float*** input, float*** output, int output_width, int stride, int padding) { #ifndef __CUDACC__ make_convolution_cpu(kernel, input, output, output_width, stride, padding); diff --git a/src/cnn/convolution.cu b/src/cnn/convolution.cu index 938276f..b37afa9 100644 --- a/src/cnn/convolution.cu +++ b/src/cnn/convolution.cu @@ -7,7 +7,9 @@ #include "include/config.h" - +#ifdef __CUDACC__ +__host__ __device__ +#endif int convolution_not_outside(int x, int y, int lower_bound, int upper_bound) { // On renvoie true si et seulement si _ et _: // lower_bound <= x < upper_bound @@ -90,6 +92,9 @@ void make_convolution_device(Kernel_cnn* kernel, float*** input, float*** output } #endif +#ifdef __CUDACC__ +extern "C" +#endif void make_convolution(Kernel_cnn* kernel, float*** input, float*** output, int output_width, int stride, int padding) { #ifndef __CUDACC__ make_convolution_cpu(kernel, input, output, output_width, stride, padding); diff --git a/src/cnn/include/convolution.h b/src/cnn/include/convolution.h index dde60fa..ed90309 100644 --- a/src/cnn/include/convolution.h +++ b/src/cnn/include/convolution.h @@ -1,5 +1,8 @@ #include "struct.h" +#ifdef __CUDACC__ +__host__ __device__ +#endif /* On renvoie true si et seulement si _ et _: lower_bound <= x < upper_bound @@ -24,6 +27,9 @@ __global__ void make_convolution_kernel(int k_size, int columns, int rows, float void make_convolution_device(Kernel_cnn* kernel, float*** input, float*** output, int output_width, int stride, int padding); #endif +#ifdef __CUDACC__ +extern "C" +#endif /* * DĂ©termine si la convolution peut-ĂȘtre faite sur la carte graphique au moment de la compilation */ diff --git a/src/cnn/include/make.h b/src/cnn/include/make.h index 2919029..e878fda 100644 --- a/src/cnn/include/make.h +++ b/src/cnn/include/make.h @@ -3,8 +3,10 @@ #ifndef DEF_MAKE_H #define DEF_MAKE_H +#ifdef __CUDACC__ +__host__ __device__ +#endif /* -* * On renvoie true si et seulement si _ et _: * lower_bound <= y < upper_bound * lower_bound <= x < upper_bound diff --git a/src/cnn/make.c b/src/cnn/make.c index 57c973a..4dfc55f 100644 --- a/src/cnn/make.c +++ b/src/cnn/make.c @@ -10,6 +10,9 @@ #include "include/config.h" +#ifdef __CUDACC__ +__host__ __device__ +#endif int pooling_not_outside(int x, int y, int lower_bound, int upper_bound) { return !(x < lower_bound || y < lower_bound || x >= upper_bound || y>= upper_bound); } @@ -136,7 +139,7 @@ void make_max_pooling_device(float*** input, float*** output, int size, int outp dim3 gridSize(i_div_up(output_depth, BLOCKSIZE_x), i_div_up(output_width, BLOCKSIZE_y), i_div_up(output_width, BLOCKSIZE_z)); dim3 blockSize(BLOCKSIZE_x, BLOCKSIZE_y, BLOCKSIZE_z); - make_max_pooling_kernel<<>>(input, output, size, output_depth, output_width, stride, int padding); + make_max_pooling_kernel<<>>(input, output, size, output_depth, output_width, stride, padding); gpuErrchk( cudaPeekAtLastError() ); gpuErrchk( cudaDeviceSynchronize() ); } diff --git a/src/cnn/make.cu b/src/cnn/make.cu index 57c973a..4dfc55f 100644 --- a/src/cnn/make.cu +++ b/src/cnn/make.cu @@ -10,6 +10,9 @@ #include "include/config.h" +#ifdef __CUDACC__ +__host__ __device__ +#endif int pooling_not_outside(int x, int y, int lower_bound, int upper_bound) { return !(x < lower_bound || y < lower_bound || x >= upper_bound || y>= upper_bound); } @@ -136,7 +139,7 @@ void make_max_pooling_device(float*** input, float*** output, int size, int outp dim3 gridSize(i_div_up(output_depth, BLOCKSIZE_x), i_div_up(output_width, BLOCKSIZE_y), i_div_up(output_width, BLOCKSIZE_z)); dim3 blockSize(BLOCKSIZE_x, BLOCKSIZE_y, BLOCKSIZE_z); - make_max_pooling_kernel<<>>(input, output, size, output_depth, output_width, stride, int padding); + make_max_pooling_kernel<<>>(input, output, size, output_depth, output_width, stride, padding); gpuErrchk( cudaPeekAtLastError() ); gpuErrchk( cudaDeviceSynchronize() ); }