Commit Graph
493 Commits
Author SHA1 Message Date
Jonathan Peyton 441b330c98 Trivial enum fix
This change is a trivial fix for enums that removes specification of "last" or
"upper" values, or other boundary values. This simplifies the code in places,
and results in never needing to update the "upper" values again.

Patch by Terry Wilmarth

Differential Revision: https://reviews.llvm.org/D40804


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@319957 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-06 21:02:15 +00:00
Jonas Hahnfeld 3342a84ab0 Fix PR30890: Reduction across teams hangs
__kmpc_reduce_nowait() correctly swapped the teams for reductions
in a teams construct. Apply the same logic to __kmpc_reduce() and
__kmpc_reduce_end().

Differential Revision: https://reviews.llvm.org/D40753

git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@319788 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-05 16:51:24 +00:00
Andrey Churbanov 1696d28687 Extension of HWLOC topology discovery with NUMA nodes and tiles
Patch by Olga Malysheva

Differential Revision: https://reviews.llvm.org/D40309


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@319422 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-30 11:51:47 +00:00
Jonathan Peyton 9cdb2558bd Make kmp_r_sched_t into a union
This change makes kmp_r_sched_t type into a union for simpler
comparisons and assignments

Patch by Terry Wilmarth

Differential Revision: https://reviews.llvm.org/D40374


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@319379 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-29 22:47:52 +00:00
Jonathan Peyton b77eb553e2 Fix aligned memory allocation in the stub library
kmp_aligned_malloc() always returned NULL on Windows (stub library only)
that may cause Fortran application crash.  With this change all memory
allocation functions were fixed to use aligned{m,re,rec}alloc() to
allocate/reallocate memory. To deallocate that memory _aligned_free() is
used in kmp_free().

Patch by Olga Malysheva

Differential Revision: https://reviews.llvm.org/D40296


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@319375 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-29 22:29:38 +00:00
Jonathan Peyton e9075904db Warning is emitted when tiles are requested but cannot be used
Added two warnings:
1) Before building the topology map check if tiles are requested but the
   topo method is not hwloc;
2) After building the topology map check if tiles are requested but not
   detected by the library.

Patch by Olga Malysheva

Differential Revision: https://reviews.llvm.org/D40340


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@319374 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-29 22:27:18 +00:00
Jonathan Peyton 61fa396215 Fix types of Fortran array elements
Fortran array elements made default integer in OMP_GET_PLACE_PROC_IDS and
OMP_GET_PARTITION_PLACE_NUMS subroutines, otherwise call to them produces
incorrect result.

Patch by Olga Malysheva

Differential Revision: https://reviews.llvm.org/D40356


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@319372 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-29 22:23:44 +00:00
Jonas Hahnfeld 41aebf5e26 [CMake] Refactor common settings and flags
These are needed by both libraries, so we can do that in a
common namespace and unify configuration parameters.
Also make sure that the user isn't requesting libomptarget
if the library cannot be built on the system. Issue an error
in that case.

Differential Revision: https://reviews.llvm.org/D40081

git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@319342 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-29 19:31:48 +00:00
Jonas Hahnfeld b5f5bf534a [CMake] Disallow direct configuration
As a first step, this allows us to generalize the detection of
standalone builds and make it fully compatible when building in
llvm/runtimes/ which automatically sets OPENMP_STANDLONE_BUILD.

Differential Revision: https://reviews.llvm.org/D40080

git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@319341 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-29 19:31:43 +00:00
Jonas Hahnfeld 9da031d4d2 Fix for OMP doacross implementation on Power
Power has a weak consistency model so we need memory barriers to
make writes (both from runtime and from user code) available for
all threads.

Differential Revision: https://reviews.llvm.org/D40175

git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@318848 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-22 17:15:20 +00:00
Andrey Churbanov 0b53bf7427 Fixed OMP doacross implementation on 32-bit platforms.
Differential Revision: https://reviews.llvm.org/D40171


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@318658 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-20 16:00:42 +00:00
Andrey Churbanov 73ebd2c677 Exclude untied tasks from checking of task scheduling constraint (TSC).
This can improve performance of tests with untied tasks.

Differential Revision: https://reviews.llvm.org/D39613


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@318388 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-16 10:45:07 +00:00
Jonas Hahnfeld e139f2e769 [OMPT] Provide initialization for Mac OS X
Traditionally, the library had a weak symbol for ompt_start_tool()
that served as fallback and disabled OMPT if called. Tools could
provide their own version and replace the default implementation
to register callbacks and lookup functions. This mechanism has
worked reasonably well on Linux systems where this interface was
initially developed.

