Commit Graph

310 Commits

Author SHA1 Message Date
Jonathan Peyton 8b524597ef [STATS] Properly guard the tick_time() function and its uses
llvm-svn: 255910
2015-12-17 17:27:51 +00:00
Jonathan Peyton f741312c6f [STATS] replace __cpuid() intrinsic with already existing __kmp_x86_cpuid() function
llvm-svn: 255907
2015-12-17 16:58:26 +00:00
Jonathan Peyton ad57992887 [STATS] Fix stats lock problem to be compatible with new hinted lock code
llvm-svn: 255901
2015-12-17 16:19:05 +00:00
Jonathan Peyton 4b1aad37d8 [STATS] Add libm.so to lib dependencies for stats library
llvm-svn: 255900
2015-12-17 16:15:39 +00:00
Jonathan Peyton 67390c6cd3 Fix broken visual studio builds by disabling KMP_USE_TSX.
Visual studio can't handle the asm extension in the KMP_USE_TSX code sections.

llvm-svn: 255514
2015-12-14 17:39:30 +00:00
Jonathan Peyton b87b58131a Hinted lock (OpenMP 4.5 feature) Updates/Fixes Part 3
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
2015-12-11 22:04:05 +00:00
Jonathan Peyton dae13d81b4 Hinted lock (OpenMP 4.5 feature) Updates/Fixes Part 2
* 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
2015-12-11 21:57:06 +00:00
Jonathan Peyton a03533d35f Hinted lock (OpenMP 4.5 feature) Updates/Fixes
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
2015-12-11 21:49:08 +00:00
Jonathan Peyton f2d119ff8e Replace DYNA_* names with KMP_* names
llvm-svn: 254637
2015-12-03 19:37:20 +00:00
Jonathan Peyton 1be692ecdb Fix honoring of OMP_THREAD_LIMIT in the teams construct
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
2015-11-30 20:14:05 +00:00
Jonathan Peyton e1dad19aac Fix crash when __kmp_task_team_setup called for single threaded team
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
2015-11-30 20:05:13 +00:00
Jonathan Peyton 01dcf36bd5 Adding Hwloc library option for affinity mechanism
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
2015-11-30 20:02:59 +00:00
Jonathan Peyton 55c447f70f Add newlines to debug TRACE messages in kmp_taskdeps.cpp
llvm-svn: 253265
2015-11-16 22:53:38 +00:00
Jonathan Peyton baaccfab38 Add missing KMP_NESTED_HOT_TEAMS guards
llvm-svn: 253264
2015-11-16 22:48:41 +00:00
Alexey Bataev ffca01ce9f [OPENMP] Fixed tests for gcc build.
llvm-svn: 253200
2015-11-16 11:35:57 +00:00
Jonathan Peyton 90862c40ad Add debug trace message for hierarchical barrier
Trace when thread is waiting at join phase for oncore children.

llvm-svn: 252954
2015-11-12 21:40:39 +00:00
Jonathan Peyton d6c8de1ef2 Remove outdated comment
llvm-svn: 252953
2015-11-12 21:34:29 +00:00
Jonathan Peyton 00afbd01ad Fix for ittnotify loop reporting
Fix ittnotify loop metadata reporting for schedule(runtime) and
chunked schedule set via OMP_SCHEDULE. The bug was that chunk=1 
reported always.

llvm-svn: 252952
2015-11-12 21:26:22 +00:00
Jonathan Peyton adee8c5a18 [OMPT] Add ompt_event_task_switch event into OMPT/OpenMP
The patch adds support for ompt_event_task_switch into LLVM/OpenMP. Note that
the patch has also updated the signature of ompt_event_task_switch to
ompt_task_pair_callback_t (rather than the previous ompt_task_switch_callback_t).

Patch by Harald Servat

Differential Revision: http://reviews.llvm.org/D14566

llvm-svn: 252761
2015-11-11 17:49:50 +00:00
Jonathan Peyton 9b54b41f7b [OMPT] Remove unnecessary header in ompt-general.c
Patch by Harald Servat

Differential Revision: http://reviews.llvm.org/D14565

