高校生のためのコンピュータサイエンスオンラインセッション2020
小学生の夢から世界記録更新まで - クラウド上の計算資源を活用した円周率の計算
岩尾エマはるか氏
Google Cloud / Developer Advocate(※)
※デベロッパーアドボケイト:開発者に広く自社の技術を使用してもらえるよう紹介する仕事。
円周率の計算の歴史はコンピュータの発達とともに
Googleは、2019年3月14日に円周率を31兆4000億桁余りまで計算して、当時の世界記録を達成し、ギネス認定を受けました。そもそも人類はなぜ円周率を計算しているのでしょうか。
人類は、紀元前2000年頃から円周率が3.1くらいだと知っていました。15世紀にはより効率の良い公式が見つかり、手計算で約10桁まで算出されました。
その後、20世紀中頃に電子計算機が登場し、21世紀初頭には2兆5000億桁に、2009年には家庭用パソコンで2兆6000億桁余りの計算に成功しています。2019年にはGoogleのチームがクラウドを使って31兆桁まで計算し、さら今年2020年には自宅で50兆桁の計算に成功した人が現れました。
円周率の計算の難しさは、桁数が多いためにたくさんのデータの保持が必要となる点です。
30兆桁の計算のためには、約170TB(テラバイト)ものメモリが必要ですが、現在のパソコンには170TBのメモリはないので、ハードディスクやネットワークを使った分散処理が必要です。しかし、ストレージやネットワークは、CPUよりも処理速度が何万倍も遅く、計算性能そのものよりも、分散した大量のデータをいかにうまく扱えるかが重要になります。桁数が2倍になると円周率の計算量は2倍よりも少し増え、通信量も同様に増えるため、桁数以上に要件がどんどん複雑になる、という特徴があるのです。
クラウドを使って円周率を計算すること
Googleのチームは、クラウドを使ってこの計算に挑戦しました。
クラウドというのは、簡単に言うとパソコンが多数並んでいるデータセンターから自分のやりたい計算に合わせて、使いたい分の計算資源を借りるサービスです。例えば、計算に100台のパソコンが1時間必要ならその分だけを借ります。利用者は100台のマシンを買わずに、その瞬間に必要な分だけ借りることができるのです。一方でクラウドを利用するということは、ネットワークを経由してデータをやり取りしたり、複数の作業を複数のマシンが分担して行ったりするため、処理結果の保持が重要な円周率の計算にとっては、分散処理の技術が試されます。
円周率の計算は2018年9月に始まり、翌年1月21日に終了しました。使用したプログラムはアレクサンダー・イーという人が開発した「y-cruncher(※1)」というプログラムで、皆さんもダウンロードして自分のパソコンで計算することができます。大きなトラブルもなく121日で計算を終え、31兆4159億桁の結果を得ました。計算結果の正しさを精査した上で2019年3月14日に無事にギネス登録されました。
※1 http://www.numberworld.org/y-cruncher/
岩尾さんと円周率計算プログラムの出会いはどんなことだったのでしょうか。
私がプログラミングに出会ったのは11歳の時です。当時はC言語やPascal、アセンブラなどで、MS-DOS(Windows以前のOS)向けのプログラムを書いていました。そこで円周率計算のプログラムがあることを知りました。当時は、意味も分からずにテキストを丸写ししていましたが、それでも20桁ぐらい計算できました。世界記録が60億桁くらいの頃です。
進路選択では、先生に勧められた教育学・心理学系に進学しました。当時も、勉強というよりとにかく楽しくプログラムを書いていましたが、入学後担任の先生に「そんなに好きならコンピュータを学んでは」と勧められ、2年次から情報系に転学し、コンピュータサイエンスの修士を取得して卒業しました。
円周率の計算では、日本人の記録保持者がたくさんいます。研究室の先生の一人が円周率の世界記録の保持者だったというご縁もあり、同じ国の人たちがリアルタイムで桁数を伸ばすところを見てきたことは大きな糧になったと思います。
さらに、私はパソコンの自作が好きなのですが、作ったマシンの性能を試すときに円周率の計算は一般的な指標となるものなので、『円周率は計算するものだ』という考えがもともと染み付いていたように思います。
コンピュータの歴史は女性が支えてきた
この写真は世界で最初期の電子計算機の一つであるENIACです。当時のソフトウェアエンジニアはほとんどが女性で、実はコンピュータの世界はの創世記からは女性が支えていたのです。
※写真:Historic Computer Images より引用
https://ftp.arl.army.mil/ftp/historic-computers/gif/eniac7.gif
Two women operating the ENIAC's main control panel while the machine was still located at the Moore School. "U.S. Army Photo" from the archives of the ARL Technical Library. Left: Betty Jennings (Mrs. Bartik) Right: Frances Bilas (Mrs. Spence)
この写真は、初めて月面着陸に成功したアポロ11号の誘導コンピュータのプログラムを書いたマーガレット・ハミルトンです。
右側に積まれているのは、彼女らが書いたプログラムを印刷したもので、これがなければ、アポロは月に行けなかったのです。
宇宙の話では宇宙飛行士がスポットライトを浴びますが、その舞台裏ではたくさんの人々が活躍していました。そしてその中にはマーガレットのように重要な役割を担った女性たちがいたのです。
※写真 Computer scientist Margaret Hamilton poses with the Apollo guidance software she and her team developed at MIT.
[Credits]
Photos: MIT Museum
https://news.mit.edu/2016/scene-at-mit-margaret-hamilton-apollo-code-0817
ソフトウェアエンジニアとして働くために、英語力はどのくらい必要でしょうか。
プログラミングに必要な英語力をよく問われますが、実はあまり英語は必要ではありません。これは私が中学生のときに書いたプログラムですが、変数名が「younokachi」とか「hikiwake」などとなっていて、「you win」「draw」などの単語は使っていませんが、これでもプログラムは動きます。
例えば変数なら「you win」と書けた方が自然です。ソースコードのコメントが的確に書ければ、他の人とのコラボレーションがはかどるし、バグチケットなどの英語の議論に参加できればもっと開発に貢献できます。カンファレンスで発表できれば自分のことをもっと知ってもらえます。ですから、自分がやりたいことに応じて、目標を設定し学習するのが良いと思います。個人的には、練習は質より量で、ひたすらやるのが最終的には近道だと思います。
世界記録を達成されたときの感想を教えてください。
今回の円周率の計算は、周囲の支えがあったからこそ得られたことです。自分のアイディアから始まったという自負はもちろんちょっとはありますが、例えば、大量の計算資源の利用を許す社内の雰囲気や環境がありました。
また、上司も本業とは別の仕事をすることを応援してくれ、同僚も技術的な意見を聞かせてくれした。製品開発チームとも様々なディスカッションをしましたし、相談にも乗ってもらいました。
本当に多くの人たちのおかげで最終的に大きな記録達成ができたのだと感謝しています。プログラミングは自分がやりたいと思う事を実現するための強い味方です。これから世界を担っていく皆さんにとって、円周率をめぐる私のこれまでの旅路がなにかのきっかけになれば、これ以上嬉しいことは有りません。