cannam@95: cannam@95: cannam@95: Cycle Counters - FFTW 3.3.3 cannam@95: cannam@95: cannam@95: cannam@95: cannam@95: cannam@95: cannam@95: cannam@95: cannam@95: cannam@95: cannam@95: cannam@95: cannam@95: cannam@95:
cannam@95: cannam@95:

cannam@95: Next: , cannam@95: Previous: Installation on non-Unix systems, cannam@95: Up: Installation and Customization cannam@95:


cannam@95:
cannam@95: cannam@95:

10.3 Cycle Counters

cannam@95: cannam@95:

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

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

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