本当は速いOpenMPS

青子守歌 (aokomoriuta)

TOC

  1. 自己紹介
  2. はじめに
  3. OpenMPSの高速化
  4. OpenMPSの高精度化
  5. 開発予定・まとめ

自己紹介

TOC

  1. 自己紹介
  2. はじめに
  3. OpenMPSの高速化
  4. OpenMPSの高精度化
  5. 開発予定・まとめ

だれ?

青子守歌(あお こもりうた)

なんのひと?

Twitter
@aokomoriuta
Blog
aokomoriuta's blog
専門分野(?)
土木工学・水理学・計算力学・プログラム高速化・C++er
オープンCAE勉強会

今日は?

OpenMPS開発者として
来ました

はじめに

TOC

  1. 自己紹介
  2. はじめに
  3. OpenMPSの高速化
  4. OpenMPSの高精度化
  5. 開発予定・まとめ

OpenMPSとは

粒子法のひとつMPS法のオープンソース実装

詳しくはウェブサイト参照

OpenMPSを使ってみた人達の声1

http://s.webry.info/sp/13053239.at.webry.info/201504/article_8.html

OpenMPSを使ってみた人達の声2

    Aさん
    「めっちゃ重い」
    Bさん
    「すぐ発散する」
    Cさん
    「実験と全然合わない」

...

ごめん

言い訳

OpenMPSのmasterは
「MPS法(粒子法)を勉強する人向け」のつもり(でした)

  • 標準MPS法の素直な(読みやすい?)実装
  • 速度・精度は気にしない
  • 応用に当たっては各自、改良を頑張れ

でも別にどこかに明記してはなかった

実際、まともなのはOpenMPS-dev(非公開レポジトリ)で開発

OpenMPSを使ってみた人達の声3

とあるTwitterにて(要約)

  1. Dさん「粒子法興味ある」
  2. Eさん「OpenMPSってのがあるらしいよ」
  3. Dさん「お、使ってみるわ!」
  4. Eさん「どうだった?」
  5. Dさん「なんか計算終わらないし暴発してるっぽい…」
  6. Eさん「やっぱり粒子法はクソだな!」

もしかして

OpenMPSが、MPS法(粒子法)の
世間評価を下げている!?

方針転換

masterで本気の開発しよう!!

  • 高速な計算
  • 最新論文による高精度手法

時系列

2013年10月
OpenMPS公開(v1.0)
2014年12月
素朴な実装の最後(v1.3)
2016年04月
非公開レポジトリを公開(dev)
2016年07月
devを参考に高速化・高精度化を導入(v2.0)
2016年08月-
引き続き開発継続(master)

ということで

OpenMPSは変わりました。

その成果をご覧あれ。

※時間等々の都合上、MPS法の基礎理論を含め細かい話はしません。参考文献をお読みください。

OpenMPSの高速化

TOC

  1. 自己紹介
  2. はじめに
  3. OpenMPSの高速化
  4. OpenMPSの高精度化
  5. 開発予定・まとめ

高速化

v1.3→v2.0

  • 正方格子による近傍粒子探索
  • 行列計算をboost::uBLASViennaCL
  • OpenMPによるスレッド並列化

加速率

約7万粒子を10ステップ計算(Win10, AMD-FX-8350, DDR3-1600)

バージョン計算時間[s]加速率
v1.338482x1.0
近傍粒子探索の改善1210x31.8
ViennaCL733x52.5
OpenMP252x152.7

OpenMPSの高精度化

TOC

  1. 自己紹介
  2. はじめに
  3. OpenMPSの高速化
  4. OpenMPSの高精度化
  5. 開発予定・まとめ

高精度化

オリジナルMPS法(Koshizuka and Oka, 1996)は、かなり問題がある

→高精度粒子法の導入

  • HS法(高精度生成項), Khayyer and Gotoh (2009)
  • HL法(高精度ラプラシアン), Khayyer and Gotoh (2010)
  • GC法(勾配修正行列), Khayyer and Gotoh (2011)
  • ECS法(誤差修正項), Khayyer and Gotoh (2011)
  • DS法(動的人工斥力), Tsuruta et al. (2013)

詳しくはGotoh and Khayyer (2016)を参照

計算例1

20cm四方の水槽でのダムブレーク(空間解像度:1mm)

オリジナルMPS
MPS-HS
MPS-HS-HL

MPS-HS-HL-ECS
MPS-HS-HL-ECS-GC
MPS-HS-HL-ECS-DS

計算例2

8cm四方の水槽でのスロッシング?(空間解像度:0.2mm)

MPS-HS-HL-ECS-DS

計算例2の流速ベクトル図

MPS-HS-HL-ECS-DS

TOC

  1. 自己紹介
  2. はじめに
  3. OpenMPSの高速化
  4. OpenMPSの高精度化
  5. 開発予定・まとめ

直近の開発予定

優先度順

  1. Tsuruta et al. (2015)のSPPを導入
  2. V&V
  3. MPI並列化(おそらくFDPSの導入)
  4. SIMD化(AVX2 or AVX-512)
  5. 剛体連成
  6. GPGPU版の公開(コード自体は既に非公開レポジトリにある)

歓迎!

機能要望・バグ報告
Bitbucket Issueまでお気軽に!
サポート(?)
「動かない」「なんか遅い」「結果が合わない」なども遠慮なくご相談ください(Issue, Twitter reply/DM等へ)。できる限り最大限の範囲で協力します。
共同開発者
プルリクもお待ちしています。

まとめ

  1. OpenMPSをまともなアプリケーションにすることにした
  2. 近傍粒子探索手法を変え、ViennaCLやOpenMPでで高速化した
  3. MPS-HS-HL-GC-ECS-DSで高精度化した
  4. これからも開発は続いていきます
  5. 機能要望・バグ報告・相談・共同開発を歓迎します!

参考文献

  1. Koshizuka S, Oka Y (1996) "Moving particle semi-implicit method for fragmentation of incompressible fluid", Nucl Sci Eng, 123:421–434.
  2. Khayyer A, Gotoh H (2009): "Modified moving particle semi-implicit methods for the prediction of 2D wave impact pressure" Coast Eng, 56:419–440.
  3. Khayyer A, Gotoh H (2010): "A higher order laplacian model for enhancement and stabilization of pressure calculation by the MPS method", Appl Ocean Res, 32(1):124–131.
  4. Khayyer A, Gotoh H (2011): "Enhancement of stability and accuracy of the moving particle semi-implicit method", J Comput Phys, 230:3093–3118.
  5. Tsuruta N, Khayyer A, Gotoh H (2013): "A short note on dynamic stabilization of moving particle semi-implicit method", Comput Fluids, 82:158–164.
  6. Tsuruta N, Khayyer A, Gotoh H (2015): "Space potential particles to enhance the stability of projection-based particle methods", Int J Comput Fluid Dyn, 29(1):100–119
  7. Gotoh H, Khayyer A (2016): "Current achievements and future perspectives for projection-based particle methods with applications in ocean engineering", J Ocean Eng Mar. Energy, 2:251.

return 0;