ソフトウェア

exaFMM

https://github.com/exafmm/exafmm

exaFMMはexascale世代の超大型計算機を想定して開発されたFast Multipole Method (FMM)のライブラリである。exaFMMは以下の6つの特性について様々な工夫がなされている。

  • Performance(性能): SSE,AVXなどのイントリンシックを用いた内部カーネル。近似逆数平方根+Newton-Raphson補正。C++テンプレートメタプログラミングを用いた漸化式の展開。Warp単位の実行モデルを用いたCUDAカーネル。Kahan summationを用いた浮動小数点演算精度の拡張
  • Scalability(規模拡張性):OpenMP, pthreads, qthreads, MassiveThreads, Intel thread building blocks, Cilk, QUARK, OmpSs, Charm++などの幅広い並列化モデル。Orthogonal recursive multisection, Morton/Hilbert 曲線の両方の領域分割法。通信の負荷分散。Hypercube型のalltoall通信。
  • Portability(可搬性):ライブラリ依存なし。C++11依存なし。SIMDベクトル長の自動検知。自動チューニング。AutotoolsとCMakeの両方をサポート。Titan, Mira, Stampede, K computer, Shaheen, Piz Daint, TSUBAMEで検証済み。
  • Modularity(モジュール性):内部カーネル、木構造、領域分割、通信の完全分離。
  • Simplicity(簡素さ):SIMDイントリンシックの演算子オーバーロード。Kahan summation型の定義。C++のtemplates, functors, polymorphism, class inheritance, virtual classesの限定的な使用。
  • Extensibility(機能拡張性):Helmholtz, Stokes, Maxwell, Yukawa, Navier, 1/R−ν, Biharmonicなどのカーネルへの拡張。周期境界条件。