Chris@19: Chris@19: Chris@19: Cycle Counters - FFTW 3.3.4 Chris@19: Chris@19: Chris@19: Chris@19: Chris@19: Chris@19: Chris@19: Chris@19: Chris@19: Chris@19: Chris@19: Chris@19: Chris@19: Chris@19:
Chris@19: Chris@19:

Chris@19: Next: , Chris@19: Previous: Installation on non-Unix systems, Chris@19: Up: Installation and Customization Chris@19:


Chris@19:
Chris@19: Chris@19:

10.3 Cycle Counters

Chris@19: Chris@19:

Chris@19: FFTW's planner actually executes and times different possible FFT Chris@19: algorithms in order to pick the fastest plan for a given n. In Chris@19: order to do this in as short a time as possible, however, the timer must Chris@19: have a very high resolution, and to accomplish this we employ the Chris@19: hardware cycle counters that are available on most CPUs. Chris@19: Currently, FFTW supports the cycle counters on x86, PowerPC/POWER, Alpha, Chris@19: UltraSPARC (SPARC v9), IA64, PA-RISC, and MIPS processors. Chris@19: Chris@19:

Access to the cycle counters, unfortunately, is a compiler and/or Chris@19: operating-system dependent task, often requiring inline assembly Chris@19: language, and it may be that your compiler is not supported. If you are Chris@19: not supported, FFTW will by default fall back on its estimator Chris@19: (effectively using FFTW_ESTIMATE for all plans). Chris@19: Chris@19: You can add support by editing the file kernel/cycle.h; normally, Chris@19: this will involve adapting one of the examples already present in order Chris@19: to use the inline-assembler syntax for your C compiler, and will only Chris@19: require a couple of lines of code. Anyone adding support for a new Chris@19: system to cycle.h is encouraged to email us at fftw@fftw.org. Chris@19: Chris@19:

If a cycle counter is not available on your system (e.g. some embedded Chris@19: processor), and you don't want to use estimated plans, as a last resort Chris@19: you can use the --with-slow-timer option to configure (on Chris@19: Unix) or #define WITH_SLOW_TIMER in config.h (elsewhere). Chris@19: This will use the much lower-resolution gettimeofday function, or even Chris@19: clock if the former is unavailable, and planning will be Chris@19: extremely slow. Chris@19: Chris@19: Chris@19: Chris@19: