v4.0.0
v4.0.0
May 23, 2026 · GitHub ↗
This is the release where gempba becomes a real distributed library you install instead of clone. Pick your flavor (multithreading or MPI), pick your platform (Linux, macOS, or Windows), and apt install / pacman -S / brew install your way to a working build. Telemetry, which landed in v3.3.0, ships in every flavor, so your production runs are observable out of the box without any wiring.
What's new
- Packages on every platform.
.debon Debian/Ubuntu, MSYS2 packages on Windows, and a brand-new Homebrew tap on macOS. Each platform ships two coexisting flavors: a default multithreading build and an MPI build that you install on top when you need it. - Telemetry is in the box. The v3.3.0 telemetry hub (worker / node frames, hwloc topology, local + TCP + MPI transports) is built into every published flavor. No extra dependency to add, no extra flag to flip.
- Same call site, both modes. Public namespaces were reshaped. Consumer code now reads the same whether you build against the multithreading or the MPI flavor:
gempba::create_load_balancer(...),gempba::create_node_manager(...). Mode is picked atfind_packagetime, not at every call site. - Examples moved out.
examples/left the source tree for a sibling repo, rapastranac/gempba-examples, where they consume gempba viafind_packageexactly like you would. Every example PR exercises the public API.
Breaking changes
- Public namespaces renamed:
gempba::mpis nowgempba::multiprocessing,gempba::mtis nowgempba::multithreading. - In a consumer build, exactly one of the two is
inline, selected byGEMPBA_MULTIPROCESSING. Code that hard-codes the explicit qualifier still compiles, but mixing both qualifiers in one consumer build no longer works. - The
gempba::multiprocessing::*facade (schedulers, MP factories, MPcreate_node_manager,get_default_mpi_stats_visitor,runnables::*, MP node creators) is gated onGEMPBA_MULTIPROCESSING=ON. Code that referenced these in an MT-only build will fail to compile. apt install libgempba-devpreviously gave you an MPI-enabled build. It now gives you multithreading only. MPI consumers additionallyapt install libgempba-mpi-dev.pacman -S mingw-w64-x86_64-gempbapreviously gave you an MPI-enabled build. Same shape: MPI consumers additionallypacman -S mingw-w64-x86_64-gempba-mpi.- The in-tree
examples/tree is gone. The migrated tree now lives in rapastranac/gempba-examples.
Migration
// Before (v3.x)
auto* lb = gempba::mp::create_load_balancer(policy, worker);
auto& nm = gempba::mp::create_node_manager(lb, worker);
// After (v4.0): short form, mode picked by GEMPBA_MULTIPROCESSING
auto* lb = gempba::create_load_balancer(policy, worker);
auto& nm = gempba::create_node_manager(lb, worker);
// (or the explicit form: gempba::multiprocessing::create_load_balancer(...))# v4.0 consumer CMake
find_package(gempba REQUIRED) # default: mt
find_package(gempba REQUIRED COMPONENTS mt) # explicit mt
find_package(gempba REQUIRED COMPONENTS mpi) # mpi (requires libgempba-mpi-dev installed)
target_link_libraries(my_app PRIVATE gempba::gempba)The two flavors are mutually exclusive within a single binary. They share mode-agnostic top-level symbols and would ODR-clash, so find_package(gempba COMPONENTS mt mpi) is rejected up front with a clear diagnostic. A project that genuinely needs both (say, an MT debug runner and an MPI cluster runner) splits into two executables, each find_package-ing one.
Added
- Top-level
gempba::create_load_balancer(std::unique_ptr<load_balancer>). Mode-agnostic BYO factory that works identically in MT and MP builds. gempbaConfig.cmakeis now a COMPONENTS-aware dispatcher. Defaults tomt, refuses themt+mpicombination, pullsfind_dependency(MPI)only on thempibranch.- Two
.debpackages:libgempba-dev(mt base, ships headers andgempbaConfig.cmake) andlibgempba-mpi-dev(mpi topping,Depends:the base pluslibopenmpi-dev). Installable side-by-side without conflict. - Two MSYS2 packages:
mingw-w64-x86_64-gempbaandmingw-w64-x86_64-gempba-mpi. Same shape, same dependency direction. - macOS Homebrew tap:
brew tap <owner>/gempba && brew install gempba(orgempba-mpi). - rapastranac/gempba-examples sister repo carrying the migrated example tree. Consumes gempba via
find_package(gempba)exactly as a downstream user would. - README sections "Installing" (apt / pacman / brew per flavor) and "Selecting a flavor" (the
COMPONENTSAPI, the mutual-exclusion guard, the two-executables pattern).
Build
find_package(MPI REQUIRED)andMPI::MPI_CXXlinkage are conditional onGEMPBA_MULTIPROCESSING=ON. MT-only builds no longer require an MPI installation.- Installed library output name is flavor-tagged:
libgempba.afor mt,libgempba_mpi.afor mpi. Both flavors export the same imported target namegempba::gempba, so your link line never changes between modes. - Per-flavor
pkg-configfile:gempba.pcfor mt,gempba-mpi.pcfor mpi.