llvm-svn: 252756
2015-11-11 17:30:26 +00:00
Jonathan Peyton 3f5dfc2562 Fixes to wait-loop code
1) Add get_ptr_type() method to all wait flag types.
2) Flag in sleep_loc may change type by the time the resume is called from
   __kmp_null_resume_wrapper. We use get_ptr_type to obtain the real type
   and compare it to the casted object received. If they don't match, we know
   the flag has changed (already resumed and replaced by another flag). If they
   match, it doesn't hurt to go ahead and resume it.

Differential Revision: http://reviews.llvm.org/D14458

llvm-svn: 252487
2015-11-09 16:31:51 +00:00
Jonathan Peyton b0b83c8b0c Fixes and improvements to tasking in barriers
1) When the number of threads in a team increases, new threads need to have all
   their barrier struct fields initialized. We were missing the parent_bar and
   team fields.
2) For non-forkjoin barriers, we now do the __kmp_task_team_setup before the
   gather. The setup now sets up the task_team that all the threads will switch
   to after the barrier, but it needs to be done before other threads do the
   switch.
3) Remove an unneeded assignment of tt_found_tasks in task team free function.

Differential Revision: http://reviews.llvm.org/D14456

llvm-svn: 252486
2015-11-09 16:28:32 +00:00
Jonathan Peyton 7dee82e729 Improvements to machine_hierarchy code for re-sizing
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
2015-11-09 16:24:53 +00:00
Jonathan Peyton 960ea2f677 [OMPT] Add OMPT events for the OpenMP taskwait construct.
llvm-svn: 252472
2015-11-09 15:57:04 +00:00
Jonathan Peyton 70bda912fb Fix for zero chunk size
Setting dynamic schedule with chunk size 0 via omp_set_schedule(dynamic,0)
and then using "schedule (runtime)" causes infinite loop because for the 
chunked dynamic schedule we didn't correct zero chunk to the default (1).

llvm-svn: 252338
2015-11-06 20:32:44 +00:00
Jonathan Peyton 95246e7def Improve OMPT initialization code
Use of #ifdef OMPT_DEBUG was causing messages to be generated under normal
operation when the OpenMP library was compiled with KMP_DEBUG enabled.
Elsewhere, KMP_DEBUG evaluates assertions, but never produces messages during
normal operation. To avoid this inconsistency, set OMPT_DEBUG using a cmake
variable LIBOMP_OMPT_DEBUG.

While I was editing the associated ompt-specific.h and ompt-general.c files,
make the spacing and comments consistent.

Patch by John Mellor-Crummey

Differential Revision: http://reviews.llvm.org/D14355

llvm-svn: 252173
2015-11-05 16:54:55 +00:00
Jonathan Peyton dd23974a5d Remove incorrect debug assert.
in __kmp_free_team(), the team's number of processors can be == 1.

llvm-svn: 252086
2015-11-04 22:31:57 +00:00
Jonathan Peyton 4505bf68b0 Remove some empty lines.
llvm-svn: 252084
2015-11-04 22:06:07 +00:00
Jonathan Peyton 54127981be Refactor of task_team code.
This is a refactoring of the task_team code that more elegantly handles the two
task_team case. Two task_teams per team are kept in use for the lifetime of the
team. Thus no reference counting is needed.

Differential Revision: http://reviews.llvm.org/D13993

llvm-svn: 252082
2015-11-04 21:37:48 +00:00
Alexey Bataev b0eae8d6f4 [OPENMP] Add dependency to clang/clang-headers etc. for in-tree build of libomp.
Add additional dependency to clang/clang-headers/FileCheck to avoid possible troubles with in-tree build/test of libomp + allow parallel testing of libomp. Also includes bugfixes for tests + improvements to avoid possible race conditions.
Differential Revision: http://reviews.llvm.org/D14055

llvm-svn: 251797
2015-11-02 13:43:32 +00:00
Jonathan Peyton 57d171c9a6 [OMPT] Adding missing free() calls to ompt_tool_windows() function.
llvm-svn: 251719
2015-10-30 20:24:25 +00:00
Jonathan Peyton 69e596a5e7 [OMPT] Windows Support for OMPT
The problem is that the ompt_tool() function (which must be implemented by a
performance tool) should be defined in the RTL as well to cover the case when
the tool is not present in the address space of the process. This functionality
is accomplished with weak symbols in Unices. Unfortunately, Windows does not
support weak symbols.

