仮眠プログラマーのはきだめ部屋


円周率BBP系公式summary

BBP系公式では、16進数表記の円周率を任意の桁から求めることができます。
最初は円周率小数点第2000兆桁目を求めることにチャレンジしました。
【GPUで円周率計算】2000兆桁目からが本当に653728f1で合ってるか検算してみた

同様のコードを使い現在2京桁の結果まで出ています。
計算に使ったプログラムはここにあります。
https://github.com/toropippi/CLBellard

2000兆桁

結果を得るまでに、複数のGPUをおよそ10日間くらい稼働させました。

1st :starting at 2×10^15 2nd :starting at 2×10^15-5

1st run:      653728f1d92ef9802795ab97da55a474f01a254eb8b11447
2nd run: 28fec653728f1d92ef9802795ab97da55844e0400db36fce
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

ということで 653728f1d92ef9802795ab97da55 まで正確ということでよさそうです。

元の情報をたどると http://www.karrels.org/pi/index.html ここに小数点第2000000000000000桁目から653728f1と書いてあり、同じ結果になったことが分かります。

計算時間

1st run

計算デバイス名 仕事量(batch数) 計算時間(day) 1batchあたりの計算時間(sec)
TITAN V 15230 15.0496 85.3765
RTX 2080 Ti 16533 15.0457 78.6273
GeForce GTX 1080 2649 10.9352 356.6645
GeForce MX150 145 4.0682 2424.0718
RX480 1904 15.0051 680.9054
Radeon HD7990(1) 1787 15.0629 728.2776
Radeon HD7990(2) 1790 15.0590 726.8697
Intel Xeon Platinum 8280 605 2.1073 300.9426
Intel(R) Core(TM) i7-9800X 45 4.0323 7741.9661
Intel(R) Core(TM) i7-8700K 40 3.8095 8228.4962
Intel(R) Core(TM) i7-6700 19 3.2438 14750.8674

エラー発生回数

GPU名 エラー回数 内訳
RTX2080 1台目 0
RTX2080 2台目 0
TITAN V 0
GTX 1080 16 OCしたら0を出力1回。OCしたらINFを出力15回。
RX 480 2 ディスプレイドライバ停止が原因で0を出力1回。謎の1bit反転1回
HD 7970 7 ディスプレイドライバ停止が原因で0を出力2回+適当な値を出力5回

このように計算エラーは1つを除いて、GPU側の原因というよりはレジストリ設定不足と下手なオーバークロックをしていた人間側のせいでした。 ディスプレイドライバ停止とは、OSがWindowsの時に画面描画を担当するGPUが計算タスクでいっぱいになり画面の更新が2秒以上とまった場合にOSがドライバーを強制終了してしまうことで、これは https://support.borndigital.co.jp/hc/ja/articles/360000574634 このようにレジストリをいじることで回避できます。

オーバークロックに伴うエラーについては、GTX 1080をMSI Afterburnerでだいたい100-200Mhzくらいオーバークロックしていました。FAN 100%にして常用しているときは温度も75度前後で見た目エラーを吐いてるように見えなかったですが、後で確認すると2時間に1回くらいの微妙なペースでエラーを吐いていることが分かりました。それが分かってからはオーバークロックなしでFAN speedだけ100%にして計算させたところ、エラーが止まりました。

RX480で起こった1bit反転については2週目の計算結果を待つまでわかりませんでした。1STEP目の2246Batch目で1回だけ起こっていました。

1週目 RX 480で計算 不正解
1cc4c98275c5a6b07aa292・・・
     ^^

2週目 RTX 2080Tiで計算 正解
1cc4ca0275c5a6b07aa292・・・
     ^^

こんな感じに、左から6,7桁目がずれていました。差はa0-98=02です。プログラム上ではメモリに計算結果を加算していくような形にしていたため最終的には2桁にわたってずれていますが、差をとってみると2という数字がでてきました。 当初は宇宙線によるbit反転を疑っていましたが、その後2京桁の計算まで1,2年近く稼働させても1台も1度も起こらなかったことを考えると、確率的に宇宙線の可能性も低そうです。 もちろん確率の問題で起こるものなので真相は不明です。

