在使用lammps的gpu加速的时候遇到了很多问题,这个问题看了很多论坛都没有找到好的解答,把我的情况和解决方案记录在这里,希望对大家有帮助。
一、报错情况
输入命令:
haichao@node01:~/JUNJIE/test_pureMC$ mpirun -np 64 lmp_mpi -sf gpu -pk gpu 1 -in pureMC3.in
( pureMC3.in 是我的in文件)
终端输出如下:
LAMMPS (8 Feb 2023)
ERROR: Unable to initialize accelerator for use (../gpu_extra.h:65)
Last command: package gpu 1
Cuda driver error 4 in call at file 'geryon/nvd_device.h' in line 429.
Cuda driver error 4 in call at file 'geryon/nvd_device.h' in line 430.
Cuda driver error 4 in call at file 'geryon/nvd_device.h' in line 429.
Cuda driver error 4 in call at file 'geryon/nvd_device.h' in line 430.
Cuda driver error 4 in call at file 'geryon/nvd_device.h' in line 429.
Cuda driver error 4 in call at file 'geryon/nvd_device.h' in line 430.
Cuda driver error 4 in call at file 'geryon/nvd_device.h' in line 429.
Cuda driver error 4 in call at file 'geryon/nvd_device.h' in line 430.
Cuda driver error 4 in call at file 'geryon/nvd_device.h' in line 429.
Cuda driver error 4 in call at file 'geryon/nvd_device.h' in line 430.
(截取了部分界面,主要的报错信息就是ERROR后面的语句以及cuda drive error 4)
二、解决方案
输入命令:
haichao@node01:~/JUNJIE/test_pureMC$ mpirun -np 4 lmp_mpi -sf gpu -pk gpu 1 -in pureMC3.in
###注意:这里的唯一改动就在于把并行运算的cpu核心数目从‘64’改为了‘4’!###
终端输出如下:
LAMMPS (8 Feb 2023)
Reading data file ...
orthogonal box = (2.2220993 0 -40.8) to (126.79883 129.02093 81.6)
2 by 2 by 1 MPI processor grid
reading atoms ...
118800 atoms
reading velocities ...
118800 velocities
read_data CPU = 0.320 seconds
Setting atom values ...
237 settings made for type/ratio
Setting atom values ...
47 settings made for type/ratio
Reading eam/alloy potential file MgCuAl.eam.alloy with DATE: 2023-03-01
后面就是正常的运行了,问题得到了解决< ^_^ >
三、总结
对于这个问题的原因,很明显就是在使用GPU加速的时候CPU核心数目过多了而导致的。我还不太清楚为什么会这样,我看到网上有人发帖说 “在用GPU加速算法的时候,在同样的GPU使用情况下,使用数量多的CPU反而计算速度下降,这可能是因为MD的运算都在GPU中运行,而过多的CPU数目反而会增加各个计算板块之间的通信时间。” 类比思考一下,我这个报错可能是因为GPU加速算法并不支持过多核数的CPU计算(没有测试过具体多少核数是上限度),因此产生了报错。
最后想补充一下我使用4CPU+1GPU的运算速度比我使用128CPU的运算速度还要快(没有定量计算过,在终端输出上肉眼就能看出来),所以GPU不能支持过多核数的CPU运算这个缺点是可以被GPU的速度弥补起来的。