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);