The solution in these changes is to grab the list of all modules loaded by the
process and then search for symbol "ompt_tool()" within them. The function
ompt_tool_windows() performs the search of the ompt_tool symbol. If ompt_tool is
found, then its return value is used to initialize the tool. If ompt_tool is not
found, then ompt_tool_windows() returns NULL and OMPT is thus, disabled.

While doing these changes, the OMPT_SUPPORT detection in CMake was changed to
test for the required featuers for OMPT_SUPPORT, namely: builtin_frame_address()
existence, weak attribute existence and psapi.dll existence. For
LIBOMP_HAVE_OMPT_SUPPORT to be true, it must be that the builtin_frame_address()
intrinsic exists AND one of: either weak attributes exist or psapi.dll exists.

Also, since Process Status API is used I had to add new dependency -- psapi.dll
to the library dependency micro test.

Differential Revision: http://reviews.llvm.org/D14027

llvm-svn: 251654
2015-10-29 20:56:24 +00:00
Jonathan Peyton 0dd75fdfa9 Removed zeroing th.th_task_state for master thread at start of nested parallel.
The th.th_task_state for the master thread at the start of a nested parallel
should not be zeroed in __kmp_allocate_team() because it is later put in the
stack of states in __kmp_fork_call() for further re-use after exiting the
nested region. It is zeroed after being put in the stack.

Differential Revision: http://reviews.llvm.org/D13702

llvm-svn: 250847
2015-10-20 19:21:04 +00:00
Jonathan Peyton 55f027b1d4 Removed '@' from delimiters, added it as offset designator.
Moved '@' from delimiters to offset designators for the KMP_PLACE_THREADS
environment variable. Only one of: postfix "o" or prefix @, should be used
in the value of KMP_PLACE_THREADS. For example, '2s@2,4c@2,1t'. This is also
the format of KMP_SETTINGS=1 output now (removed "o" from there).
e.g., 2s,2o,4c,2o,1t.

Differential Revision: http://reviews.llvm.org/D13701

llvm-svn: 250846
2015-10-20 19:15:48 +00:00
Jonathan Peyton 6778c73243 Fix OMP_PLACES negation operator parsing (!place)
Just moved the *scan++ line up before the recursive call.  Otherwise,
infinite recursion occurs and leads to a segmentation fault.

llvm-svn: 250729
2015-10-19 19:43:01 +00:00
Jonathan Peyton 45ca5dada1 Clean-up cancellation state flag between parallel regions
Without this fix, cancellation requests in one parallel region cause
cancellation of the second region even though the second one was
not intended to be cancelled.

llvm-svn: 250727
2015-10-19 19:33:38 +00:00
Dimitry Andric 9b8c353c90 On FreeBSD, PTHREADS_THREADS_MAX does not fit into an int, leading to
warnings similar to the following:

    runtime/src/kmp_global.c:117:35: warning: implicit conversion from
    'unsigned long' to 'int' changes value from 18446744073709551615 to -1
    [-Wconstant-conversion]
    int           __kmp_sys_max_nth = KMP_MAX_NTH;
                  ~~~~~~~~~~~~~~~~~   ^~~~~~~~~~~
    runtime/src/kmp.h:849:34: note: expanded from macro 'KMP_MAX_NTH'
    #    define KMP_MAX_NTH          PTHREAD_THREADS_MAX
                                     ^~~~~~~~~~~~~~~~~~~

Clamp KMP_MAX_NTH to INT_MAX to avoid these warnings.  Also use INT_MAX
whenever PTHREAD_THREADS_MAX is not defined at all.

Differential Revision: http://reviews.llvm.org/D13827

llvm-svn: 250708
2015-10-19 17:32:04 +00:00
Jonathan Peyton 0e6d457797 [OMPT] Add OMPT events for API locking
This fix implements the following OMPT events for the API locking routines:
* ompt_event_acquired_lock
* ompt_event_acquired_nest_lock_first
* ompt_event_acquired_nest_lock_next
* ompt_event_init_lock
* ompt_event_init_nest_lock
* ompt_event_destroy_lock
* ompt_event_destroy_nest_lock

For the acquired events the depths of the locks ist required, so a return value
was added similiar to the return values we already have for the release lock
routines.

Patch by Tim Cramer

Differential Revision: http://reviews.llvm.org/D13689