On Darwin / Mac OS X the situation is a bit more complicated and
the weak symbol doesn't work out-of-the-box. In my tests, the
library with the tool needed to link against the OpenMP runtime
to make the process work. This would effectively mean that a tool
needed to choose a runtime library whereas one design goal of the
interface was to allow tools that are agnostic of the runtime.

The solution is to use dlsym() with the argument RTLD_DEFAULT so
that static implementations of ompt_start_tool() are found in the
main executable. This works because the linker on Mac OS X includes
all symbols of an executable in the global symbol table by default.
To use the same code path on Linux, the application would need to
be built with -Wl,--export-dynamic. To avoid this restriction, we
continue to use weak symbols on Linux systems as before.

Finally this patch extends the existing test to cover all possible
ways of initializing the tool as described by the standard. It
also fixes ompt_finalize() to not call omp_get_thread_num() when
the library is shut down which resulted in hangs on Darwin.
The changes have been tested on Linux to make sure that it passes
the current tests as well as the newly extended one.

Differential Revision: https://reviews.llvm.org/D39801

git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@317980 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-11 13:59:48 +00:00
Joachim Protze 50aea48c65 [OMPT] Fix assertion for OpenMP code generated with outdated compilers
For up-to-date compilers, this assertion is reasonable, but it breaks
compatibility with the typical compiler installed on most systems.
This patch changes the default value to what we had when there was no
compiler support. A warning about the outdated compiler is printed during
runtime, when this point is reached.

Differential Revision: https://reviews.llvm.org/D39890

git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@317928 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-10 21:07:01 +00:00
Jonas Hahnfeld 3f9960d5d7 Add const to some variables to avoid const_casts
In these places the const attribute seems correct and doesn't
need any other change, so let's do it.

Differential Revision: https://reviews.llvm.org/D39756

git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@317798 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-09 15:52:29 +00:00
Jonas Hahnfeld 11bae5e490 Remove const from variables with dynamic memory
Allocated memory is typically not 'const' if it needs to be freed.
This patch removes around 50 wrong const attributes, modifies the
corresponding functions and finally gets rid of some const_casts.
These have especially been strange for __kmp_str_fname_free() that
added a 'const' to call __kmp_str_free() which removed it again.

Two minor cleanups that I performed in this process:
 * __kmp_tool_libraries now lives in kmp_settings.cpp as it is
   used nowhere else.
 * __kmp_msg_empty was removed as it was never used and Clang
   now complained that it was assigned a string literal that
   is 'const char *'.

Differential Revision: https://reviews.llvm.org/D39755

git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@317797 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-09 15:52:25 +00:00
Jonathan Peyton dc14379055 Cleanup version symbol macros and attributes/declspecs
1) Get rid of xaliasify, xexpand and xversionify for KMP_EXPAND_NAME and
KMP_VERSION_SYMBOL. KMP_VERSION_SYMBOL is a combination of xaliasify and
xversionify.

2) Put all attribute and __declspec definitions in kmp_os.h

Differential Revision: https://reviews.llvm.org/D39516


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@317636 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-07 23:32:13 +00:00
Jonas Hahnfeld 780ebd012d [OMPT] Improve cast that was lost on commit, NFC.
git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@317480 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-06 14:33:09 +00:00
Joachim Protze 17015e8b68 Updating implementation of OMPT as specified in OpenMP 5.0 Preview 2 (TR6)
The TR6 document is expected to be publically released around November 15.
This patch does not implement OMPT for libomptarget.

Patch by Simon Convent and Joachim Protze

Differential Revision: https://reviews.llvm.org/D39182

git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@317436 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-05 14:11:19 +00:00
Joachim Protze 28671628a4 Rename fields of ompt_frame_t
This is part of the renaming of data types from OpenMP TR4 to TR6

Patch by Simon Convent

Differential Revision: https://reviews.llvm.org/D39326

git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@317435 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-05 14:11:10 +00:00
Jonas Hahnfeld 74248f8850 Revert "Rename fields of ompt_frame_t"
This reverts commit r317338 which discarded some recent commits.

git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@317347 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-03 18:28:25 +00:00
Jonas Hahnfeld ac062a9ef1 Revert "Updating implementation of OMPT as specified in OpenMP 5.0 Preview 2 (TR6)"
This reverts commit r317339 which discarded some recent commits.

