{"id":433,"date":"2013-04-26T14:23:10","date_gmt":"2013-04-26T14:23:10","guid":{"rendered":"http:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/?page_id=433"},"modified":"2017-03-20T15:07:28","modified_gmt":"2017-03-20T15:07:28","slug":"fftw","status":"publish","type":"page","link":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/software\/applications\/fftw\/","title":{"rendered":"FFTW"},"content":{"rendered":"<h2>Overview<\/h2>\n<p>FFTW is a C subroutine library (also with Fortran interfaces) for computing the discrete Fourier transform (DFT) in one or more dimensions, of arbitrary input size, and of both real and complex data (as well as of even\/odd data, i.e. the discrete cosine\/sine transforms or DCT\/DST).<\/p>\n<p>Versions <\/p>\n<ul>\n<li>3.3.6 for all intel nodes &#8211; jobs\/software using intel compilers v 15.0.3 and openmpi 1.8.3<\/li>\n<li>3.3.4 for open64, AMD Bulldozer only &#8211; serial (non-MPI) and parallel (MPI) versions of FFTW.<\/li>\n<li>3.2.2 for gcc, all platforms &#8211; serial (non-MPI) and parallel (MPI) versions of FFTW.<\/li>\n<\/ul>\n<h2>Restrictions on use<\/h2>\n<p>FFTW is free software covered by the GNU General Public License, version 2 or later. Note that you may only distribute software linked with libfftw3 under the terms of the GPL.<\/p>\n<h2>Set up procedure<\/h2>\n<p>In all cases an appropriate MPI modulefile must be loaded first. It will be either an <em>intel<\/em>, <em>gcc openmpi<\/em> modulefile or an <em>open64 openmpi<\/em> modulefile. <\/p>\n<p>You should then load one of the following modulefiles to set up your environment:<\/p>\n<ul>\n<li>intel for all intel nodes (the openmpi-1.8.3 modulefiles auto load the appropriate version of openmpi and intel compilers 15.0.3)\n<pre>\r\nlibs\/intel-15.0\/fftw3\/openmpi-1.8.3\/double-mpi\/3.3.6     # smp.pe, mpi process binding off\r\nlibs\/intel-15.0\/fftw3\/openmpi-1.8.3\/double-mpi\/3.3.6-ib  # orte-24-ib.pe, mpi process binding on\r\nlibs\/intel-15.0\/fftw3\/openmpi-1.8.3\/float-mpi\/3.3.6      # smp.pe, mpi process binding off\r\nlibs\/intel-15.0\/fftw3\/openmpi-1.8.3\/float-mpi\/3.3.6-ib   # orte-24-ib.pe, mpi process binding on\r\nlibs\/intel-15.0\/openmpi-1.8.3\/long-double-mpi\/3.3.6      # smp.pe, mpi process binding off\r\nlibs\/intel-15.0\/openmpi-1.8.3\/long-double-mpi\/3.3.6-ib   # orte-24-ib.pe, mpi process binding on\r\n<\/pre>\n<li>gcc for all platforms (not necessarily optimal for some, you will need to load an appropriate openmpi)\n<pre>\r\nlibs\/gcc\/fftw3\/double-mpi\/3.2.2\r\nlibs\/gcc\/fftw3\/float-mpi\/3.2.2\r\nlibs\/gcc\/fftw3\/long-double-mpi\/3.2.2\r\n<\/pre>\n<\/li>\n<li>GCC for all platforms, built with SSE and AVX support but not MPI support. Libraries within the module are named with the usual convention for precision as in the table below.  OpenMP versions are also available with a &#8220;_omp&#8221; suffix on the name, e.g. <code>-lfftw3f_omp<\/code>. (The &#8220;serial&#8221; and &#8220;openmp&#8221; modules are actually aliases.)\n<pre>\r\nlibs\/gcc\/fftw3\/serial\/3.3.6                      # serial only\r\nlibs\/gcc\/fftw3\/openmp\/3.3.6                      # openmp\r\n<\/pre>\n<\/li>\n<li>AMD Open64 compiler for Bulldozer only (you will need to load an appropriate mpi)\n<pre>\r\nlibs\/open64-4.5.2\/fftw3\/double-mpi\/3.3.4\r\nlibs\/open64-4.5.2\/fftw3\/float-mpi\/3.3.4\r\nlibs\/open64-4.5.2\/fftw3\/long-double-mpi\/3.3.4\r\n<\/pre>\n<\/li>\n<\/ul>\n<h2>Running the application<\/h2>\n<p>The <code>fftw-wisdom-to-conf<\/code> and <code>fftw-wisdom<\/code> executables for creating pre-optimized FFTs will be available in your path once a modulefile has been loaded.<\/p>\n<p>Most usage will involved including FFTW header files in your source code and linking against the FFTW libraries during compilation. To assist with this the following environment variables are available. They can be used on your compiler command-line or in Makefiles:<\/p>\n<p>The modulefiles will set an environment variable named <code>FFTW<\/code> which can then be used in your compilation process (e.g., in a Makefile) to access the header and library files:<\/p>\n<ul>\n<li>To inform the compiler of the header file directory use: <code>-I$FFTW\/include<\/code> on the command line<\/li>\n<li>To inform the compiler of the library files use: <code>-L$FFTW\/lib -l<em>nameoflibrary<\/em><\/code> on the command line (see below for <em>nameoflibrary<\/em>)<\/li>\n<li>In a Makefile use <code>$(FFTW)<\/code> rather than <code>$FFTW<\/code>.<\/li>\n<\/ul>\n<p>The <em>nameoflibrary<\/em> to use on the compilation line depends on the <em>precision<\/em> of the FFTW version you are using and whether you wish to use the MPI version of the library. <\/p>\n<table class=\"striped\">\n<tr>\n<th>Precision<\/th>\n<th>Library (.a and .so)<\/th>\n<th>Compiler flag<\/th>\n<\/tr>\n<tr>\n<td rowspan=\"2\">Single (float)<\/td>\n<td>libfftw3f<\/td>\n<td>-lfftw3f<\/td>\n<\/tr>\n<tr>\n<td>libfftw3f_mpi<\/td>\n<td>-lfftw3f_mpi<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"2\">Double (the default &#8211; <strong>do not<\/strong> add<br \/>a &#8216;d&#8217; to the library names!)<\/td>\n<td>libfftw3<\/td>\n<td>-lfftw<\/td>\n<\/tr>\n<tr>\n<td>libfftw3_mpi<\/td>\n<td>-lfftw3_mpi<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"2\">Long double<\/td>\n<td>libfftw3l<\/td>\n<td>-lfftwl<\/td>\n<\/tr>\n<tr>\n<td>libfftw3l_mpi<\/td>\n<td>-lfftw3l_mpi<\/td>\n<\/tr>\n<\/table>\n<p>Both static (<code>.a<\/code>) and shared\/dynamic (<code>.so<\/code>) versions of the libraries are available.<\/p>\n<h2>Further info<\/h2>\n<ul>\n<li>The <a href=\"http:\/\/www.fftw.org\">FFTW Home Page<\/a>\n<\/ul>\n<h2>Updates<\/h2>\n<p>2014-04-08: open64 BD build<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Overview FFTW is a C subroutine library (also with Fortran interfaces) for computing the discrete Fourier transform (DFT) in one or more dimensions, of arbitrary input size, and of both real and complex data (as well as of even\/odd data, i.e. the discrete cosine\/sine transforms or DCT\/DST). Versions 3.3.6 for all intel nodes &#8211; jobs\/software using intel compilers v 15.0.3 and openmpi 1.8.3 3.3.4 for open64, AMD Bulldozer only &#8211; serial (non-MPI) and parallel (MPI).. <a href=\"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/software\/applications\/fftw\/\">Read more &raquo;<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"parent":31,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-433","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/wp-json\/wp\/v2\/pages\/433","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/wp-json\/wp\/v2\/comments?post=433"}],"version-history":[{"count":20,"href":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/wp-json\/wp\/v2\/pages\/433\/revisions"}],"predecessor-version":[{"id":3719,"href":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/wp-json\/wp\/v2\/pages\/433\/revisions\/3719"}],"up":[{"embeddable":true,"href":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/wp-json\/wp\/v2\/pages\/31"}],"wp:attachment":[{"href":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/wp-json\/wp\/v2\/media?parent=433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}