llvm-svn: 250526
2015-10-16 16:52:58 +00:00
Jonathan Peyton 33d1d283f6 Detect final task in GOMP interface.
llvm-svn: 250198
2015-10-13 18:36:22 +00:00
Jonathan Peyton 71797c043f [OPENMP][TESTSUITE] Undefined variable in test omp_task_final.c
Patch by Alexey Bataev

Differential Revision: http://reviews.llvm.org/D13661

llvm-svn: 250066
2015-10-12 17:01:05 +00:00
Jonathan Peyton f0344bb02b [OMPT] Reduce overhead of OMPT
* Avoid computing state needed only by OMPT unless the ompt_enabled flag is set.
* Properly handle a corner case in OMPT where team == NULL.

Patch by John Mellor-Crummey

Differential Revision: http://reviews.llvm.org/D13502

llvm-svn: 249857
2015-10-09 17:42:52 +00:00
Jonathan Peyton b401db6d73 [OMPT] Initialize task fields only if needed
Because __kmp_task_init_ompt is called for every initial task in each thread
and always generated task ids, this was a big performance issue on bigger
systems even without any tool attached.  After changing the initialization 
interface to ompt_tool, we can now rely on already knowing whether a tool is
attached and OMPT is enabled at this point.

Patch by Jonas Hahnfeld

Differential Revision: http://reviews.llvm.org/D13494

llvm-svn: 249855
2015-10-09 17:38:05 +00:00
Jonathan Peyton 1bd61b423e Formatting/Whitespace/Comment changes associated with wait/release improvements.
llvm-svn: 249725
2015-10-08 19:44:16 +00:00
Jonathan Peyton e03b62f3bc Debug trace and assert statement changes for wait/release improvements.
These changes improve/update the trace messages and debug asserts related to
the previous wait/release checkin.

llvm-svn: 249717
2015-10-08 18:49:40 +00:00
Jonathan Peyton a0e159f7aa OpenMP Wait/release improvements.
These changes improve the wait/release mechanism for threads spinning in 
barriers that are handling tasks while spinnin by providing feedback to the 
barriers about any task stealing that occurs.

Differential Revision: http://reviews.llvm.org/D13353

llvm-svn: 249711
2015-10-08 18:23:38 +00:00
Jonathan Peyton dd4aa9b6b5 Added sockets to the syntax of KMP_PLACE_THREADS environment variable.
Added (optional) sockets to the syntax of the KMP_PLACE_THREADS environment variable.
Some limitations:
* The number of sockets and then optional offset should be specified first (before other parameters).
* The letter designation is mandatory for sockets and then for other parameters.
* If number of cores is specified first, then the number of sockets is defaulted to all sockets on the machine; also, the old syntax is partially supported if sockets are skipped.
* If number of threads per core is specified first, then the number of sockets and cores per socket are defaulted to all sockets and all cores per socket respectively.
* The number of cores per socket cannot be specified before sockets or after threads per core.
* The number of threads per core can be specified before or after core-offset (old syntax required it to be before core-offset);
* Parameters delimiter can be: empty, comma, lower-case x;
* Spaces are allowed around numbers, around letters, around delimiter.
Approximate shorthand specification:
KMP_PLACE_THREADS="[num_sockets(S|s)[[delim]offset(O|o)][delim]][num_cores_per_socket(C|c)[[delim]offset(O|o)][delim]][num_threads_per_core(T|t)]"

Differential Revision: http://reviews.llvm.org/D13175

llvm-svn: 249708
2015-10-08 17:55:54 +00:00
Jonathan Peyton 7edeef1bbf Fix memory corruption in Windows debug library
This patch adjusts the buffer size when reducing the buffer used for printing.
This solves the memory corruption in Windows debug library, and potential
memory corruption in other builds.

llvm-svn: 248588
2015-09-25 17:23:17 +00:00
Jonathan Peyton f209cdfade [OpenMP Testsuite] Change omp_get_wtime.c timer resolution to 3 percent
llvm-svn: 248501
2015-09-24 15:10:57 +00:00
Jonathan Peyton 5a60bc5743 [OpenMP Testsuite] Mac rpath specified when compiling tests
llvm-svn: 248500
2015-09-24 15:09:51 +00:00
Jonathan Peyton 3a91ada1e2 Fix stats build problem.
This change removes the KMP_STATS_ENABLED macro inside kmp_stats.cpp since it
is only compiled anyways when LIBOMP_STATS=on.  Also, include kmp_config.h in
kmp_stats.h to ensure KMP_STATS_ENABLED is defined.

