darknet  v3
avgpool_layer_kernels.cu
Go to the documentation of this file.
1 #include "cuda_runtime.h"
2 #include "curand.h"
3 #include "cublas_v2.h"
4 
5 extern "C" {
6 #include "avgpool_layer.h"
7 #include "cuda.h"
8 }
9 
10 __global__ void forward_avgpool_layer_kernel(int n, int w, int h, int c, float *input, float *output)
11 {
12  int id = (blockIdx.x + blockIdx.y*gridDim.x) * blockDim.x + threadIdx.x;
13  if(id >= n) return;
14 
15  int k = id % c;
16  id /= c;
17  int b = id;
18 
19  int i;
20  int out_index = (k + c*b);
21  output[out_index] = 0;
22  for(i = 0; i < w*h; ++i){
23  int in_index = i + h*w*(k + b*c);
24  output[out_index] += input[in_index];
25  }
26  output[out_index] /= w*h;
27 }
28 
29 __global__ void backward_avgpool_layer_kernel(int n, int w, int h, int c, float *in_delta, float *out_delta)
30 {
31  int id = (blockIdx.x + blockIdx.y*gridDim.x) * blockDim.x + threadIdx.x;
32  if(id >= n) return;
33 
34  int k = id % c;
35  id /= c;
36  int b = id;
37 
38  int i;
39  int out_index = (k + c*b);
40  for(i = 0; i < w*h; ++i){
41  int in_index = i + h*w*(k + b*c);
42  in_delta[in_index] += out_delta[out_index] / (w*h);
43  }
44 }
45 
47 {
48  size_t n = layer.c*layer.batch;
49 
50  forward_avgpool_layer_kernel<<<cuda_gridsize(n), BLOCK>>>(n, layer.w, layer.h, layer.c, net.input_gpu, layer.output_gpu);
51  check_error(cudaPeekAtLastError());
52 }
53 
55 {
56  size_t n = layer.c*layer.batch;
57 
58  backward_avgpool_layer_kernel<<<cuda_gridsize(n), BLOCK>>>(n, layer.w, layer.h, layer.c, net.delta_gpu, layer.delta_gpu);
59  check_error(cudaPeekAtLastError());
60 }
61 
int w
Definition: darknet.h:140
__global__ void forward_avgpool_layer_kernel(int n, int w, int h, int c, float *input, float *output)
int h
Definition: darknet.h:140
int batch
Definition: darknet.h:131
__global__ void backward_avgpool_layer_kernel(int n, int w, int h, int c, float *in_delta, float *out_delta)
int c
Definition: darknet.h:140
void forward_avgpool_layer_gpu(avgpool_layer layer, network net)
void backward_avgpool_layer_gpu(avgpool_layer layer, network net)
Definition: darknet.h:119