annotate fft_fixstart/fft.cl @ 12:a664602e1819 default tip

add sample
author Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
date Tue, 12 Feb 2013 17:13:26 +0900
parents f3cfea46e585
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
1 #define PI 3.14159265358979323846
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
2 #define PI_2 1.57079632679489661923
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
3
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
4 __kernel void spinFact(__global float2* w, int n)
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
5 {
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
6 unsigned int i = get_global_id(0);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
7
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
8 float2 angle = (float2)(2*i*PI/(float)n,(2*i*PI/(float)n)+PI_2);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
9 w[i] = cos(angle);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
10 }
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
11
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
12 __kernel void bitReverse(__global float2 *dst, __global float2 *src, int m, int n)
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
13 {
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
14 unsigned int gid = get_global_id(0);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
15 unsigned int nid = get_global_id(1);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
16
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
17 unsigned int j = gid;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
18 j = (j & 0x55555555) << 1 | (j & 0xAAAAAAAA) >> 1;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
19 j = (j & 0x33333333) << 2 | (j & 0xCCCCCCCC) >> 2;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
20 j = (j & 0x0F0F0F0F) << 4 | (j & 0xF0F0F0F0) >> 4;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
21 j = (j & 0x00FF00FF) << 8 | (j & 0xFF00FF00) >> 8;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
22 j = (j & 0x0000FFFF) << 16 | (j & 0xFFFF0000) >> 16;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
23
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
24 j >>= (32-m);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
25
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
26 dst[nid*n+j] = src[nid*n+gid];
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
27 }
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
28
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
29 __kernel void norm(__global float2 *x, int n)
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
30 {
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
31 unsigned int gid = get_global_id(0);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
32 unsigned int nid = get_global_id(1);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
33
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
34 x[nid*n+gid] = x[nid*n+gid] / (float2)((float)n, (float)n);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
35 }
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
36
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
37 __kernel void butterfly(__global float2 *x, __global float2* w, int m, int n, int iter, uint flag)
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
38 {
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
39 unsigned int gid = get_global_id(0);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
40 unsigned int nid = get_global_id(1);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
41
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
42 int butterflySize = 1 << (iter-1);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
43 int butterflyGrpDist = 1 << iter;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
44 int butterflyGrpNum = n >> iter;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
45 int butterflyGrpBase = (gid >> (iter-1))*(butterflyGrpDist);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
46 int butterflyGrpOffset = gid & (butterflySize-1);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
47
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
48 int a = nid * n + butterflyGrpBase + butterflyGrpOffset;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
49 int b = a + butterflySize;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
50
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
51 int l = butterflyGrpNum * butterflyGrpOffset;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
52
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
53 float2 xa, xb, xbxx, xbyy, wab, wayx, wbyx, resa, resb;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
54
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
55 xa = x[a];
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
56 xb = x[b];
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
57 xbxx = xb.xx;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
58 xbyy = xb.yy;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
59
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
60 wab = as_float2(as_uint2(w[l]) ^ (uint2)(0x0, flag));
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
61 wayx = as_float2(as_uint2(wab.yx) ^ (uint2)(0x80000000, 0x0));
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
62 wbyx = as_float2(as_uint2(wab.yx) ^ (uint2)(0x0, 0x80000000));
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
63
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
64 resa = xa + xbxx*wab + xbyy*wayx;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
65 resb = xa - xbxx*wab + xbyy*wbyx;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
66
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
67 x[a] = resa;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
68 x[b] = resb;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
69 }
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
70
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
71 __kernel void transpose(__global float2 *dst, __global float2* src, int n)
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
72 {
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
73 unsigned int xgid = get_global_id(0);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
74 unsigned int ygid = get_global_id(1);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
75
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
76 unsigned int iid = ygid * n + xgid;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
77 unsigned int oid = xgid * n + ygid;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
78
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
79 dst[oid] = src[iid];
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
80 }
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
81
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
82 __kernel void highPassFilter(__global float2* image, int n, int radius)
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
83 {
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
84 unsigned int xgid = get_global_id(0);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
85 unsigned int ygid = get_global_id(1);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
86
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
87 int2 n_2 = (int2)(n>>1, n>>1);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
88 int2 mask = (int2)(n-1, n-1);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
89
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
90 int2 gid = ((int2)(xgid, ygid) + n_2) & mask;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
91
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
92 int2 diff = n_2 - gid;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
93 int2 diff2 = diff * diff;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
94 int dist2 = diff2.x + diff2.y;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
95
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
96 int2 window;
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
97
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
98 if (dist2 < radius*radius) {
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
99 window = (int2)(0L, 0L);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
100 } else {
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
101 window = (int2)(-1L, -1L);
a664602e1819 add sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
102 }
3
f3cfea46e585 add fft_fixstar sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 image[ygid*n+xgid] = as_float2(as_int2(image[ygid*n+xgid]) & window);
f3cfea46e585 add fft_fixstar sample
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 }