УНИТе

Портал > Документация > Инсталиране и използване на FFTW3 под CentOS 7 и 8

Инсталиране и използване на FFTW3 под CentOS 7 и 8

Съдържание:

  1. Предварителна информация
  2. Изтегляне на изходния код и компилирането му с GNU Compilers, Intel Compilers и PGI Compilers
  3. Използване на fftw3 библиотеките

 

1. Предварителна информация

FFTW3 е C библиотека за реализация на дискретна Фурие-трансформация (DFT). Този документ показва как тази библиотека да бъде компилирана и инсталирана с GNU Compilers, ако това е нужно за даден проект и вградния в дистрибуцията пакет fftw не покрива нужните изисквания. Няма смисъл тази компилация да бъде извършвана с Intel Compilers, доколкото вградената в пакета с компилаторите MKL (Math Kernel Library) предлага fftw библиотека. Въпреки това, за пълнота, този случай е представен в документацията по-долу.

 

2. Изтегляне на изходния код и компилирането му с GNU Compilers, Intel Compilers и PGI Compilers

Изходният код на библиотеката може да бъде изтеглен от страницата на проекта:

https://github.com/FFTW/fftw3/releases

Препоръчително е да изтеглите и компилирате последната стабилна версия на кода на проекта. За примера тук се предполага, че това е 3.0.5. По времето, по което вие посетите страницата на проекта, там може да има по-нова стабилна версия. Изтеглянето и разпакетирането на кода може да стнане по следния начин:

$ mkdir ~/build
$ cd ~/build
$ wget https://github.com/FFTW/fftw3/archive/fftw-3.3.7.tar.gz -O fftw3-fftw-3.3.7.tar.gz
$ tar xvf fftw3-fftw-3.3.7.tar.gz

Влезте в новосъздадената при разпакетирането директория:

$ cd ~/build/fftw3-fftw-3.3.7
$ mkdir build
$ cd build

Конфигурирането на компилационния процес за създаването на динамичните библиотеки за свързване трябва да стане по начин, по-който едновремено да бъдат компилирани OpenMP и GNU Threads библиотеките на fftw3 (забележете наличието на -DENABLE_OPENMP=ON -DENABLE_THREADS=ON):

  • с използването на GNU Compilers:

    $ cmake .. -DENABLE_AVX2=ON -DENABLE_FLOAT=ON -DENABLE_LONG_DOUBLE=ON -DENABLE_OPENMP=ON -DENABLE_THREADS=ON -DBUILD_TESTS=NO -DCMAKE_INSTALL_PREFIX=/usr/unite/fftw3-3.3.7-gnu
  • с използването на Intel Compilers:

    $ CC=icc CFLAGS=-xHost cmake .. -DENABLE_AVX2=ON -DENABLE_FLOAT=ON -DENABLE_LONG_DOUBLE=ON -DENABLE_OPENMP=ON -DENABLE_THREADS=ON -DBUILD_TESTS=NO -DCMAKE_INSTALL_PREFIX=/usr/unite/fftw3-3.3.7-intel
  • с използването на PGI Compilers:

    $ CC=pgcc CFLAGS=-fast cmake .. -DENABLE_AVX2=ON -DENABLE_FLOAT=ON -DENABLE_LONG_DOUBLE=ON -DENABLE_OPENMP=ON -DENABLE_THREADS=ON -DBUILD_TESTS=NO -DCMAKE_INSTALL_PREFIX=/usr/unite/fftw3-3.3.7-pgi

След като процесът на конфигуриране завърши успешно, може да пристъпите към компилиране и инсталиране:

$ make -j6
$ make install

