benchfftw.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <fftw3.h>
  4. #include <unistd.h>
  5. #include "pstats.h"
  6. #ifdef DATATYPEdouble
  7. #define CPXTYPE fftw_complex
  8. #define PLAN fftw_plan
  9. #define FFTMALLOC fftw_malloc
  10. #define MAKEPLAN fftw_plan_dft_1d
  11. #define DOFFT fftw_execute
  12. #define DESTROYPLAN fftw_destroy_plan
  13. #define FFTFREE fftw_free
  14. #elif defined(DATATYPEfloat)
  15. #define CPXTYPE fftwf_complex
  16. #define PLAN fftwf_plan
  17. #define FFTMALLOC fftwf_malloc
  18. #define MAKEPLAN fftwf_plan_dft_1d
  19. #define DOFFT fftwf_execute
  20. #define DESTROYPLAN fftwf_destroy_plan
  21. #define FFTFREE fftwf_free
  22. #endif
  23. #ifndef CPXTYPE
  24. int main(void)
  25. {
  26. fprintf(stderr,"Datatype not available in FFTW\n" );
  27. return 0;
  28. }
  29. #else
  30. int main(int argc,char ** argv)
  31. {
  32. int nfft=1024;
  33. int isinverse=0;
  34. int numffts=1000,i;
  35. CPXTYPE * in=NULL;
  36. CPXTYPE * out=NULL;
  37. PLAN p;
  38. pstats_init();
  39. while (1) {
  40. int c = getopt (argc, argv, "n:ix:h");
  41. if (c == -1)
  42. break;
  43. switch (c) {
  44. case 'n':
  45. nfft = atoi (optarg);
  46. break;
  47. case 'x':
  48. numffts = atoi (optarg);
  49. break;
  50. case 'i':
  51. isinverse = 1;
  52. break;
  53. case 'h':
  54. case '?':
  55. default:
  56. fprintf(stderr,"options:\n-n N: complex fft length\n-i: inverse\n-x N: number of ffts to compute\n"
  57. "");
  58. }
  59. }
  60. in=FFTMALLOC(sizeof(CPXTYPE) * nfft);
  61. out=FFTMALLOC(sizeof(CPXTYPE) * nfft);
  62. for (i=0;i<nfft;++i ) {
  63. in[i][0] = rand() - RAND_MAX/2;
  64. in[i][1] = rand() - RAND_MAX/2;
  65. }
  66. if ( isinverse )
  67. p = MAKEPLAN(nfft, in, out, FFTW_BACKWARD, FFTW_ESTIMATE);
  68. else
  69. p = MAKEPLAN(nfft, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
  70. for (i=0;i<numffts;++i)
  71. DOFFT(p);
  72. DESTROYPLAN(p);
  73. FFTFREE(in); FFTFREE(out);
  74. fprintf(stderr,"fftw\tnfft=%d\tnumffts=%d\n", nfft,numffts);
  75. pstats_report();
  76. return 0;
  77. }
  78. #endif