summaryrefslogtreecommitdiffstats
path: root/openmp/runtime
Commit message (Collapse)AuthorAgeFilesLines
...
* Simplify __kmp_expand_threadsJonathan Peyton2018-01-101-37/+12
| | | | | | | | | | | | | | This change simplifies __kmp_expand_threads to take a single argument. Previously, it allowed two arguments and had logic to decide on different potential expansion sizes. However, no calls to __kmp_expand_threads in the runtime make use of this extra logic. Thus the extra argument and logic is removed here. Patch by Terry Wilmarth Differential Revision: https://reviews.llvm.org/D41836 llvm-svn: 322204
* Minor code cleanupJonathan Peyton2018-01-103-4/+13
| | | | | | | | Patch by Terry Wilmarth Differential Revision: https://reviews.llvm.org/D41831 llvm-svn: 322203
* Improve stability of the runtime in parent/child processesJonathan Peyton2018-01-106-4/+32
| | | | | | | | | | | | | | | This change improves stability of the runtime when the application forks child processes. Acquiring/releasing __kmp_initz_lock and __kmp_forkjoin_lock in the atfork handlers insures that the actual fork does not occur while those two locks are held, and __kmp_itt_reset() reverts the itt's global state to the initial state which also initializes the mutex stored in the global state. Some missing initialization code was also inserted in the child's atfork handler. Patch by Hansang Bae Differential Revision: https://reviews.llvm.org/D41462 llvm-svn: 322202
* Missed to add new test case in previous commitJoachim Protze2018-01-101-0/+150
| | | | llvm-svn: 322179
* [OMPT] Fix ompt_task_data handling in implicit barriersJoachim Protze2018-01-102-1/+2
| | | | | | | | Changes to task_data in barrier-begin were not visible at barrier-end Differential Revision: https://reviews.llvm.org/D41176 llvm-svn: 322178
* [OMPT] Fix cast and printf of wait_id in lock testJonas Hahnfeld2018-01-101-1/+1
| | | | | | | | This didn't work on 32 bit platforms. Differential Revision: https://reviews.llvm.org/D41853 llvm-svn: 322160
* Fix type mismatch in omp_control_tool() implementation that makes it run ↵Paul Osmialowski2018-01-091-1/+1
| | | | | | | | incorrectly on 32-bit machines. Differential Revision: https://reviews.llvm.org/D41854 llvm-svn: 322068
* Correct types of pointers to doacross_num_doneJonas Hahnfeld2018-01-071-3/+3
| | | | | | | | | | This field is defined as kmp_int32, so we should use neither pointers to kmp_int64 nor 64 bit atomic instructions. (Found while testing on a Raspberry Pi, 32 bit ARM) Differential Revision: https://reviews.llvm.org/D41656 llvm-svn: 321964
* Fix some comments and formatting in kmp_dispatch.cppJonathan Peyton2018-01-041-8/+9
| | | | llvm-svn: 321831
* Fix trademarks found by scannerJonathan Peyton2018-01-046-28/+28
| | | | llvm-svn: 321827
* [OMPT] Build runtime with OMPT support by defaultJoachim Protze2018-01-022-5/+18
| | | | | | | | This patch enables OMPT by default if version 50 or later is built and the config says, that OMPT will be supported. Differential Revision: https://reviews.llvm.org/D41508 llvm-svn: 321675
* Unify build documentation and convert to reStructuredTextJonas Hahnfeld2017-12-273-231/+3
| | | | | | | | | | | We now have several options that apply for both libraries and they shouldn't be documented in multiple files. When already merging the two Build_With_CMake.txt documents, convert them to reStructuredText which is used for all of LLVM's documentation. Differential Revision: https://reviews.llvm.org/D40920 llvm-svn: 321481
* [OMPT] Set and reset frame address when creating a task with dependencesJoachim Protze2017-12-242-13/+31
| | | | | | | | | As for normal task creation, the task frame addresses need to be stored for the encountering task. Differential Revision: https://reviews.llvm.org/D41165 llvm-svn: 321421
* [OMPT] Add missing initialization in nested_lwt.c test casePaul Osmialowski2017-12-221-1/+1
| | | | | | | | Without this initialization this test case tend to fail. Differential Revision: https://reviews.llvm.org/D41542 llvm-svn: 321379
* [OMPT] Fix failing test cases for gcc on UbuntuJoachim Protze2017-12-222-2/+3
| | | | | | | | | | | | | | The compiler warns that _BSD_SOURCE is deprecated and _DEFAULT_SOURCE should be used instead. We keep _BSD_SOURCE for older compilers, that don't know about _DEFAULT_SOURCE. The linker drops the tool when linking, since there is no visible need for the library. So we need to tell the linker, that the tool should be linked anyway. Differential Revision: https://reviews.llvm.org/D41499 llvm-svn: 321362
* Remove unused positional argument for printfJoachim Protze2017-12-222-2/+4
| | | | | | | | | | | | | | | | | The format string for hints only prints the second argument (string) and drops the first argument (hint id). Depending on how you read the POSIX text for printf, this could be valid. But for practical reason, i.e., unpacking the va_list passed to printf based on the formating information, it makes sense to fix the implementation and not pass the id for hint. Failing testcases were: misc_bugs/teams-reduction.c ompt/parallel/not_enough_threads.c Differential Revision: https://reviews.llvm.org/D41504 llvm-svn: 321361
* Add missing test case from D41171 commitJoachim Protze2017-12-211-0/+29
| | | | llvm-svn: 321270
* [OMPT] Add missing ompt_get_num_procs functionJoachim Protze2017-12-214-0/+21
| | | | | | | | | | | | | This function is defined in OpenMP-TR6 section 4.1.5.1.6 The functions was not implemented yet. Since ompt-functions can only be called after the runtime was initialized and has loaded a tool, it can assume the runtime to be initialized. In contrast to omp_get_num_procs which needs to check whether the runtime is initialized. Differential Revision: https://reviews.llvm.org/D40949 llvm-svn: 321269
* [OMPT] Fix return address handling in a few GOMP interface methodsJoachim Protze2017-12-212-8/+14
| | | | | | | | | | | This revision fixes failing testcases with parallel for loops and the gomp interface. The return address needs to be stored at entry to runtime. The storage is cleared on usage, so we need to update the storage before calling again internal functions, that will trigger event callbacks. Differential Revision: https://reviews.llvm.org/D41181 llvm-svn: 321265
* [OMPT] Handle null pointer in set_callback to improve performanceJoachim Protze2017-12-211-2/+5
| | | | | | | | | | | | | We use the bitmap ompt_enabled thoughout the runtime, to avoid loading the vector of callback functions when testing if specific code should be executed. Before invoking an event callback function, the pointer is tested for NULL. This revision resets the corresponding bit in ompt_enabled to 0 if NULL is passed in set_callback. Differential Revision: https://reviews.llvm.org/D41171 llvm-svn: 321264
* [OMPT] Use frames at different level when using clang version 5 or higher ↵Joachim Protze2017-12-217-18/+35
| | | | | | | | | | | | with debug flag Clang 5 or higher adds an intermediate function call in certain cases when compiling with debug flag. This revision updates the testcases to work correctly. Differential Revision: https://reviews.llvm.org/D40595 llvm-svn: 321263
* [OMPT] Add annotations to testcases that are expected to fail when using ↵Joachim Protze2017-12-2125-7/+30
| | | | | | | | | | | | | | | | | certain compilers Reasons for expected failures are mainly bugs when using lables in OpenMP regions or missing support of some OpenMP features. For some worksharing clauses, support to distinguish the kind of workshare was added just recently. If an issue was fixed in a minor release version of a compiler, we flag the test as unsupported for this compiler version to avoid false positives. Same for fixes that where backported to older compiler versions. Differential Revision: https://reviews.llvm.org/D40384 llvm-svn: 321262
* [AArch64] add required arch specific code for running OMPT test casesPaul Osmialowski2017-12-211-0/+6
| | | | | | Differential Revision: https://reviews.llvm.org/D41482 llvm-svn: 321258
* Fix more inconsistent line endings. NFC.Dimitry Andric2017-12-181-323/+323
| | | | llvm-svn: 321016
* [AArch64] fix an issue with older /proc/cpuinfo layoutPaul Osmialowski2017-12-131-0/+8
| | | | | | | | | | There are two /proc/cpuinfo layots in use for AArch64: old and new. The old one has all 'processor : n' lines in one section, hence checking for duplications does not make sense. Differential Revision: https://reviews.llvm.org/D41000 llvm-svn: 320593
* Use hyperbarrier by default on all architecturesJonas Hahnfeld2017-12-081-15/+6
| | | | | | | | | | | | | | | | | | All architectures except x86_64 used the linear barrier implementation by default which doesn't give good performance for a larger number of threads. Improvements for PARALLEL overhead (EPCC) with this patch on a Power8 system (2 sockets x 10 cores x 8 threads, OMP_PLACES=cores) 20 threads: 4.55us -> 3.49us 40 threads: 8.84us -> 4.06us 80 threads: 19.18us -> 4.74us 160 threads: 54.22us -> 6.73us Differential Revision: https://reviews.llvm.org/D40358 llvm-svn: 320152
* Fix thread affinity on non-x86 LinuxJonas Hahnfeld2017-12-082-5/+2
| | | | | | | | | | | | | | | | | To make thread affinity work according to the OpenMP spec, the runtime needs information about the hardware topology. On Linux the default way is to parse /proc/cpuinfo which contains this information for x86 machines but (at least) not for AArch64 and Power architectures. Fortunately, there is a different code path which is able to get that data from sysfs. The needed patch has landed in 2006 for Linux 2.6.16 which is safe to assume nowadays (even RHEL 5 had a kernel version derived from 2.6.18, and we are now at RHEL 7!). Differential Revision: https://reviews.llvm.org/D40357 llvm-svn: 320151
* Add missing memory barrier for queuing locksJonas Hahnfeld2017-12-082-1/+2
| | | | | | | | | | Otherwise I see hangs in the omp_single_copyprivate test when compiling in release mode. With the debug assertions, I get a failure `head > 0 && tail > 0`. Differential Revision: https://reviews.llvm.org/D40722 llvm-svn: 320150
* [OpenMP] Add entry for Intel Compiler 18Jonathan Peyton2017-12-061-0/+2
| | | | | | | | Patch by Simon Convent Differential Revision: https://reviews.llvm.org/D40386 llvm-svn: 319961
* Eliminate double printing of verbose affinity settingsJonathan Peyton2017-12-061-1/+3
| | | | | | | | | Redundant extra verbose output of binding to full mask in case affinity=balanced or OMP_PLACES=<any> or OMP_PROC_BIND=<any> Differential Revision: https://reviews.llvm.org/D40624 llvm-svn: 319960
* Trivial enum fixJonathan Peyton2017-12-061-4/+4
| | | | | | | | | | | | 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 llvm-svn: 319957
* Fix alignment in teams-reduction.c testJonas Hahnfeld2017-12-051-1/+6
| | | | | | | | | | The runtime will use the global kmp_critical_name as a lock and tries to atomically store a pointer in there. This will fail if the global is only aligned by 4 bytes, the size of one int32_t element. Use a union to ensure the global is aligned to the size of a pointer on the current platform. llvm-svn: 319811
* Fix PR30890: Reduction across teams hangsJonas Hahnfeld2017-12-052-23/+133
| | | | | | | | | | __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 llvm-svn: 319788
* [CMake] Detect information about test compilerJonas Hahnfeld2017-11-304-3/+8
| | | | | | | | | | | | Perform a nested CMake invocation to avoid writing our own parser for compiler versions when we are not testing the in-tree compiler. Use the extracted information to mark a test as unsupported that hangs with Clang prior to version 4.0.1 and restrict tests for libomptarget to Clang version 6.0.0 and later. Differential Revision: https://reviews.llvm.org/D40083 llvm-svn: 319448
* Extension of HWLOC topology discovery with NUMA nodes and tilesAndrey Churbanov2017-11-305-179/+385
| | | | | | | | Patch by Olga Malysheva Differential Revision: https://reviews.llvm.org/D40309 llvm-svn: 319422
* Make kmp_r_sched_t into a unionJonathan Peyton2017-11-292-30/+24
| | | | | | | | | | | 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 llvm-svn: 319379
* Fix aligned memory allocation in the stub libraryJonathan Peyton2017-11-291-9/+34
| | | | | | | | | | | | | | 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 llvm-svn: 319375
* Warning is emitted when tiles are requested but cannot be usedJonathan Peyton2017-11-292-1/+15
| | | | | | | | | | | | | | 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 llvm-svn: 319374
* Fix types of Fortran array elementsJonathan Peyton2017-11-296-12/+12
| | | | | | | | | | | | 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 llvm-svn: 319372
* [CMake] Refactor testing infrastructureJonas Hahnfeld2017-11-295-96/+21
| | | | | | | | | | | | | | | The code for the two OpenMP runtime libraries was very similar. Move to common CMake file that is included and provides a simple interface for adding testsuites. Also add a common check-openmp target that runs all testsuites that have been registered. Note that this renames all test options to the common OPENMP namespace, for example OPENMP_TEST_C_COMPILER instead of LIBOMP_TEST_COMPILER and so on. Differential Revision: https://reviews.llvm.org/D40082 llvm-svn: 319343
* [CMake] Refactor common settings and flagsJonas Hahnfeld2017-11-294-18/+5
| | | | | | | | | | | | 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 llvm-svn: 319342
* [CMake] Disallow direct configurationJonas Hahnfeld2017-11-294-20/+8
| | | | | | | | | | 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 llvm-svn: 319341
* doxygen: disable the html timestamp: this is breaking the reproducible build ↵Sylvestre Ledru2017-11-251-1/+1
| | | | | | of openmp llvm-svn: 318978
* Fix for OMP doacross implementation on PowerJonas Hahnfeld2017-11-222-2/+9
| | | | | | | | | | 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 llvm-svn: 318848
* Fixed OMP doacross implementation on 32-bit platforms.Andrey Churbanov2017-11-201-8/+15
| | | | | | Differential Revision: https://reviews.llvm.org/D40171 llvm-svn: 318658
* [OMPT] Fix inaccuracies in worksharing testsJonas Hahnfeld2017-11-172-8/+7
| | | | | | | | | | | | | | | | | These tests were failing rarely on my MacBook when there was some activity in the background. Read: one of a thousand executions? * sections.c missed the sorting based on thread ids. This worked as long as the master thread finished its section before the worker thread started the second one but failed if the master thread was put to sleep by the OS. * The checks in single.c assumed that the master thread executes the single region which works most of the time because it is usually faster than the newly spawned worker thread. Differential Revision: https://reviews.llvm.org/D39853 llvm-svn: 318527
* Exclude untied tasks from checking of task scheduling constraint (TSC).Andrey Churbanov2017-11-163-101/+164
| | | | | | | | This can improve performance of tests with untied tasks. Differential Revision: https://reviews.llvm.org/D39613 llvm-svn: 318388
* [OMPT] Provide initialization for Mac OS XJonas Hahnfeld2017-11-114-49/+88
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 llvm-svn: 317980
* [OMPT] Fix assertion for OpenMP code generated with outdated compilersJoachim Protze2017-11-103-7/+13
| | | | | | | | | | | | 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 llvm-svn: 317928
* [OMPT] Purge OMPT_BLAME and OMPT_TRACEJonas Hahnfeld2017-11-102-9/+5
| | | | | | This was replace by OMPT_OPTIONAL. llvm-svn: 317890
OpenPOWER on IntegriCloud