Трябва да повторите същия процес и за да компилирате статичните библиотеки:

  • с използването на GNU Compilers:

    $ cmake .. -DENABLE_AVX2=ON -DBUILD_SHARED_LIBS=NO -DENABLE_FLOAT=ON -DENABLE_LONG_DOUBLE=ON -DENABLE_OPENMP=ON -DENABLE_THREADS=ON -DBUILD_TESTS=NO -DCMAKE_INSTALL_PREFIX=/usr/unite/fftw3-3.3.7-gnu
  • с използването на Intel Compilers:

    $ CC=icc CFLAGS=-xHost cmake .. -DBUILD_SHARED_LIBS=NO -DENABLE_AVX2=ON -DENABLE_FLOAT=ON -DENABLE_LONG_DOUBLE=ON -DENABLE_OPENMP=ON -DENABLE_THREADS=ON -DBUILD_TESTS=NO -DCMAKE_INSTALL_PREFIX=/usr/unite/fftw3-3.3.7-intel
  • с използването на PGI Compilers:

    $ CC=pgcc CFLAGS=-fast cmake .. -DBUILD_SHARED_LIBS=NO -DENABLE_AVX2=ON -DENABLE_FLOAT=ON -DENABLE_LONG_DOUBLE=ON -DENABLE_OPENMP=ON -DENABLE_THREADS=ON -DBUILD_TESTS=NO -DCMAKE_INSTALL_PREFIX=/usr/unite/fftw3-3.3.7-pgi

След като процесът на конфигуриране завърши успешно, може да пристъпите към компилиране и инсталиране:

$ make -j6
$ make install

 

3. Използване на fftw3 библиотеките

Компилиране на код и свързването му с динамично свързаните fftw3 библиотеки (с използване на OpenMP):

  • с използването на GNU Compilers:

    $ gcc -I/usr/unite/fftw3-3.3.7-intel/include -c file.c -o file.o
    $ gcc -L/usr/unite/fftw3-3.3.7-gnu/lib64 -lfftw3l_omp -lfftw3l -o file file.o
  • с използването на Intel Compilers:

    $ icc -I/usr/unite/fftw3-3.3.7-intel/include -c file.c -o file.o
    $ icc -L/usr/unite/fftw3-3.3.7-intel/lib64 -lfftw3l_omp -lfftw3l -o file file.o
  • с използването на PGI Compilers:

    $ pgcc -I/usr/unite/fftw3-3.3.7-intel/include -c file.c -o file.o
    $ pgcc -L/usr/unite/fftw3-3.3.7-pgi/lib64 -lfftw3l_omp -lfftw3l -o file file.o

При изпълнението на код трябва да укажете пътя до библиотеките (с използване на OpenMP), например:

  • с използването на GNU Compilers:

    $ LD_LIBRARY_PATH=/usr/unite/fftw3-3.3.7-gnu/lib64:$LD_LIBRARY_PATH ./file
  • с използването на Intel Compilers:

    $ LD_LIBRARY_PATH=/usr/unite/fftw3-3.3.7-intel/lib64:$LD_LIBRARY_PATH ./file
  • с използването на PGI Compilers:

    $ LD_LIBRARY_PATH=/usr/unite/fftw3-3.3.7-pgi/lib64:$LD_LIBRARY_PATH ./file

Компилиране на код и свързването му със статично свързаните fftw3 библиотеки (с използване на OpenMP):

  • с използването на GNU Compilers:

    $ gcc -I/usr/unite/fftw3-3.3.7-gnu/include -c file.c -o file.o
    $ gcc -o file file.o /usr/unite/fftw3-3.3.7-gnu/lib64/libfftw3l.a /usr/unite/fftw3-3.3.7-gnu/lib64/libfftw3l_omp.a
  • с използването на Intel Compilers:

    $ icc -I/usr/unite/fftw3-3.3.7-intel/include -c file.c -o file.o
    $ icc -o file file.o /usr/unite/fftw3-3.3.7-intel/lib64/libfftw3l.a /usr/unite/fftw3-3.3.7-intel/lib64/libfftw3l_omp.a
  • с използването на PGI Compilers:

    $ pgcc -I/usr/unite/fftw3-3.3.7-pgi/include -c file.c -o file.o
    $ pgcc -o file file.o /usr/unite/fftw3-3.3.7-pgi/lib64/libfftw3l.a /usr/unite/fftw3-3.3.7-pgi/lib64/libfftw3l_omp.a

 


Последна актуализация: 7 март 2020

2020 УНИТе, Веселин Колев