From: Berk Hess Date: Thu, 2 Jul 2015 14:03:34 +0000 (+0200) Subject: Fix DD DLB state issue X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=c1da1c9bdd3b1e43aa2349265e07d6bc7d088d31;hp=466e36339dfce3cbb7a36d43741779a39f5bd5c6;p=alexxy%2Fgromacs.git Fix DD DLB state issue The introduction of DLB locking for PME load balancing added another DLB state, which was stored in a third variable. These variables were not always all properly checked. Simplified the code by merging these three state variables into one. In added there was a fourth variable (bGridJump) is gmx_domdec_t, this is replaced by calls to a functions returning is DLB is on. Refs #1760. Change-Id: I80d499149e4e5bfd689e76208384a8ba61e2842a --- diff --git a/src/gromacs/domdec/domdec.cpp b/src/gromacs/domdec/domdec.cpp index e6910aefbc..3986ed0562 100644 --- a/src/gromacs/domdec/domdec.cpp +++ b/src/gromacs/domdec/domdec.cpp @@ -216,9 +216,20 @@ enum { }; enum { - edlbAUTO, edlbNO, edlbYES, edlbNR + edlbsOffForever, /* DLB is off and will never be turned on */ + edlbsOffCanTurnOn, /* DLB is off and will turn on with imbalance */ + edlbsOffTemporarilyLocked, /* DLB is off and temporarily can not turn on */ + edlbsOn, /* DLB is on and will stay on forever */ + edlbsNR }; -const char *edlb_names[edlbNR] = { "auto", "no", "yes" }; +/* Allowed DLB state transitions: + * edlbsOffCanTurnOn -> edlbsOn + * edlbsOffCanTurnOn -> edlbsOffForever + * edlbsOffCanTurnOn -> edlbsOffTemporarilyLocked + * edlbsOffTemporarilyLocked -> edlbsOffCanTurnOn + */ + +const char *edlbs_names[edlbsNR] = { "off", "auto", "locked", "on" }; typedef struct { @@ -297,14 +308,10 @@ typedef struct gmx_domdec_comm t_blocka *cglink; char *bLocalCG; - /* The DLB option */ - int eDLB; - /* Is eDLB=edlbAUTO locked such that we currently can't turn it on? */ - gmx_bool bDLB_locked; - /* With eDLB=edlbAUTO, should we check if to DLB on at the next DD? */ + /* The DLB state, possible values are defined above */ + int dlbState; + /* With dlbState=edlbsOffCanTurnOn, should we check if to DLB on at the next DD? */ gmx_bool bCheckWhetherToTurnDlbOn; - /* Are we actually using DLB? */ - gmx_bool bDynLoadBal; /* Cell sizes for static load balancing, first index cartesian */ real **slb_frac; @@ -587,6 +594,11 @@ t_block *dd_charge_groups_global(gmx_domdec_t *dd) return &dd->comm->cgs_gl; } +static bool dlbIsOn(const gmx_domdec_comm_t *comm) +{ + return (comm->dlbState == edlbsOn); +} + static void vec_rvec_init(vec_rvec_t *v) { v->nalloc = 0; @@ -665,7 +677,7 @@ void dd_get_ns_ranges(gmx_domdec_t *dd, int icg, dim = dd->dim[d]; shift0[dim] = zones->izone[izone].shift0[dim]; shift1[dim] = zones->izone[izone].shift1[dim]; - if (dd->comm->tric_dir[dim] || (dd->bGridJump && d > 0)) + if (dd->comm->tric_dir[dim] || (dlbIsOn(dd->comm) && d > 0)) { /* A conservative approach, this can be optimized */ shift0[dim] -= 1; @@ -3219,7 +3231,7 @@ static void set_dd_cell_sizes_slb(gmx_domdec_t *dd, gmx_ddbox_t *ddbox, } } - if (!comm->bDynLoadBal) + if (!dlbIsOn(comm)) { copy_rvec(cellsize_min, comm->cellsize_min); } @@ -3815,7 +3827,7 @@ static void set_dd_cell_sizes(gmx_domdec_t *dd, copy_rvec(comm->cell_x0, comm->old_cell_x0); copy_rvec(comm->cell_x1, comm->old_cell_x1); - if (comm->bDynLoadBal) + if (dlbIsOn(comm)) { if (DDMASTER(dd)) { @@ -3856,7 +3868,7 @@ static void comm_dd_ns_cell_sizes(gmx_domdec_t *dd, /* Without PBC we don't have restrictions on the outer cells */ if (!(dim >= ddbox->npbcdim && (dd->ci[dim] == 0 || dd->ci[dim] == dd->nc[dim] - 1)) && - comm->bDynLoadBal && + dlbIsOn(comm) && (comm->cell_x1[dim] - comm->cell_x0[dim])*ddbox->skew_fac[dim] < comm->cellsize_min[dim]) { @@ -3870,11 +3882,11 @@ static void comm_dd_ns_cell_sizes(gmx_domdec_t *dd, } } - if ((dd->bGridJump && dd->ndim > 1) || ddbox->nboundeddim < DIM) + if ((dlbIsOn(dd->comm) && dd->ndim > 1) || ddbox->nboundeddim < DIM) { /* Communicate the boundaries and update cell_ns_x0/1 */ dd_move_cellx(dd, ddbox, cell_ns_x0, cell_ns_x1); - if (dd->bGridJump && dd->ndim > 1) + if (dlbIsOn(dd->comm) && dd->ndim > 1) { check_grid_jump(step, dd, dd->comm->cutoff, ddbox, TRUE); } @@ -5000,7 +5012,7 @@ static void dd_redistribute_cg(FILE *fplog, gmx_int64_t step, /* Check which direction this cg should go */ for (d2 = d+1; (d2 < dd->ndim && mc == -1); d2++) { - if (dd->bGridJump) + if (dlbIsOn(dd->comm)) { /* The cell boundaries for dimension d2 are not equal * for each cell row of the lower dimension(s), @@ -5299,7 +5311,7 @@ static void get_load_distribution(gmx_domdec_t *dd, gmx_wallcycle_t wcycle) (dd->ci[dd->dim[d+1]] == 0 && dd->ci[dd->dim[dd->ndim-1]] == 0)) { load = &comm->load[d]; - if (dd->bGridJump) + if (dlbIsOn(dd->comm)) { cell_frac = comm->cell_f1[d] - comm->cell_f0[d]; } @@ -5308,7 +5320,7 @@ static void get_load_distribution(gmx_domdec_t *dd, gmx_wallcycle_t wcycle) { sbuf[pos++] = dd_force_load(comm); sbuf[pos++] = sbuf[0]; - if (dd->bGridJump) + if (dlbIsOn(dd->comm)) { sbuf[pos++] = sbuf[0]; sbuf[pos++] = cell_frac; @@ -5328,7 +5340,7 @@ static void get_load_distribution(gmx_domdec_t *dd, gmx_wallcycle_t wcycle) { sbuf[pos++] = comm->load[d+1].sum; sbuf[pos++] = comm->load[d+1].max; - if (dd->bGridJump) + if (dlbIsOn(dd->comm)) { sbuf[pos++] = comm->load[d+1].sum_m; sbuf[pos++] = comm->load[d+1].cvol_min*cell_frac; @@ -5357,7 +5369,7 @@ static void get_load_distribution(gmx_domdec_t *dd, gmx_wallcycle_t wcycle) if (dd->ci[dim] == dd->master_ci[dim]) { /* We are the root, process this row */ - if (comm->bDynLoadBal) + if (dlbIsOn(comm)) { root = comm->root[d]; } @@ -5374,7 +5386,7 @@ static void get_load_distribution(gmx_domdec_t *dd, gmx_wallcycle_t wcycle) load->sum += load->load[pos++]; load->max = std::max(load->max, load->load[pos]); pos++; - if (dd->bGridJump) + if (dlbIsOn(dd->comm)) { if (root->bLimited) { @@ -5408,7 +5420,7 @@ static void get_load_distribution(gmx_domdec_t *dd, gmx_wallcycle_t wcycle) pos++; } } - if (comm->bDynLoadBal && root->bLimited) + if (dlbIsOn(comm) && root->bLimited) { load->sum_m *= dd->nc[dim]; load->flags |= (1<load_step += comm->cycl[ddCyclStep]; comm->load_sum += comm->load[0].sum; comm->load_max += comm->load[0].max; - if (comm->bDynLoadBal) + if (dlbIsOn(comm)) { for (d = 0; d < dd->ndim; d++) { @@ -5492,7 +5504,7 @@ static void print_dd_load_av(FILE *fplog, gmx_domdec_t *dd) fprintf(stderr, "%s", buf); } bLim = FALSE; - if (comm->bDynLoadBal) + if (dlbIsOn(comm)) { sprintf(buf, " Steps where the load balancing was limited by -rdd, -rcon and/or -dds:"); for (d = 0; d < dd->ndim; d++) @@ -5535,7 +5547,7 @@ static void print_dd_load_av(FILE *fplog, gmx_domdec_t *dd) sprintf(buf, "NOTE: %.1f %% of the available CPU time was lost due to load imbalance\n" " in the domain decomposition.\n", lossf*100); - if (!comm->bDynLoadBal) + if (!dlbIsOn(comm)) { sprintf(buf+strlen(buf), " You might want to use dynamic load balancing (option -dlb.)\n"); } @@ -5613,7 +5625,7 @@ static void dd_print_load(FILE *fplog, gmx_domdec_t *dd, gmx_int64_t step) fprintf(fplog, "\n"); } fprintf(fplog, "DD step %s", gmx_step_str(step, buf)); - if (dd->comm->bDynLoadBal) + if (dlbIsOn(dd->comm)) { fprintf(fplog, " vol min/aver %5.3f%c", dd_vol_min(dd), flags ? '!' : ' '); @@ -5631,7 +5643,7 @@ static void dd_print_load(FILE *fplog, gmx_domdec_t *dd, gmx_int64_t step) static void dd_print_load_verbose(gmx_domdec_t *dd) { - if (dd->comm->bDynLoadBal) + if (dlbIsOn(dd->comm)) { fprintf(stderr, "vol %4.2f%c ", dd_vol_min(dd), dd_load_flags(dd) ? '!' : ' '); @@ -5672,7 +5684,7 @@ static void make_load_communicator(gmx_domdec_t *dd, int dim_ind, ivec loc) if (bPartOfGroup) { dd->comm->mpi_comm_load[dim_ind] = c_row; - if (dd->comm->eDLB != edlbNO) + if (dd->comm->dlbState != edlbsOffForever) { if (dd->ci[dim] == dd->master_ci[dim]) { @@ -5966,7 +5978,7 @@ void setup_dd_grid(FILE *fplog, gmx_domdec_t *dd) } } - if (dd->comm->eDLB != edlbNO) + if (dd->comm->dlbState != edlbsOffForever) { snew(dd->comm->root, dd->ndim); } @@ -6543,60 +6555,60 @@ static int check_dlb_support(FILE *fplog, t_commrec *cr, const char *dlb_opt, gmx_bool bRecordLoad, unsigned long Flags, t_inputrec *ir) { - int eDLB = -1; + int dlbState = -1; char buf[STRLEN]; switch (dlb_opt[0]) { - case 'a': eDLB = edlbAUTO; break; - case 'n': eDLB = edlbNO; break; - case 'y': eDLB = edlbYES; break; + case 'a': dlbState = edlbsOffCanTurnOn; break; + case 'n': dlbState = edlbsOffForever; break; + case 'y': dlbState = edlbsOn; break; default: gmx_incons("Unknown dlb_opt"); } if (Flags & MD_RERUN) { - return edlbNO; + return edlbsOffForever; } if (!EI_DYNAMICS(ir->eI)) { - if (eDLB == edlbYES) + if (dlbState == edlbsOn) { sprintf(buf, "NOTE: dynamic load balancing is only supported with dynamics, not with integrator '%s'\n", EI(ir->eI)); dd_warning(cr, fplog, buf); } - return edlbNO; + return edlbsOffForever; } if (!bRecordLoad) { dd_warning(cr, fplog, "NOTE: Cycle counting is not supported on this architecture, will not use dynamic load balancing\n"); - return edlbNO; + return edlbsOffForever; } if (Flags & MD_REPRODUCIBLE) { - switch (eDLB) + switch (dlbState) { - case edlbNO: + case edlbsOffForever: break; - case edlbAUTO: + case edlbsOffCanTurnOn: dd_warning(cr, fplog, "NOTE: reproducibility requested, will not use dynamic load balancing\n"); - eDLB = edlbNO; + dlbState = edlbsOffForever; break; - case edlbYES: + case edlbsOn: dd_warning(cr, fplog, "WARNING: reproducibility requested with dynamic load balancing, the simulation will NOT be binary reproducible\n"); break; default: - gmx_fatal(FARGS, "Death horror: undefined case (%d) for load balancing choice", eDLB); + gmx_fatal(FARGS, "Death horror: undefined case (%d) for load balancing choice", dlbState); break; } } - return eDLB; + return dlbState; } static void set_dd_dim(FILE *fplog, gmx_domdec_t *dd) @@ -6742,16 +6754,14 @@ gmx_domdec_t *init_domain_decomposition(FILE *fplog, t_commrec *cr, /* Initialize to GPU share count to 0, might change later */ comm->nrank_gpu_shared = 0; - comm->eDLB = check_dlb_support(fplog, cr, dlb_opt, comm->bRecordLoad, Flags, ir); - comm->bDLB_locked = FALSE; + comm->dlbState = check_dlb_support(fplog, cr, dlb_opt, comm->bRecordLoad, Flags, ir); comm->bCheckWhetherToTurnDlbOn = TRUE; - comm->bDynLoadBal = (comm->eDLB == edlbYES); if (fplog) { - fprintf(fplog, "Dynamic load balancing: %s\n", edlb_names[comm->eDLB]); + fprintf(fplog, "Dynamic load balancing: %s\n", + edlbs_names[comm->dlbState]); } - dd->bGridJump = comm->bDynLoadBal; comm->bPMELoadBalDLBLimits = FALSE; if (comm->nstSortCG) @@ -6944,7 +6954,7 @@ gmx_domdec_t *init_domain_decomposition(FILE *fplog, t_commrec *cr, /* We need to choose the optimal DD grid and possibly PME nodes */ limit = dd_choose_grid(fplog, cr, dd, ir, mtop, box, ddbox, - comm->eDLB != edlbNO, dlb_scale, + comm->dlbState != edlbsOffForever, dlb_scale, comm->cellsize_limit, comm->cutoff, comm->bInterCGBondeds); @@ -6953,7 +6963,7 @@ gmx_domdec_t *init_domain_decomposition(FILE *fplog, t_commrec *cr, bC = (dd->bInterCGcons && rconstr > r_bonded_limit); sprintf(buf, "Change the number of ranks or mdrun option %s%s%s", !bC ? "-rdd" : "-rcon", - comm->eDLB != edlbNO ? " or -dds" : "", + comm->dlbState != edlbsOffForever ? " or -dds" : "", bC ? " or your LINCS settings" : ""); gmx_fatal_collective(FARGS, cr, NULL, @@ -7048,7 +7058,7 @@ gmx_domdec_t *init_domain_decomposition(FILE *fplog, t_commrec *cr, *npme_y = comm->npmenodes_y; snew(comm->slb_frac, DIM); - if (comm->eDLB == edlbNO) + if (comm->dlbState == edlbsOffForever) { comm->slb_frac[XX] = get_slb_frac(fplog, "x", dd->nc[XX], sizex); comm->slb_frac[YY] = get_slb_frac(fplog, "y", dd->nc[YY], sizey); @@ -7057,7 +7067,7 @@ gmx_domdec_t *init_domain_decomposition(FILE *fplog, t_commrec *cr, if (comm->bInterCGBondeds && comm->cutoff_mbody == 0) { - if (comm->bBondComm || comm->eDLB != edlbNO) + if (comm->bBondComm || comm->dlbState != edlbsOffForever) { /* Set the bonded communication distance to halfway * the minimum and the maximum, @@ -7065,7 +7075,7 @@ gmx_domdec_t *init_domain_decomposition(FILE *fplog, t_commrec *cr, */ acs = average_cellsize_min(dd, ddbox); comm->cutoff_mbody = 0.5*(r_bonded + acs); - if (comm->eDLB != edlbNO) + if (comm->dlbState != edlbsOffForever) { /* Check if this does not limit the scaling */ comm->cutoff_mbody = std::min(comm->cutoff_mbody, dlb_scale*acs); @@ -7156,14 +7166,13 @@ static void turn_on_dlb(FILE *fplog, t_commrec *cr, gmx_int64_t step) dd_warning(cr, fplog, "NOTE: the minimum cell size is smaller than 1.05 times the cell size limit, will not turn on dynamic load balancing\n"); /* Change DLB from "auto" to "no". */ - comm->eDLB = edlbNO; + comm->dlbState = edlbsOffForever; return; } dd_warning(cr, fplog, "NOTE: Turning on dynamic load balancing\n"); - comm->bDynLoadBal = TRUE; - dd->bGridJump = TRUE; + comm->dlbState = edlbsOn; set_dlb_limits(dd); @@ -7334,7 +7343,7 @@ static void print_dd_settings(FILE *fplog, gmx_domdec_t *dd, std::max(comm->cutoff, comm->cutoff_mbody)); fprintf(fplog, "%40s %-7s %6.3f nm\n", "multi-body bonded interactions", "(-rdd)", - (comm->bBondComm || dd->bGridJump) ? comm->cutoff_mbody : std::min(comm->cutoff, limit)); + (comm->bBondComm || dlbIsOn(dd->comm)) ? comm->cutoff_mbody : std::min(comm->cutoff, limit)); } if (dd->vsite_comm) { @@ -7453,7 +7462,7 @@ static void set_cell_limits_dlb(gmx_domdec_t *dd, { comm->cutoff_mbody = std::min(comm->cutoff, comm->cellsize_limit); } - if (comm->bDynLoadBal) + if (dlbIsOn(comm)) { set_dlb_limits(dd); } @@ -7512,13 +7521,13 @@ void set_dd_parameters(FILE *fplog, gmx_domdec_t *dd, real dlb_scale, { fprintf(debug, "The DD cut-off is %f\n", comm->cutoff); } - if (comm->eDLB != edlbNO) + if (comm->dlbState != edlbsOffForever) { set_cell_limits_dlb(dd, dlb_scale, ir, ddbox); } - print_dd_settings(fplog, dd, ir, comm->bDynLoadBal, dlb_scale, ddbox); - if (comm->eDLB == edlbAUTO) + print_dd_settings(fplog, dd, ir, dlbIsOn(comm), dlb_scale, ddbox); + if (comm->dlbState == edlbsOffCanTurnOn) { if (fplog) { @@ -7574,7 +7583,7 @@ static gmx_bool test_dd_cutoff(t_commrec *cr, np = 1 + (int)(cutoff_req*inv_cell_size*ddbox.skew_fac[dim]); - if (dd->comm->eDLB != edlbNO && dim < ddbox.npbcdim && + if (dd->comm->dlbState != edlbsOffForever && dim < ddbox.npbcdim && dd->comm->cd[d].np_dlb > 0) { if (np > dd->comm->cd[d].np_dlb) @@ -7593,12 +7602,12 @@ static gmx_bool test_dd_cutoff(t_commrec *cr, } } - if (dd->comm->eDLB != edlbNO) + if (dd->comm->dlbState != edlbsOffForever) { /* If DLB is not active yet, we don't need to check the grid jumps. * Actually we shouldn't, because then the grid jump data is not set. */ - if (dd->comm->bDynLoadBal && + if (dlbIsOn(dd->comm) && check_grid_jump(0, dd, cutoff_req, &ddbox, FALSE)) { LocallyLimited = 1; @@ -7658,10 +7667,8 @@ void set_dd_dlb_max_cutoff(t_commrec *cr, real cutoff) */ static void dd_dlb_set_should_check_whether_to_turn_dlb_on(gmx_domdec_t *dd, gmx_bool bValue) { - if (dd->comm->eDLB == edlbAUTO) + if (dd->comm->dlbState == edlbsOffCanTurnOn) { - assert(!dd_dlb_is_locked(dd)); - dd->comm->bCheckWhetherToTurnDlbOn = bValue; } } @@ -7673,7 +7680,7 @@ static gmx_bool dd_dlb_get_should_check_whether_to_turn_dlb_on(gmx_domdec_t *dd) { const int nddp_chk_dlb = 100; - if (dd->comm->eDLB != edlbAUTO || dd_dlb_is_locked(dd)) + if (dd->comm->dlbState != edlbsOffCanTurnOn) { return FALSE; } @@ -7700,30 +7707,30 @@ static gmx_bool dd_dlb_get_should_check_whether_to_turn_dlb_on(gmx_domdec_t *dd) gmx_bool dd_dlb_is_on(const gmx_domdec_t *dd) { - return dd->comm->bDynLoadBal; + return (dd->comm->dlbState == edlbsOn); } gmx_bool dd_dlb_is_locked(const gmx_domdec_t *dd) { - return dd->comm->bDLB_locked; + return (dd->comm->dlbState == edlbsOffTemporarilyLocked); } void dd_dlb_lock(gmx_domdec_t *dd) { /* We can only lock the DLB when it is set to auto, otherwise don't do anything */ - if (dd->comm->eDLB == edlbAUTO) + if (dd->comm->dlbState == edlbsOffCanTurnOn) { - dd->comm->bDLB_locked = TRUE; + dd->comm->dlbState = edlbsOffTemporarilyLocked; } } void dd_dlb_unlock(gmx_domdec_t *dd) { /* We can only lock the DLB when it is set to auto, otherwise don't do anything */ - if (dd->comm->eDLB == edlbAUTO) + if (dd->comm->dlbState == edlbsOffTemporarilyLocked) { - dd->comm->bDLB_locked = FALSE; - dd_dlb_set_should_check_whether_to_turn_dlb_on(dd, !dd->comm->bDynLoadBal); + dd->comm->dlbState = edlbsOffCanTurnOn; + dd_dlb_set_should_check_whether_to_turn_dlb_on(dd, TRUE); } } @@ -7888,7 +7895,7 @@ set_dd_corners(const gmx_domdec_t *dd, c->c[1][0] = comm->cell_x0[dim1]; /* All rows can see this row */ c->c[1][1] = comm->cell_x0[dim1]; - if (dd->bGridJump) + if (dlbIsOn(dd->comm)) { c->c[1][1] = std::max(comm->cell_x0[dim1], comm->zone_d1[1].mch0); if (bDistMB) @@ -7907,7 +7914,7 @@ set_dd_corners(const gmx_domdec_t *dd, { c->c[2][j] = comm->cell_x0[dim2]; } - if (dd->bGridJump) + if (dlbIsOn(dd->comm)) { /* Use the maximum of the i-cells that see a j-cell */ for (i = 0; i < zones->nizone; i++) @@ -7942,7 +7949,7 @@ set_dd_corners(const gmx_domdec_t *dd, */ c->cr1[0] = comm->cell_x1[dim1]; c->cr1[3] = comm->cell_x1[dim1]; - if (dd->bGridJump) + if (dlbIsOn(dd->comm)) { c->cr1[0] = std::max(comm->cell_x1[dim1], comm->zone_d1[1].mch1); if (bDistMB) @@ -8281,7 +8288,7 @@ static void setup_dd_communication(gmx_domdec_t *dd, bBondComm = comm->bBondComm; /* Do we need to determine extra distances for multi-body bondeds? */ - bDistMB = (comm->bInterCGMultiBody && dd->bGridJump && dd->ndim > 1); + bDistMB = (comm->bInterCGMultiBody && dlbIsOn(dd->comm) && dd->ndim > 1); /* Do we need to determine extra distances for only two-body bondeds? */ bDist2B = (bBondComm && !bDistMB); @@ -8713,7 +8720,7 @@ static void set_zones_size(gmx_domdec_t *dd, zones = &comm->zones; /* Do we need to determine extra distances for multi-body bondeds? */ - bDistMB = (comm->bInterCGMultiBody && dd->bGridJump && dd->ndim > 1); + bDistMB = (comm->bInterCGMultiBody && dlbIsOn(dd->comm) && dd->ndim > 1); for (z = zone_start; z < zone_end; z++) { @@ -8733,7 +8740,7 @@ static void set_zones_size(gmx_domdec_t *dd, /* With a staggered grid we have different sizes * for non-shifted dimensions. */ - if (dd->bGridJump && zones->shift[z][dim] == 0) + if (dlbIsOn(dd->comm) && zones->shift[z][dim] == 0) { if (d == 1) { @@ -8762,7 +8769,7 @@ static void set_zones_size(gmx_domdec_t *dd, if (zones->shift[z][dim] > 0) { dim = dd->dim[d]; - if (!dd->bGridJump || d == 0) + if (!dlbIsOn(dd->comm) || d == 0) { zones->size[z].x0[dim] = comm->cell_x1[dim]; zones->size[z].x1[dim] = comm->cell_x1[dim] + rcs; @@ -9474,7 +9481,7 @@ void dd_partition_system(FILE *fplog, bNStGlobalComm = (step % nstglobalcomm == 0); - if (!comm->bDynLoadBal) + if (!dlbIsOn(comm)) { bDoDLB = FALSE; } @@ -9635,7 +9642,7 @@ void dd_partition_system(FILE *fplog, set_ddbox(dd, bMasterState, cr, ir, state_local->box, TRUE, &top_local->cgs, state_local->x, &ddbox); - bRedist = comm->bDynLoadBal; + bRedist = dlbIsOn(comm); } else { diff --git a/src/gromacs/domdec/domdec_specatomcomm.cpp b/src/gromacs/domdec/domdec_specatomcomm.cpp index abc52ba315..75d6a2e3d1 100644 --- a/src/gromacs/domdec/domdec_specatomcomm.cpp +++ b/src/gromacs/domdec/domdec_specatomcomm.cpp @@ -1,7 +1,7 @@ /* * This file is part of the GROMACS molecular simulation package. * - * Copyright (c) 2006,2007,2008,2009,2010,2012,2013,2014, by the GROMACS development team, led by + * Copyright (c) 2006,2007,2008,2009,2010,2012,2013,2014,2015, by the GROMACS development team, led by * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, * and including many others, as listed in the AUTHORS file in the * top-level source directory and at http://www.gromacs.org. @@ -603,7 +603,7 @@ int setup_specat_communication(gmx_domdec_t *dd, dd->ci[XX], dd->ci[YY], dd->ci[ZZ], nrecv_local, ireq->n, specat_type, specat_type, add_err, - dd->bGridJump ? " or use the -rcon option of mdrun" : ""); + dd_dlb_is_on(dd) ? " or use the -rcon option of mdrun" : ""); } spac->at_start = at_start; diff --git a/src/gromacs/legacyheaders/types/commrec.h b/src/gromacs/legacyheaders/types/commrec.h index cfc7669a2f..64521b85ae 100644 --- a/src/gromacs/legacyheaders/types/commrec.h +++ b/src/gromacs/legacyheaders/types/commrec.h @@ -3,7 +3,7 @@ * * Copyright (c) 1991-2000, University of Groningen, The Netherlands. * Copyright (c) 2001-2004, The GROMACS development team. - * Copyright (c) 2013,2014, by the GROMACS development team, led by + * Copyright (c) 2013,2014,2015, by the GROMACS development team, led by * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, * and including many others, as listed in the AUTHORS file in the * top-level source directory and at http://www.gromacs.org. @@ -161,7 +161,6 @@ struct gmx_domdec_t { ivec nc; int ndim; ivec dim; /* indexed by 0 to ndim */ - gmx_bool bGridJump; /* PBC from dim 0 to npbcdim */ int npbcdim; diff --git a/src/gromacs/mdlib/nsgrid.c b/src/gromacs/mdlib/nsgrid.c index 75e689e8f4..5ce59e9359 100644 --- a/src/gromacs/mdlib/nsgrid.c +++ b/src/gromacs/mdlib/nsgrid.c @@ -3,7 +3,7 @@ * * Copyright (c) 1991-2000, University of Groningen, The Netherlands. * Copyright (c) 2001-2004, The GROMACS development team. - * Copyright (c) 2013,2014, by the GROMACS development team, led by + * Copyright (c) 2013,2014,2015, by the GROMACS development team, led by * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, * and including many others, as listed in the AUTHORS file in the * top-level source directory and at http://www.gromacs.org. @@ -247,7 +247,7 @@ static void set_grid_sizes(matrix box, rvec izones_x0, rvec izones_x1, real rlis * direction has uniform DD cell boundaries. */ bDDRect = !(ddbox->tric_dir[i] || - (dd->bGridJump && i != dd->dim[0])); + (dd_dlb_is_on(dd) && i != dd->dim[0])); radd = rlist; if (i >= ddbox->npbcdim &&