You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When user code implements ckJustMigrated to track migrations after migrateMe, reductions do not work. Instead of calling ArrayElement::ckJustMigrated, the runtime calls the user's ckJustMigrated. This results in the object count on PEs for reductions not being correctly updated when objects migrate in. Future reduction contributions result in a hang. The issue can be reproduced by calling migrateMe and implementing ckJustMigrated in user code and doing a few reduction calls after ckJustMigrated.
The text was updated successfully, but these errors were encountered:
I believe you need to call ArrayElement::ckJustMigrated() from your ckJustMigrated method if you override that virtual method.
This is one representative of the "didn't call the superclass" bugs that can hit constructors and virtual methods in OOP C++.
(20+ years ago when I was writing this stuff, I really should have made all the user-facing virtual override methods have empty default implementations, and used inaccessible system methods for the critical system plumbing, but here we are!)
When user code implements ckJustMigrated to track migrations after migrateMe, reductions do not work. Instead of calling ArrayElement::ckJustMigrated, the runtime calls the user's ckJustMigrated. This results in the object count on PEs for reductions not being correctly updated when objects migrate in. Future reduction contributions result in a hang. The issue can be reproduced by calling migrateMe and implementing ckJustMigrated in user code and doing a few reduction calls after ckJustMigrated.
The text was updated successfully, but these errors were encountered: