Mercurial > hg > Game > Cerium
diff example/fft/main.cc @ 1656:05adaf6f7afb draft
fix fft
author | Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 02 Jul 2013 21:50:02 +0900 |
parents | ab6b11476e02 |
children | ed2fa50168ef |
line wrap: on
line diff
--- a/example/fft/main.cc Mon Jul 01 21:15:23 2013 +0900 +++ b/example/fft/main.cc Tue Jul 02 21:50:02 2013 +0900 @@ -148,7 +148,7 @@ norm->set_cpu(spe_cpu); norm->flip(); norm->wait_for(bfly); - norm->iterate(gws[0],gws[0]); + norm->iterate(gws[0],gws[1]); waitTask = norm; } @@ -217,39 +217,36 @@ sfac->set_outData(0, wm, length_w*sizeof(cl_float2)); sfac->set_param(3,n); sfac->set_cpu(spe_cpu); - sfac->iterate(gws[0],gws[1]); + sfac->iterate(gws[0]); // Butterfly Operation waitTask = fftCore(manager, rm, xm, wm, m, forward,sfac); - HTaskPtr *trns = (HTask**)manager->allocate(sizeof(HTask*)*2); - // Transpose matrix int length_r =n*n; - setWorkSize(gws,lws,n/2,1); - for (int i=0;i<2;i++) { - trns[i]= manager->create_task(TRANSEPOSE); - trns[i]->set_inData(0, rm, length_r*sizeof(cl_float2)); - trns[i]->set_outData(0, xm, length_r*sizeof(cl_float2)); - trns[i]->set_param(3,n); - trns[i]->set_cpu(spe_cpu); - } - // trns[0]->wait_for(sfac); - trns[0]->wait_for(waitTask); - trns[0]->iterate(gws[0],gws[1]); + setWorkSize(gws,lws,n,n); + HTask* first_trns = manager->create_task(TRANSPOSE); + first_trns->set_inData(0,rm,length_r*sizeof(cl_float2)); + first_trns->set_outData(0,xm,length_r*sizeof(cl_float2)); + first_trns->set_param(3,n); + first_trns->set_cpu(spe_cpu); + first_trns->wait_for(waitTask); + first_trns->iterate(gws[0],gws[1]); + // Butterfly Operation - // fftCore(manager, rm, xm, wm, m, forward); + waitTask = fftCore(manager, rm, xm, 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/2,1); + setWorkSize(gws,lws,n,n); hpfl->set_outData(0, rm, length_r*sizeof(cl_float2)); hpfl->set_param(3,n); hpfl->set_param(4,radius); hpfl->set_cpu(spe_cpu); - hpfl->wait_for(trns[0]); + hpfl->wait_for(waitTask); hpfl->iterate(gws[0],gws[1]); + // Inverse FFT // Butterfly Operation @@ -257,12 +254,17 @@ // Transpose matrix setWorkSize(gws,lws,n,n); - trns[1]->wait_for(waitTask); - trns[1]->iterate(gws[0],gws[1]); + HTask* second_trns = manager->create_task(TRANSPOSE); + second_trns->set_inData(0,xm,length_r*sizeof(cl_float2)); + second_trns->set_outData(0,rm,length_r*sizeof(cl_float2)); + second_trns->set_param(3,n); + second_trns->set_cpu(spe_cpu); + second_trns->wait_for(waitTask); + second_trns->iterate(gws[0],gws[1]); // Butterfly Operation - waitTask = fftCore(manager,xm, rm, wm, m, inverse,trns[1]); + waitTask = fftCore(manager,xm, rm, wm, m, inverse,second_trns); } int TMmain(TaskManager *manager, int argc, char** argv) {