summaryrefslogtreecommitdiffstats
path: root/openmp
Commit message (Collapse)AuthorAgeFilesLines
...
* Add C++ support for testcasesJonathan Peyton2017-10-204-3/+13
| | | | | | | | Patch by Simon Convent Differential Revision: https://reviews.llvm.org/D38878 llvm-svn: 316230
* Apply formatting changesJonathan Peyton2017-10-2067-268/+42
| | | | | | | | | | .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 llvm-svn: 316227
* KMP_HW_SUBSET vs KMP_PLACE_THREADS rival envirables fixJonathan Peyton2017-10-061-5/+22
| | | | | | | | | | | | | | 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 llvm-svn: 315091
* [test] Fix uninitialized memory in omp_taskloop_grainsize.cJonas Hahnfeld2017-09-291-1/+2
| | | | | | result was never initialized to zero which sometimes failed the test. llvm-svn: 314513
* Remove unnecessary semicolonsJonathan Peyton2017-09-2727-509/+498
| | | | | | | | 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. llvm-svn: 314340
* Allow printing of KMP_TOPOLOGY_METHOD when KMP_SETTINGS=trueJonathan Peyton2017-09-261-2/+0
| | | | llvm-svn: 314243
* Remove unused t_single_lockJonathan Peyton2017-09-262-2/+1
| | | | | | Add padding inside team structure to keep same structure size. llvm-svn: 314242
* Read blocktime value set by kmp_set_blocktime() before reading from ↵Jonathan Peyton2017-09-052-5/+9
| | | | | | | | | | KMP_BLOCKTIME Patch by Hansang Bae Differential Revision: https://reviews.llvm.org/D37403 llvm-svn: 312539
* Minor code cleanup of Klocwork issuesJonathan Peyton2017-09-0514-149/+126
| | | | | | | | | | | 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 llvm-svn: 312538
* Use va_copy instead of __va_copy to fix building libomp against musl libcJonathan Peyton2017-08-191-1/+1
| | | | | | | | | | Fixes https://bugs.llvm.org/show_bug.cgi?id=34040 Patch by Peter Levine Differential Revision: https://reviews.llvm.org/D36343 llvm-svn: 311269
* Remove BUILD_TVJonathan Peyton2017-08-175-81/+0
| | | | | | | | | | Cleanup code to remove BUILD_TV and unused code bracketed by it. Patch by Terry Wilmarth Differential Revision: https://reviews.llvm.org/D36011 llvm-svn: 311114
* [OpenMP] libomptarget: move debugging dumps under control of env var ↵Sergey Dmitriev2017-08-147-7/+112
| | | | | | | | | | | | | | | LIBOMPTARGET_DEBUG Disable default debugging dumps for libomptarget and plugins and move dumps under control of environment variable LIBOMPTARGET_DEBUG=<integer>. Dumps are enabled when LIBOMPTARGET_DEBUG is set to a positive integer value. Debugging dumps are available only in debug build; release build does not support it. Differential Revision: https://reviews.llvm.org/D33227 llvm-svn: 310841
* OMP_PROC_BIND: better spreadPaul Osmialowski2017-08-101-42/+108
| | | | | | | | | 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 llvm-svn: 310670
* Exclude version symbols for static libompJonathan Peyton2017-08-021-0/+5
| | | | | | | | | | | | We use symbol versioning for GNU-compatibility but libgomp has versioned symbols only in the shared library but not in the static. Moreover, version symbols in the static library can cause an error at link time. Patch by Olga Malysheva Differential Revision: https://reviews.llvm.org/D36225 llvm-svn: 309877
* Move lock acquire/release functions in task deque cleanup codeJonathan Peyton2017-08-021-3/+2
| | | | | | | | | | | | | 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 llvm-svn: 309875
* Add new envirable KMP_TEAMS_THREAD_LIMITJonathan Peyton2017-08-025-10/+30
| | | | | | | | | | | | | | | | | | | | 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 llvm-svn: 309874
* Fix comments and build messages concerning TSXJonathan Peyton2017-07-283-7/+10
| | | | llvm-svn: 309418
* Fix implementation of OMP_THREAD_LIMITJonathan Peyton2017-07-277-20/+153
| | | | | | | | | | | | | | | | | | 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 llvm-svn: 309319
* Introduce KMP_DEVICE_THREAD_LIMITJonathan Peyton2017-07-262-29/+28
| | | | | | | | | | | | | | | | | | | | | | | | 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 llvm-svn: 309168
* [CMake] Disable building libomptarget and add CMake switchJonas Hahnfeld2017-07-261-1/+12
| | | | | | | | | | | | | | | | | | Introduce OPENMP_ENABLE_LIBOMPTARGET which defaults to OFF at the moment. libomptarget is not yet ready for prime time: - Offloading to NVIDIA GPUs is not completed yet (compiler, device RTL) - The generic ELF plugin for offloading to the host (meant for testing) uses a single instance of the OpenMP runtime (libomp). That is why omp_is_initial_device() returns 1 which makes the tests fail. Because of these reasons, we want to disable building (and testing!) for release 5.0. See https://bugs.llvm.org/show_bug.cgi?id=33859 Differential Revision: https://reviews.llvm.org/D35719 llvm-svn: 309115
* Cleanup: __kmp_env_* variablesJonathan Peyton2017-07-254-44/+35
| | | | | | | | | | Removed unused __kmp_env_* variables. Also clangified other people's code. Patch by Terry Wilmarth Differential Revision: https://reviews.llvm.org/D35808 llvm-svn: 309000
* Whitespace.NAKAMURA Takumi2017-07-201-8/+7
| | | | llvm-svn: 308693
* OpenMP RTL cleanup: two PAUSEs per spin loop iteration replaced with single oneAndrey Churbanov2017-07-192-6/+13
| | | | | | Differential Revision: https://reviews.llvm.org/D35490 llvm-svn: 308423
* For KMP_PAGE_SIZE, use getpagesize() on Unix, GetSystemInfo() on WindowsDimitry Andric2017-07-181-8/+8
| | | | | | | | | | | | | | | | | | | | | | 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 llvm-svn: 308355
* Fix failing taskloop tests by omitting gccJonathan Peyton2017-07-182-0/+4
| | | | | | We do not have GOMP interface support for taskloop yet. llvm-svn: 308351
* Add recursive task scheduling strategy to taskloop implementationJonathan Peyton2017-07-187-95/+482
| | | | | | | | | | | | | | | | | | | | | | | | | | 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 llvm-svn: 308338
* Fix sporadic segfaults in tasking tests.Andrey Churbanov2017-07-181-1/+1
| | | | | | | | Patch by Terry Wilmarth Differential Revision: https://reviews.llvm.org/D35535 llvm-svn: 308298
* OpenMP RTL cleanup: nullify pointer after memory freeingAndrey Churbanov2017-07-181-1/+4
| | | | | | Differential Revision: https://reviews.llvm.org/D35497 llvm-svn: 308274
* Removed "duplicates" from verbose affinity outputJonathan Peyton2017-07-171-5/+0
| | | | | | | | The internal details of this setting are not meant to be user visible and only create confusion. Differential Revision: https://reviews.llvm.org/D35269 llvm-svn: 308189
* OpenMP RTL cleanup: eliminated warnings with -Wcast-qual, patch 2.Andrey Churbanov2017-07-1716-215/+244
| | | | | | | | | Changes are: got all atomics to accept volatile pointers that allowed to simplify many type conversions. Windows specific code fixed correspondingly. Differential Revision: https://reviews.llvm.org/D35417 llvm-svn: 308164
* [GOMP] Fix (un)tied tasks with the GCCJonas Hahnfeld2017-07-131-2/+2
| | | | | | | | | The first bit is actually the "untied" flag. That is why the condition was wrong and has to be inverted to set the flag correctly. Found and initial patch by Simon Convent! llvm-svn: 307899
* Rename z_Linux_asm.s to z_Linux_asm.SDimitry Andric2017-07-112-3/+3
| | | | | | | | | | | | | | | | | | | | | Summary: On Unix, a .S file is normally an assembly source which must be preprocessed with a C preprocessor, while a .s file is "plain" assembly. The former is handled by the compiler driver (cc), the latter is directly passed to the assembler binary (as). Because z_Linux_asm.s is supposed to be preprocessed, rename it to .S, so it can be automatically picked up correctly by build systems. Reviewers: AndreyChurbanov, emaste, jlpeyton Reviewed By: AndreyChurbanov Subscribers: mgorny, openmp-commits Differential Revision: https://reviews.llvm.org/D35171 llvm-svn: 307680
* Add a .arcconfig file for openmp.Dimitry Andric2017-07-081-0/+4
| | | | llvm-svn: 307474
* remove deprecated register storage class specifierEd Maste2017-07-077-148/+148
| | | | | | | | | | While importing libomp into the FreeBSD base system we encountered Clang warnings that "'register' storage class specifier is deprecated and incompatible with C++1z [-Wdeprecated-register]". Differential Revision: https://reviews.llvm.org/D35124 llvm-svn: 307441
* remove duplicate symbol version script entriesEd Maste2017-07-071-3/+0
| | | | | | | | GNU ld ignores duplicates, but lld produces a warning. Differential Revision: https://reviews.llvm.org/D35121 llvm-svn: 307399
* Fix wrong website in messagesJonathan Peyton2017-07-051-2/+2
| | | | | | | | | | | Address user message bug where the messages were sending users to Intel's website instead of the LLVM OpenMP runtime websites. Bugzilla: https://bugs.llvm.org/show_bug.cgi?id=32892 Differential Revision: https://reviews.llvm.org/D35018 llvm-svn: 307206
* OpenMP RTL cleanup: eliminated warnings with -Wcast-qual.Andrey Churbanov2017-07-0322-349/+376
| | | | | | | | | | | Changes are: replaced C-style casts with cons_cast and reinterpret_cast; type of several counters changed to signed; type of parameters of 32-bit and 64-bit AND and OR intrinsics changes to unsigned; changed files formatted using clang-format version 3.8.1. Differential Revision: https://reviews.llvm.org/D34759 llvm-svn: 307020
* Make test/parallel/omp_nested.c not use so many threadsHal Finkel2017-06-271-0/+5
| | | | | | | | | | | | | | | | | | | I've found it very difficult to get test/parallel/omp_nested.c to pass consistently across my build environments. The problem is that it creates N^2 threads (it is testing nested parallel regions), and that often exceeds the thread limits on systems with many cores. We do raise the process limits in lit, and that often helps, but if running lit with a smaller number of threads or on a system where we're otherwise resource constrained, this particular test tends to fail (because the runtime cannot create a sufficient number of threads). This seems to work: if the maximum number of threads is more than some small number, then cap the number of threads used for the parallel region. The choice of 4 here is somewhat arbitrary. Differential Revision: https://reviews.llvm.org/D32033 llvm-svn: 306357
* Only use libdl when it is availableDimitry Andric2017-06-261-1/+1
| | | | | | | | | | | | | | | | Summary: On BSDs, there is no `libdl.so`, and functions like `dlopen` are implemented in the main C library instead. Use the `CMAKE_DL_LIBS` variable instead of hardcoding a dependency on the `dl` library. Reviewers: grokos, joerg, emaste Reviewed By: emaste Subscribers: jlpeyton, mgorny, openmp-commits Differential Revision: https://reviews.llvm.org/D34632 llvm-svn: 306319
* Set affinity to none/false in child processesJonathan Peyton2017-06-151-1/+12
| | | | | | | | | | | | Reset affinity to none (false for proc-bind-var) so that threads in the child processes are not bound tightly, unless the user explicitly sets this in KMP_AFFINITY/OMP_PROC_BIND, in child processes. This can improve performance for scripting languages which fork for parallelism like Python's multiprocessing module. Differential Revision: https://reviews.llvm.org/D34154 llvm-svn: 305513
* Replace platform macro with KMP_MIC_SUPPORTEDJonathan Peyton2017-06-135-15/+19
| | | | | | Differential Revision: https://reviews.llvm.org/D34119 llvm-svn: 305307
* Reset initial affinity in children processesJonathan Peyton2017-06-132-0/+9
| | | | | | | | | | | | | | | | If OpenMP is initialized before fork()-ing occurs and affinity is set to something like compact, then the master thread will be pinned to a single HW thread/core after initialization. If the master (or any other thread) then forks N processes, all N processes will then be pinned to that same single HW thread/core. To reset the affinity for the new child process, the atfork handler for the child process can call kmp_set_thread_affinity_mask_initial() to reset its affinity to the initial affinity of the application before it re-initializes libomp. The parent process will not be affected and still keeps its affinity setting. Differential Revision: https://reviews.llvm.org/D34118 llvm-svn: 305306
* [OpenMP] Prevent unused-variable warning in libomptarget when compiling in ↵Samuel Antao2017-06-091-0/+4
| | | | | | Release mode. llvm-svn: 305090
* Fix static initializers for locks.Jonathan Peyton2017-06-061-4/+5
| | | | | | | | | | | Fix static initializers to use the proper unlocked value for the poll field of the tas and futex locks. Patch by Terry Wilmarth Differential Revision: https://reviews.llvm.org/D33794 llvm-svn: 304828
* OpenMP 4.5: implemented support of schedule(simd:guided) andAndrey Churbanov2017-06-057-3/+1160
| | | | | | | | | | schedule(simd:runtime) - library part. Compiler generation should use newly introduced scheduling kinds kmp_sch_guided_simd = 46, kmp_sch_runtime_simd = 47, as parameters to __kmpc_dispatch_init_* entries. Differential Revision: https://reviews.llvm.org/D31602 llvm-svn: 304724
* [OpenMP] libomptarget: eliminate compiler warnings at buildGeorge Rokos2017-06-022-11/+13
| | | | | | | | Thanks to Sergey Dmitriev for submitting the patch. Differential Revision: https://reviews.llvm.org/D33851 llvm-svn: 304601
* Re-enable assertion after the problem that caused it to be hit had been fixedAndrey Churbanov2017-06-011-5/+0
| | | | | | Differential Revision: https://reviews.llvm.org/D31421 llvm-svn: 304443
* Fix minor formatting issuesJonathan Peyton2017-06-014-35/+27
| | | | | | | | | | | Some code was restructured to move it under KMP_DEBUG. The rest is formatting changes to fix some things broken by clang-format Patch by Terry Wilmarth Differential Revision: https://reviews.llvm.org/D33744 llvm-svn: 304438
* Fix for KMP_AFFINITY=disabled and KMP_TOPOLOGY_METHOD=hwlocJonathan Peyton2017-05-314-1/+36
| | | | | | | | | | | | With these settings, the create_hwloc_map() method was being called causing an assert(). After some consideration, it was determined that disabling affinity explicitly should just disable hwloc as well. i.e., KMP_AFFINITY overrides KMP_TOPOLOGY_METHOD. This lets the user know that the Hwloc mechanism is being ignored when KMP_AFFINITY=disabled. Differential Revision: https://reviews.llvm.org/D33208 llvm-svn: 304344
* Address default pinning OpenMP process with multiple processor groupsJonathan Peyton2017-05-311-2/+30
| | | | | | | | | | | | | | | | | | | This change checks if the initial affinity mask is equal to exactly one Windows processor group's affinity mask. If it is, then the code does not respect the initial affinity mask and uses the entire machine instead. The reasoning behind this is that, by default, Windows assigns exactly one processor group as the initial affinity mask even when there are multiple Windows processor groups available. User's typically want to use the whole machine, so we ignore this special case and use the entire machine. If the initial affinity mask is a proper subset of one group, or spans multiple groups, then the initial affinity mask is respected since we can assume that the operating system did not assign this initial affinity mask. This change only affects machines with multiple processor groups Differential Revision: https://reviews.llvm.org/D33210 llvm-svn: 304343
OpenPOWER on IntegriCloud