llvm-svn: 248494
2015-09-24 14:47:51 +00:00
Jonathan Peyton 1acc2dbf6e Update Reference.pdf files.
This updates the Reference.pdf files to say LLVM OpenMP Runtime Library and
also updates the build documentation to show how to build with CMake.

llvm-svn: 248407
2015-09-23 18:09:47 +00:00
Jonathan Peyton 614c7ef81c OpenMP Initial testsuite change to purely llvm-lit based testing
This change introduces a check-libomp target which is based upon llvm's lit
test infrastructure. Each test (generated from the University of Houston's
OpenMP testsuite) is compiled and then run. For each test, an exit status of 0
indicates success and non-zero indicates failure. This way, FileCheck is not
needed. I've added a bit of logic to generate symlinks (libiomp5 and libgomp)
in the build tree so that gcc can be tested as well.  When building out-of-
tree builds, the user will have to provide llvm-lit either by specifying
-DLIBOMP_LLVM_LIT_EXECUTABLE or having llvm-lit in their PATH.

Differential Revision: http://reviews.llvm.org/D11821

llvm-svn: 248211
2015-09-21 20:41:31 +00:00
Joerg Sonnenberger 7649cd4389 Use sysconf for the number of cores on FreeBSD too.
llvm-svn: 248209
2015-09-21 20:29:12 +00:00
Joerg Sonnenberger 8abf7c87cd Complex division requires libm on NetBSD, add it.
llvm-svn: 248207
2015-09-21 20:21:02 +00:00
Joerg Sonnenberger 1564f3c4ec Add basic NetBSD support.
llvm-svn: 248204
2015-09-21 20:02:45 +00:00
Joerg Sonnenberger 40252cecb0 Teach the Perl modules about NetBSD.
llvm-svn: 248203
2015-09-21 19:42:05 +00:00
Joerg Sonnenberger f16f649e0d libomp on NetBSD needs libc, libpthread and libm.
llvm-svn: 248200
2015-09-21 19:40:59 +00:00
Joerg Sonnenberger 64be2d271d Assume that all Unix-like systems will want to handle signals and
simplify conditional.

llvm-svn: 248199
2015-09-21 19:38:56 +00:00
Joerg Sonnenberger d742184e0b Darwin is the exception when it comes to accessing environ, all other
Unix-like systems can follow the same code path.

llvm-svn: 248198
2015-09-21 19:37:05 +00:00
Jonathan Peyton b68a85d1f6 [OMPT] Simplify control variable logic for OMPT
Prior to this change, OMPT had a status flag ompt_status, which could take
several values. This was due to an earlier OMPT design that had several levels
of enablement (ready, disabled, tracking state, tracking callbacks). The
current OMPT design has OMPT support either on or off.
This revision replaces ompt_status with a boolean flag ompt_enabled, which 
simplifies the runtime logic for OMPT.

Patch by John Mellor-Crummey

Differential Revision: http://reviews.llvm.org/D12999

llvm-svn: 248189
2015-09-21 18:11:22 +00:00
Jonathan Peyton 82a13bf36c [OMPT] Overhaul OMPT initialization interface
The OMPT specification has changed. This revision brings the LLVM OpenMP
implementation up to date.

Technical overview of changes:
Previously, a public weak symbol ompt_initialize was called after the OpenMP
runtime is initialized. The new interface calls a global weak symbol ompt_tool
prior to initialization. If a tool is present, ompt_tool returns a pointer to
a function that matches the signature for ompt_initialize. After OpenMP is 
initialized the function pointer is called to initialize a tool.
Knowing that OMPT will be enabled before initialization allows OMPT support to
be initialized as part of initialization instead of back patching
initialization of OMPT support after the fact.
Post OpenMP initialization support has been generalized moves from
ompt-specific.c into ompt-general.c, since the OMPT initialization logic is no
longer implementation specific.

Patch by John Mellor-Crummey

Differential Revision: http://reviews.llvm.org/D12998

llvm-svn: 248187
2015-09-21 18:01:02 +00:00
Jonathan Peyton 441f33769e Fix the OpenMP 3.0 build
This change adds guards to the code in places where they are missing to enable
the OpenMP 3.0 build.

