目录
最近又折腾了一下系统,顺便也就想尝试一下GIMPS别的跑法。本文总结了一下在GIMPS项目中推荐使用的几款软件以及它们的使用方法。关于什么是GIMPS,请参考我之前的文章。GIMPS项目依赖PrimeNet网络进行任务的分发和收集,目前在测试新的梅森素数时PrimeNet会依次分配三种任务:Trial Factoring、P-1分解和Probable Prime测试。因此本文主要介绍这三类任务的运行方法和推荐策略。
首先在跑这些测试的时候,如果你不想获得分数则可以直接使用这些软件;但是我还是推荐在GIMPS网站上注册一个账号,以便访问PrimeNet自动获取和提交任务,这样是最高效地参与下一个梅森素数的寻找。
这些软件的使用一般都有两个方法,可以使用命令行参数输入也可以通过从worktodo.txt
文件中读取。worktodo.txt
里面任务的格式是由PrimeNet定义的,如果你从GIMPS官网手动下载任务,那么获取到的是文本内容,每一行会定义一个任务。这样的文本放进worktodo.txt
便可以被下文的软件所识别。
mprime
: 支持CPU上的所有任务
mprime
是GIMPS官方开发的素数测试软件,在Windows上它的另一个名字叫prime95
(P95),被广泛地用于装机之后的压力测试。这个软件支持PrimeNet所有的计算任务,它只能使用CPU进行计算,但是它针对各种CPU都做了完备的优化,因此如果你想在CPU上运行素数测试直接去用官方的软件就好~
mprime
正式发布的版本可以在GIMPS官网下载到,而最新的测试版软件可以在镜像网站1下载到。
Linux下的mprime
用命令行即可运行,在使用之前可能需要安装GMP高精度计算库(Ubuntu下运行sudo apt install libgmp10
即可);而Windows下prime95
对应的库文件已经打包进去,不需要额外安装库。在第一次运行软件的时候,程序会首先提示加入PrimeNet,这是需要输入你在GIMPS上的用户名(注意这里不要输入昵称)。之后设置计算任务的偏好、每天运行的时间、使用多少CPU和内存等等。mprime
里面有多个worker,每个worker可以运行不同的计算任务,并且会利用多个进程进行计算。调整每个worker的设置可以更细粒度地调整计算资源的分配。
在Linux下使用
mprime
还有个需要注意的点是在第一次运行设置好之后,后面每次启动mprime
就不会在命令行输出内容了。如果想继续使用菜单需要用mprime -m
命令启动。
mfaktc
: 支持GPU上的TF任务
GPU相比CPU更适合并行计算,而TF是其中很适合并行的任务,因此它的效率是最高的,也是GPU相比CPU最有优势的项目。而其他的两个任务在GPU上跑时程序只能利用GPU的FFT算法加速乘法计算,无法利用其他性能。
GPU计算TF目前大家都使用的软件是mfaktc
(基于CUDA)和mfakto
(基于OpenCL)。它们编译好的版本可以在镜像网站1下载到。需要注意的是,镜像网站下载的版本对mfaktc
有一定改进(主要是调整了一些参数以适应新显卡),因此如果你从源文件编译的话可以使用镜像里也提供的更改后的源码。另外,如果下载已经编译好的包的话需要安装对应版本的CUDA运行时。
它们的使用方法很简单,以mfaktc
为例:从GIMPS官网下载任务后放在一个worktodo.txt
文件里,然后在同目录运行mfaktc
即可开始。最开始的时候mfaktc
会有自检流程,如果你的显卡驱动或者硬件有问题,mfaktc
会报错。这其实也是一种检查显卡有没有问题的方法hhh。
mfaktc
也被一些BOINC上的素数寻找项目所使用,例如SRBase就利用这个软件分发任务给用户,并且它的TF结果也会上传回PrimeNet。因此如果你参与BOINC上的一些素数项目,它们也会给PrimeNet贡献结果,只是这些结果不会在计算到GIMPS里你的用户上面。
GpuOwl
: 支持GPU上的PRP任务
GpuOwl
是由Mihal Preda编写的开源软件2,它是这几个GPU软件中唯一还在持续更新的软件,因此这里的教程也可能随着更新而失效。在写这篇博客的时候,GpuOwl
的最新版本是v7.2。它在Windows下的可执行文件可以在镜像网站1下载到,而Linux版则大概率是需要自己编译的
GpuOwl
支持PRP和PM1任务,但是它主要用途是利用GPU计算PRP任务。由于只有GpuOwl
计算时可以提供PRP的证明文件,因此目前不推荐使用其他的同类软件(例如CudaLucas
)。使用GpuOwl
自带的primenet.py
文件3可以实现自动任务获取和提交。
GpuOwl
支持多GPU计算,使用方法是启动多个GpuOwl
进程,每个进程使用-device
指定所使用的GPU,再使用-pool
指定多个GPU共享的任务目录。把计算任务在这个目录的worktodo.txt
文件里,每个GpuOwl
都会按需从这个文件中获取任务进行计算。
GpuOwl
+ mprime
: 支持GPU上的PM1任务
原生支持PM1任务的软件有GpuOwl
和CUDAPm1
,后者的代码快10年没什么更新了,而且只支持N卡,因此实际上好用的还是GpuOwl
。GpuOwl
在最近的更新之后支持一个骚操作,就是由它来计算PM1任务的一阶段,然后把结果导入到mprime
里面计算二阶段。这样的话既可以利用GPU的计算能力,又可以利用大量的内存来计算二阶段(一般而言GPU的内存容量是小于主机RAM的,而计算二阶段时的内存是越多越好)。目前使用GpuOwl
是无法直接得到PM1任务的结果的,因为代码里没有计算最后的最大公约数这一步,因此目前必须捆绑mprime
使用。
具体的使用方法是在运行GpuOwl
的时候指定-mprimeDir
目录,将一阶段的计算结果以mprime
可以读取的格式存到这个目录下。这个目录会生成每个指数对应的文件和一个worktodo.add
文件。之后把这些文件拷贝到mprime
所在目录下mprime
就会识别这些任务并加到它自己的worktodo.txt
里面。
在使用者方法时可以考虑限制一下
mprime
不要获取新的任务,而是只跑GpuOwl
生成的任务。按照作者的推荐,可以在mprime
同目录下的prime.txt
中增加如下设置:
1 2 3 4
SequentialWorkToDo=1 MaxExponents=1000 UnreserveExponents=1000 NoMoreWork=1
INI
任务类型之间的得分效率对比
如果你像我一样想在GIMPS上拿到更高的分数,那么有必要了解的是这三种的任务的得分效率是不同的。虽然GIMPS分数的计算是根据任务的计算量来的,但是由于硬件型号、软件优化等问题,这个工作量只能是一个估计值,而且它并不与实际所花时间成正相关。GIMPS的工作量单位是Ghz-Days,例如1GHD的计算量等价于1Ghz的CPU计算24小时达到的计算量。
根据我的经验,TF任务的得分效率最高、PM1次之、而PRP最低。我虽然没有做过CPU的实验,但是在GPU上我的经验是一张1080Ti左右的显卡,TF的得分效率可以达到700GHD每天,PM1的话有200到300,而PRP的效率只有100~200GHD每天。因此这三个任务的选择逻辑大概是:如果想拿到最多的分数就跑TF、如果想利用内存或者找到大因数就跑PM1、如果想成为发现下一个梅森素数的人就跑PRP。如果你想自己去测试效率的话可以使用这个得分计算器。
另外根据我的经验(主要是用GPU跑),每个任务分别的效率比较如下:
- TF:位数越低、指数越低则效率越高(也就是说PrimeNet的前沿任务是最高效的)
根据
mfaktc
的估计值来看,用1080Ti跑73-74位数的时候,2亿左右的指数效率在每天750GHD左右,但是9亿就只有700GHD了。 - PM1: 指数越低、B2越高则效率越高。另外同指数情况下,得分主要由B2决定,因此最好设置B1为比较低的值。
提供几个参考数据(用13700K和4090,GPU跑一阶段,CPU四线程跑二阶段)
指数 B1 B2 一阶段耗时 二阶段耗时 最终得分 得分效率 1.19亿 240万 2.6亿 2小时 2.5小时 126GHD 28GHD/小时 1.19亿 320万 2.6亿 2.5小时 2.5小时 132GHD 26GHD/小时 3.32亿 320万 2.1亿 7小时 19.5小时 362GHD 13.6GHD/小时 3.32亿 320万 1.8亿 7小时 18.5小时 323GHD 12.7GHD/小时 - PRP:似乎指数越高则效率越高,但是差距不是很大
RTX4080上1.13亿左右的指数需要跑53个小时,得分大概500GHD,效率为每小时9.4GHD;而3.32亿左右的指数跑需要500小时,得分大概5000GHD,效率为每小时10GHD。
本文粗略地介绍了以上这些软件的用法,如有更高级的需要可以参考各软件自带的说明文件(都很简陋),或者Mersenne论坛的这一篇总结帖。
我目前个人使用的策略如下:
- TF:仅GPU运行。通过任务分工表寻找目前最小指数的TF任务,然后手动领任务。
- PM1:CPU使用
mprime
自动获取最小指数的PM1任务,GPU选择最小指数的PM1任务、以及一亿位以上梅森数里面B1较小的4。 - PRP:仅GPU运行。通过
GpuOwl
自动获取最小指数的PRP任务和一亿位以上梅森数的任务。
由James Heinrich搭建的
mersenne.ca
网站提供了很多与GIMPS相关的工具、数据和排名。它还提供基本所有非官方的计算软件下载。 ↩︎ ↩︎ ↩︎GpuOwl的Github地址为github.com/preda/gpuowl。 ↩︎