4000兆桁

1st :starting at 4×10^15 2nd :starting at 4×10^15-5

1st run:      5cc37dec84c20b798ba57faf5c691f340665147606e69360
2nd run: 06df35cc37dec84c20b798ba57faf5c6919f33dfbba887cb
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

ということで16進4000兆桁目から 5cc37dec84c20b798ba57faf5c691 まで正確ということでよさそうです!

最初に計算した人達のサイトを見ると http://www.karrels.org/pi/

4×10^15桁目から5cc37dec・・・と書いてあるのでこちらも合っていることが確認できます。

計算時間

1st run

計算デバイス名 仕事量(batch数) 計算時間(day) 1batchあたりの計算時間(sec)
TITAN V 28651 26.5747 80.1387
RTX 2080 Ti 1台目 22645 24.2289 92.4433
RTX 2080 Ti 2台目 23512 23.4281 86.0916
GeForce GTX 1080 3938 15.0144 329.4174
GeForce MX150 613 16.1817 2280.7476
RX 480 292 6.2486 1848.8893
Radeon HD7970 21 0.1667 685.9090
Radeon HD7990(1) 826 7.0987 742.5235
Radeon HD7990(2) 803 6.9172 744.2681
Intel(R) Core(TM) i7-8700K 93 8.4222 7824.5196
Intel(R) Core(TM) i7-6700 100 16.1130 13921.5966

2nd run

計算デバイス名 仕事量(batch数) 計算時間(day) 1batchあたりの計算時間(sec)
TITAN V 33196 28.3424 73.7673
RTX 2080 Ti 1台目 26353 28.3446 92.9296
RTX 2080 Ti 2台目 10058 9.9851 85.7740
GeForce GTX 1080 5979 23.5984 341.0101
GeForce MX150 646 17.3945 2326.4405
RX 480 1310 24.3160 1603.7390
Radeon HD7990(1) 1885 16.3979 751.6063
Radeon HD7990(2) 1871 16.2705 751.3466
Intel(R) Core(TM) i7-9800X 161 22.4589 12052.4544
Intel(R) Core(TM) i7-6700 35 5.4780 13522.7997

エラー発生回数

1週目、2週目ともに計算エラーは1回もありませんでした。

1京桁

1st :starting at 1×10^16 2nd :starting at 1×10^16-5

1st run:      9077e0164b9c613fd6c7f170c99c2a6694e2534bb43554f2
2nd run: dc2ca9077e0164b9c613fd6c7f170c99b89a3fd63770a838
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^

最初に計算した人達のサイトを見ると http://www.karrels.org/pi/

1×10^16桁目から9077e016・・・と書いてあるのでやはり合っていることが確認できました。

計算時間

1st

計算デバイス名 仕事量(batch数) 計算時間(day) 1batchあたりの計算時間(sec)
TITAN V 36044 74.7369 179.1497
RTX 2080 Ti 40020 76.0336 164.1504
GeForce GTX 1080 8024 68.0098 732.3094
GeForce MX150 775 47.4612 5291.1579
RX 480 4122 68.0126 1425.5917
Radeon HD7990(1) 3500 61.0028 1505.8988
Radeon HD7990(2) 3111 54.2288 1506.0642
Radeon HD7970 405 7.0508 1504.1662
Intel(R) HD Graphics 530 22 11.1253 43691.9852
Intel Xeon Platinum 8280 5017 37.0838 638.6362
Intel(R) Core(TM) i7-9800X 334 62.9926 16295.0811
Intel(R) Core(TM) i7-8700K 323 72.2272 19320.2111
Intel(R) Core(TM) i7-6700 167 59.2375 30647.4055

2nd