Patch by Diego Caballero and Johnny Peyton

Mailing List: http://lists.llvm.org/pipermail/openmp-dev/2015-September/000935.html

llvm-svn: 248178
2015-09-21 17:24:46 +00:00
Jonathan Peyton cab67cc3ff [OMPT] Correct an incorrect OMPT ifdef
An ifdef for OMPT_TRACE needs to be OMPT_BLAME so that both instances of a
callback are controlled by the same ifdef.

Patch by John Mellor-Crummey

Differential Revision: http://reviews.llvm.org/D12911

llvm-svn: 248001
2015-09-18 16:24:46 +00:00
Sylvestre Ledru 6dabac88db Force the readelf call to be in English
Summary:
For example, when readelf is called on a french localization, it will find "Librairie partagées" instead of "shared library"


Reviewers: AndreyChurbanov, jcownie

Differential Revision: http://reviews.llvm.org/D12902

llvm-svn: 247787
2015-09-16 12:01:14 +00:00
Jonathan Peyton 8977618773 Removing the Makefile/Perl build system.
This change deletes the Makefile+Perl build system and all files used by it
which aren't used by the CMake build system. This included many Perl files,
*.mk files, iomp* files.  This change also updates the README's and
index.html to instruct the user to use the CMake build system. All mentioning
of the Perl+Makefile based system are removed.

Differential Revision: http://reviews.llvm.org/D12331

llvm-svn: 247583
2015-09-14 17:20:30 +00:00
Jonathan Peyton 6d247f71c3 [OMPT] Fix assertion that arises when waiting for proxy tasks on runtime shutdown
This only triggered when built in debug mode with OMPT enabled:
__kmp_wait_template expected the state of the current thread to be either
ompt_state_idle or ompt_state_wait_barrier{,_implicit,_explicit}.

Patch by Jonas Hahnfeld

Differential Revision: http://reviews.llvm.org/D12754

llvm-svn: 247339
2015-09-10 21:33:50 +00:00
Jonathan Peyton df4d3dd659 Fix depth field bug and resize() function in hierarchical barrier
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
2015-09-10 20:34:32 +00:00
Jonathan Peyton 1707836b68 Cleanup of affinity hierarchy code.
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
2015-09-10 19:22:07 +00:00
Jonathan Peyton d26e213d11 Fix hanging barriers if number of parallel regions exceeds UINT_MAX
The fix is to make b_arrived flag 64 bit in both structures - kmp_balign_team_t
and kmp_balign_t. Otherwise when flag in kmp_balign_team_t wrapped over
UINT_MAX the library hangs.

Differential Revision: http://reviews.llvm.org/D12563

llvm-svn: 247320
2015-09-10 18:44:30 +00:00
Jonathan Peyton cb549f836a Remove duplicate of num_threads assignment.
The th.th_team_nproc is assigned in __kmp_allocate_thread() just 3 lines above,
so there is no need to assign the same value again.

llvm-svn: 246703
2015-09-02 20:28:50 +00:00
Jonathan Peyton f89fbbb395 Remove fork_context argument from __kmp_join_call() when OMPT is off
Conditionally include the fork_context parameter to __kmp_join_call()
only if OMPT_SUPPORT=1

Differential Revision: http://reviews.llvm.org/D12495

llvm-svn: 246460
2015-08-31 18:15:00 +00:00
Jonathan Peyton afa300606a Follow up to r246426 (Break Fortran Module Files build)
The CMAKE_CURRENT_BINARY_DIR is only necessary on the DEPENDS part of
the add_custom_command to build the Fortran Modules.

llvm-svn: 246448
2015-08-31 15:52:32 +00:00
Andrey Churbanov f506f41434 D12403: Fix GCC warning 'always_inline function might not be inlinable'
llvm-svn: 246434
2015-08-31 12:32:55 +00:00
Andrey Churbanov 5830b19917 Fix for Fortran modules build (from C.Bergstrom)
llvm-svn: 246426
2015-08-31 09:21:21 +00:00
Jonathan Peyton ff7da34bc3 Add kmp_config.h.cmake
In r246314 (Removing expand-vars.pl) patch, I forgot to add kmp_config.h.cmake
This patch just adds it.

