前回のエントリでは、粒子ベースシミュレーション記述言語を使ってN-Body(多体問題)シミュレーションを記述し、それをインタプリタとして実行しました。
今回は、それをコンパイルして実行するようにしたので紹介します。
実装方針
実装の方法としては、Template Haskellを使ってDSLをHaskellのコードに変換しています。この展開によって、前回のエントリでHaskellで直接書いた場合と同様のコードを生成し、さらにghcでコンパイルしています。つまり、ホスト言語が粒子ベースシミュレーション記述言語、ターゲット言語がHaskellということになります。もっとも、組み込みDSLなので明確な線引きがあるわけではありませんが。
コード
コードはこちらに置いてあります。前回のインタプリタとあわせて、モジュールとして整理しました。モジュールの構成は以下のようになっています。
- Examples/ 実行例をまとめています - SimulationDSL/ - SimulationDSL.hs モジュール外へのエクスポート - SimulationDSL/ - Compiler/ コンパイラに関するコード - Data/ 基本的なデータ構造 - Interpreter/ インタプリタに関するコード - Language/ シミュレーション記述言語の構文と解釈 - Test/ テストを追加していく予定
実行方法
以下のように、ExamplesフォルダのCompilerRun.hsをコンパイルし、ファイルを実行します。$ cd Examples $ ghc -i../SimulationDSL --make -O2 CompilerRun.hs $ ./CompilerRun
実行効率の確認
実行速度を、以下について比べてみます- コンパイラを使った場合 - CompilerRun
- Haskellで直接書いた場合 - NBody
- インタプリタを使った場合 - InterpreterRun
実行速度は以下のようになりました。
$ time ./CompilerRun > /dev/null real 0m0.949s user 0m0.927s sys 0m0.011s $ time ./NBody > /dev/null real 0m0.972s user 0m0.950s sys 0m0.011s $ time ./InterpreterRun > /dev/null real 0m2.932s user 0m2.906s sys 0m0.022s
グラフにすると以下のようになります。
狙い通り、コンパイラを使った場合は、インタプリタのx2〜x3の速度、つまり、Haskellで直接書いた場合と同等の速さで動いています。
まとめ
このエントリでは、粒子ベースシミュレーション記述言語をHaskellにコンパイルしました。その結果、実行速度が改善されたことを示しました。今回は組み込みDSLとしてターゲット言語をHaskellにしましたが、Cにコンパイルすることや、さらにOpenMPやCUDAに対応させて並列計算を可能にすることも検討しています。
また、HackageDBにAccelerateという配列をCUDAで計算するライブラリがあるようなので、これを使う方法もありそうです。
逆の方向として、粒子ベースシミュレーション記述言語の表現力を強化することも考えられます。
- 境界条件の指定
- 効率的な近傍探索のサポート
- 例外処理
- デバッガ
- プロファイラ
- 階層構造の導入(剛体シミュレーション)
- ドメインの導入(固液連成)
ラグランジュ的表現とオイラー的表現
この言語はラグランジュ的な表現を記述することができます。一方、オイラー的な表現を記述することはできません。有限差分法や有限要素法、あるいは格子ガス法や格子ボルツマン法といった、格子およびメッシュをベースにした表現を使ったシミュレーションを記述するには、また別の言語モデルを設計することになるでしょう。
関連エントリ
このエントリに関連するページです。粒子法シミュレーション記述言語によるn-Body(多体問題)シミュレーション
粒子法シミュレーションを記述するための言語を設計中
【まとめ】埋め込みDSL関係の論文(1)
【まとめ】埋め込みDSL関係の論文(2)
まとめページ
【まとめ】CG、シミュレーション関係の論文
【論文】Particle-Based Fluid Simulation ...
【論文】Two-way Coupling of Fluids to ...
そのほかの論文まとめ(準備中)
【論文】Particle-Based Fluid Simulation ...
【論文】Two-way Coupling of Fluids to ...
そのほかの論文まとめ(準備中)
--
0 件のコメント:
コメントを投稿