私は最近、円周率を計算するためのチュドノフスキーのアルゴリズムのこの実装を見つけました:並列GMP-因数分解を伴うOpenMPを使用したチュドノフスキー
デフォルトの1コアオプションを使用して、1o^3から10^8までのさまざまな数値用にコンパイルしました。ただし、コアの数を増やすと、CPU時間と実時間の両方で結果の計算にかかる時間が長くなることに気付きました。コアの数が多いと、計算に必要な時間が長くなるのはなぜですか?計算を高速化し、パフォーマンスを向上させるべきではありませんか?
出力例は次のとおりです。
~/Desktop$ ./pgmp-chudnovsky 7500000 0 1
#terms=528852, depth=21, cores=1
sieve cputime = 0.120
...................................................
bs cputime = 30.300 wallclock = 30.313
gcd cputime = 6.380
div cputime = 3.800
sqrt cputime = 2.140
mul cputime = 1.420
total cputime = 37.800 wallclock = 37.838
P size=10919784 digits (1.455971)
Q size=10919777 digits (1.455970)
~/Desktop$ ./pgmp-chudnovsky 7500000 0 2
#terms=528852, depth=21, cores=2
sieve cputime = 0.120
...................................................
bs cputime = 30.890 wallclock = 17.661
gcd cputime = 12.930
div cputime = 3.790
sqrt cputime = 2.130
mul cputime = 1.420
total cputime = 38.380 wallclock = 25.153
P size=10919611 digits (1.455948)
Q size=10919605 digits (1.455947)
~/Desktop$ ./pgmp-chudnovsky 7500000 0 3
#terms=528852, depth=21, cores=3
sieve cputime = 0.120
...................................................
bs cputime = 31.400 wallclock = 14.266
gcd cputime = 21.640
div cputime = 3.810
sqrt cputime = 2.130
mul cputime = 1.410
total cputime = 38.900 wallclock = 21.784
P size=10726889 digits (1.430252)
Q size=10726883 digits (1.430251)
~/Desktop$ ./pgmp-chudnovsky 7500000 0 4
#terms=528852, depth=21, cores=4
sieve cputime = 0.130
...................................................
bs cputime = 32.480 wallclock = 11.771
gcd cputime = 27.770
div cputime = 3.800
sqrt cputime = 2.130
mul cputime = 1.410
total cputime = 39.980 wallclock = 19.284
P size=10920859 digits (1.456115)
Q size=10920852 digits (1.456114)
~/Desktop$ ./pgmp-chudnovsky 7500000 0 5
#terms=528852, depth=21, cores=5
sieve cputime = 0.130
...................................................
bs cputime = 33.010 wallclock = 15.496
gcd cputime = 28.500
div cputime = 3.790
sqrt cputime = 2.130
mul cputime = 1.420
total cputime = 40.510 wallclock = 23.000
P size=10605102 digits (1.414014)
Q size=10605096 digits (1.414013)
~/Desktop$ ./pgmp-chudnovsky 7500000 0 10
#terms=528852, depth=21, cores=10
sieve cputime = 0.130
...................................................
bs cputime = 33.210 wallclock = 14.311
gcd cputime = 29.640
div cputime = 3.780
sqrt cputime = 2.140
mul cputime = 1.420
total cputime = 40.720 wallclock = 21.822
P size=10607304 digits (1.414307)
Q size=10607297 digits (1.414306)
~/Desktop$ ./pgmp-chudnovsky 7500000 0 100
#terms=528852, depth=21, cores=100
sieve cputime = 0.120
...................................................
bs cputime = 33.080 wallclock = 13.412
gcd cputime = 17.630
div cputime = 3.780
sqrt cputime = 2.130
mul cputime = 1.420
total cputime = 40.570 wallclock = 20.912
P size=12169347 digits (1.622580)
Q size=12169341 digits (1.622579)
~/Desktop$ ./pgmp-chudnovsky 7500000 0 200
#terms=528852, depth=21, cores=200
sieve cputime = 0.130
...................................................
bs cputime = 34.080 wallclock = 13.942
gcd cputime = 15.620
div cputime = 3.760
sqrt cputime = 2.110
mul cputime = 1.420
total cputime = 41.530 wallclock = 21.401
P size=12642316 digits (1.685642)
Q size=12642309 digits (1.685641)