git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@317346 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-03 18:28:19 +00:00
Joachim Protze 92e5a1069f Updating implementation of OMPT as specified in OpenMP 5.0 Preview 2 (TR6)
The TR6 document is expected to be publically released around November 15.
This patch does not implement OMPT for libomptarget.

Patch by Simon Convent and Joachim Protze

Differential Revision: https://reviews.llvm.org/D39182

git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@317339 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-03 17:09:00 +00:00
Joachim Protze 1d2c9dccb9 Rename fields of ompt_frame_t
This is part of the renaming of data types from OpenMP TR4 to TR6

Patch by Simon Convent

Differential Revision: https://reviews.llvm.org/D39326

git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@317338 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-03 17:08:40 +00:00
Jonathan Peyton 8f8a4cd5fa [OpenMP] Fix race condition in omp_init_lock
This is a partial fix for bug 34050.

This prevents callers of omp_set_lock (which does not hold __kmp_global_lock)
from ever seeing an uninitialized version of __kmp_i_lock_table.table.

It does not solve a use-after-free race condition if omp_set_lock obtains a
pointer to __kmp_i_lock_table.table before it is updated and then attempts to
dereference afterwards. That race is far less likely and can be handled in a
separate patch.

The unit test usually segfaults on the current trunk revision. It passes with
the patch.

Patch by Adam Azarchs

Differential Revision: https://reviews.llvm.org/D39439


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@317115 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-01 19:44:42 +00:00
Joachim Protze ff9d3f5109 Update implementation of OMPT to the specification OpenMP 5.0 Preview 1 (TR4).
The code is tested to work with latest clang, GNU and Intel compiler. The implementation
is optimized for low overhead when no tool is attached shifting the cost to execution with
tool attached.

This patch does not implement OMPT for libomptarget.

Patch by Simon Convent and Joachim Protze

Differential Revision: https://reviews.llvm.org/D38185

git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@317085 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-01 10:08:30 +00:00
Jonathan Peyton 8c08442bf9 Fix fatal error message displaying
Replacing call to __kmp_msg(kmp_ms_fatal,...) with __kmp_fatal(...) caused an
issue when incomplete message is displayed in case an error message is followed
by another message (e.g. by a hint messa)ge. This is because __kmp_fatal()
passes incomplete list of arguments to __kmp_msg().

Patch by Olga Malysheva

Differential Revision: https://reviews.llvm.org/D39248


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@316623 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-25 22:05:02 +00:00
Jonathan Peyton 1d955d1acf Disable threadprivate data cleanup if runtime is terminating
The problem is due to the runtime's threadprivate cleanup code which tries to
access data that was already destroyed by one of the root threads.
__kmp_init_gtid is used as a checker here since it is set to false before actual
resource cleanup is done in __kmp_cleanup().

Patch by Hansang Bae


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@316452 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-24 16:10:09 +00:00
Jonathan Peyton 32c445b643 Restrict OMPT to OpenMP version 5.0 and remove old header files
Patch by Simon Convent

Differential Revision: https://reviews.llvm.org/D38876


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@316234 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-20 20:14:46 +00:00
Jonathan Peyton be524d6135 Apply formatting changes
.clang-format's comments are removed and a (hopefully) final
set of formatting changes are applied.

Differential Revision: https://reviews.llvm.org/D38837
Differential Revision: https://reviews.llvm.org/D38920


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@316227 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-20 19:30:57 +00:00
Jonathan Peyton c376c2708f KMP_HW_SUBSET vs KMP_PLACE_THREADS rival envirables fix
If both KMP_HW_SUBSET and KMP_PLACE_THREADS are set and KMP_PLACE_THREADS gets
parsed first, then the current environment variable parser rejects both and
neither get used. This patch uses the rivals mechanism that is used for other
environment variable groups (e.g., KMP_STACKSIZE, GOMP_STACKSIZE, OMP_STACKSIZE).
If both are set, then it tells the user that it is ignoring KMP_PLACE_THREADS in
favor of KMP_HW_SUBSET. The message about deprecating KMP_PLACE_THREADS when it
is set is still printed regardless.

