Thesis work at CERN on optimized array math for structs of arrays. This project provides an Entity–Component design for the O2 AOD (Analysis Object Data) framework, with vectorized and multithreaded array operations powered by expression templates and SIMD.
- Structs of arrays: Data is laid out in columnar form (arrays per component) for cache-friendly, vectorized access.
- Expression templates: Array operations are built as lazy expressions and evaluated in a single pass, avoiding temporary allocations.
- SIMD + OpenMP: Uses
vectorized_typesfor explicit vectorization (SSE/AVX/AVX2) and OpenMP for threading. - Entity–Component model: Entities and components are defined in
Entities/andComponents/; entities reference collections and behave like lightweight structs.
- Boost (iostreams)
- vectorized_types (submodule)
- compute_arrays (submodule)
- CMake 3.14+
- C++14 compiler (MSVC, GCC, or Clang)
- vcpkg with Boost installed:
vcpkg install boost-iostreams:x64-windows
Using the preset (recommended; uses vcpkg toolchain automatically):
cmake --preset default
cmake --build buildOr manually with vcpkg:
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=C:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake
cmake --build buildAdjust the vcpkg path if needed (e.g. C:/dev/vcpkg or your install location).
If you clone without --recursive, initialize submodules:
git submodule update --init --recursive| Directory | Description |
|---|---|
Entities/ |
Entity type definitions |
Components/ |
Component types (structs of arrays) |
ecs/ |
Entity–Component infrastructure, collections |
Histogram.h |
Histogram filling with vectorized expressions |
See repository for license information.