はじめに
GIMPS(Great Internet Mersenne Prime Search [ 公式サイト ][ Wikipedia ]) はメルセンヌ素数の発見を目的とした分散コンピューティングプロジェクトである。
備忘録的に、Linuxでの実行までの設定を記載しておく。
基礎知識
GIMPSでは、メルセンヌ数が素数であるかを判断するために、素因数分解アルゴリズムである
- 試し割(TF)
- P-1法(PM1)
を実行し、その時点で合成数と分かったものは、次工程に進まないようにしている。なので、メルセンヌ素数を直接的に見つける以外にも、こういった枝刈り工程で貢献することももちろん可能だ。ただし、試し割はCPUで実行するよりもGPUで実行した方が格段に速いので、今回紹介するプログラムで試し割を選ぶことは推奨されていない。
さて、これらの前処理を突破したメルセンヌ数は、本格的に素数チェックが行われる。そのための確定的アルゴリズムとしてLucas–Lehmer法(LL)が知られている。従来はLLを2回実行し、計算結果が一致することをもって完了としていた(1回目のチェックがLL、2回目のチェックがD(ダブルチェック)と呼ばれる)。
しかし、バージョン30.3から方法が変わり、2021年4月には1回目のLLは使用は収束した。これまで、LLの計算結果が正しいことを検証しようとすると、同じ計算を再度実行するしかなかったが、バージョン30.3からは、LLを実行しつつ、その計算内容が正しいことの証拠を作成するようになった。これによって、2回目のチェックは単にLLを再実行するのではなく、証拠を検証することに変わり、計算量が劇的に減った。GIMPS内では、この新しい1回目のチェックをPRP、2回目のチェックをCERTと呼んでいる。とは言え、これまでのLLではほとんど発生しなかったディスクへの書き込みや、ネットワーク通信(先ほど述べた証拠を保管し、サーバーに送信するため)が発生することに注意する。
手順
アカウント登録
他の記事を参考のこと。
ダウンロード
まず、ダウンロードするディレクトリを作って、そこに移動しておく。ここでは、mprime
とする。
mkdir mprime
cd mprime
最新バージョンはここから確認できる。2022年2月6日現在は、30.7b9が最新だ。
wget https://www.mersenne.org/ftp_root/gimps/p95v307b9.linux64.tar.gz
解凍し、元ファイルを削除する。
tar -xf p95v307b9.linux64.tar.gz
rm p95v307b9.linux64.tar.gz
なお、更新する場合は、プログラムを一旦止めて( killall mprime
)、上書きすればよい。
tar --overwrite -xf p95v307b9.linux64.tar.gz
基本的な設定
./mprime
を初めて実行すると設定が始まる。基本的にデフォルトのままでいいので、エンターを連打する。
Join Gimps? (Y=Yes, N=Just stress testing) (Y):
Use PrimeNet to get work and report results (Y):
アカウント作成時のIDを入力する。匿名(ANONYMOUS)で良ければエンター。また、PCの名前を設定できる。これは複数台のPCを使う場合に、どのPCからの結果なのかをユーザが判断できるようにするためのものだ。ただし、この名前は全体にも公開される。
Your user ID or "ANONYMOUS" (ANONYMOUS):
Optional computer name:
脳死でエンター。
Computer uses a dial-up connection to the Internet (N):
Use a proxy server (N):
Output debug info to prime.log (0=none, 1=some, 2=too much) (0):
Accept the answers above? (Y):
Hours per day this program will run (24):
Accept the answers above? (Y):
Temporary disk space limit in GB/worker (6.000000):
Daytime P-1/P+1/ECM stage 2 memory in GB (0.300000):
Nighttime P-1/P+1/ECM stage 2 memory in GB (0.300000):
Upload bandwidth limit in Mbps (0.250000):
Upload large files time period start (00:00):
Upload large files time period end (24:00):
Download limit for certification work in MB/day (40):
Skip advanced resource settings (Y):
Accept the answers above? (Y):
何並列で動かすか? 個人の好みで。
Number of workers to run (3):
作業のタイプが選べる。メルセンヌ素数を見つけたければ、150
あるいは152
を設定すればよい。なお、初めて動かした場合は、そのCPUの信頼性をチェックする意味で、ダブルチェックのタスクが割り当てられるので、いきなりメルセンヌ素数のチェックが動かなくとも慌てない。
Use the following values to select a work type:
0 - Whatever makes the most sense
150 - First time prime tests
152 - World record sized numbers to prime test
151 - Double-check prime tests
2 - Trial factoring
4 - P-1 factoring
153 - 100 million digit numbers to prime test
160 - First time PRP on Mersenne cofactors
161 - Double-check PRP on Mersenne cofactors
5 - ECM for first factors of Mersenne numbers
8 - ECM on Mersenne cofactors
6 - ECM on Fermat numbers
1 - Trial factoring to low limits
Type of work to get (0):
使用するコア数。お好みに応じて。
CPU cores to use (multithreading) (4):
Get occasional proof certification work (Y):
Accept the answers above? (Y):
設定が終わると自動的にタスクを取得し、計算を始める。以降の設定が必要であれば、一旦プログラムを終了する。
詳細な設定
設定はprime.txt
とlocal.txt
に記載する。プログラム中で設定できる項目もあるが、そうでないものもある。詳細はreadme.txt
及びundoc.txt
を参照のこと。
prime.txt
ベンチマークがちょくちょく自動実行される。それを止めさせる設定。
AutoBench=0
P-1とECMの実行は、ステージ1と2に分かれる。普通は、ステージ毎にgcd(因数分解できるかのチェック。最大公約数)を求めるが、どうせステージ1で見つからないと思うなら、省くことも可能だが、たぶん、一般人は設定しなくともよい項目。
Stage1DCD=0
もう、GIMPSへの貢献を止めたいと思ったとき、既に割り当てられているタスクを解除したい。それ自体はメニューからUnreserve Exponent
で実現できるものの、そのままだとリソースが空いたと思われて、新しいタスクを自動で取得しようとする。止める場合は、NoMoreWork
を設定してからUnreserve する。
※ユーザ登録している場合は、webの画面からも割り当てを解除できる。
NoMoreWork=1
local.txt
初期設定時でも変更できるが、WorkerDiskSpace
は、使用ディスクサイズの上限、Memory
は使用メモリサイズの上限を指定する。ディスクはPRP時に、メモリはP-1とECMのステージ2で主に使用され、もちろん、多いに越したことはないが、PCのスペックに合わせて設定する。
自動起動
立ち上げ時に自動でmprimeが起動するようにする。
nohup /home/mprime/mprime -d >>/home/mprime/mprime.log 2>&1 < /dev/null &
chmod +x /home/mprime/boot.sh
crontab -e
@reboot /home/mprime/boot.sh