fftw 編譯安裝說明

FFTW 數學庫 



 

官網地址:

http://www.fftw.org/

 

下載地址:

http://www.fftw.org/download.html

 

目前最新版本爲

Version 3.3.6 is the latest stable release of FFTW ( 截止2017-04-30)

 

1.什麼是DFT?

DFT(Discrete Fourier Transform),即離散傅里葉變換,是傅里葉變換在時域和頻域上都呈離散的形式,將信號的時域採樣變換爲其DTFT的頻域採樣。


2.什麼是FFT?

FFTFast Fourier Transformation),即爲快速傅氏變換,是離散傅氏變換(DFT)的快速算法,它是根據離散傅氏變換的奇、偶、虛、實等特性,對離散傅立葉變換的算法進行改進獲得的。

 

3.什麼是FFTW?

FFTW ( the Faster Fourier Transform in the West)是一個快速計算離散傅里葉變換的標準C語言程序集,其由MITM.FrigoS. Johnson開發。可計算一維或多維實和複數據以及任意規模的DFT


4.FFTW庫所需的編譯環境

Intel Compiler /GNU Compiler + MPI Compiler (如果編譯mpi版的fftw)

 

5.安裝 Intel Compiler編譯器,設置編譯環境(如果使用intel的編譯器)

如果使用的是IntelCPU,建議使用Intel的編譯器。

詳細安裝方法參見博客相關文章。

 

例如使用TH-1AIntel 2013編譯器編譯lammps,可以加載如下環境變量:

source /opt/intel/composer_xe_2013.0.079/bin/iccvars.sh intel64    
source /opt/intel/composer_xe_2013.0.079/bin/ifortvars.sh intel64  

6.安裝 MPI Compiler,設置編譯環境

編譯並行版的程序需要並行編譯器,例如MPI並行的程序需要MPI編譯器,常用的MPI例如Intel MPI MPICHOPENMPI等。

不同的機器可能針對自身硬件進行MPI優化,天河系統的MPI是基於開源MPICH進行的二次開發優化,進而支持性能卓越的天河自主高速互聯網絡。

詳細安裝方法參見博客相關文章。


例如使用TH-1AIntel 2013編譯器編譯的mpich,可以加載如下環境變量:

export MPI_HOME=/usr/local/mpi-intel2013
export PATH=$MPI_HOME/bin:$PATH      
export LD_LIBRARY_PATH=$MPI_HOME/lib:$LD_LIBRARY_PATH  


7.默認編譯fftw-3.3.6

安裝fftw僅需要遵循常見的三步驟即可(configure+make+make install),在這裏先介紹一下默認安裝,再然着重介紹一些configure的配置選項。

 

fftw-3.3.6-pl2.tar.gz爲例,先從官網下載該壓縮包。解壓縮,並進入源碼目錄進行編譯即可。

tar zxvf fftw-3.3.6-pl2.tar.gz
cd fftw-3.3.6-pl2
./configure
make
make install

這樣就可以把fftw庫按照默認配置,安裝到默認的路徑下。

使用的是GNU的編譯器,安裝到的是/usr/local下面。


8.優化編譯參數介紹

但是,我們通常會依據./configure -help得到的信息來添加一些參數來達到優化編譯的目錄。

接下來我們使用命令查看一些常用配置參數:

 

Installation directories:

--prefix=PREFIX    install architecture-independent files in PREFIX[/usr/local]

設定安裝目錄

 

Optional Features:

--enable-shared[=PKGS]    build shared libraries [default=no]

是否編譯動態庫


--enable-static[=PKGS]    build static libraries [default=yes]

是否編譯靜態庫


--enable-single         compile fftw in single precision

--enable-float          synonym for --enable-single

是否編譯單精度版本


--enable-sse            enable SSE optimizations

--enable-sse2           enable SSE/SSE2 optimizations

--enable-avx            enable AVX optimizations

--enable-avx2           enable AVX2 optimizations

--enable-neon           enable ARM NEON optimizations

開啓針對特定機器架構的優化,這個取決於機器CPU(下面有介紹)。

 

--enable-fma            enable optimizations for machineswith fused multiply-add

開啓積和熔加運算(Fused Multiply-Add/FMA)的優化


--enable-mpi            compile FFTW MPI library

是否編譯mpi版的fftw


--enable-openmp         use OpenMP directives for parallelism

是否使用OpenMP指令進行並行


--enable-threads        compile FFTW SMP threads library

是否編譯FFTW SMP線程庫


Some influential environment variables:

  CC          C compiler command

  CFLAGS      C compiler flags

  CPP         C preprocessor

  MPICC       MPI C compiler command

  F77         Fortran 77 compiler command

  FFLAGS      Fortran 77 compiler flags

這部分是指定編譯器及編譯參數,默認是用GNU的編譯器。

爲了用intel的編譯器,我們需要特別指定一下:CC=icc F77=ifort,相關的參數通常保持默認即可。

 

備註:

1)如何查看CPU是否支持某個指令集呢?使用如下命令可以列出支持的指令集名稱

cat /proc/cpuinfo | grep flags | uniq


2)SIMD

SIMD單指令流多數據流(SingleInstructionMultiple Data,SIMD)是一種採用一個控制器來控制多個處理器,同時對一組數據(又稱“數據向量”)中的每一個分別執行相同的操作從而實現空間上的並行性的技術。


MMX是由英特爾開發的一種SIMD多媒體指令集,SSEStreaming SIMDExtensions)是MMX的擴充指令集,AVXAdvanced VectorExtensions)是IntelSSE延伸架構,FMAFused MultiplyAccumulate)是IntelAVX擴充指令集。


NEON實際上是ARMSIMDSingle InstructionMultiple Data)技術的延續,它是一個結合64128 bitSIMDSingle InstructionMultiple Data 單指令多重數據)指令集。


9.優化編譯單雙精度版本的FFTW

tar zxvf fftw-3.3.3.tar.gz
cd fftw-3.3.3

# 單精度
./configure --prefix=$HOME/software/fftw/3.3.6-pl2-icc13 \
  CC=icc F77=ifort \
  --enable-shared --enable-static \
  --enable-float \
  --enable-sse --enable-sse2 \
  --enable-avx --enable-avx2 --enable-fma \
  --enable-mpi \
  --enable-threads--enable-openmp
make
make install

# clean一下
make clean

# 雙精度
./configure --prefix=$HOME/software/fftw/3.3.6-pl2-icc13 \
  CC=icc F77=ifort \
  --enable-shared --enable-static \
  --enable-sse2 --enable-avx --enable-avx2 --enable-fma \
  --enable-mpi \
  --enable-threads--enable-openmp
make
make install

歡迎交流!




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章