llvm-svn: 246317
2015-08-28 19:24:39 +00:00
Jonathan Peyton c0225ca276 [OpenMP] [CMake] Removing expand-vars.pl in favor of CMake's configure_file()
Currently, the libomp CMake build system uses a Perl script to configure files
(tools/expand-vars.pl). This patch replaces the use of the Perl script by using
CMake's configure_file() function. The major changes include:
1. *.var has every $KMP_* variable changed to @LIBOMP_*@
2. kmp_config.h.cmake is a new file which contains all the feature macros and
   #cmakedefine lines
3. Most of the -D lines have been moved from LibompDefinitions.cmake but some
   OS specific MACROs (e.g., _GNU_SOURCE) remain.
4. All expand-vars.pl related logic is removed from the CMake files.

One important note about this change is that it breaks the old Perl+Makefile
build system because it can't create kmp_config.h properly.

Differential Review: http://reviews.llvm.org/D12211

llvm-svn: 246314
2015-08-28 18:42:10 +00:00
Jonathan Peyton 851a2afce9 Update README.txt to include table of supported Power processors
Small patch to the README.txt file which adds a table that shows what compiler
version works on what Power processor. 

Patch by Carlo Bertolli

http://lists.llvm.org/pipermail/openmp-commits/2015-August/000595.html

llvm-svn: 246165
2015-08-27 17:19:17 +00:00
Jonathan Peyton d2eb3c73ad Put taskdata variables under KMP_DEBUG guards.
These variables are only used in the TRACE macros and
so don't need to be defined unless compiling in debug mode.

llvm-svn: 246067
2015-08-26 20:02:21 +00:00
Jonathan Peyton fe9a1d7a69 Replace variables with definitions inside KMP_DEBUG_ASSERT statements
This change just removes the variables created solely for KMP_DEBUG_ASSERT statements
and puts the definition of the removed variables inside the KMP_DEBUG_ASSERT
statements.

llvm-svn: 246065
2015-08-26 19:58:48 +00:00
Jonathan Peyton 57d19ce33a Remove redundant definition of thr in kmp_gsupport.c
There is a thr variable with the same definition at the top of this function 
as the thr variable inside the if block.

llvm-svn: 246064
2015-08-26 19:55:13 +00:00
Jonathan Peyton 0cad3feba7 Remove unused caller_gtid variable in both z_Linux_util.c and z_Windows_NT_util.c
llvm-svn: 246059
2015-08-26 19:43:15 +00:00
Jonathan Peyton 62f3840c9b Fix machine topology pruning.
This patch fixes a bug when eliminating layers in the machine topology (namely
cores, and threads). Before this patch, if a user specifies using only one 
thread per socket, then affinity is not set properly due to bad topology
pruning.

Differential Revision: http://reviews.llvm.org/D11158

llvm-svn: 245966
2015-08-25 18:44:41 +00:00
Jonathan Peyton 621743b90e Update z_Linux_asm.s to use platform macros
z_Linux_asm.s can use the KMP_OS_* / KMP_MIC macros instead of the predefined
compiler macro checks.  The macro logic to determine KMP_MIC is moved from
kmp_os.h to kmp_platform.h.

llvm-svn: 245602
2015-08-20 19:46:14 +00:00
Andrey Churbanov 92effc4565 D11990: Lock-free start of serialized parallel regions
llvm-svn: 245286
2015-08-18 10:08:27 +00:00
Andrey Churbanov ec23a95691 D11988: Force serial reduction when team size is 1
llvm-svn: 245209
2015-08-17 10:12:12 +00:00
Andrey Churbanov f0c4ba6330 D11157: Fixed missed threads re-binding in case team size reduced via omp_set_num_threads
llvm-svn: 245206
2015-08-17 10:04:38 +00:00
Jonathan Peyton 221104bec6 Remove unused KMP_SETVERSION macro
This macro and the small amount of code along with it are unused and
can be removed.  The macro is never defined in any build script or source file.

llvm-svn: 244899
2015-08-13 15:26:38 +00:00
Jonathan Peyton bb02c2547f Fix two typos in documentation
llvm-svn: 244811
2015-08-12 21:05:22 +00:00
Jonathan Peyton 2211cfe0a3 One line fix for hierarchical barrier
There was a missing implicit task init for the ICV PUSH case in hierarchical barrier.