Differential Revision: https://reviews.llvm.org/D38292


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@315091 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-06 19:23:19 +00:00
Jonathan Peyton 5b33aeb207 Remove unnecessary semicolons
Removes semicolons after if {} blocks, function definitions, etc.
I was able to apply the large OMPT patch cleanly on top of this one
with no conflicts.


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@314340 91177308-0d34-0410-b5e6-96231b3b80d8
2017-09-27 20:36:27 +00:00
Jonathan Peyton 1957e1bc23 Allow printing of KMP_TOPOLOGY_METHOD when KMP_SETTINGS=true
git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@314243 91177308-0d34-0410-b5e6-96231b3b80d8
2017-09-26 20:33:53 +00:00
Jonathan Peyton af6ac33754 Remove unused t_single_lock
Add padding inside team structure to keep same structure size.


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@314242 91177308-0d34-0410-b5e6-96231b3b80d8
2017-09-26 20:12:16 +00:00
Jonathan Peyton 31535f3451 Read blocktime value set by kmp_set_blocktime() before reading from KMP_BLOCKTIME
Patch by Hansang Bae

Differential Revision: https://reviews.llvm.org/D37403


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@312539 91177308-0d34-0410-b5e6-96231b3b80d8
2017-09-05 15:45:48 +00:00
Jonathan Peyton e945cccc7e Minor code cleanup of Klocwork issues
Minor code cleanup of Klocwork issues. Fatal messages are given no return
attribute. Define and use KMP_NORETURN to work for multiple C++ versions.

Patch by Terry Wilmarth

Differential Revision: https://reviews.llvm.org/D37275


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@312538 91177308-0d34-0410-b5e6-96231b3b80d8
2017-09-05 15:43:58 +00:00
Jonathan Peyton 5b2e14f0fe Use va_copy instead of __va_copy to fix building libomp against musl libc
Fixes https://bugs.llvm.org/show_bug.cgi?id=34040

Patch by Peter Levine

Differential Revision: https://reviews.llvm.org/D36343


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@311269 91177308-0d34-0410-b5e6-96231b3b80d8
2017-08-19 23:53:36 +00:00
Jonathan Peyton f4926388d0 Remove BUILD_TV
Cleanup code to remove BUILD_TV and unused code bracketed by it.

Patch by Terry Wilmarth

Differential Revision: https://reviews.llvm.org/D36011


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@311114 91177308-0d34-0410-b5e6-96231b3b80d8
2017-08-17 19:09:28 +00:00
Paul Osmialowski 521c639c91 OMP_PROC_BIND: better spread
This change improves the way threads are spread across cores
when OMP_PROC_BIND=spread is set and no unusual affinity masks are in use.

Differential Revision: https://reviews.llvm.org/D36510

git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@310670 91177308-0d34-0410-b5e6-96231b3b80d8
2017-08-10 23:04:11 +00:00
Jonathan Peyton 5321a36544 Move lock acquire/release functions in task deque cleanup code
The original locations can be reached without initializing the lock variable
(td_deque_lock), so it is potentially unsafe.  It is guaranteed that the lock
is initialized if the deque (td_deque) is not NULL, and lock functions can be
safely called.

Patch by Hansang Bae

Differential Revision: https://reviews.llvm.org/D36017


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@309875 91177308-0d34-0410-b5e6-96231b3b80d8
2017-08-02 20:06:32 +00:00
Jonathan Peyton ec81ddf65a Add new envirable KMP_TEAMS_THREAD_LIMIT
This change adds a new environment variable, KMP_TEAMS_THREAD_LIMIT, which is
used to set a new global variable, __kmp_teams_max_nth, which is checked when
determining the size and quantity of teams that will be created in the teams
construct. Specifically, it is a limit on the total number of threads in a given
teams construct. It differentiates the limits for the teams construct from the
limits for regular parallel regions (KMP_DEVICE_THREAD_LIMIT/__kmp_max_nth and
OMP_THREAD_LIMIT/__kmp_cg_max_nth). When each individual team is formed, it is
still subject to those limits. After the clauses to the teams construct are
parsed and calculated, we check to make sure we are within this limit, and if
not, reduce num_threads per team and/or number of teams, accordingly. The
default value is set to the number of available processors on the system.

Patch by Terry Wilmarth

Differential Revision: https://reviews.llvm.org/D36009


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@309874 91177308-0d34-0410-b5e6-96231b3b80d8
2017-08-02 20:04:45 +00:00
Jonathan Peyton 864fc14ee6 Fix comments and build messages concerning TSX
git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@309418 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-28 19:05:17 +00:00
Jonathan Peyton 12f81b0f7c Fix implementation of OMP_THREAD_LIMIT
This change fixes the implementation of OMP_THREAD_LIMIT. The implementation of
this previously was not restricted to a contention group (but it should be,
according to the spec), and this is fixed here. A field is added to root thread
to store a counter of the threads in the contention group. An extra check is
added when reserving threads for a parallel region that checks this variable and
compares to threadlimit-var, which is implemented as a new global variable,
kmp_cg_max_nth. Associated settings changes were also made, and clean up of
comments that referred to OMP_THREAD_LIMIT, but should refer to the new
KMP_DEVICE_THREAD_LIMIT (added in an earlier patch).

