Ubuntu12.04 安装 LAMMPS GPU 并行版
2015-07-25 09:43
330 查看
系统:Ubuntu 12.04
GPU:Nvidia Geforce Titan X
其他:Openmpi-1.802 + fftw-3.3.4 + lammps-15May15 + CUDA-7.0
一.安装cuda
1.下载cuda-repo-ubuntu1204-7-0-local_7.0-28_amd64.deb
2.运行
3.sudo gedit /etc/bash.bashrc
末尾插入:
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
二.安装openmpi
cd /home/txc/package
tar jxvf openmpi-1.8.2.tar.bz2
cd openmpi-1.8.2
./configure -prefix=/opt/openmpi
sudo make install -j 8
三.安装fftw
cd ..
tar zxvf fftw-3.3.4.tar.gz
cd fftw-3.3.4
./configure -prefix=/opt/fftw
sudo make install -j 8
四.添加环境变量
sudo gedit /etc/bash.bashrc
末尾插入:
export MPI=/opt/openmpi
export PATH=$MPI/bin:$PATH
export LD_LIBRARY_PATH=$MPI/lib:$LD_LIBRARY_PATH
export MANPATH=$MANPATH:$MPI/share/man
export INFOPATH=$INFOPATH:$MPI/share/man
export LD_LIBRARY_PATH=/opt/fftw/lib:$LD_LIBRARY_PATH
五.安装lammps
可以通过
make package-status
查看packages的选择状态
1.meam包
cd /home/txc/install/lammps-15May15/lib/meam
make -f Makefile.gfortran
2.poems包
cd ../poems
make -f Makefile.g++
3.reax包
cd ../reax
make -f Makefile.gfortran
4.gpu包
cd ../gpu
更改Makefile.linux(见附件)
(注:
CUDA_ARCH = -arch=sm_52 这里一定要根据自己的显卡设置,这里设置52是因为 Titan X的计算能力(compute capability)为5.2,3.0就设置30。
可以用以下命令查看:
cd /usr/local/cuda-7.0/samples/1_Utilities/deviceQuery
./deviceQuery
这行就是:
CUDA Capability Major/Minor version number: 5.2
或者在这里找:
https://en.wikipedia.org/wiki/CUDA
该参数设置不当则编译出的lammps计算时会报错:
Error: GPU library not compiled for this accelerator)
make -f Makefile.linux
5.cuda包
cd ../cuda
修改 Makefile.common最下面的内容:
else
CUDA_FLAGS += -DCUDA_ARCH=52
SMVERSIONFLAGS := -arch sm_52
(注:否则可能会报错:
nvcc fatal: Value 'sm_13' is not defined for option 'gpu-architecture'
make: *** [atom_vec_cuda_cu.o] 错误 1)
make CUDA_INSTALL_PATH=/usr/local/cuda cufft=2 precision=2 arch=52
6.Voronoi包(如有必要)
可参考lammps/lib/voronoi内Readme
下载voronoi文件
解压后cd目录
make
cd 啦啦啦/lammps/lib/voronoi
创建链接,具体目录自己改:
ln -s
/home/lwh/install/Lammps/voro++-0.4.6/src includelink
ln -s /home/lwh/install/Lammps/voro++-0.4.6/src liblink
后续操作见步骤7
7.
cd ../lammps/src
默认情况下:
make yes-gpu
make yes-user-cuda
make yes-meam
make yes-poems
make yes-reax
make yes-misc
make yes-VORONOI(如有必要)
make yes-SHOCK(如有必要)
8.
修改 /MAKE/OPTIONS/Makefile.ompi_g++(见附件)
9.
cd ../lammps-15May15/src
make ompi_g++ -j 8
sudo cp lmp_ompi_g++ /usr/bin/lmp
六.测试
mpirun -n 1 lmp < in.tensile >log.1cpu
mpirun -n 1 lmp -sf gpu < in.tensile >log.1gpu
mpirun -n 1 lmp -c on -sf cuda< in.tensile >log.1cuda
附件:
# Generic Linux Makefile for CUDA
# - Change CUDA_ARCH for your GPU
# ------------------------------------------------------------------------- */
# which file will be copied to Makefile.lammps
EXTRAMAKE = Makefile.lammps.standard
CUDA_HOME = /usr/local/cuda
NVCC = nvcc
CUDA_ARCH = -arch=sm_52
# Tesla CUDA
#CUDA_ARCH = -arch=sm_21
# newer CUDA
#CUDA_ARCH = -arch=sm_13
# older CUDA
#CUDA_ARCH = -arch=sm_10 -DCUDA_PRE_THREE
# this setting should match LAMMPS Makefile
# one of LAMMPS_SMALLBIG (default), LAMMPS_BIGBIG and LAMMPS_SMALLSMALL
LMP_INC = -DLAMMPS_SMALLBIG
# precision for GPU calculations
# -D_SINGLE_SINGLE # Single precision for all calculations
# -D_DOUBLE_DOUBLE # Double precision for all calculations
# -D_SINGLE_DOUBLE # Accumulation of forces, etc. in double
CUDA_PRECISION = -D_SINGLE_SINGLE
CUDA_INCLUDE = -I$(CUDA_HOME)/include
CUDA_LIB = -L$(CUDA_HOME)/lib64
CUDA_OPTS = -DUNIX -O3 -Xptxas -v --use_fast_math $(LMP_INC)
CUDR_CPP = mpic++ -DMPI_GERYON -DUCL_NO_EXIT -DMPICH_IGNORE_CXX_SEEK
CUDR_OPTS = -O2 $(LMP_INC) # -xHost -no-prec-div -ansi-alias
BIN_DIR = ./
OBJ_DIR = ./
LIB_DIR = ./
AR = ar
BSH = /bin/sh
CUDPP_OPT = -DUSE_CUDPP -Icudpp_mini
include Nvidia.makefile
2.Makefile.ompi_g++
# ompi_g++ = g++ compiler and OpenMPI via MPI wrapper
SHELL = /bin/sh
# ---------------------------------------------------------------------
# compiler/linker settings
# specify flags and libraries needed for your compiler
OMPI_CXX := g++
CC = mpicxx
CCFLAGS = -g -O3
SHFLAGS = -fPIC
DEPFLAGS = -M
LINK = mpicxx
LINKFLAGS = -g -O
LIB =
SIZE = size
ARCHIVE = ar
ARFLAGS = -rc
SHLIBFLAGS = -shared
# ---------------------------------------------------------------------
# LAMMPS-specific settings, all OPTIONAL
# specify settings for LAMMPS features you will use
# if you change any -D setting, do full re-compile after "make clean"
# LAMMPS ifdef settings
# see possible settings in Section 2.2 (step 4) of manual
LMP_INC = -DLAMMPS_GZIP
# MPI library
# see discussion in Section 2.2 (step 5) of manual
# MPI wrapper compiler/linker can provide this info
# can point to dummy MPI library in src/STUBS as in Makefile.serial
# use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts
# INC = path for mpi.h, MPI compiler settings
# PATH = path for MPI library
# LIB = name of MPI library
MPI_INC = -I/opt/openmpi/include -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1
MPI_PATH =
MPI_LIB = -L/opt/openmpi/lib -lmpi
# FFT library
# see discussion in Section 2.2 (step 6) of manaul
# can be left blank to use provided KISS FFT library
# INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings
# PATH = path for FFT library
# LIB = name of FFT library
FFT_INC = -DFFT_FFTW3 -I/opt/fftw/include
FFT_PATH =
FFT_LIB = -L/opt/fftw/lib -lfftw3
# JPEG and/or PNG library
# see discussion in Section 2.2 (step 7) of manual
# only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC
# INC = path(s) for jpeglib.h and/or png.h
# PATH = path(s) for JPEG library and/or PNG library
# LIB = name(s) of JPEG library and/or PNG library
JPG_INC =
JPG_PATH =
JPG_LIB =
# ---------------------------------------------------------------------
# build rules and dependencies
# do not edit this section
include Makefile.package.settings
include Makefile.package
EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC)
EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH)
EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB)
# Path to src files
vpath %.cpp ..
vpath %.h ..
# Link target
$(EXE): $(OBJ)
$(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE)
$(SIZE) $(EXE)
# Library targets
lib: $(OBJ)
$(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ)
shlib: $(OBJ)
$(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \
$(OBJ) $(EXTRA_LIB) $(LIB)
# Compilation rules
%.o:%.cpp
$(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $<
%.d:%.cpp
$(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@
%.o:%.cu
$(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $<
# Individual dependencies
DEPENDS = $(OBJ:.o=.d)
sinclude $(DEPENDS)
GPU:Nvidia Geforce Titan X
其他:Openmpi-1.802 + fftw-3.3.4 + lammps-15May15 + CUDA-7.0
一.安装cuda
1.下载cuda-repo-ubuntu1204-7-0-local_7.0-28_amd64.deb
2.运行
3.sudo gedit /etc/bash.bashrc
末尾插入:
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
二.安装openmpi
cd /home/txc/package
tar jxvf openmpi-1.8.2.tar.bz2
cd openmpi-1.8.2
./configure -prefix=/opt/openmpi
sudo make install -j 8
三.安装fftw
cd ..
tar zxvf fftw-3.3.4.tar.gz
cd fftw-3.3.4
./configure -prefix=/opt/fftw
sudo make install -j 8
四.添加环境变量
sudo gedit /etc/bash.bashrc
末尾插入:
export MPI=/opt/openmpi
export PATH=$MPI/bin:$PATH
export LD_LIBRARY_PATH=$MPI/lib:$LD_LIBRARY_PATH
export MANPATH=$MANPATH:$MPI/share/man
export INFOPATH=$INFOPATH:$MPI/share/man
export LD_LIBRARY_PATH=/opt/fftw/lib:$LD_LIBRARY_PATH
五.安装lammps
可以通过
make package-status
查看packages的选择状态
1.meam包
cd /home/txc/install/lammps-15May15/lib/meam
make -f Makefile.gfortran
2.poems包
cd ../poems
make -f Makefile.g++
3.reax包
cd ../reax
make -f Makefile.gfortran
4.gpu包
cd ../gpu
更改Makefile.linux(见附件)
(注:
CUDA_ARCH = -arch=sm_52 这里一定要根据自己的显卡设置,这里设置52是因为 Titan X的计算能力(compute capability)为5.2,3.0就设置30。
可以用以下命令查看:
cd /usr/local/cuda-7.0/samples/1_Utilities/deviceQuery
./deviceQuery
这行就是:
CUDA Capability Major/Minor version number: 5.2
或者在这里找:
https://en.wikipedia.org/wiki/CUDA
该参数设置不当则编译出的lammps计算时会报错:
Error: GPU library not compiled for this accelerator)
make -f Makefile.linux
5.cuda包
cd ../cuda
修改 Makefile.common最下面的内容:
else
CUDA_FLAGS += -DCUDA_ARCH=52
SMVERSIONFLAGS := -arch sm_52
(注:否则可能会报错:
nvcc fatal: Value 'sm_13' is not defined for option 'gpu-architecture'
make: *** [atom_vec_cuda_cu.o] 错误 1)
make CUDA_INSTALL_PATH=/usr/local/cuda cufft=2 precision=2 arch=52
6.Voronoi包(如有必要)
可参考lammps/lib/voronoi内Readme
下载voronoi文件
解压后cd目录
make
cd 啦啦啦/lammps/lib/voronoi
创建链接,具体目录自己改:
ln -s
/home/lwh/install/Lammps/voro++-0.4.6/src includelink
ln -s /home/lwh/install/Lammps/voro++-0.4.6/src liblink
后续操作见步骤7
7.
cd ../lammps/src
默认情况下:
make yes-gpu
make yes-user-cuda
make yes-meam
make yes-poems
make yes-reax
make yes-misc
make yes-VORONOI(如有必要)
make yes-SHOCK(如有必要)
8.
修改 /MAKE/OPTIONS/Makefile.ompi_g++(见附件)
9.
cd ../lammps-15May15/src
make ompi_g++ -j 8
sudo cp lmp_ompi_g++ /usr/bin/lmp
六.测试
mpirun -n 1 lmp < in.tensile >log.1cpu
mpirun -n 1 lmp -sf gpu < in.tensile >log.1gpu
mpirun -n 1 lmp -c on -sf cuda< in.tensile >log.1cuda
附件:
1.Makefile.linux
# /* ----------------------------------------------------------------------# Generic Linux Makefile for CUDA
# - Change CUDA_ARCH for your GPU
# ------------------------------------------------------------------------- */
# which file will be copied to Makefile.lammps
EXTRAMAKE = Makefile.lammps.standard
CUDA_HOME = /usr/local/cuda
NVCC = nvcc
CUDA_ARCH = -arch=sm_52
# Tesla CUDA
#CUDA_ARCH = -arch=sm_21
# newer CUDA
#CUDA_ARCH = -arch=sm_13
# older CUDA
#CUDA_ARCH = -arch=sm_10 -DCUDA_PRE_THREE
# this setting should match LAMMPS Makefile
# one of LAMMPS_SMALLBIG (default), LAMMPS_BIGBIG and LAMMPS_SMALLSMALL
LMP_INC = -DLAMMPS_SMALLBIG
# precision for GPU calculations
# -D_SINGLE_SINGLE # Single precision for all calculations
# -D_DOUBLE_DOUBLE # Double precision for all calculations
# -D_SINGLE_DOUBLE # Accumulation of forces, etc. in double
CUDA_PRECISION = -D_SINGLE_SINGLE
CUDA_INCLUDE = -I$(CUDA_HOME)/include
CUDA_LIB = -L$(CUDA_HOME)/lib64
CUDA_OPTS = -DUNIX -O3 -Xptxas -v --use_fast_math $(LMP_INC)
CUDR_CPP = mpic++ -DMPI_GERYON -DUCL_NO_EXIT -DMPICH_IGNORE_CXX_SEEK
CUDR_OPTS = -O2 $(LMP_INC) # -xHost -no-prec-div -ansi-alias
BIN_DIR = ./
OBJ_DIR = ./
LIB_DIR = ./
AR = ar
BSH = /bin/sh
CUDPP_OPT = -DUSE_CUDPP -Icudpp_mini
include Nvidia.makefile
2.Makefile.ompi_g++
# ompi_g++ = g++ compiler and OpenMPI via MPI wrapper
SHELL = /bin/sh
# ---------------------------------------------------------------------
# compiler/linker settings
# specify flags and libraries needed for your compiler
OMPI_CXX := g++
CC = mpicxx
CCFLAGS = -g -O3
SHFLAGS = -fPIC
DEPFLAGS = -M
LINK = mpicxx
LINKFLAGS = -g -O
LIB =
SIZE = size
ARCHIVE = ar
ARFLAGS = -rc
SHLIBFLAGS = -shared
# ---------------------------------------------------------------------
# LAMMPS-specific settings, all OPTIONAL
# specify settings for LAMMPS features you will use
# if you change any -D setting, do full re-compile after "make clean"
# LAMMPS ifdef settings
# see possible settings in Section 2.2 (step 4) of manual
LMP_INC = -DLAMMPS_GZIP
# MPI library
# see discussion in Section 2.2 (step 5) of manual
# MPI wrapper compiler/linker can provide this info
# can point to dummy MPI library in src/STUBS as in Makefile.serial
# use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts
# INC = path for mpi.h, MPI compiler settings
# PATH = path for MPI library
# LIB = name of MPI library
MPI_INC = -I/opt/openmpi/include -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1
MPI_PATH =
MPI_LIB = -L/opt/openmpi/lib -lmpi
# FFT library
# see discussion in Section 2.2 (step 6) of manaul
# can be left blank to use provided KISS FFT library
# INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings
# PATH = path for FFT library
# LIB = name of FFT library
FFT_INC = -DFFT_FFTW3 -I/opt/fftw/include
FFT_PATH =
FFT_LIB = -L/opt/fftw/lib -lfftw3
# JPEG and/or PNG library
# see discussion in Section 2.2 (step 7) of manual
# only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC
# INC = path(s) for jpeglib.h and/or png.h
# PATH = path(s) for JPEG library and/or PNG library
# LIB = name(s) of JPEG library and/or PNG library
JPG_INC =
JPG_PATH =
JPG_LIB =
# ---------------------------------------------------------------------
# build rules and dependencies
# do not edit this section
include Makefile.package.settings
include Makefile.package
EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC)
EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH)
EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB)
# Path to src files
vpath %.cpp ..
vpath %.h ..
# Link target
$(EXE): $(OBJ)
$(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE)
$(SIZE) $(EXE)
# Library targets
lib: $(OBJ)
$(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ)
shlib: $(OBJ)
$(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \
$(OBJ) $(EXTRA_LIB) $(LIB)
# Compilation rules
%.o:%.cpp
$(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $<
%.d:%.cpp
$(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@
%.o:%.cu
$(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $<
# Individual dependencies
DEPENDS = $(OBJ:.o=.d)
sinclude $(DEPENDS)
相关文章推荐
- linux下查看硬件架构
- Xamarin.Android开发实践(十)
- 渐开线函数工具
- PAT (Advanced Level) 1040. Longest Symmetric String (25) 动态规划
- 欢迎使用CSDN-markdown编辑器
- 自定义view,实现listview效果优化内存
- 90行python搭一个音乐搜索工具 —— Song Finder
- DDR3的理
- Linux下关闭开启防火墙
- Xamarin.Android开发实践(九)
- Android BLE开发之Android手机与BLE终端通信
- Chapter 2: Binary Search & Sorted Array
- C 语言和C++语言的 struct对比
- 开方
- Hdu 2236 无题II 最大匹配+二分
- HDU 5288 OO’s Sequence (暴力枚举因子)
- [Python学习] 简单网络爬虫抓取博客文章及思想介绍
- leetCode 87.Scramble String (拼凑字符串) 解题思路和方法
- domino服务器上,如何在服务器设置定时(每周)压缩数据库?
- SUN服务器