Windows环境下LAMMPS使用GPU加速运算

1.安装Lammps

下载安装lammps
https://rpm.lammps.org/windows/64bit/LAMMPS-64bit-latest-MPI.exe

2.安装mpich2

首先参考了以下三个博客:
https://blog.csdn.net/muyangzixue/article/details/112758801
https://blog.csdn.net/weixin_43937568/article/details/84927570
https://blog.csdn.net/linkus_/article/details/92649702

2.1 下载mpich2-1.4.1p1-win-x86-64.msi
链接https://www.mpich.org/static/downloads/1.4.1p1/
首先,确保你是管理员身份登录的电脑,并且该用户登录时设置了密码。检查管理员身份的方法是:右键“我的电脑”—选择“管理”—弹出对话框“计算机管理”—选择本地用户和组—双击“用户”,可以设置密码和管理权限(具体操作百度上有)

2.2以管理员身份安装

这一步是第一个坑。大多数帖子都提到了一定要以管理员身份安装,且win10中无法直接通过右键选择以管理员身份安装.msi文件。

最简单的方法是在左下角win图标上右键,点击命令提示符(管理员),进入msi文件目录(百度win进入特定路径的命令,必备技能),然后输入命令msiexec /package 文件名,我的输入:
msiexec /package mpich2-1.4.1p1-win-x86-64.msi
部分电脑可能需要安装 NET Framework 3.5

2.3 进入安装过程
(第二个坑)在process manager setup页面输入电脑登录密码,点击next。一定要输入电脑登陆密码不要用behappy这个默认短语,这一点很少有人提,但我就是改了这一点后终于成功了;

过程中会弹出安装对话框,接下来的步骤需要选择for everyone选项,不是just for me,设置想要安装的文件夹即可;

2.4 此时需要添加/检查lammps安装目录下的bin文件所在路径和mpich2安装目录下bin文件所在路径到电脑的环境变量中:
具体操作:右键“我的电脑”—选择“属性”——选择“高级系统设置”——“环境变量”——将两个bin文件均复制到系统变量和环境变量的path目录下,如果已经存在,不需要复制,不存在的要新建并添加路径;

2.5 设置完路径以后,到mpich安装目录的bin文件下,以管理员身份运行cmd,分别输入以下命令:
a)smpd -install ,等待smpd安装完成
b)mpiexec -remove ,等待mpich中的注册信息删除,若失败,表明先前没有注册信息,可直接进行下一步;
c)mpiexec -register ,重新注册mpich的使用用户;在执行此命令时,需要你输入用户名,该用户名就是此时cmd命令行前显示的用户名,复制以后粘贴在该命令行回车即可;然后再输入密码。我的如下(用户名就是中括号中的内容DESKTOP-E02E8P9\18204),一定要用后一个名称即这里的18204,即使是中文亦可。
d)mpiexec -validate ,此时应显示(it should return SUCCESS) ,意味着安装成功
e)smpd -status此时会显示 (it should return ‘smpd running on ‘),意味着smpd在运行。
至此,lammps和mpich均已安装成功。
有时可能需要重启电脑才能使用mpich

2.6 运行并行版lammps
通过cmd命令行进入lammps的安装目录,进入examples目录下,进入meam文件夹,执行命令:
mpiexec -np 8 lmp – in in.meam

数字8表示调用的核数,可以根据电脑配置和需求修改

3.安装CUDA

首先需要安装CUDA,下载网址在此
CUDA Toolkit 10.2 Download
程序检查系统兼容性完成后,点击同意并继续,选择自定义(高级),如下图

点击下一步

去除勾选下图中的三项后点击下一步

去除勾选的三项LAMMPS用不到。硬盘空间够大的同学,也可以勾选
接下来选择安装位置,如果你的电脑C盘有3G以上空闲空间,可使用默认选择(本教程使用默认安装位置,如果改变了安装位置,请记住),点击下一步

接下来程序将会自动安装,安装完成后关闭程序。

3.1修改OpenCL注册表

CUDA安装程序由于不明原因未在注册表中加入信息,所以需要手动修改
!!!注意:非本教程外的注册表内容千万不要修改!!!

首先,打开如下图所示文件夹(C:\Windows\System32\DriverStore\FileRepository),并按修改日期进行排序,挨个打开nvXXX字样文件夹查找有没有nvopencl64.dll文件。

