TreeLB asserts when an element migrates outside a load-balancing step

Aperta
#4,066 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
1-2 giorni
Idoneità per principianti
52/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
cpp

Direzione di ricerca

Start with src/ck-ldb/TreeLB.C:477 and inspect TreeLB::objMovedIn, then trace how the load-balancing manager notifies the balancer for migrations outside a step. Reproduce with the commands in tests/ampi/migration using +balancer RandCentLB +ampiEnableMigrateToPe. Done when asynchronous migration no longer triggers the assertion and the migration test passes with the balancer enabled.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

An array element that arrives on a PE outside a load-balancing step trips TreeLB's assertion that a step is in progress, so TreeLB cannot be combined with asynchronous migration.

Reproduce

On the recharm line with #4064 (AMPI ranks migrate on reconverse), reconverse-linux-x86_64 or reconverse-darwin-arm8:

cd tests/ampi/migration && make
./migration +pe 2 +vp 8 +balancer RandCentLB +ampiEnableMigrateToPe
Assertion numLevels > 0 && awaitingLB[level] failed: file src/ck-ldb/TreeLB.C, line 484
Reason: Failed assert

It fails every run: 3 of 3 on Linux in one process, and 3 of 3 on macOS both in one process and under lcrun (seen in the review of #4064). Without +balancer the same test passes; tests/ampi/migration/Makefile never combines the two, which is why CI does not see it.

What happens

The test moves ranks with AMPI_Migrate_to_pe, an asynchronous migration that is not part of an LB step. When the element lands, the LB manager notifies the balancer, and TreeLB::objMovedIn (src/ck-ldb/TreeLB.C:477) asserts numLevels > 0 && awaitingLB[0], which holds only during a step. (RandCentLB runs through TreeLB's legacy mode.)

Before #4064 this path could not be reached on reconverse, because TCharm threads did not migrate, so this is newly reachable rather than a regression of that PR. Whether classic Converse hits it too was not checked.

Possible directions: ignore arrivals when no step is in progress (they are not part of a step's accounting), or keep the notification from reaching the balancer for migrations that a step did not order.

Found while reviewing #4064.

Lingua principale
C++
Stelle
241
Fork
62
Merge medio
1g 1h
PR unite (30g)
121

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di charmplusplus/charm

Tutte le issue di charmplusplus/charm

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.