2008年の春ごろに物理シミュレーションにハマっていて、粒子法を使った流体計算をがんばっていたのです。
そのコードの並列化できる部分を並列化して、ちょっとだけ高速化しました。
こんな感じのシミュレーションです。これは10倍速にしています。
10倍速でざっぱ~んってなるやつ pic.twitter.com/xTF8cg9X1W
— きしだൠ(K1S) (@kis) 2023年4月30日
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
ちゃんと並列化しようとすると、やりかたはこの本に載ってますね。