昔話(1)
たまには昔話を書いてみる。
今回、FEM(有限要素法)を用いているが、VAXでFORTRANのFEMを回して、ラインプリンタや15インチ帳票をめくりながら変位・応力・収束結果を追っていた時代から見ると、今は同じ「有限要素法」をデスクトップPC上でリアルタイムに近い周期で回し、しかも3Dで竿の撓みや提灯の振り子まで同時表示しようとしているわけで、隔世の感がある。
profileで実測、110万回の要素計算、数式展開で行列生成除去、要素のベクトル化、数値等価性を確認・・・はそれこそ何日もかかった、これを数分でサイクルを回して検討できる。数値モデルを変えずに実装だけ速くするなんてのが簡単にできる。
現在のシミュレータの計算は物理計算を240steps/secで行いつつ動画としてはほぼ60framesで表示させて結果を見ている。
昔:計算結果を後から観察するFEM
今:計算中の物理現象そのものを操作して観察するFEM
これは本当に吃驚だ。
当時の3Dアクセラレータは、構造解析用途から見ればほぼ描画専用で、現在のようにOpenGLのVBOへ節点位置を送り、GPUに竹・人体・46提灯を描かせる構成なら、CPUは物理、GPUは表示ときれいに役割分担できる。
つまらない計算をしてみた。
PentiumⅡ搭載の当時のPCでこれをやってみたらどうなるか。
竹や提灯のDOFを300と仮定して各physics stepでNewton反復を3回行い、そのたびに連立方程式を解くと解法だけで、
2/3*(300)^3≒ 18×10^6
Newton 3回、240 stepなら、
18×10^6×3×240≒13×10^9
大体130億演算規模になる。
当時のPentiumⅡ 400MHzあたりで、浮動小数点性能は数十MFLOPSだっただろうから、
(13×10^9)/(50×10^6)≒260sec
で大体4~5分といったところだ。
つまり、今のシミュレータの240step/decをPentiumⅡで実行できても0.8~12step/secでせいぜい。
1秒間の竿燈の動きを計算するために1~5分待つ
ことになる。
当時なら、その後に別プログラムで変形図を描かせる、あるいは数stepごとの変位をファイルへ吐いて後処理したはずだから、今みたいに計算しながら60 FPSで竹がぐにゃっと曲がるのを見るのは、ほぼ別の世界だ。
恐るべし!