diff example/fft/main.cc @ 1658:ed2fa50168ef draft

fix fft
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Tue, 09 Jul 2013 19:15:56 +0900
parents 05adaf6f7afb
children 19ab54c76d6f
line wrap: on
line diff
--- a/example/fft/main.cc	Thu Jul 04 18:02:48 2013 +0900
+++ b/example/fft/main.cc	Tue Jul 09 19:15:56 2013 +0900
@@ -127,27 +127,31 @@
     brev->wait_for(waitTask);
     brev->iterate(gws[0],gws[1]);
 
-    HTask* bfly = manager->create_task(BUTTERFLY);
+    waitTask = brev;
+    
     setWorkSize(gws,lws,n/2,n);
-    bfly->set_inData(0, dst, length_dst*sizeof(cl_float2));
-    bfly->set_inData(1, spin, sizeof(cl_float2)*(n/2));
-    bfly->set_outData(0,dst,length_dst*sizeof(cl_float2));
-    bfly->set_param(3,n);
-    bfly->set_param(4,direction_flag);
-    bfly->set_cpu(spe_cpu);
-    bfly->wait_for(brev);
-    bfly->iterate(gws[0],gws[1],m);
-
-    waitTask = bfly;
+    for(int iter=1;iter<=m;iter++) {
+        HTask* bfly = manager->create_task(BUTTERFLY);
+        bfly->set_inData(0, dst, length_dst*sizeof(cl_float2));
+        bfly->set_inData(1, spin, sizeof(cl_float2)*(n/2));
+        bfly->set_outData(0,dst,length_dst*sizeof(cl_float2));
+        bfly->set_param(3,n);
+        bfly->set_param(4,direction_flag);
+        bfly->set_param(5,iter);
+        bfly->set_cpu(spe_cpu);
+        bfly->wait_for(waitTask);
+        bfly->iterate(gws[0],gws[1]);
+        waitTask = bfly;
+    }
     
     if (direction == inverse) { 
+        setWorkSize(gws,lws,n,n);
         HTask *norm = manager->create_task(NORMALIZATION);
-        setWorkSize(gws,lws,n,n);
+        norm->set_inData(0,dst,length_dst*sizeof(cl_float2));
         norm->set_outData(0, dst, length_dst*sizeof(cl_float2));
         norm->set_param(3,n);
         norm->set_cpu(spe_cpu);
-        norm->flip();
-        norm->wait_for(bfly);
+        norm->wait_for(waitTask);
         norm->iterate(gws[0],gws[1]);
         
         waitTask = norm;
@@ -211,9 +215,9 @@
     }
         
     // Create spin factor
+    setWorkSize(gws,lws,n/2,1);
     int length_w = n / 2;
     HTask* sfac = manager->create_task(SPIN_FACT);
-    setWorkSize(gws,lws,n/2,1);
     sfac->set_outData(0, wm, length_w*sizeof(cl_float2));
     sfac->set_param(3,n);
     sfac->set_cpu(spe_cpu);
@@ -234,12 +238,13 @@
     first_trns->iterate(gws[0],gws[1]);
 
     // Butterfly Operation 
-    waitTask = fftCore(manager, rm, xm, wm, m, forward,first_trns);
+    waitTask = fftCore(manager, xm, rm, wm, m, forward,first_trns);
 
     // Apply high-pass filter
     HTask *hpfl = manager->create_task(HIGH_PASS_FILTER);
     cl_int radius = n/8;
     setWorkSize(gws,lws,n,n);
+    hpfl->set_inData(0,rm,length_r*sizeof(cl_float2));
     hpfl->set_outData(0, rm, length_r*sizeof(cl_float2));
     hpfl->set_param(3,n);
     hpfl->set_param(4,radius);