This repository has been archived on 2026-02-22. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
tkDNN/src/kernels/activation_elu.cu
T
2017-06-28 14:04:43 +00:00

28 lines
730 B
Plaintext

#include "kernels.h"
/**
Exponential Linear Unit compute kernel
it does the following operation for each x input element:
x < 0 : y = e^(x) -1
x > 0 : y = x
*/
__global__
void activation_elu(value_type *input, value_type *output, int size) {
int i = threadIdx.x*(blockIdx.x +1);
if(i<size)
output[i] = (input[i]>0)*input[i] + (input[i]<0)*(expf(input[i]) -1);
// the if x > or < is condensed in one operation for better threads flow
}
/**
ELU activation function
*/
void activationELUForward(value_type* srcData, value_type* dstData, int size)
{
activation_elu<<<(size+255)/256, 256>>>(srcData, dstData, size);
checkCuda( cudaDeviceSynchronize() );
}