Patch by Terry Wilmarth

Differential Revision: https://reviews.llvm.org/D35912


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@309319 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-27 20:58:41 +00:00
Jonathan Peyton c701446276 Introduce KMP_DEVICE_THREAD_LIMIT
This change drops in KMP_DEVICE_THREAD_LIMIT to replace KMP_MAX_THREADS. It's
possible there will eventually be a OMP_DEVICE_THREAD_LIMIT, and we need
something to distinguish from OMP_THREAD_LIMIT, which is currently implemented
incorrectly (the fix for that will be added soon in a separate patch).
KMP_ALL_THREADS is deprecated here, but we can keep the "all" option on
KMP_DEVICE_THREAD_LIMIT to support that functionality. KMP_DEVICE_THREAD_LIMIT
now has priority over its deprecated rival KMP_ALL_THREADS. I also cleaned up
some comments that incorrectly referred to non-existent kmp_max_threads variable
instead of kmp_max_nth.

I've left the name of where this setting eventually ends up as
__kmp_max_nth, for now.

This change does not change much in the way of functionality. It does NOT change
OMP_THREAD_LIMIT. It's just cleaning up and setting up for that.

Patch by Terry Wilmarth

Differential Revision: https://reviews.llvm.org/D35860


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@309168 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-26 20:07:58 +00:00
Jonathan Peyton 57d1ed03db Cleanup: __kmp_env_* variables
Removed unused __kmp_env_* variables. Also clangified other people's code.

Patch by Terry Wilmarth

Differential Revision: https://reviews.llvm.org/D35808


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@309000 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-25 18:20:16 +00:00
Andrey Churbanov 8072ba12e0 OpenMP RTL cleanup: two PAUSEs per spin loop iteration replaced with single one
Differential Revision: https://reviews.llvm.org/D35490


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@308423 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-19 09:26:13 +00:00
Dimitry Andric 4efa4a63cf For KMP_PAGE_SIZE, use getpagesize() on Unix, GetSystemInfo() on Windows
Summary:
The kmp_os.h header is defining the `PAGE_SIZE` macro unconditionally,
even while it is only used directly after its definition, for the
Windows implementation of the `KMP_GET_PAGE_SIZE()` macro.

On at least FreeBSD, but likely all other BSDs too, this macro conflicts
with the one defined in system headers, so remove it, since nothing else
uses it.  Make all Unixes use `getpagesize()` instead, and use
`GetSystemInfo()` for the Windows case.

Reviewers: jlpeyton, jcownie, emaste, AndreyChurbanov

Reviewed By: AndreyChurbanov

Subscribers: AndreyChurbanov, hfinkel, zturner

Differential Revision: https://reviews.llvm.org/D35072


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@308355 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-18 20:31:19 +00:00
Jonathan Peyton 92f7b797ee Add recursive task scheduling strategy to taskloop implementation
Summary:
Taskloop implementation is extended by using recursive task scheduling.
Envirable KMP_TASKLOOP_MIN_TASKS added as a manual threshold for the user
to switch from recursive to linear tasks scheduling.

Details:
* The calculations for the loop parameters are moved from __kmp_taskloop_linear
  upper level
* Initial calculation is done in the __kmpc_taskloop, further range splitting
  is done in the __kmp_taskloop_recur.
* Added threshold to switch from recursive to linear tasks scheduling;
* One half of split range is scheduled as an internal task which just moves
  sub-range parameters to the stealing thread that continues recursive
  scheduling (if number of tasks still enough), the other half is processed
  recursively;
* Internal task duplication routine fixed to assign parent task, that was not
  needed when all tasks were scheduled by same thread, but is needed now.

Patch by Andrey Churbanov

Differential Revision: https://reviews.llvm.org/D35273


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@308338 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-18 18:50:13 +00:00
Andrey Churbanov 4c2424f72c Fix sporadic segfaults in tasking tests.
Patch by Terry Wilmarth

Differential Revision: https://reviews.llvm.org/D35535


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@308298 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-18 11:56:16 +00:00
Andrey Churbanov dd87e37353 OpenMP RTL cleanup: nullify pointer after memory freeing
Differential Revision: https://reviews.llvm.org/D35497


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@308274 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-18 08:30:03 +00:00