# [Openmp-dev] Hierarchy generation patch

Hal Finkel hfinkel at anl.gov
Sun Apr 12 08:48:50 PDT 2015

```Hi Terry,

- bool uninitialized;
+ volatile kmp_int8 uninitialized; // 0=initialized, 1=uninitialized, 2=initialization in progress

Can you please define these in an enum so we can use names instead of the numbers directly (even if the variable itself is a volatile int). I'd rather that than having to remember what the values mean.

+ numPerLevel[0] = 4;
+ numPerLevel[1] = nprocs/4;
+ if (nprocs%4) numPerLevel[1]++;
+
+ for (int i=noaff_maxLevels-1; i>=0; --i) // count non-empty levels to get depth
+ if (numPerLevel[i] != 1 || noaff_depth > 1) // only count one top-level '1'
+ noaff_depth++;
+
+ kmp_uint32 branch = 4;
+ if (numPerLevel[0] == 1) branch = nprocs/4;
+ if (branch<4) branch=4;
+ for (kmp_uint32 d=0; d<noaff_depth-1; ++d) { // optimize hierarchy width
+ while (numPerLevel[d] > branch || (d==0 && numPerLevel[d]>4)) { // max 4 on level 0!
+ if (numPerLevel[d] & 1) numPerLevel[d]++;
+ numPerLevel[d] = numPerLevel[d] >> 1;
+ if (numPerLevel[d+1] == 1) noaff_depth++;
+ numPerLevel[d+1] = numPerLevel[d+1] << 1;
}
+ if(numPerLevel[0] == 1) {
+ branch = branch >> 1;
+ if (branch<4) branch = 4;
+ }
+ }

I realize that this is a pre-existing issue, but what's so special about 4? Can we add a comment explaining that, and maybe make a constant (max_branch or similar) to hold this special number? Is this just a heuristic value used when we have affinity enabled but don't actually have affinity information?

Thanks again,
Hal

----- Original Message -----

> From: "Terry L Wilmarth" <terry.l.wilmarth at intel.com>
> To: "Terry L Wilmarth" <terry.l.wilmarth at intel.com>,
> openmp-dev at dcs-maillist2.engr.illinois.edu
> Sent: Friday, April 10, 2015 4:08:01 PM
> Subject: Re: [Openmp-dev] Hierarchy generation patch

> * ping *

> From: openmp-dev-bounces at cs.uiuc.edu
> [mailto:openmp-dev-bounces at cs.uiuc.edu] On Behalf Of Wilmarth, Terry
> L
> Sent: Friday, April 03, 2015 11:57 AM
> To: openmp-dev at dcs-maillist2.engr.illinois.edu
> Subject: [Openmp-dev] Hierarchy generation patch

> Here’s another patch to the hierarchy generation:
> 1. hierarchy_gen_fixed.patch: These are improvements to generation of
> the hierarchy used by hierarchical barrier. They improve how the
> generation reacts to affinity set to none, or disabled, or no
> affinity available, or oversubscription.
> --
> Terry L. Wilmarth
> terry.l.wilmarth at intel.com 217/403-4251

> _______________________________________________
> Openmp-dev mailing list
> Openmp-dev at dcs-maillist2.engr.illinois.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/openmp-dev

--

Hal Finkel
Assistant Computational Scientist