如果有,请记住文件地址,如:

C:\Windows\System32\DriverStore\FileRepository\nvltui.inf_amd64_b91ae94e453c7d06\nvopencl64.dll

!!!加粗字段每个电脑不一样,复制自己电脑的!!!

右键点击屏幕左下角Windows图标打开“运行”(win+r也可以打开),输入regedit,回车

在注册表编辑器中找到此位置HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors

(没有OpenCL\Vendors的右键Khronos-新建-项自行建立)

此时界面如下图所示

在右边大窗口空白处右键->新建->DWORD(32位)值,将前边nvopencl64.dll的地址粘贴进去如上图所示(修改此位置的地址请右键->重命名)

按照chiphell论坛用户cannibal2008的说法,英伟达驱动每个版本文件夹名都会改变,所以请在更新显卡驱动后修改此位置的名称。在此感谢cannibal2008提供的修改思路。
找到Win10下Intel/AMD/NVIDIA三家OPENCL共存修复方法了 – 电脑讨论 – Chiphell – 分享与交流用户体验

最后进入HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Khronos\OpenCL\Vendors重复上边的操作,但与上一步有一处不同,这一步是把nvopencl32.dll地址复制进去(上一步地址64改为32即可)

3.2 测试是否成功

进入你的L AMMPS安装位置(串行/并行皆可),进入bin文件夹,按住shift点击右键,选择在此处打开Powershell窗口(win7/win8可能是cmd窗口)
在bin文件夹中运行ocl_get_devices.exe
Powershell打开后,输入cmd回车,再输入ocl_get_devices.exe回车(此处具体看你bin文件夹中该文件的名字,有的可能是ocl_get_devices,则输入ocl_get_devices后回车)

如果显示信息类似下图字样,则证明CUDA安装成功;如果是Found 0 platform(s),则未成功,请仔细重复上边的两个操作。

找到平台
3.3 运行LAMMPS程序进行测试

本例使用LAMMPS安装目录下Benchmarks中的in.eam进行测试
并行代码

mpiexec -np 8 lmp -in in.eam -sf gpu -pk gpu 1

串行代码

lmp -in in.eam -sf gpu -pk gpu 1

运行结束后,如果出现如上图中Device Time Info (average):则证明调用显卡成功

 

#有intel核心显卡的电脑(例如大部分笔记本电脑)未进行测试,可能会有问题。#
Intel核心显卡与Nvidia显卡并存的笔记本已经测试完成,需要在本贴的基础上进行一些操作,详见

Windows环境下LAMMPS使用GPU加速运算(二、笔记本篇)

在Windows环境下显卡运算只能以SINGLE_DOUBLE模式进行运算,无法修改,其运算方式如下

It allows for GPU computations to be performed in single or double precision, or in mixed-mode precision, where pairwise forces are computed in single precision, but accumulated into double-precision force vectors.
不同模式的区别如下,如想要更改模式请使用Linux

# -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
更多关于GPU加速的信息详见LAMMPS手册

https://lammps.sandia.gov/doc/Speed_gpu.html
​lammps.sandia.gov/doc/Speed_gpu.html

1.修改OpenCL注册表

与单独显电脑不同的是,笔记本有两个显卡,在执行ocl_get_devices.exe时会出现两个平台,一般第一个是核心显卡,第二个才是独立显卡。而LAMMPS无法调用核心显卡运算,会提示Unable to initialize accelerator for use

因为LAMMPS默认会选择第一个平台,即Platform 0,所以按照这个思路两个平台互换一下位置即可

那么开始操作吧!

打开注册表,找到此位置HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors


重命名IntelOpenCL64.dll,例如改成IntelOpenCL64.dll1,千万不要删掉,后边还要改回来

再找到HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Khronos\OpenCL\Vendors

重命名IntelOpenCL32.dll,也是上边的操作

此时运行ocl_get_devices.exe,会显示只有一个平台,而且是你的独立显卡

只有一个平台且为你的独立显卡

还记得前边重命名的IntelOpenCL64.dll和IntelOpenCL32.dll吗?现在把他们改回来原来的名字,再运行一次ocl_get_devices.exe,两个平台位置就调换过来啦!

两个平台位置调换成功

这时候再运行LAMMPS就可以完美使用GPU进行运算啦

完美运行

上一篇
下一篇