Skip to content
  1. Dec 08, 2016
  2. Nov 14, 2016
    • Jonathan Peyton's avatar
      Introduce dynamic affinity dispatch capabilities · 1cdd87ad
      Jonathan Peyton authored
      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.
      
      Differential Revision: https://reviews.llvm.org/D26356
      
      llvm-svn: 286890
      1cdd87ad
  3. Sep 02, 2016
    • Jonathan Peyton's avatar
      Move function into cpp file under KMP_AFFINITY_SUPPORTED guard. · e6abe529
      Jonathan Peyton authored
      When affinity isn't supported, __kmp_affinity_compact doesn't exist.  The
      problem is that in kmp_affinity.h there is a function which uses it without the
      proper KMP_AFFINITY_SUPPORTED guard around it.  The compiler was smart enough to
      ignore it and the function __kmp_affinity_cmp_Address_child_num which relies on
      it, but I think it is cleaner to have it under the proper guard.  Since the
      function is only used in the kmp_affinity.cpp file and there aren't any plans to
      have it elsewhere.  I have moved it there.
      
      llvm-svn: 280542
      e6abe529
  4. Nov 30, 2015
    • Jonathan Peyton's avatar
      Adding Hwloc library option for affinity mechanism · 01dcf36b
      Jonathan Peyton authored
      These changes allow libhwloc to be used as the topology discovery/affinity
      mechanism for libomp.  It is supported on Unices. The code additions:
      * Canonicalize KMP_CPU_* interface macros so bitmask operations are
        implementation independent and work with both hwloc bitmaps and libomp
        bitmaps.  So there are new KMP_CPU_ALLOC_* and KMP_CPU_ITERATE() macros and
        the like. These are all in kmp.h and appropriately placed.
      * Hwloc topology discovery code in kmp_affinity.cpp. This uses the hwloc
        interface to create a libomp address2os object which the rest of libomp knows
        how to handle already.
      * To build, use -DLIBOMP_USE_HWLOC=on and
        -DLIBOMP_HWLOC_INSTALL_DIR=/path/to/install/dir [default /usr/local]. If CMake
        can't find the library or hwloc.h, then it will tell you and exit.
      
      Differential Revision: http://reviews.llvm.org/D13991
      
      llvm-svn: 254320
      01dcf36b
  5. Nov 09, 2015
    • Jonathan Peyton's avatar
      Improvements to machine_hierarchy code for re-sizing · 7dee82e7
      Jonathan Peyton authored
      These changes include:
       1) Machine hierarchy now uses the base_num_threads field to indicate the 
          maximum number of threads the current hierarchy can handle without a resize.
       2) In __kmp_get_hierarchy, we need to get depth after any potential resize
          is done.
       3) Cleanup of hierarchy resize code to support 1 above.
      
      Differential Revision: http://reviews.llvm.org/D14455
      
      llvm-svn: 252475
      7dee82e7
  6. Sep 10, 2015
    • Jonathan Peyton's avatar
      Fix depth field bug and resize() function in hierarchical barrier · df4d3dd6
      Jonathan Peyton authored
      This is a follow up to the hierarchy cleanup patch.
      Added some clarifying comments to hierarchy_info.
      Fixed a bug with the depth field not being updated cleanly during a resize.
      Fixed resize to first check capacity as determined by maxLevels before actually doing the full resize.
      
      Differential Revision: http://reviews.llvm.org/D12562
      
      llvm-svn: 247333
      df4d3dd6
    • Jonathan Peyton's avatar
      Cleanup of affinity hierarchy code. · 1707836b
      Jonathan Peyton authored
      Some of this is improvement to code suggested by Hal Finkel. Four changes here:
      1.Cleanup of hierarchy code to handle all hierarchy cases whether affinity is available or not
      2.Separated this and other classes and common functions out to a header file
      3.Added a destructor-like fini function for the hierarchy (and call in __kmp_cleanup)
      4.Remove some redundant code that is hopefully no longer needed
      
      Differential Revision: http://reviews.llvm.org/D12449
      
      llvm-svn: 247326
      1707836b
Loading