粒子法での流体シミュレーションを少し並列化する

2008年の春ごろに物理シミュレーションにハマっていて、粒子法を使った流体計算をがんばっていたのです。
そのコードの並列化できる部分を並列化して、ちょっとだけ高速化しました。

こんな感じのシミュレーションです。これは10倍速にしています。

2008/4/7くらいから始めている。
https://nowokay.hatenablog.com/entry/20080407/1207523850

4/10になんか動いている。この時点では、まだ爆発してるみたいですね。
粒子法で、ざっぱ〜ん! - きしだのHatena

ちゃんと完成して動画とったものはここにまとまっています。当時のAthron64X2では1秒分のシミュレートに1時間かかっていたらしく、JMFでQuickTimeムービーを作ってYouTubeにアップロードしている。
ざっぱ〜ん、完成した! - きしだのHatena

JMFはこのあたりで解説。しかしだいたいリンク切れだな。
JMFでQuickTimeムービーを作成する - きしだのHatena

今回もとにしたのは、このソース
爆発しなくなった、ざっぱ〜んのソース - きしだのHatena

ここで並列化を考えてExecutorのコードをちょっと書いているけど、めんどくさくてやらなかった感じですね。まだJava 6なのでStreamどころかForkJoinPoolもない。
ざっぱ〜んの処理を並列化する - きしだのHatena

あと、2コアなので並列化しても効果はなかったのではないかと思います。

いまはStreamもあって簡単に並列化できるし、CPUも8コアだし、コード整理がてらやっておきました。

並列化といっても、ほとんどは単純に並列化できずそのままなので、1コアだけ100%に張り付いてあとは遊んでます。

ちゃんとしたベンチマークはとってないけど、それでも25%程度速くなってる感じ。
まあ、8コアで並列して25%速くなるだけって、完全にアムダールの法則ですなー。 ChatGPTに教えてもらったところ、全体の23%が並列化可能な場合に8コアで並列化すると25%の性能向上になるらしい。

並列化したソースはこれ。
https://gist.github.com/kishida/e0330adeebc750987e3722d3e252b048

ちゃんと並列化しようとすると、やりかたはこの本に載ってますね。