This set of changes enables the affinity interface (Either the preexisting native operating system or HWLOC) to be dynamically set at runtime initialization. The point of this change is that we were seeing performance degradations when using HWLOC. This allows the user to use the old affinity mechanisms which on large machines (>64 cores) makes a large difference in initialization time.
These changes mostly move affinity code under a small class hierarchy:
KMPAffinity { class Mask {} }; KMPNativeAffinity : public KMPAffinity { class Mask : public KMPAffinity::Mask {} }; KMPHwlocAffinity { class Mask : public KMPAffinity::Mask {} }
Since all interface functions (for both affinity and the mask implementation) are virtual, the implementation can be chosen at runtime initialization.