■今更だけどπ

 今更とお思いになられる方が多いのではないかと思いますが、円周率の計算を自前でやってみようと思いついてしまったんです。

 それは、東京大学金田研究室が開発したと言われる「super-pi」が結構古いので、一時記憶の対象がHDDであったり、シングルスレッドであったりして、最近のマルチコア/64ビットOS/広大なメモリ領域というPC環境には少々そぐわないものとなっていることが引き金となっているのです。

 で、恒例のNET徘徊で情報収集。 私は数学者ではないので公式とか書いてあってもプログラムソースに直すのに結構時間を要するので、手っ取り早く現行の「super-pi」などのソースが転がっていないか、また、もっと高効率なプログラムか転がっていないか探しまくりました。

 結局、ただのパソコン(とは言ってもHDDが46TBあったりするけど)で10兆桁まで計算できていること、それがナント日本人(長野の近藤茂氏+アレクサンダー・J・イー氏)であったり。
 更に徘徊することしばし、10兆桁を実現したプログラムがかなり高速で64ビットOS対応/マルチコア対応であることを知り、取り敢えずソースと実行プログラムを頂いて参りました。

 コレを取り敢えず実行してみて、不満があるようならソースを解析し高速化/最適化にチャレンジしてみようと思います。

 で、取り敢えずの実行結果は・・・

  Super-pi
08分 38 秒
[3355万桁]
  tpi-0.9.3-win
34.7秒
[1億桁]
   
08分 48 秒
[10億桁]

 てな感じで、圧倒的にTPIの処理が高速であることが解り、わざわざソースを解析する程のこともないかなっと。

 とは言え、マルチコア対応なのは良いけど物理プロセッサ数しか見ていないようでハイパースレッディングには応じてくれません。 Core i7-2600なので4コアの設定なら物理コア数と合致するので動くのですが、CPU負荷を見ているとせいぜい50%程度しか稼働していません。
 かと言って、8コアに設定するとエラーを吐いて動いてはくれません。 物理メモリを16GB搭載しているのですが、10億桁の時は15.7GiB使用すると実行時に宣言しており、ダメかもと思ったら実際の物理メモリは25%も使用しておらず、多くをスワップ(仮想メモリは16GiB)されてしまっているようです。

 ここら辺が改善されれば、更に倍以上の高速化が見込めると思いますが、10億桁が難なく実行できてしまったので、この件はこれにて落着と言うことで。

※実行環境は「ami」です、詳細は「パソコン」のカテゴリを参照してください。