計算デバイス名 仕事量(batch数) 計算時間(day) 1batchあたりの計算時間(sec)
TITAN V 36706 76.6756 180.4819
RTX 2080 Ti 40071 76.6762 165.3272
GeForce GTX 1080 8363 70.8972 732.4548
NVIDIA TESLA P100 × 4 3230 5.7035 152.5652
GeForce MX150 675 46.9053 6003.8728
RX 480 4321 71.4105 1427.8786
Radeon HD7990(1) 3988 72.2556 1565.4182
Radeon HD7990(2) 4112 72.2894 1518.9220
Intel(R) Core(TM) i7-9800X 235 24.8482 9135.6761
Intel(R) Core(TM) i7-8700K 5 1.5362 26545.4150
Intel(R) Core(TM) i7-6700 156 56.0793 31059.2802

エラー発生回数

2周目でエラーが発生

GPU名 エラー回数 内訳
TITAN V 0
RTX 2080 Ti 0
GeForce GTX 1080 0
NVIDIA TESLA P100 × 4 10 原因不明で適当な値を出力
GeForce MX150 0
RX 480 0
Radeon HD7990(1) 0
Radeon HD7990(2) 0
Intel(R) Core(TM) i7-9800X 0
Intel(R) Core(TM) i7-8700K 0
Intel(R) Core(TM) i7-6700 0

NVIDIA TESLA P100 × 4のノードで2020/11/5 17:38〜18:07に連続して間違った答えを出すことがありました。時間が限られかつ再現性があり一時的な障害だったのでしょう。

2京桁

1st :starting at 2×10^16 2nd :starting at 2×10^16-5

1st run:      1021b52fb719ada36b81d6cecc98c054857239d9519210bd
2nd run: 509ab1021b52fb719ada36b81d6cecc977ecf558fb98fddf
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^

計算時間

1st

計算デバイス名 仕事量(batch数) 計算時間(day) 1batchあたりの計算時間(sec)
RTX 3080 12 0.0300 215.8848
TITAN V 45210 95.2231 181.9792
RTX 2080 Ti 1台目 47621 85.9455 155.9331
RTX 2080 Ti 2台目 49683 95.0533 165.3001
GeForce GTX 1650 6055 49.3680 704.4424
NVIDIA TESLA P100 × 4 24174 42.8141 153.0215
GeForce GTX 1080 10282 96.1031 807.5576
GeForce MX150 679 44.8758 5710.2697
RadeonZ 18778 71.7219 330.0017
RX 480 378 6.2967 1439.2505
Radeon HD7990(1) 210 3.7267 1533.2791
Radeon HD7990(2) 209 3.7163 1536.2982
Intel(R) Core(TM) i7-9800X 179 19.1038 9221.0733
Intel(R) Core(TM) i7-8700K 76 19.6601 22350.4295
Intel(R) Core(TM) i7-6700 182 65.5758 31130.4901

2nd

計算デバイス名 仕事量(batch数) 計算時間(day) 1batchあたりの計算時間(sec)
TITAN V 23738 102.0008 371.2558
RTX 2080 Ti 1台目 27584 100.4008 314.4805
RTX 2080 Ti 2台目 26062 102.0299 338.2466
GeForce GTX 1650 6062 100.1019 1426.7243
GeForce GTX 1080 5315 102.0635 1659.1315
GeForce MX150 195 28.3941 12580.7882
RadeonZ 12908 99.2752 664.5009

エラー発生回数

2周目でエラーが発生

GPU名 エラー回数 内訳
TITAN V 0
RTX 2080 Ti 1台目 0
RTX 2080 Ti 2台目 0
GeForce GTX 1650 0
GeForce GTX 1080 0
GeForce MX150 0
RadeonZ 10 原因不明で適当な値を出力

温度の関係でしょうか。RadeonZで3/28〜4/1にかけて断片的に間違った答えを出すことがありました。

10京桁

1st :starting at 1×10^17 2nd :starting at 1×10^17-5

1st run:      a937eb59439e485e2eb4f5feb78200a79e7733cb7f9973CC
2nd run: dd8eca937eb59439e485e2eb4f5feb7820235a649cc1f348
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

計算時間

1st

2nd

inserted by FC2 system