SigPack - the C++ signal processing library
fftw_wisdom.cpp
Go to the documentation of this file.
1 
13 #include <sigpack.h>
14 using namespace arma;
15 using namespace sp;
16 
17 int main()
18 {
19  int r = 480, c = 640;
20  mat x(r, c);
21  cx_mat X(r, c);
22  clock_t tic;
23  FFTW X_2d(r, c, FFTW_MEASURE);
24 
25  x.randn();
26 
27  tic = clock();
28  X = fft2(x);
29  cout << "Armadillo FFT Time = " << (clock() - tic) / double(CLOCKS_PER_SEC)
30  << endl;
31 
32  tic = clock();
33  X = X_2d.fft2(x);
34  cout << "FFTW Time without Wisdom = "
35  << (clock() - tic) / double(CLOCKS_PER_SEC) << endl;
36 
37  // X_2d.export_wisdom_fft("wisd_fft.txt");
38 
39  // This string is generated by the export command above and is depending upon
40  // the FFTW version used, in this case fftw-3.3.7. Run the code once with the
41  // export command and the copy-paste the result into this string. It is also
42  // possible to generate a string from the shell using the program fftw-wisdom
43  // distributed with FFTW
44  std::string str_fft = "\
45  (fftw-3.3.7 fftw_wisdom #x458a31c8 #x92381c4c #x4f974889 #xcd46f97e\
46  (fftw_codelet_n2fv_12_avx 0 #x11048 #x11048 #x0 #xe63b0d4a #x2d9149fa #xf85a1f1c #xc30b3a35)\
47  (fftw_rdft_rank0_register 3 #x11048 #x11048 #x0 #x0503b83a #xa613f39e #x68f44fe7 #xb1187709)\
48  (fftw_rdft2_rank_geq2_register 0 #x11048 #x11048 #x0 #x02ea06f0 #x38d222a8 #xdd69f756 #xc618b279)\
49  (fftw_dft_buffered_register 1 #x11048 #x11048 #x0 #x1018de6d #x760edbc0 #xadb405fb #x3390a6e1)\
50  (fftw_codelet_t2fv_20_avx 0 #x10048 #x10048 #x0 #xcb73b984 #xa427b33a #x8f9f8732 #x7ddc99ba)\
51  (fftw_rdft2_vrank_geq1_register 0 #x11048 #x11048 #x0 #x5fbfaf8d #xd7c71ef8 #xc763e411 #x2a1d804b)\
52  (fftw_codelet_t2fv_20_avx 0 #x10048 #x10048 #x0 #x93f6ac9f #xb6a8adef #x1dfa04d9 #xe36ce49f)\
53  (fftw_codelet_r2cfII_2 2 #x11048 #x11048 #x0 #x7d87470c #x9a8fa84e #x594d1b19 #xe33421cd)\
54  (fftw_codelet_n1fv_32_avx 0 #x10048 #x10048 #x0 #x164b6574 #x2c9c5928 #xe0a745e3 #x6cebe34e)\
55  (fftw_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #xb8817807 #x285b63d1 #x6c69df43 #x7657d381)\
56  (fftw_dft_nop_register 0 #x11048 #x11048 #x0 #x76bbd3bc #xcfeb9088 #x9e21b533 #x49182bb0)\
57  (fftw_codelet_hc2cfdftv_2_avx 0 #x11048 #x11048 #x0 #x273e2b42 #x6f57ae52 #xfd23a4a9 #x578e3fd1)\
58  (fftw_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #x9484389e #xb1d48973 #xc6f25524 #x386a033e)\
59  (fftw_codelet_t2fv_20_avx 0 #x11048 #x11048 #x0 #x2fa8abef #x5e475335 #xecc229c3 #xd0ff9ce7)\
60  (fftw_dft_buffered_register 1 #x11048 #x11048 #x0 #x892c8da0 #x656dbb26 #x57f5fc08 #x575b950d)\
61  (fftw_dft_r2hc_register 0 #x11048 #x11048 #x0 #xcfc85bc7 #x6656bbe9 #x69ffc792 #x091d5626)\
62  (fftw_codelet_n1fv_32_avx 0 #x10048 #x10048 #x0 #xd681cd5f #x8fe52eb4 #x852c46ca #x1e56c7af)\
63  (fftw_dft_r2hc_register 0 #x11048 #x11048 #x0 #x85b9734d #x4ae376c3 #x46085432 #xf7704875)\
64  (fftw_rdft_rank0_register 3 #x11048 #x11048 #x0 #x879bab0b #x8eaa8bd8 #x3ad6b15f #x662e2260)\
65  (fftw_codelet_r2cf_2 2 #x11048 #x11048 #x0 #x055f68ee #x109fc123 #x55f761d7 #xb3cf78c3))";
66 
67  X_2d.import_wisdom_string(str_fft);
68  // X_2d.import_wisdom_file("wisd_fft.txt");
69 
70  tic = clock();
71  X = X_2d.fft2(x);
72  cout << "FFTW Time using Wisdom = "
73  << (clock() - tic) / double(CLOCKS_PER_SEC) << endl;
74 
75  return 0;
76 }
int main()
Definition: fftw_wisdom.cpp:17
Definition: base.h:7
void import_wisdom_string(const std::string wisd)
Import wisdom from string.
Definition: fftw.h:333
void fft2(arma::mat &x, arma::cx_mat &Pxx)
FFT of real 2D input.
Definition: fftw.h:233
FFTW class.
Definition: fftw.h:25