您的位置:首页 > 其它

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

附件:

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: