github charmplusplus/charm v8.1.0
Charm++ 8.1.0

3 hours ago

This is the final release of the classic Converse line of Charm++. After this release the 'main' branch of the repository is renamed 'classic' and receives bug fixes only. New development, including all future releases, continues on the reconverse-based line of Charm++, which becomes the repository's default branch; see README.md and the repository page (https://github.com/charmplusplus/charm) for details. Releases 8.0.1 and 8.0.2 were tagged without entries in CHANGES, so these notes cover all changes since 8.0.0.

New features and APIs

  • CkTreeCacheManager, a new class in ck-libs/cache beside CkCacheManager: it keeps CkCache's request/reply protocol but stores fetched tree nodes once per process instead of once per PE. CkCache's request/reply counters are now always compiled in, not only under COSMO_STATS (#4013).

  • Summary tracing with +sumDetail now records the message bytes delivered to each entry method in each interval, as a new MsgBytesPerEPperInterval line in the .sumd file. Older versions of Projections ignore the new line (#3937).

  • New allGather library (ring, hypercube and flooding algorithms), built by default; link with -lmoduleallGather (#3886).

  • [whenidle] entry methods no longer receive a time argument: the generated code calls the method, and CkIndex_X::method(), with no arguments, matching the .ci declaration (#3820).

  • Collide: the collision manager and serial client groups are now migratable, and the new CollideSerialClientRestart() reinstalls the client function after a checkpoint restart (#3921).

  • CMK_GLOBAL_LOCATION_UPDATE uses the location-cache API; with it, migrations must happen at load balancing steps, not by anytime migration (#3919).

  • Charm4py support: Projections tracing (#3880), CCS (#3885), and hapiAddCallback (#3852, #3889, #3894).

  • New verbs-linux-arm8 port (#3837).

  • New Converse benchmarks: send to self (#3891) and ping_ack (#3906).

Bug fixes

  • Fixed a reduction hang when anytime migration leaves a PE with no contribution owed for the current round (#3942).

  • Record-replay (+record/+replay) repairs: no crash on array broadcasts, no replay stall on SMP broadcasts, durable per-record logs, and truncated logs treated as the end of the recording (#3943).

  • [threaded, nokeep] entry methods no longer use their message after it is freed (#4001).

  • Array broadcasts to entry methods without [nokeep] that carry a message with custom pack/unpack no longer use freed memory (#4003).

  • Builds with error checking abort, naming the entry method, when a [nokeep] entry method frees its message (#4007).

  • Isomalloc probes free address space without unmapping live memory, which crashed Charm++ programs intermittently on macOS 26 (#3996).

  • macOS SMP worker threads get the main thread's stack size, fixing SIGBUS crashes (#3927).

  • hapiPollEvents() aborts with a message on a CUDA error instead of hanging (#3938).

  • Checkpoint/restart sets the group and node group counts correctly in CkPupPerPlaceData() (#3899).

  • Less lock contention in CsdNextMessage() with many threads per process (#3916); ucx-linux-arm8 keeps the previous scheme through the new CMK_NODE_QUEUE_LOCK_BEFORE_CHECK option (#3928).

  • OFI: builds against libfabric 2.x on Frontier (#3929); improved CXI defaults for ALCF Aurora (#3855).

  • Build fixes: CMI-SHMEM (#3909), Cray PMI headers (#3887), CMake builds with CUDA (#3836), pamilrts (#3829), CentralLB (#3874), and allGather on Windows (#3907).

Build and CI

  • CMake 3.12 or newer is required (#3882).

  • AMPI no longer builds ROMIO by default, because the port is incompatible with GCC 14 and later; add --with-romio to enable MPI-IO (#3871).

  • Continuous integration: ARM64 Linux jobs moved to GitHub Actions and CircleCI retired (#3946); documentation-only pull requests skip the build/test matrix (#3932, #3992); actions upgraded off the deprecated Node 20 runtime (#3952); runner and Spack job updates (#3871, #3873, #3875, #3881, #3896, #3897, #3912, #3917).

Documentation

  • What [nokeep] means for marshalled, message and threaded entry methods, and what error-checking builds detect (#4005, #4011).

  • Creation ordering for array maps, and declaring a map as a creation dependence of its array (#3931).

  • Reductions in groups and node groups (#3883); global location update (#3919); zero-copy links (#3830); LiveViz paths (#3895).

  • Example and benchmark fixes: pingpong_multipairs timing (#3902), Molecular2D uses std::vector (#3835), periodic test (#3841, #3844).

Don't miss a new charm release

NewReleases is sending notifications on new releases.