v3.3.0
v3.3.0
May 21, 2026 · GitHub ↗
Runtime telemetry: process-wide hub with local / TCP / MPI transports, hwloc-backed topology probe, and a small set of read-only runtime accessors. Telemetry ships ON by default; opt out at runtime with gempba::telemetry::disable(). No API breaks.
Added
<gempba/telemetry/telemetry_hub.hpp>— process-wide telemetry hub that publishes worker / node frames and routes control messages. Singleton accessed viagempba::telemetry::get(); runtime kill switch viadisable()/enable()/is_enabled()(process-local, sticky, must be set symmetrically across MPI ranks)- Local in-process and TCP server transports; TCP binds
127.0.0.1:9000by default (configure_port()to change before the firstcreate_*call) - MPI transport on a private communicator (
MPI_Comm_dup) so telemetry traffic never collides with application traffic; auto-installed insidemp::create_schedulerso the collective install runs on every rank - hwloc-backed topology probe: per-socket physical / logical core counts, total memory, CPU brand, cpu-id list; multi-node topology assembled via
MPI_Allgatherof theworker_identityPOD - JSON serializer for telemetry frames; client-pushed interval-control protocol over the TCP socket so dashboards can throttle publish rate live
- Read-only runtime accessors:
gempba::try_get_scheduler(non-throwing variant ofget_scheduler),load_balancer::get_thread_pool_size,load_balancer::get_tasks_running_count,scheduler::get_pending_request_count scripts/connect_telemetry.sh— SSH-tunnel helper for inspecting a remote rank's telemetry socket from a local dashboard
Changed
- Default thread-pool size when no explicit size is set is now
1(was one-per-core viaBS::thread_pool's default). The concretequasi_horizontal_load_balancerandwork_stealing_load_balancerimpls constructBS::thread_pool<>{1}explicitly. Users who relied on the implicit default should pass the size explicitly through their scheduler init
Fixed
- Exported
gempbaConfig.cmakenow re-discovers hwloc behindGEMPBA_HWLOC, so downstreamfind_package(gempba)consumers resolvePkgConfig::HWLOCat link time instead of failing withtarget not found(latent since hwloc became a PRIVATE link dep on a STATIC library) mpi_semi_centralized_schedulerdouble-countedm_sent_task_count— increments fired on two paths for the same dispatch; consolidated to a single ownership point so the stats visitor and telemetry'srecord_sendsee consistent values
Build
- hwloc is a new runtime dependency, gated by the
GEMPBA_HWLOCCMake option (ON for releases, OFF for dev builds). Discovered viapkg-configon all three platforms;.deband MSYS2 packages declare it as a runtime dep - CI installs hwloc on Ubuntu 24.04 / macOS 26 / Windows 2025 (MSYS2) / lint runners
build_*.shscripts forwardGEMPBA_HWLOCso packagers can disable hwloc cleanly- Windows builds link
psapi(process-info probe) andws2_32(Winsock for the TCP server)