Difference between revisions of "Optimizing Fourier transforms"

From Octave
Jump to navigation Jump to search
m (Improve markup.)
 
Line 1: Line 1:
Octave uses the package FFTW version 3 to perform its fast fourier transforms, which is a highly optimized fast fourier transform package [http://www.fftw.org/]. This package uses what it calls "wisdom" to plan the best way to perform the fast fourier transform on your particular computer. Such "wisdom" being dependent on the machine on which FFTW is used can not easily be shared, though in practice using wisdom from architecturally similar machines seems ok.
+
Octave uses the package [http://www.fftw.org/ FFTW version 3] to perform its fast fourier transforms, which is a highly optimized fast fourier transform package. This package uses what it calls "wisdom" to plan the best way to perform the fast fourier transform on your particular computer. Such "wisdom" being dependent on the machine on which FFTW is used can not easily be shared, though in practice using wisdom from architecturally similar machines seems ok.
  
 
Due to particularities of how wisdom is created, Octave can't create this wisdom directly from the fast fourier transform commands themselves, and in the absence of any "wisdom" an estimate is used that in most cases is not too bad. However, Octave includes the command <code>fftw_wisdom</code> to create and manage such "wisdom". For example
 
Due to particularities of how wisdom is created, Octave can't create this wisdom directly from the fast fourier transform commands themselves, and in the absence of any "wisdom" an estimate is used that in most cases is not too bad. However, Octave includes the command <code>fftw_wisdom</code> to create and manage such "wisdom". For example
  
          fftw_wisdom ([102, 0, 0; 103, 103, 0; 102, 103, 105]);
+
  fftw_wisdom ([102, 0, 0; 103, 103, 0; 102, 103, 105]);
          a = fft (rand (1,102));
+
  a = fft (rand (1,102));
          b = fft (rand (103,103));
+
  b = fft (rand (103,103));
          c = fftn (rand ([102, 103, 105]));
+
  c = fftn (rand ([102, 103, 105]));
  
 
calculates the wisdom necessary to accelerate the 102, 103x103 and the 102x103x105 FFTs. Note that calculated wisdom will be lost when restarting Octave. As the calculation of the wisdom is effectively performed by doing the fast fourier transform in many different ways to find the fastest version, this means that the above is only useful if you intend to do many many fourier transforms of this form.
 
calculates the wisdom necessary to accelerate the 102, 103x103 and the 102x103x105 FFTs. Note that calculated wisdom will be lost when restarting Octave. As the calculation of the wisdom is effectively performed by doing the fast fourier transform in many different ways to find the fastest version, this means that the above is only useful if you intend to do many many fourier transforms of this form.
Line 12: Line 12:
 
Octave also has the ability to use "wisdom" that is stored in a file, and the <code>fftw_wisdom</code> command can equally be used to manage such wisdom. By far the best way to handle FFTW wisdom files is to create a system-wide wisdom file. This file is managed by FFTW itself, and so all applications linked to FFTW will benefit from this "wisdom" file. For this purpose FFTW itself it delivered with a program <code>fftw-wisdom</code> that can be used like
 
Octave also has the ability to use "wisdom" that is stored in a file, and the <code>fftw_wisdom</code> command can equally be used to manage such wisdom. By far the best way to handle FFTW wisdom files is to create a system-wide wisdom file. This file is managed by FFTW itself, and so all applications linked to FFTW will benefit from this "wisdom" file. For this purpose FFTW itself it delivered with a program <code>fftw-wisdom</code> that can be used like
  
          % fftw-wisdom -v -c -o /etc/fftw/wisdom
+
  % fftw-wisdom -v -c -o /etc/fftw/wisdom
  
to create a system-wide "wisdom" file in <code>/etc/fftw/wisdom</code>. The <code>-c</code> option specifies than canonical wisdom is created, which implies that wisdom for the fourier transforms in one-, two- or three-dimension with dimensions that are integer powers of 2 or 10 with fewer than 2^20 elements are calculated. That "wisdom" for the transform 16x16 or 100x1 will be calculated but the "wisdom" for transforms like 16x17 or 101x1 will not be. However, "wisdom" for arbitrary transforms can be created with the <code>fftw-wisdom</code> command
+
to create a system-wide "wisdom" file in {{Path|/etc/fftw/wisdom}}. The <code>-c</code> option specifies than canonical wisdom is created, which implies that wisdom for the fourier transforms in one-, two- or three-dimension with dimensions that are integer powers of 2 or 10 with fewer than 2^20 elements are calculated. That "wisdom" for the transform 16x16 or 100x1 will be calculated but the "wisdom" for transforms like 16x17 or 101x1 will not be. However, "wisdom" for arbitrary transforms can be created with the <code>fftw-wisdom</code> command.
  
 
You are recommended to read the help file of the Octave command <code>fftw_wisdom</code> (note that this is fftw-underscore-wisdom) and FFTW's command <code>fftw-wisdom</code> (fftw-dash-wisdom) for further information.
 
You are recommended to read the help file of the Octave command <code>fftw_wisdom</code> (note that this is fftw-underscore-wisdom) and FFTW's command <code>fftw-wisdom</code> (fftw-dash-wisdom) for further information.
  
 
[[Category:Tips and tricks]]
 
[[Category:Tips and tricks]]

Latest revision as of 16:06, 13 June 2019

Octave uses the package FFTW version 3 to perform its fast fourier transforms, which is a highly optimized fast fourier transform package. This package uses what it calls "wisdom" to plan the best way to perform the fast fourier transform on your particular computer. Such "wisdom" being dependent on the machine on which FFTW is used can not easily be shared, though in practice using wisdom from architecturally similar machines seems ok.

Due to particularities of how wisdom is created, Octave can't create this wisdom directly from the fast fourier transform commands themselves, and in the absence of any "wisdom" an estimate is used that in most cases is not too bad. However, Octave includes the command fftw_wisdom to create and manage such "wisdom". For example

 fftw_wisdom ([102, 0, 0; 103, 103, 0; 102, 103, 105]);
 a = fft (rand (1,102));
 b = fft (rand (103,103));
 c = fftn (rand ([102, 103, 105]));

calculates the wisdom necessary to accelerate the 102, 103x103 and the 102x103x105 FFTs. Note that calculated wisdom will be lost when restarting Octave. As the calculation of the wisdom is effectively performed by doing the fast fourier transform in many different ways to find the fastest version, this means that the above is only useful if you intend to do many many fourier transforms of this form.

Octave also has the ability to use "wisdom" that is stored in a file, and the fftw_wisdom command can equally be used to manage such wisdom. By far the best way to handle FFTW wisdom files is to create a system-wide wisdom file. This file is managed by FFTW itself, and so all applications linked to FFTW will benefit from this "wisdom" file. For this purpose FFTW itself it delivered with a program fftw-wisdom that can be used like

 % fftw-wisdom -v -c -o /etc/fftw/wisdom

to create a system-wide "wisdom" file in /etc/fftw/wisdom. The -c option specifies than canonical wisdom is created, which implies that wisdom for the fourier transforms in one-, two- or three-dimension with dimensions that are integer powers of 2 or 10 with fewer than 2^20 elements are calculated. That "wisdom" for the transform 16x16 or 100x1 will be calculated but the "wisdom" for transforms like 16x17 or 101x1 will not be. However, "wisdom" for arbitrary transforms can be created with the fftw-wisdom command.

You are recommended to read the help file of the Octave command fftw_wisdom (note that this is fftw-underscore-wisdom) and FFTW's command fftw-wisdom (fftw-dash-wisdom) for further information.