56c42dfdebc77b2753f643e2d23654be4d65b4a0
[charm.git] / example / 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 numThreads;
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 startFFT();
15     entry void doneFFT();
16
17     entry [reductiontarget] void printResidual(realType residual);
18   };
19
20   array [1D] fft {
21     entry fft();
22     entry void getTranspose(fftMsg *m);
23     entry void initValidation();
24     entry void doFFT() {
25       for(iteration = 0; iteration < 3; ++iteration) {
26         atomic "transpose" {
27           if(thisIndex == 0)
28             CkPrintf("TRANSPOSING\n");
29           sendTranspose(iteration == 0 ? in : out);
30         }
31
32         for(count = 0; count < numChunks; ++count)
33           when getTranspose[iteration] (fftMsg *m) atomic {
34             applyTranspose(m);
35           }
36
37         if (iteration < 2) atomic "compute" {
38           fftHelperLaunch();
39           if(iteration == 0)
40               twiddle(validating ? 1 : -1);
41         }
42       } 
43       atomic {
44         if(!validating)
45           contribute(CkCallback(CkIndex_Main::doneFFT(), mainProxy));
46         else {
47           char filename[80];
48           sprintf(filename, "%d-%ld.dump%d", numChunks, N, thisIndex);
49           writeCommFile(n, in, filename);
50           calcResidual();
51         }
52       }
53     };
54   };
55 };