/perf/kseta

To get this branch, use:
bzr branch http://darksoft.org/webbzr/perf/kseta

« back to all changes in this revision

Viewing changes to sources/dp/dp-opencl3.cl

  • Committer: Suren A. Chilingaryan
  • Date: 2013-10-08 23:53:50 UTC
  • Revision ID: csa@dside.dyndns.org-20131008235350-hsu8oukzkh05gtcm
Add tutorials

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
__kernel void multiply(__global float *res, __global float *a, __global float *b, unsigned long local_size, __global float *scratch, __local float *shmem) {
2
 
    int i;
3
 
    float sum = 0;
4
 
 
5
 
    int threads = get_global_size(0);
6
 
    int groups = get_num_groups(0);
7
 
    int group = get_group_id(0);
8
 
    int pos = get_global_id(0);
9
 
    int tid = get_local_id(0);
10
 
 
11
 
    for(i = 0; i < local_size; i++) {
12
 
        sum  += i;//a[i * threads + pos] * b[i * threads + pos];
13
 
    }
14
 
 
15
 
    shmem[tid] = sum;
16
 
 
17
 
    barrier(CLK_LOCAL_MEM_FENCE);
18
 
 
19
 
    for(i = get_local_size(0)/2; i>0; i >>= 1) {
20
 
        if (tid < i) shmem[tid] += shmem[tid + i];
21
 
        barrier(CLK_LOCAL_MEM_FENCE);
22
 
    }
23
 
 
24
 
    if (tid == 0) { 
25
 
        scratch[group] = shmem[0];
26
 
    }
27
 
 
28
 
    barrier(CLK_GLOBAL_MEM_FENCE);
29
 
 
30
 
    if (pos == 0) {
31
 
        sum = 0;
32
 
        for (i = 0; i < groups; i++)
33
 
            sum += scratch[i];
34
 
 
35
 
        *res = sum;
36
 
    }
37
 
}