GPUMLib  0.2.2
GPU Machine Learning Library
SelectiveInputs.cu
1 /*
2  Noel Lopes is an Assistant Professor at the Polytechnic Institute of Guarda, Portugal
3  Copyright (C) 2009, 2010, 2011, 2012 Noel de Jesus Mendonša Lopes
4 
5  This file is part of GPUMLib.
6 
7  GPUMLib is free software: you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation, either version 3 of the License, or
10  (at your option) any later version.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 
21 #include "MBPkernels.h"
22 
23 #define SAMPLE blockIdx.x
24 
25 namespace GPUMLib {
26 
27 KERNEL FireSelectiveInputs(cudafloat * inputs, cudafloat * weights, cudafloat * bias, cudafloat * outputs, int numNeurons) {
28  for (int n = threadIdx.x; n < numNeurons; n += blockDim.x) {
29  int idx = SAMPLE * numNeurons + n;
30 
31  cudafloat o = inputs[idx];
32 
33  if (IsInfOrNaN(o)) {
34  o = CUDA_VALUE(0.0);
35  } else {
36  cudafloat w = weights[n];
37  cudafloat b = bias[n];
38 
39  if (w != CUDA_VALUE(0.0) || b != CUDA_VALUE(0.0)) { // input may have missing values
40  o = CUDA_TANH(o * w + b);
41  }
42  }
43 
44  outputs[idx] = o;
45  }
46 }
47 
48 }
#define CUDA_TANH
#define KERNEL
Defines the type of a kernel function.
#define CUDA_VALUE(X)
KERNEL FireSelectiveInputs(cudafloat *inputs, cudafloat *weights, cudafloat *bias, cudafloat *outputs, int numNeurons)
float cudafloat