Conversation
…rray's index is not packed into ids An array with no index compressor mints element ids from a per-PE counter in the element field (16 bits by default). Nothing checked the counter: past 65,535 elements on one PE it carried into the home field, so ids silently collided with another PE's and every home lookup for them went to the wrong PE. getNewObjectID now aborts at the limit, naming the location manager and the remedies (insert from more PEs, setBounds, fewer collection bits). The message is kept under 255 characters because reconverse's CmiAbort formats into a 256-byte buffer. Whether an array gets a compressor is easy to get wrong by accident: the sized CkArrayOptions constructors set bounds, but setNumInitial/setEnd do not, and bounds that need more than CMK_OBJID_ELEMENT_BITS are refused silently. The CkLocMgr constructor now prints one note on PE 0 in either case, with the bit count it needed or the setBounds remedy. A public FixedArrayIndexCompressor::bitsNeeded(bounds) reports the width; make() uses it too. Diagnostics only; no change to ids or delivery. Part of the object id work tracked in #3994 (PR 0 of doc/objid64-design.md on the objid-redesign branch). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… index is not packed into ids Every migrating test in the tree uses a small bounded array, whose index is compressed into the element id, so the other id scheme (per-PE counter plus an index<->id map in CkLocMgr) was never exercised together with migration. This test creates a 2D array with no bounds and no initial size, inserts every element dynamically from PE 0, and runs a message ring in which each element migrates to the next PE every five steps; it ends by quiescence. Default 4x3 elements, count 40; arguments nX nY count. Registered in the regular test list (anytime_migration is in FTDIRS and only runs under syncfttest). Part of the object id work tracked in #3994. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
lvkale
requested review from
adityapb,
ericjbohm and
ritvikrao
as code owners
September 29, 2026 23:48
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR 0 of the object id work in #3994 (design: #4015,
doc/objid64-design.mdsection 9). Diagnostics and a test only; no change to how ids are formed or how messages are delivered, so it can merge ahead of the redesign.Abort on per-PE element id overflow. An array without an index compressor mints ids from a per-PE counter in the 16-bit element field, and nothing checked it: past 65,535 elements on one PE the counter carried into the home field, ids collided with another PE's, and home lookups went to the wrong PE silently.
CkLocMgr::getNewObjectIDnow aborts at the limit with the location manager and the remedies. Verified: 65,535 inserts on one PE succeed, 65,536 abort with the full message (kept under 255 characters because reconverse'sCmiAbortformats into a 256-byte buffer).Note when an array's index is not packed into ids. Printed once on PE 0 by the
CkLocMgrconstructor when there is no compressor, in two wordings: bounds that need more bits thanCMK_OBJID_ELEMENT_BITS(reports the count needed), or an array givensetNumInitial/setEndbut no bounds (points atsetBounds). The sizedCkArrayOptionsconstructors set bounds, so ordinary arrays print nothing; an array with neither size nor bounds is deliberately dynamic and prints nothing either. New publicFixedArrayIndexCompressor::bitsNeeded(bounds), also used bymake().New test
tests/charm++/unbounded_migration. Every migrating test in the tree uses a small bounded array, so the counter-plus-map id scheme was never exercised with migration. This one creates a 2D array with no bounds, inserts all elements dynamically, and migrates each element to the next PE every five steps under a message ring; ends by quiescence. Registered in the regular list (noteanytime_migrationsits inFTDIRSand only runs undersyncfttest).Tested on reconverse-darwin-arm8 (production build): the new test on 2 and 4 PEs, 5 repeated runs, and through
make test; pingpong, hello/4darray and startupTest print no note; probes for both note wordings and for the abort at the exact boundary.🤖 Generated with Claude Code