Joseph Redmon
2014-12-13 90d354a2a5a3ba76071337d8794cfc00f7bc5fab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
__kernel void forward(int n, __global float *input, __global float *output)
{
    int b = get_global_id(0);
 
    int i;
    float sum = 0;
    float largest = -INFINITY;
    for(i = 0; i < n; ++i){
        int val = input[i+b*n];
        largest = (val>largest) ? val : largest;
    }
    for(i = 0; i < n; ++i){
        sum += exp(input[i+b*n]-largest);
    }
    sum = (sum != 0) ? largest+log(sum) : largest-100;
    for(i = 0; i < n; ++i){
        output[i+b*n] = exp(input[i+b*n]-sum);
    }
}