Fix segfault in hybrid load balancer in CUDA build 90/4690/1
authorJim Phillips <jim@ks.uiuc.edu>
Mon, 15 Oct 2018 21:22:58 +0000 (16:22 -0500)
committerJim Phillips <jim@ks.uiuc.edu>
Mon, 15 Oct 2018 21:22:58 +0000 (16:22 -0500)
Would access index of largest compute when no migratable
computes exist due to everything being offloaded to GPU.

Load balancer could be disabled completely in this case.

Change-Id: I772fd7540605f8c7cdb1fed348a90ecd456531a7

src/NamdHybridLB.C

index 76c75e8..ff477e0 100644 (file)
@@ -343,14 +343,14 @@ CLBMigrateMsg* NamdHybridLB::GrpLevelStrategy(LDStats* stats) {
    int i;
    double total = 0.;
    maxCompute = 0.;
-   int maxi = 0;
+   int maxi = -1;
    for (i=0; i<nMoveableComputes; i++) {
       double load = computeArray[i].load;
       total += load;
       if ( load > maxCompute ) { maxCompute = load;  maxi = i; }
    }
    avgCompute = total / nMoveableComputes;
-   maxComputeId = LdbIdField(computeArray[maxi].handle.id, 0);
+   maxComputeId = maxi < 0 ? -1 : LdbIdField(computeArray[maxi].handle.id, 0);
 
     int P = stats->nprocs();
    numPesAvailable = 0;