When starting, say, 128 threads with max-threads-per-group set to 2
and MAX_TGROUPS set to the default 32, instead of setting the resulting
number of groups to 32 and threads to 64, they're set to 1 and 32
respectively because the condition to raise grp_min is not satisfied.
Let's cut the condition in two parts to also permit to raise it at
least to grp_max.
This should be backported to 3.2.
thr_max > global.maxthrpertgroup * grp_max)
thr_max = global.maxthrpertgroup * grp_max;
- if (grp_min < (thr_min + global.maxthrpertgroup - 1) / global.maxthrpertgroup &&
- grp_max >= (thr_min + global.maxthrpertgroup - 1) / global.maxthrpertgroup)
- grp_min = (thr_min + global.maxthrpertgroup - 1) / global.maxthrpertgroup;
+ if (grp_min < (thr_min + global.maxthrpertgroup - 1) / global.maxthrpertgroup) {
+ if (grp_max >= (thr_min + global.maxthrpertgroup - 1) / global.maxthrpertgroup)
+ grp_min = (thr_min + global.maxthrpertgroup - 1) / global.maxthrpertgroup;
+ else
+ grp_min = grp_max;
+ }
if (grp_max > thr_max && grp_min <= thr_max)
grp_max = thr_max;