参数说明:n为需要进行傅里叶变换的数据个数,in指向输入数据,out指向输出数据,sign(+1:逆傅里叶变换,-1:正傅里叶变换),flags只有两个值,FFTW_MEASURE:FFTW库花费一定的时间帮你设计最优计算时间的 fftw_plan ,如果程序对时间的消耗不是很敏感,可以设置次选项;FFTW_ESTIMATE:FFTW不进行任何的测试,直接创建 fftw_plan ,这个plan可能不是最优的,但是局部最优的。
NOTE: fftw_plan 一次创建可以重复使用。
不能使用
NOTE: FFTW的傅里叶变换未进行归一化,对一组数据进行傅里叶变换后,再对其进行逆变换前需要将数据除以n进行归一化。
需要在头文件中包含
如果没有包含上述头文件,则FFTW将采用默认支持的复数类型。
FFTW通过编译选项与前缀控制单双精度。
二维DFT变换:
表示对n0*n1的矩阵进行DFT,先对每一行进行DFT,然后对每一列进行DFT,这就是所谓的二维DFT。
三维维DFT变换:
一个可能的原因是 boost 的版本较低。
改进办法是执行如下命令:
# sudo apt-get install libboost-all-dev
然后按照文章步骤安装就可以了,为了便于阅览,我们把步骤也贴在这里:
机器 *** 作系统为 Ubuntu14.04,安装了 CUDA7.5。
在家目录下建立 gromacs 目录做为工作目录下,拷贝了 4 个安装包:
openmpi-1.6.5.tar.gz
fftw-3.3.3.tar.gz
cmake-2.8.9.tar
gromacs-5.0.4.tar.gz
1.安装 openmpi
$ cd ~/gromacs
$ tar –xvf openmpi-1.6.5.tar.gz
$ cd openmpi-1.6.5
$ ./configure --prefix=/opt/openmpi
$ sudo make
$ sudo make install
2.安装 fftw
$ cd ~/gromacs
$ tar –xvf fftw-3.3.3.tar.gz
$ cd fftw-3.3.3
$ ./configure --prefix=/opt/fftw –enable-float –enable-shared
$ sudo make
$ sudo make install
3.安装 cmake
$ cd ~/gromacs
$ tar xvf cmake-2.8.9.tar
$ cd cmake-2.8.9
$ ./bootstrap
$ sudo make
$ sudo make install
4.编译 gromacs GPU 版本
$ cd ~/gromacs
$ mkdir build-gpu
$ cd build-gpu
$ sudo cmake .. -DFFTWF_LIBRARY=/opt/fftw/lib/libfftw3f.so -DFFTWF_INCLUDE_DIR=/opt/fftw/include -DGMX_MPI=ON –DGMX_GPU=ON -DCMAKE_INSTALL_PREFIX=/opt/gromacs-5.0.4-gpu
$ sudo make
$ sudo make install
步骤 4 编译 gromacs 时,cmake 步骤如果有如下提示信息的话,说明 boost 版本低:
配置环境变量:
$ vi ~/.bashrc
增加如下内容:
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=$PATH:/opt/openmpi/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/openmpi/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/fftw/lib
export PATH=$PATH:/opt/gromacs-5.0.4-gpu/bin
保存退出。
关掉当前终端窗口,重新开启一个终端窗口。
下面我们测试一下样例程序在单 GPU 和多 GPU 的数据。
测试服务器配置如下:
CPU:2 颗 E5-2620(6 核心)
内存:64G
GPU:2 片 K80(每片 K80 有 2 核心,所以有 4 个 GPU 设备)
在家目录下建立目录 test,将 ADH_bench_systems.tar.gz 拷贝到该目录下。
$ cd ~/test
$ tar xvf ADH_bench_systems.tar.gz
$ cd adh_cubic
$ grompp_mpi –f rf_verlet.mdp
单 GPU 的调用命令是:
$ mdrun_mpi
或
$ mpirun –np 1 mdrun_mpi
多 GPU 的调用命令是:
$ mpirun –np 2 mdrun_mpi
或
$ mpirun –np 3 mdrun_mpi
或
$ mpirun –np 4 mdrun_mpi
单 GPU 设备执行数据如下图:
2 个 GPU 设备执行数据如下图:
3 个 GPU 设备执行数据如下图:
4 个 GPU 设备执行数据如下图:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)