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);
| }
| }
|
|