glfs/general/genlib/fftw.xml
Pierre Labastie 875b3b57e8 Fix various option vs parameter problems
Sometimes there is no really a problem, but alos avoids that
automatic detection with "make test-options" return false positives
2023-12-08 22:05:39 +01:00

340 lines
11 KiB
XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../../general.ent">
%general-entities;
<!ENTITY fftw-download-http "https://www.fftw.org/fftw-&fftw-version;.tar.gz">
<!ENTITY fftw-download-ftp " ">
<!ENTITY fftw-md5sum "8ccbf6a5ea78a16dbc3e1306e234cc5c">
<!ENTITY fftw-size "4.0 MB">
<!ENTITY fftw-buildsize "59 MB">
<!ENTITY fftw-time "1.6 SBU (add 3.4 SBU for tests, both using parallelism=4)">
]>
<sect1 id="fftw" xreflabel="fftw-&fftw-version;">
<?dbhtml filename="fftw.html"?>
<title>fftw-&fftw-version;</title>
<indexterm zone="fftw">
<primary sortas="a-fftw">fftw</primary>
</indexterm>
<sect2 role="package">
<title>Introduction to fftw</title>
<para>
FFTW is a C subroutine library 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).
</para>
&lfs120_checked;
<bridgehead renderas="sect3">Package Information</bridgehead>
<itemizedlist spacing="compact">
<listitem>
<para>
Download (HTTP): <ulink url="&fftw-download-http;"/>
</para>
</listitem>
<listitem>
<para>
Download (FTP): <ulink url="&fftw-download-ftp;"/>
</para>
</listitem>
<listitem>
<para>
Download MD5 sum: &fftw-md5sum;
</para>
</listitem>
<listitem>
<para>
Download size: &fftw-size;
</para>
</listitem>
<listitem>
<para>
Estimated disk space required: &fftw-buildsize;
</para>
</listitem>
<listitem>
<para>
Estimated build time: &fftw-time;
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2 role="installation">
<title>Installation of fftw</title>
<note>
<para>
We build fftw three times for different libraries in different
numerical precisions: the default double precision floating point, the
older 32-bit (single precision) version named float which sacrifices
precision for speed, and the long double which offers increased
precision at the cost of slower execution.
</para>
</note>
<para>
The first build is for double precision arithmetic. Install
<application>fftw</application> by running the following commands:
</para>
<screen><userinput>./configure --prefix=/usr \
--enable-shared \
--disable-static \
--enable-threads \
--enable-sse2 \
--enable-avx \
--enable-avx2 &amp;&amp;
make</userinput></screen>
<para>
To test the results, issue: <command>make check</command>.
On 32-bit systems, the tests can take substantially longer than
they would on 64-bit machines.
</para>
<para>
Now, as the <systemitem class="username">root</systemitem> user:
</para>
<screen role="root"><userinput>make install</userinput></screen>
<para>
Now build single precision:
</para>
<screen><userinput>make clean &amp;&amp;
./configure --prefix=/usr \
--enable-shared \
--disable-static \
--enable-threads \
--enable-sse2 \
--enable-avx \
--enable-avx2 \
--enable-float &amp;&amp;
make</userinput></screen>
<para>
As the <systemitem class="username">root</systemitem> user:
</para>
<screen role="root"><userinput>make install</userinput></screen>
<para>
Finally, build long double precision:
</para>
<screen><userinput>make clean &amp;&amp;
./configure --prefix=/usr \
--enable-shared \
--disable-static \
--enable-threads \
--enable-long-double &amp;&amp;
make</userinput></screen>
<para>
As the <systemitem class="username">root</systemitem> user:
</para>
<screen role="root"><userinput>make install</userinput></screen>
</sect2>
<sect2 role="commands">
<title>Command Explanations</title>
<para>
<parameter>--enable-shared</parameter>
<parameter>--disable-static</parameter>: Use shared
libs instead of static libs.
</para>
<para>
<parameter>--enable-threads</parameter>: This enables <filename
class="libraryfile"> libfftw3_threads.so</filename> to be compiled.
It is used by e.g. the <application>gimp</application> plugin from
<ulink url="https://gmic.eu/">G'MIC</ulink>.
</para>
<para>
<parameter>--enable-{sse2,avx,avx2}</parameter>: These enables building
the optimized routines using SSE2, AVX, and AVX2 instructions. FFTW
will check if these routines can be really used on the current CPU when
the FFTW library is loaded, so a FFTW build with these routines enabled
can still run on a CPU without SSE2, AVX, or AVX512. These options
are not compatible with <parameter>--enable-long-double</parameter>.
</para>
<para>
<parameter>--enable-float</parameter>: This enables building the library that
uses single precision floating point arithmetic. It is faster but less
precise than the default double precision library. The library will be
called <filename class="libraryfile">libfftw3f.so</filename> needed by
<xref linkend="pulseaudio"/>.
</para>
<para>
<parameter>--enable-long-double</parameter>: This enables building the
library that uses higher precision long-double floating point arithmetic.
The library will be called <filename
class="libraryfile">libfftw3l.so</filename>.
</para>
<para>
<option>--enable-avx512</option>: This enables building the optimized
routines using AVX512F instructions. FFTW will check if these routines
can be really used on the current CPU when the FFTW library is loaded,
so a FFTW build with these routines enabled can still run on a CPU
without AVX512F. Use this option if the FFTW build will be used on
a CPU with AVX512F. This option is not compatible with
<parameter>--enable-long-double</parameter>.
</para>
</sect2>
<sect2 role="content">
<title>Contents</title>
<segmentedlist>
<segtitle>Installed Programs</segtitle>
<segtitle>Installed Libraries</segtitle>
<segtitle>Installed Directories</segtitle>
<seglistitem>
<seg>
fftw-wisdom and fftw-wisdom-to-conf
</seg>
<seg>
libfftw3.so, libfftw3_threads.so, libfftw3f.so,
libfftw3f_threads.so, libfftw3l.so and libfftw3l_threads.so
</seg>
<seg>
None
</seg>
</seglistitem>
</segmentedlist>
<variablelist>
<bridgehead renderas="sect3">Short Descriptions</bridgehead>
<?dbfo list-presentation="list"?>
<?dbhtml list-presentation="table"?>
<varlistentry id="fftw-wisdom">
<term><command>fftw-wisdom</command></term>
<listitem>
<para>
is a utility to generate FFTW wisdom files, which contain saved
information about how to optimally compute (Fourier) transforms of
various sizes
</para>
<indexterm zone="fftw fftw-wisdom">
<primary sortas="b-fftw-wisdom">fftw-wisdom</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="fftw-wisdom-to-conf">
<term><command>fftw-wisdom-to-conf</command></term>
<listitem>
<para>
is a utility to generate C configuration routines from FFTW wisdom
files, where the latter contain saved information about how to
optimally compute (Fourier) transforms of various sizes
</para>
<indexterm zone="fftw fftw-wisdom-to-conf">
<primary sortas="b-fftw-wisdom-to-conf">fftw-wisdom-to-conf</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libfftw3">
<term><filename class="libraryfile">libfftw3.so</filename></term>
<listitem>
<para>
is the Fast Fourier Transform library
</para>
<indexterm zone="fftw libfftw3">
<primary sortas="c-libfftw3">libfftw3.so</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libfftw3_threads">
<term><filename class="libraryfile">libfftw3_threads.so</filename></term>
<listitem>
<para>
is the threaded Fast Fourier Transform library
</para>
<indexterm zone="fftw libfftw3_threads">
<primary sortas="c-libfftw3_threads">libfftw3_threads.so</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libfftw3f">
<term><filename class="libraryfile">libfftw3f.so</filename></term>
<listitem>
<para>
is the single-precision Fast Fourier Transform library, described
as <quote>float</quote> for historic reasons
</para>
<indexterm zone="fftw libfftw3f">
<primary sortas="c-libfftw3f">libfftw3f.so</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libfftw3f_threads">
<term><filename class="libraryfile">libfftw3f_threads.so</filename></term>
<listitem>
<para>
is the threaded single-precision Fast Fourier Transform library
</para>
<indexterm zone="fftw libfftw3f_threads">
<primary sortas="c-libfftw3f_threads">libfftw3f_threads.so</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libfftw3l">
<term><filename class="libraryfile">libfftw3l.so</filename></term>
<listitem>
<para>
is the long double Fast Fourier Transform library
</para>
<indexterm zone="fftw libfftw3l">
<primary sortas="c-libfftw3l">libfftw3l.so</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libfftw3l_threads">
<term><filename class="libraryfile">libfftw3l_threads.so</filename></term>
<listitem>
<para>
is the threaded long double Fast Fourier Transform library
</para>
<indexterm zone="fftw libfftw3l_threads">
<primary sortas="c-libfftw3l_threads">libfftw3l_threads.so</primary>
</indexterm>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>