Structures of arrays (SoA) are generally faster than arrays of structures (AoS) while AoS are more handy. This project (SoAx) combines the advantages of both. By means of C++(11) meta-template programming SoAx achieves maximal performance (efficient use of vector units and cache of modern CPUs) while providing a very convenient user interface (including object-oriented element handling) and flexibility. It has been designed to handle list-like sets of particles (similar to struct {int id; double[3] pos; float[3] vel;};) in the context of high-performance numerical simulations. It can be applied to many other problems. Please check the sample file main.cpp to see examples of code that you can write with SoAx.
Features
- Generic implementation of a Structure of Arrays with C++11
- Similar handyness as Arrays of Structures but much faster
- List-like operations such as remove and push_back
- Template metaprogramming using template inheritance and std::tuple
- Optimized array operations (+,-,...) using expression templates
- GPU support
- Serial/Threaded/MPI - file I/O
- Tested with g++ 4.8.4, clang++ 3.6, icc 16.0, nvcc 7.0