現在、おれは「massively」というGPU並列アルゴリズムライブラリを作っている。 その目的の一つは、今まで話してきたように 「RustによるシステムプログラミングにおいてGPUを使えるようにする」 ということであるが、もう一つは「BPHを再実装する」ということであった。
BPHとは何か。
Bolzmann Particle Hydrodynamics (BPH) は、松田卓也さんという宇宙物理の先生(神戸大名誉教授)が 発明した粒子シミュレーションアルゴリズムである。 概要としては、実際に粒子の衝突をシミュレーションするのではなく 乱数を用いた「緩和」と呼ばれる操作によって擬似的に衝突を表現する というものであるが、これが並列計算と相性がいいことはわかっていた。
そして、2010年頃というのはGPUを使った計算すなわちGPGPUが勃興してきた時期であるから、 GPUを使ってBPHを実装しようという機運が高まっていた。 それで、どういう流れだったかは完全に忘れたがおれがやることになり、 松田先生のグループに加わった。 この流れは本当に幸運だったと思う。
GPU計算をするために何か有力なライブラリはないかと探したところ、おれはNVIDIAのThrustにたどり着いた。 Thrustが1.0になったのが2020年だから、当時はアーリーステージもアーリーステージだったが、 リアルワールドのアルゴリズムを生のCUDAを使って書くのは現実的に不可能だったので、乗った。
ところで、このThrust、結構使われているようだ。 例えば、Gunrock というGPUグラフライブラリもThrustを基盤としているし、 AMDのROCmもThrustをパクってrocThrust というのを実装していたらしい。 そう考えると、Thrustに乗った判断は正しかったように思う。
ただ、BPH研究はおれが就職したことで終了してしまったようだ。 というのも、おれのBPH実装は色々な実験コードが入り混じっており、 かつ今後使うことも考えて整理もしてこなかったため、 使い物にならなかったからである。 開成→東大博士の高知能者を解読に割り当てても結局わからなかったというから、 なぜおれも当時そんなものが書けたのかよくわからないくらい人知を超えていた。 夜な夜な北白川のマックに行き、開発をしたのが懐かしい。 あの頃は頭がキマってた。
それから15年の時が経ち、今、AIという強力な知性が手に入ったため、 ThrustのRust版のようなもの(というかRustの型システムを活用したもっと優れたもの)を作り、 それでBPHを再実装しようということにしたのである。 その結果、massivelyが生まれ、bph-gpuが生まれた。 BPHでは「緩和」の前後でエネルギーが保存する性質があるのだが、 その性質自体をproptestで検証するという現代的なテストも書くことが出来て、品質は爆上がりした。
性能については、 当時GTS450というGPUで実験したのと今680MというiGPUを使って実験するのとだと 概ね5倍程度の性能向上をしているようである。速すぎる。 GPUの性能向上もあるが、massivelyがThrustより優れているのも要因の一つだと思う。 実は、Thrustはゴミなんじゃないかと思っている。
次だが、松田先生には報告のメールをしておいたが、メールを見ていないのか何なのか返事はない。おれとしてはBPH研究にその先があるならば、無職のうちであればお手伝い出来ると思うのだが。