llvm-svn: 244807
2015-08-12 20:59:48 +00:00
Jonathan Peyton 3bb3e09308 Add recognition of the Intel 16.0 compiler in kmp_version.c
llvm-svn: 244799
2015-08-12 19:48:31 +00:00
Jonathan Peyton 45be450070 Tidy statistics collection
This removes some statistics counters and timers which were not used,
adds new counters and timers for some language features that were not
monitored previously and separates the counters and timers into those
which are of interest for investigating user code and those which are
only of interest to the developer of the runtime itself.
The runtime developer statistics are now ony collected if the
additional #define KMP_DEVELOPER_STATS is set.

Additional user statistics which are now collected include:
* Count of nested parallelism (omp parallel inside a parallel region)
* Count of omp distribute occurrences
* Count of omp teams occurrences
* Counts of task related statistics (taskyield, task execution, task
  cancellation, task steal)
* Values passed to omp_set_numtheads
* Time spent in omp single and omp master

None of this affects code compiled without stats gathering enabled,
which is the normal library build mode.

This also fixes the CMake build by linking to the standard c++ library
when building the stats library as it is a requirement.  The normal library
does not have this requirement and its link phase is left alone.

Differential Revision: http://reviews.llvm.org/D11759

llvm-svn: 244677
2015-08-11 21:36:41 +00:00
Jonathan Peyton 3c4dd1c9f1 Fix link error on Windows when LIBOMP_USE_DEBUGGER is off
Two symbols for the external debugger support were incorrectly exported when LIBOMP_USE_DEBUGGER=off.

Differential Revision: http://reviews.llvm.org/D11763

llvm-svn: 244217
2015-08-06 15:16:54 +00:00
Andrey Churbanov 9f5a9b0d91 D11156: Fix comments by eliminating possible trademark conflicts
llvm-svn: 244034
2015-08-05 12:00:07 +00:00
Andrey Churbanov edc370e53d D11301: Remove the __kmp_invoke_microtask() that relies on libffi
llvm-svn: 244031
2015-08-05 11:23:10 +00:00
Andrey Churbanov 368b70ef95 D11159: Fixing the stack offset functionality
llvm-svn: 244030
2015-08-05 11:12:45 +00:00
Tanya Lattner 856c732492 Update to lists.llvm.org
llvm-svn: 244008
2015-08-05 04:04:09 +00:00
Jonathan Peyton c6f2732e84 Update Build_With_CMake.txt to reflect changes in CMake refactor
This just updates the documentation regarding how to build libomp with CMake.

llvm-svn: 243276
2015-07-27 16:23:42 +00:00
Hans Wennborg fd4dfdcea1 LibompMicroTests.cmake: Invoke 'test' instead of using '[ x -eq y ]'
I was getting this cmake error on Mac OS X:

  CMake Error: Error in cmake code at
  /tmp/openmp/runtime/cmake/LibompMicroTests.cmake:140:
  Parse error.  Function missing ending ")".  Instead found bad character with text "[".

Perhaps invoking 'test' is less confusing for cmake.

Differential Revision: http://reviews.llvm.org/D11493

llvm-svn: 243165
2015-07-24 21:24:48 +00:00
Jonathan Peyton c96dcb0914 Patch out a fatal assertion in OpenMP runtime until preconditions are met
Compiling simple testcase with g++ and linking it to the LLVM OpenMP runtime
compiled in debug mode trips an assertion that produces a fatal error. When
the assertion is skipped, the program runs successfully to completion and 
produces the same answer as the sequential code. Intel will restore the
assertion with a patch that fixes the issues that cause it to trip.

Patch by John Mellor-Crummey

Differential Revision: http://reviews.llvm.org/D11269

llvm-svn: 243032
2015-07-23 18:58:37 +00:00
Jonathan Peyton 77c7898515 [CMake] Fix libomp_check_linker_flag function
libomp_check_linker_flag rewrites src_to_link.c and CMakeLists.txt in build
directory for test project, but cmake does not rebuild the project. The root
cause is that on some filesystems (ext3, reiserfs) timestamp resoultion is 1
second. So cmake does not rebuild test project if check takes less than 1 second.
This patch puts each test in its own directory to avoid the timestamp problem.

Patch by Chris Bergstrom

http://lists.cs.uiuc.edu/pipermail/openmp-dev/2015-July/000817.html

llvm-svn: 243017
2015-07-23 14:41:35 +00:00