NodeHelper: move to corresponding directories
[charm.git] / examples / charm++ / nodeHelper / fft-trans / fft1d.ci
1 mainmodule fft1d {
2   include "fftmacro.h";
3   readonly CProxy_Main mainProxy;
4   readonly CProxy_FuncNodeHelper nodeHelperProxy;
5   readonly int numChunks;
6   readonly int numTasks;
7   readonly uint64_t N;
8   initnode void initplanlock();
9   message fftMsg {
10     fft_complex data[];
11   };
12   mainchare Main {
13     entry Main(CkArgMsg *m);
14     entry void initDone(CkQdMsg *m);
15     entry void startFFT();
16     entry void doneFFT();
17
18     entry [reductiontarget] void printResidual(realType residual);
19   };
20
21   array [1D] fft {
22     entry fft();
23     entry void getTranspose(fftMsg *m);
24     entry void initValidation();
25     entry void doFFT() {
26       for(iteration = 0; iteration < 3; ++iteration) {
27         atomic "transpose" {
28           if(thisIndex == 0)
29             CkPrintf("TRANSPOSING\n");
30           sendTranspose(iteration == 0 ? in : out);
31         }
32
33         for(count = 0; count < numChunks; ++count)
34           when getTranspose[iteration] (fftMsg *m) atomic {
35             applyTranspose(m);
36           }
37
38         if (iteration < 2) atomic "compute" {
39           fftHelperLaunch();
40           if(iteration == 0)
41               twiddle(validating ? 1 : -1);
42         }
43       } 
44       atomic {
45         if(!validating)
46           contribute(CkCallback(CkIndex_Main::doneFFT(), mainProxy));
47         else {
48           char filename[80];
49           sprintf(filename, "%d-%ld.dump%d", numChunks, N, thisIndex);
50           writeCommFile(n, in, filename);
51           calcResidual();
52         }
53       }
54     };
55   };
56 };