As a bit of history of this project, it started in 2008 with PyFMM
, a 2D serial prototype in Python; then followed PetFMM
in 2009, a PETSc-based parallel code with heavy templating [@cruz2011petfmm]; the third effort was GemsFMM
in 2010, a serial code with CUDA kernels for execution on GPUs [@yokota2011gems].
Another student in the group felt that exafmm-alpha
overused class inheritance and was inadequate for his application, so he and a collaborator re-used only the kernels and implemented another tree construction in fmmtl
.
The first author of this paper began working with exafmm-alpha
in 2017, but at this point the mission was clear: simplify and aim for reusability.
That work led to the sixth implementation of FMM in the group, still called exafmm
, but it is not what we present here and we haven't published about it.
With this new version of ExaFMM (called exafmm-t
), we aim to bring the FMM to a broader audience and to increased scientific impact.
History: 2017/12/11 - Now
Branch: gpu, vanilla-m2l
Kernel: LaplaceKI, HelmholtzKI, YukawaKI
Periodic: no
SIMD: vec.h
Thread: OpenMP loops and OpenMP tasks
MPI: none
GPU: P2P, M2L
Build: autoconf
Wrapper: none
Plotting: none
History: 2017/03/03 - Now
Branch: dev, learning
Kernel: Laplace, LaplaceKI, Helmholtz, Stokes
Periodic: yes
SIMD: vec.h
Thread: OpenMP tasks
MPI: HOT (global histogram sort)
GPU: no
Build: autoconf
Wrapper: none
Plotting: Python
History: 2012/07/21 - 2017/03/01
Branch: develop, sc16
Kernel: Laplace, Helmholtz, BiotSavart, Van der Waals
Periodic: yes
SIMD: Agner's vectorclass
Thread: OpenMP, Cilk, TBB, Mthreads
MPI: ORB (bisection, octsection)
GPU: separate code (Bonsai hack)
Build: autoconf & CMake
Wrapper: CHARMM, GROMACS, general MD, PetIGA
Plotting: none
History: 2010/12/22 - 2012/07/21
Branch: none
Kernel: Laplace, Van der Waals, Biot Savart, Stretching, Gaussian
Periodic: yes
SIMD: none
Thread: QUARK
MPI: ORB (global nth_element)
GPU: offload all kernels
Build: Makefile
Wrapper: MR3 compatible MD
Plotting: VTK
History: mid 2010 - late 2010
Branch: none
Kernel: Laplace, Laplace Gn, Helmholtz
Periodic: no
SIMD: none
Thread: none
MPI: Allgather LET
GPU: offload all kernels
Build: Makefile
Wrapper: none
Plotting: none
History: early 2010 - mid 2010
Branch: none
Kernel: Laplace, Biot Savart, Stretching (transpose,mixed), Gaussian
Periodic: yes (shear, channel)
SIMD: none
Thread: none
MPI: Allgather LET
GPU: offload all kernels
Build: Makefile
Wrapper: none
Plotting: none
ASKIT
Bosnsai
ChaNGa
FDPS
KIFMM
KIFMM new
Modylas
PKIFMM
PEPC
pfalcON
PVFMM
Salmon treecode
ScaFaCos
ScalFMM