33 void bench_openmp(FILE *infile,
int m,
int psi_flag)
38 int M, d, trafo_adjoint;
42 double tt_total, tt_preonepsi;
44 fscanf(infile, "%d %d", &d, &trafo_adjoint);
46 N = malloc(d*sizeof(
int));
47 n = malloc(d*sizeof(
int));
50 fscanf(infile, "%d", N+t);
53 fscanf(infile, "%d", n+t);
55 fscanf(infile, "%d", &M);
58 FFTW(import_wisdom_from_filename)(
"nfft_benchomp_detail_threads.plan");
60 FFTW(import_wisdom_from_filename)(
"nfft_benchomp_detail_single.plan");
64 NFFT(init_guru)(&p, d, N, M, n, m,
65 PRE_PHI_HUT| psi_flag | MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
66 FFTW_MEASURE| FFTW_DESTROY_INPUT);
69 FFTW(export_wisdom_to_filename)(
"nfft_benchomp_detail_threads.plan");
71 FFTW(export_wisdom_to_filename)(
"nfft_benchomp_detail_single.plan");
74 for (j=0; j < p.M_total; j++)
76 for (t=0; t < p.d; t++)
77 fscanf(infile,
"%lg", p.x+p.d*j+t);
82 for (j=0; j < p.N_total; j++)
84 fscanf(infile,
"%lg %lg", &re, &im);
85 p.f_hat[j] = re + _Complex_I * im;
90 for (j=0; j < p.M_total; j++)
92 fscanf(infile,
"%lg %lg", &re, &im);
93 p.f[j] = re + _Complex_I * im;
99 if(p.flags & PRE_ONE_PSI)
100 NFFT(precompute_one_psi)(&p);
102 tt_preonepsi = NFFT(elapsed_seconds)(t1,t0);
104 if (trafo_adjoint==0)
109 tt_total = NFFT(elapsed_seconds)(t1,t0);
112 p.MEASURE_TIME_t[0] = 0.0;
113 p.MEASURE_TIME_t[2] = 0.0;
116 #ifndef MEASURE_TIME_FFTW 117 p.MEASURE_TIME_t[1] = 0.0;
120 printf(
"%.6e %.6e %6e %.6e %.6e %.6e\n", tt_preonepsi, p.MEASURE_TIME_t[0], p.MEASURE_TIME_t[1], p.MEASURE_TIME_t[2], tt_total-tt_preonepsi-p.MEASURE_TIME_t[0]-p.MEASURE_TIME_t[1]-p.MEASURE_TIME_t[2], tt_total);
130 int main(
int argc,
char **argv)
139 nthreads = atoi(argv[3]);
140 FFTW(init_threads)();
141 omp_set_num_threads(nthreads);
148 psi_flag = atoi(argv[2]);
150 bench_openmp(stdin, m, psi_flag);