Skip to content
  1. Jan 17, 2019
  2. Jan 16, 2019
  3. Jan 15, 2019
    • Jonathan Peyton's avatar
      [OpenMP] Fix for nested proc_bind affinity bug · 9355d0dc
      Jonathan Peyton authored
      Using proc_bind clause on a nested #pragma omp parallel region
      with KMP_AFFINITY set causes an assertion error. This assertion occurs because
      the place-partition-var is not properly initialized in the nested master threads.
      Trying to get an intuitive result with KMP_AFFINITY + proc_bind is difficult
      because of how the KMP_AFFINITY gtid-to-place mapping occurs. This
      patch creates an initial place list no matter what affinity mechanism is used.
      For KMP_AFFINITY, the place-partition-var is initialized to all the places.
      
      Differential Revision: https://reviews.llvm.org/D55795
      
      llvm-svn: 351227
      9355d0dc
    • Jonathan Peyton's avatar
      [OpenMP] Add lock function definitions to fix Bug 40042 · fce39725
      Jonathan Peyton authored
      This change fixes the sanity issue reported in Bug 40042.
      Lock function definitions for the three lock kinds were added
      to disambiguate calls to the lock functions done directly and indirectly.
      
      Bugzilla: https://bugs.llvm.org/show_bug.cgi?id=40042
      Patch by Hansang Bae
      
      Differential Revision: https://reviews.llvm.org/D56103
      
      llvm-svn: 351224
      fce39725
    • Jonathan Peyton's avatar
      [OpenMP] Fix performance regression in SPEC kdtree test · dc375486
      Jonathan Peyton authored
      Make __ompt_implicit_task_end a static function and remove the inline part.  Remove
      pId variable that is unused.  This fixes small regression in SPEC kdtree benchmark.
      Also reformat some of __ompt_implicit_task_end.
      
      Differential Revision: https://reviews.llvm.org/D55788
      
      llvm-svn: 351221
      dc375486
    • Joachim Protze's avatar
      [OMPT] Second chunk of final OMPT 5.0 interface updates · 2b46d30f
      Joachim Protze authored
      The omp-tools.h file is generated from the OpenMP spec to ensure that the interface
      is implemented as specified.
      The other changes are necessary to update the interface implementation to the
      final version as published in 5.0.
      The omp-tools.h header was previously called ompt.h, currently a copy under this name
      is installed for legacy tools.
      
      Patch partially perpared by @sconvent
      
      Reviewers: AndreyChurbanov, hbae, Hahnfeld
      
      Reviewed By: hbae
      
      Tags: #openmp, #ompt
      
      Differential Revision: https://reviews.llvm.org/D55579
      
      llvm-svn: 351197
      2b46d30f
  4. Jan 13, 2019
    • Roman Lebedev's avatar
      [OpenMP] Fix LIBOMP_USE_DEBUGGER=ON build (PR38612) · 06e39505
      Roman Lebedev authored
      Summary:
      Two things:
      1. Those two variables had the wrong sigdness, which was resulting in "sign mismatch in comparison" warning.
      2. The whole `kmp_debugger.cpp` wasn't being built, or rather, it was being built as-if `USE_DEBUGGER` was off,
         thus, nothing provided the definition of `__kmp_omp_debug_struct_info`, `__kmp_debugging`.
         Makes sense, because `USE_DEBUGGER` is set in `kmp_config.h`, which is not included explicitly.
         It is included by `kmp.h`, but that one is only included inside of the `#if USE_DEBUGGER` block..
         I *think* this is the only source file with this issue,
         everything else seem to `#include` either `kmp.h` or `kmp_config.h`.
         The alternative solution would be to add `add_compile_options(-include kmp_config.h)` in CMake.
      
      I did verify that `__kmp_omp_debug_struct_info` becomes available with this patch.
      
      Fixes [[ https://bugs.llvm.org/show_bug.cgi?id=38612 | PR38612 ]].
      
      Reviewers: AndreyChurbanov, jlpeyton, Hahnfeld
      
      Reviewed By: jlpeyton
      
      Subscribers: guansong, jfb, openmp-commits
      
      Tags: #openmp
      
      Differential Revision: https://reviews.llvm.org/D55783
      
      llvm-svn: 351019
      06e39505
  5. Jan 09, 2019
  6. Jan 03, 2019
    • Jonathan Peyton's avatar
      [OpenMP] Add omp_get_device_num() and update several other device API functions · 76f3980a
      Jonathan Peyton authored
      Add omp_get_device_num() function for 5.0 which returns the number of the
      device the current thread is running on. Currently, we are leaving it to the
      compiler to handle this properly if it is called inside target.
      
      Also, did some cleanup and updating of duplicate device API functions (in both
      libomp and libomptarget) to make them into weak functions that check for the
      symbol from libomptarget, and will call the version in libomptarget if it is
      present. If any additional device API functions are implemented also in
      libomptarget in the future, we should add the dlsym calls to the host functions.
      Also, if the omp_target_* functions are to be implemented for the host (this has
      been requested), they should attempt to call the libomptarget versions as well.
      
      Patch by Terry Wilmarth
      
      Differential Revision: https://reviews.llvm.org/D55578
      
      llvm-svn: 350352
      76f3980a
  7. Dec 22, 2018
  8. Dec 18, 2018
  9. Dec 17, 2018
  10. Dec 15, 2018
    • Roman Lebedev's avatar
      [OpenMP] Fixes for LIBOMP_OMP_VERSION=45/40 · 781a0896
      Roman Lebedev authored
      Summary:
      I have discovered this because i wanted to experiment with
      building static libomp (with openmp-4.0 support only)
      for debugging purposes.
      
      There are three kinds of problems here:
      1. `__kmp_compare_and_store_acq()` simply does not exist.
         It was added in D47903 by @jlpeyton.
         I'm guessing `__kmp_atomic_compare_store_acq()` was meant.
      2. In `__kmp_is_ticket_lock_initialized()`,
         `lck->lk.initialized` is `std::atomic<bool>`,
         while `lck` is `kmp_ticket_lock_t *`.
         Naturally, they can't be equality-compared.
         Either, it should return the value read from `lck->lk.initialized`,
         or do what `__kmp_is_queuing_lock_initialized()` does,
         compare the passed pointer with the field in the struct
         pointed by the pointer. I think the latter is correct-er choice here.
      3. Tests were not versioned.
         They assume that `LIBOMP_OMP_VERSION` is at the latest version.
      
      This does not touch LIBOMP_OMP_VERSION=30. That is still broken.
      
      Reviewers: jlpeyton, Hahnfeld, AndreyChurbanov
      
      Reviewed By: AndreyChurbanov
      
      Subscribers: guansong, jfb, openmp-commits, jlpeyton
      
      Tags: #openmp
      
      Differential Revision: https://reviews.llvm.org/D55496
      
      llvm-svn: 349260
      781a0896
  11. Dec 14, 2018
    • Jonathan Peyton's avatar
      [OpenMP] Fix transient divide by zero bug in 32-bit code · bdb0a2ff
      Jonathan Peyton authored
      The value returned by __kmp_now_nsec() can overflow 32-bit values causing
      incorrect values to be returned. The overflow can end up causing a divide
      by zero error because in __kmp_initialize_system_tick(), the value
      (__kmp_now_nsec() - nsec) can end up being much larger than the numerator:
      1e6 * (delay + (now - goal))
      during a pathological timing where the current time calculated is much larger
      than nsec. When this happens, the value of __kmp_ticks_per_msec is set to zero
      which is then used as the denominator in the KMP_NOW_MSEC() macro leading to
      the divide by zero error.
      
      Differential Revision: https://reviews.llvm.org/D55300
      
      llvm-svn: 349090
      bdb0a2ff
    • Jonathan Peyton's avatar
      [OpenMP] Implement OpenMP 5.0 affinity format functionality · 6d88e049
      Jonathan Peyton authored
      This patch adds the affinity format functionality introduced in OpenMP 5.0.
      This patch adds: Two new environment variables:
      
      OMP_DISPLAY_AFFINITY=TRUE|FALSE
      OMP_AFFINITY_FORMAT=<string>
      and Four new API:
      1) omp_set_affinity_format()
      2) omp_get_affinity_format()
      3) omp_display_affinity()
      4) omp_capture_affinity()
      The affinity format functionality has two ICV's associated with it:
      affinity-display-var (bool) and affinity-format-var (string).
      The affinity-display-var enables/disables the functionality through the
      envirable OMP_DISPLAY_AFFINITY. The affinity-format-var is a formatted
      string with the special field types beginning with a '%' character
      similar to printf
      For example, the affinity-format-var could be:
      "OMP: host:%H pid:%P OStid:%i num_threads:%N thread_num:%n affinity:{%A}"
      
      The affinity-format-var is displayed by every thread implicitly at the beginning
      of a parallel region when any thread's affinity has changed (including a brand
      new thread being spawned), or explicitly using the omp_display_affinity() API.
      The omp_capture_affinity() function can capture the affinity-format-var in a
      char buffer. And omp_set|get_affinity_format() allow the user to set|get the
      affinity-format-var explicitly at runtime. omp_capture_affinity() and
      omp_get_affinity_format() both return the number of characters needed to hold
      the entire string it tried to make (not including NULL character). If not
      enough buffer space is available,
      both these functions truncate their output.
      
      Differential Revision: https://reviews.llvm.org/D55148
      
      llvm-svn: 349089
      6d88e049
  12. Dec 13, 2018
  13. Dec 11, 2018
  14. Dec 10, 2018
    • Jonathan Peyton's avatar
      [OpenMP] Fix a few build issues · 17e53b92
      Jonathan Peyton authored
      Fix two build issues:
      
      1) Recent commit 348756 accidentally included Unix clang compilers
         to use immintrin.h when only clang-cl should be using it leading
         to the following error:
      
      openmp-llvm/runtime/src/kmp_lock.cpp:2035:25: error: always_
      inline function '_xbegin' requires target feature 'rtm', but would be inlined into function
            '__kmp_test_adaptive_lock_only' that is compiled without support for 'rtm'
                kmp_uint32 status = _xbegin();
      This patch changes the guard to use immintrin.h to only use clang-cl instead of all clang
      
      2) gcc-8 gives a warning about multiline comment in kmp_runtime.cpp:
      This patch just changes it to a two line comment
      openmp-llvm/runtime/src/kmp_runtime.cpp:7697:8: warning: multi-line comment [-Wcomment]
       #endif // KMP_OS_LINUX || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD  \
      
      llvm-svn: 348783
      17e53b92
    • Andrey Churbanov's avatar
      Support clang compiling under windows-gnu and windows-msvc · f700e9ed
      Andrey Churbanov authored
      Patch by Peiyuan Song <squallatf@gmail.com>
      
      Differential Revision: https://reviews.llvm.org/D53422
      
      llvm-svn: 348756
      f700e9ed
  15. Dec 09, 2018
    • Kamil Rytarowski's avatar
      Add OpenBSD support to OpenMP · 7e1ea993
      Kamil Rytarowski authored
      Summary: This patch permits OpenMP to build and work (with both gcc and clang) on OpenBSD. It mostly follows what was done for FreeBSD and NetBSD, except OpenBSD does not have pthread_getattr_np support, so it follows OS X in that one instance.
      
      Reviewers: #openmp, krytarowski
      
      Reviewed By: krytarowski
      
      Subscribers: guansong, jfb, emaste, mgorny, krytarowski, #openmp
      
      Tags: #openmp
      
      Differential Revision: https://reviews.llvm.org/D34280
      
      llvm-svn: 348726
      7e1ea993
    • Kamil Rytarowski's avatar
      Add DragonFlyBSD support to OpenMP · a56ac949
      Kamil Rytarowski authored
      Summary:
      Additions mostly follow FreeBSD and NetBSD and are not intrusive.
      There is similar patch for OpenBSD: https://reviews.llvm.org/D34280
      
      The -lm was being omitted due to -Wl,--as-needed in cmake rule, similar patch is in freebsd-ports/devel/llvm-devel port.
      
      Simple OpenMP programs compile and work as expected:
      $ clang-devel ~/omp_hello.c -fopenmp -I/usr/local/llvm-devel/include
      $ LD_LIBRARY_PATH=/usr/local/llvm-devel/lib OMP_NUM_THREADS=100 ./a.out
      
      The assertion in LLVMgold.so when -fopenmp was used together with -flto in 20170524 snapshot is no longer triggered on current svn-trunk and works fine as in llvm-4.0 with our local patches.
      
      Reviewers: #openmp, krytarowski
      
      Reviewed By: krytarowski
      
      Subscribers: dexonsmith, jfb, krytarowski, guansong, gregrodgers, emaste, mgorny, mehdi_amini
      
      Differential Revision: https://reviews.llvm.org/D35129
      
      llvm-svn: 348725
      a56ac949
  16. Nov 30, 2018
  17. Nov 29, 2018
    • Jonathan Peyton's avatar
      [OpenMP] Add stubs for Task affinity API · b04f7d68
      Jonathan Peyton authored
      This patch adds __kmpc_omp_reg_task_with_affinity to register affinity
      information for tasks. For now, the affinity information is not used,
      and the function always succeeds. This also adds the kmp_task_affinity_info_t
      structure to store the task affinity information.
      
      Patch by Terry Wilmarth
      
      Differential Revision: https://reviews.llvm.org/D55026
      
      llvm-svn: 347907
      b04f7d68
  18. Nov 28, 2018
Loading