34 void bench_openmp_readfile(FILE *infile,
int *trafo_adjoint,
int *N,
int *M,
double **x, C **f_hat, C **f)
40 fscanf(infile,
"%d %d %d", trafo_adjoint, N, M);
42 *f_hat = (C*)
nfft_malloc((2*(*N)+2) * (2*(*N)+2) *
sizeof(C));
45 memset(*f_hat,0U,(2*(*N)+2) * (2*(*N)+2) *
sizeof(C));
46 memset(*f,0U,(*M)*
sizeof(C));
49 fftw_import_wisdom_from_filename(
"nfsft_benchomp_detail_threads.plan");
51 fftw_import_wisdom_from_filename(
"nfsft_benchomp_detail_single.plan");
54 nfsft_init_guru(&plan, *N, *M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |
55 NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,
56 PRE_PHI_HUT | FFTW_INIT | FFT_OUT_OF_PLACE, 6);
59 fftw_export_wisdom_to_filename(
"nfsft_benchomp_detail_threads.plan");
61 fftw_export_wisdom_to_filename(
"nfsft_benchomp_detail_single.plan");
64 for (j=0; j < *M; j++)
66 fscanf(infile,
"%lg", (*x)+2*j+t);
70 for (k = 0; k <= *N; k++)
71 for (n = -k; n <= k; n++)
73 fscanf(infile,
"%lg %lg", &re, &im);
74 (*f_hat)[NFSFT_INDEX(k,n,&plan)] = re + _Complex_I * im;
79 for (j=0; j < *M; j++)
81 fscanf(infile,
"%lg %lg", &re, &im);
82 (*f)[j] = re + _Complex_I * im;
86 nfsft_finalize(&plan);
89 void bench_openmp(
int trafo_adjoint,
int N,
int M,
double *x, C *f_hat, C *f,
int m,
int nfsft_flags,
int psi_flags)
96 double tt_total, tt_pre;
115 nfsft_init_guru(&plan, N, M, nfsft_flags | NFSFT_MALLOC_X | NFSFT_MALLOC_F |
116 NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,
117 PRE_PHI_HUT | psi_flags | FFTW_INIT | FFT_OUT_OF_PLACE, m);
125 for (j=0; j < plan.
M_total; j++)
127 for (t=0; t < 2; t++)
129 plan.
x[2*j+t] = x[2*j+t];
132 if (trafo_adjoint==0)
134 memset(plan.
f_hat,0U,plan.
N_total*
sizeof(
double _Complex));
135 for (k = 0; k <= plan.
N; k++)
136 for (n = -k; n <= k; n++)
140 plan.
f_hat[NFSFT_INDEX(k,n,&plan)] = f_hat[NFSFT_INDEX(k,n,&plan)];
145 for (j=0; j < plan.
M_total; j++)
152 memset(plan.
f_hat,0U,plan.
N_total*
sizeof(
double _Complex));
157 nfsft_precompute_x(&plan);
159 tt_pre = nfft_elapsed_seconds(t1,t0);
161 if (trafo_adjoint==0)
164 nfsft_adjoint(&plan);
166 tt_total = nfft_elapsed_seconds(t1,t0);
173 #ifndef MEASURE_TIME_FFTW
180 nfsft_finalize(&plan);
183 int main(
int argc,
char **argv)
185 int m, nfsft_flags, psi_flags;
187 int trafo_adjoint, N, M, r;
196 nthreads = atoi(argv[5]);
198 omp_set_num_threads(nthreads);
205 nfsft_flags = atoi(argv[2]);
206 psi_flags = atoi(argv[3]);
207 nrepeat = atoi(argv[4]);
209 bench_openmp_readfile(stdin, &trafo_adjoint, &N, &M, &x, &f_hat, &f);
212 nfsft_precompute(N,1000.0,0U,0U);
214 for (r = 0; r < nrepeat; r++)
215 bench_openmp(trafo_adjoint, N, M, x, f_hat, f, m, nfsft_flags, psi_flags);