Skip to content
  1. Jan 29, 2016
    • Jonathan Peyton's avatar
      Fix task dependency performance problem · 7d45451a
      Jonathan Peyton authored
      In: http://lists.llvm.org/pipermail/openmp-dev/2015-August/000858.html, a
      performance issue was found with libomp's task dependencies.  The task
      dependencies hash table has an issue with collisions. The current table size is
      a power of two. This combined with the current hash function causes a large
      number of collisions to occurr. Also, the current size (64) is too small for
      larger applications so the table size is increased.
      
      This patch creates a two level hash table approach for task dependencies. The
      implicit task is considered the "master" or "top-level" task which has a large
      static sized hash table (997), and nested tasks will have smaller hash
      tables (97). Prime numbers were chosen to help reduce collisions.
      
      Differential Revision: http://reviews.llvm.org/D16640
      
      llvm-svn: 259113
      7d45451a
  2. Jan 28, 2016
    • Jonas Hahnfeld's avatar
      [OMPT] Add support for ompt_event_task_dependences and ompt_event_task_dependence_pair · 39b68624
      Jonas Hahnfeld authored
      The attached patch adds support for ompt_event_task_dependences and
      ompt_event_task_dependence_pair events from the OMPT specification [1]. These
      events only apply to OpenMP 4.0 and 4.1 (aka 4.5) because task dependencies
      were introduced in 4.0.
      
      With respect to the changes:
      
      ompt_event_task_dependences
      According to the specification, this event is raised after the task has been
      created, thefore this event needs to be raised after ompt_event_task_begin
      (in __kmp_task_start). However, the dependencies are known at
      __kmpc_omp_task_with_deps which occurs before __kmp_task_start. My modifications
      extend the ompt_task_info_t struct in order to store the dependencies of the
      task when _kmpc_omp_task_with_deps occurs and then they are emitted in
      __kmp_task_start just after raising the ompt_event_task_begin. The deps field
      is allocated and valid until the event is raised and it is freed and set
      to null afterwards.
      
      ompt_event_task_dependence_pair
      The processing of the dependences (i.e. checking whenever a dependence is
      already satisfied) is done within __kmp_process_deps. That function checks
      every dependence and calls the __kmp_track_dependence routine which gives some
      support for graphical output. I used that routine to emit the dependence pair
      but I also needed to know the sink_task. Despite the fact that the code within
      KMP_SUPPORT_GRAPH_OUTPUT refers to task_sink it may be null because
      sink->dn.task (there's a comment regarding this) and in fact it does not point
      to a proper pointer value because the value is set in node->dn.task = task;
      after the __kmp_process_deps calls in __kmp_check_deps. I have extended the
      __kmp_process_deps and __kmp_track_dependence parameter list to receive the
      sink_task.
      
      [1] https://github.com/OpenMPToolsInterface/OMPT-Technical-Report/blob/target/ompt-tr.pdf
      
      Patch by Harald Servat
      Differential Revision: http://reviews.llvm.org/D14746
      
      llvm-svn: 259038
      39b68624
    • Jonas Hahnfeld's avatar
      [OMPT] Avoid SEGV when a worker thread needs its parallel id behind the barrier · dbf627db
      Jonas Hahnfeld authored
      When the code behind the barrier is executed, the master thread may have
      already resumed execution. That's why we cannot safely assume that *pteam
      is not yet freed.
      
      This has been introduced by r258866.
      
      llvm-svn: 259037
      dbf627db
    • Jonas Hahnfeld's avatar
      [OMPT] Workaround clang failing with 'declare target' · bba248c3
      Jonas Hahnfeld authored
      Current clang trunk reports _OPENMP to be 201307 = OpenMP 4.0. It doesn't
      recognize '#pragma omp declare target' though (patch still pending) and
      therefore fails compilation.
      
      Differential Revision: http://reviews.llvm.org/D16631
      
      llvm-svn: 259026
      bba248c3
  3. Jan 27, 2016
  4. Jan 26, 2016
  5. Jan 25, 2016
  6. Jan 22, 2016
    • Jonathan Peyton's avatar
      Add missing cleanup code for cached indirect lock pool. · 3bd88d4c
      Jonathan Peyton authored
      This change fixes one issue reported at https://llvm.org/bugs/show_bug.cgi?id=26184
      There was missing cleanup code for the cached indirect lock pool. The change
      will fix the reported case where it tries to initialize a lock after runtime
      cleanup/reinitialization, but it is still possible that the user program runs
      into another problem because most test programs have a call to __kmpc_set_lock
      after cleanup/reinitialization without calling __kmpc_init_lock causing a crash/hang.
      
      llvm-svn: 258528
      3bd88d4c
  7. Jan 19, 2016
  8. Jan 15, 2016
    • Hans Wennborg's avatar
      Don't use __DATE__ or __TIME__; it breaks release builds (PR26145) · 59162da0
      Hans Wennborg authored
      The release builds are configured to be reproducible, so that the
      binaries compare equal between bootstrap iterations. The OpenMP
      run-time build was failing like this:
      
      runtime/src/kmp_version.c:108:79: error: expansion of date or time macro is not reproducible [-Werror,-Wdate-time]
      char const __kmp_version_build_time[]     = KMP_VERSION_PREFIX "build time: " __DATE__ " " __TIME__;
      
      Figuring as the build currently doesn't set LIBOMP_DATE, it's probably
      OK to skip setting the build time here too.
      
      llvm-svn: 257833
      59162da0
  9. Jan 12, 2016
    • Jonathan Peyton's avatar
      New API for restoring current thread's affinity to init affinity of application · 3076fa4c
      Jonathan Peyton authored
      This new API, int kmp_set_thread_affinity_mask_initial(), is available for use
      by other parallel runtime libraries inside a possibly OpenMP-registered thread.
      This entry point restores the current thread's affinity mask to the affinity
      mask of the application when it first began. If -1 is returned it can be assumed
      that either the thread hasn't called affinity initialization or that the thread
      isn't registered with the OpenMP library. If 0 is returned then, then the call
      was successful. Any return value greater than zero indicates an error occurred
      when setting affinity.
      
      Differential Revision: http://reviews.llvm.org/D15867
      
      llvm-svn: 257489
      3076fa4c
  10. Jan 11, 2016
  11. Jan 05, 2016
  12. Jan 04, 2016
  13. Dec 27, 2015
  14. Dec 23, 2015
    • Jonathan Peyton's avatar
      Fix build error: OMPT_SUPPORT=true was not tested after hinted lock changes · 2c295c4e
      Jonathan Peyton authored
      Recent changes to support dynamic locks didn't consider the code compiled when
      OMPT_SUPPORT=true. As a result, the OMPT support was broken by recent changes
      to nested locks to support dynamic locks. For OMPT to work with dynamic locks,
      they need to provide a return code indicating whether a nested lock acquisition
      was the first or not.
      
      This patch moves the OMPT support for nested locks into the #else case when
      DYNAMIC locks were not used. New support is needed for dynamic locks. This patch
      fixes the build and leaves a placeholder where the missing OMPT callbacks can be
      added either the author of the OMPT support for locks, or the dynamic
      locking support.
      
      Patch by John Mellor-Crummey
      
      Differential Revision: http://reviews.llvm.org/D15656
      
      llvm-svn: 256314
      2c295c4e
  15. Dec 19, 2015
  16. Dec 18, 2015
    • Jonathan Peyton's avatar
      [STATS] Have CMake do real check for stats functionality · b9e83260
      Jonathan Peyton authored
      This change allows clang to build the stats library for every architecture
      which supports __builtin_readcyclecounter().  CMake also checks for all
      necessary features for stats and will error out if the platform does not
      support it.
      
      Patch by Hal Finkel and Johnny Peyton
      
      llvm-svn: 256002
      b9e83260
  17. Dec 17, 2015
  18. Dec 14, 2015
  19. Dec 11, 2015
    • Jonathan Peyton's avatar
      Hinted lock (OpenMP 4.5 feature) Updates/Fixes Part 3 · b87b5813
      Jonathan Peyton authored
      This change set includes all changes to make the code conform to the OMP 4.5 specification:
      
      * Removed hint / hinted_init definitions from include/40 files
      * Hint values are powers of 2 to enable composition (4.5 spec)
      * Hinted lock initialization functions were renamed (4.5 spec)
        kmp_init_lock_hinted -> omp_init_lock_with_hint
        kmp_init_nest_lock_hinted -> omp_init_nest_lock_with_hint
      * __kmpc_critical_section_with_hint was added to support a critical section with
        a hint (4.5 spec)
      * __kmp_map_hint_to_lock was added to convert a hint (possibly a composite) to
        an internal lock type
      * kmpc_init_lock_with_hint and kmpc_init_nest_lock_with_hint were added as
        internal entries for the hinted lock initializers. The preivous internal
        functions (__kmp_init*) were moved to kmp_csupport.c and reused in multiple
        places
      * Added the two init functions to dllexports
      * KMP_USE_DYNAMIC_LOCK is turned on if OMP_41_ENABLED is turned on
      
      Differential Revision: http://reviews.llvm.org/D15205
      
      llvm-svn: 255376
      b87b5813
    • Jonathan Peyton's avatar
      Hinted lock (OpenMP 4.5 feature) Updates/Fixes Part 2 · dae13d81
      Jonathan Peyton authored
      * Added a new user TSX lock implementation, RTM, This implementation is a
        light-weight version of the adaptive lock implementation, omitting the
        back-off logic for deciding when to specualte (or not). The fall-back lock is
        still the queuing lock.
      * Changed indirect lock table management. The data for indirect lock management
        was encapsulated in the "kmp_indirect_lock_table_t" type. Also, the lock table
        dimension was changed to 2D (was linear), and each entry is a
        kmp_indirect_lock_t object now (was a pointer to an object).
      * Some clean up in the critical section code
      * Removed the limits of the tuning parameters read from KMP_ADAPTIVE_LOCK_PROPS
      * KMP_USE_DYNAMIC_LOCK=1 also turns on these two switches:
        KMP_USE_TSX, KMP_USE_ADAPTIVE_LOCKS
      
      Differential Revision: http://reviews.llvm.org/D15204
      
      llvm-svn: 255375
      dae13d81
    • Jonathan Peyton's avatar
      Hinted lock (OpenMP 4.5 feature) Updates/Fixes · a03533d3
      Jonathan Peyton authored
      There are going to be two more patches which bring this feature up to date and in line with OpenMP 4.5.
      
      * Renamed jump tables for the lock functions (and some clean up).
      * Renamed some macros to be in KMP_ namespace.
      * Return type of unset functions changed from void to int.
      * Enabled use of _xebgin() et al. intrinsics for accessing TSX instructions.
      
      Differential Revision: http://reviews.llvm.org/D15199
      
      llvm-svn: 255373
      a03533d3
  20. Dec 03, 2015
  21. Nov 30, 2015
    • Jonathan Peyton's avatar
      Fix honoring of OMP_THREAD_LIMIT in the teams construct · 1be692ec
      Jonathan Peyton authored
      Fix for crash in the teams construct in case user sets OMP_THREAD_LIMIT to a
      number less than the number of processors. Now the number of threads will be
      silently reduced if the user didn't specify teams parameters or with a
      warning if the user specified teams parameters conflicting with
      OMP_THREAD_LIMIT.
      
      Differential Revision: http://reviews.llvm.org/D14732
      
      llvm-svn: 254322
      1be692ec
    • Jonathan Peyton's avatar
      Fix crash when __kmp_task_team_setup called for single threaded team · e1dad19a
      Jonathan Peyton authored
      The task_team pointer is dereferenced unconditionally which causes a SEGFAULT
      when it is NULL (e.g. for serialized parallel, that can happen for "teams"
      construct or for "target nowait").  The solution is to skip second task team
      setup for single thread team.
      
      Differential Revision: http://reviews.llvm.org/D14729
      
      llvm-svn: 254321
      e1dad19a
    • 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
  22. Nov 16, 2015
Loading