summaryrefslogtreecommitdiffstats
path: root/openmp/runtime/src
Commit message (Collapse)AuthorAgeFilesLines
* Introduce dynamic affinity dispatch capabilitiesJonathan Peyton2016-11-1411-721/+631
| | | | | | | | | | | | | | | | | | | | | | | | | This set of changes enables the affinity interface (Either the preexisting native operating system or HWLOC) to be dynamically set at runtime initialization. The point of this change is that we were seeing performance degradations when using HWLOC. This allows the user to use the old affinity mechanisms which on large machines (>64 cores) makes a large difference in initialization time. These changes mostly move affinity code under a small class hierarchy: KMPAffinity class Mask {} KMPNativeAffinity : public KMPAffinity class Mask : public KMPAffinity::Mask KMPHwlocAffinity class Mask : public KMPAffinity::Mask Since all interface functions (for both affinity and the mask implementation) are virtual, the implementation can be chosen at runtime initialization. Differential Revision: https://reviews.llvm.org/D26356 llvm-svn: 286890
* Added check for malloc return.Andrey Churbanov2016-11-101-0/+6
| | | | | | | | Patch by Victor Campos. Differential Revision: https://reviews.llvm.org/D26318 llvm-svn: 286441
* [OpenMP] Enable ThreadSanitizer to check OpenMP programsJonas Hahnfeld2016-11-0710-9/+332
| | | | | | | | | | | | | | | | | | | | | | This patch allows ThreadSanitizer (Tsan) to verify OpenMP programs. It means that no false positive will be reported by Tsan when verifying an OpenMP programs. This patch introduces annotations within the OpenMP runtime module to provide information about thread synchronization to the Tsan runtime. In order to enable the Tsan support when building the runtime, you must enable the TSAN_SUPPORT option with the following environment variable: -DLIBOMP_TSAN_SUPPORT=TRUE The annotations will be enabled in the main shared library (same mechanism of OMPT). Patch by Simone Atzeni and Joachim Protze! Differential Revision: https://reviews.llvm.org/D13072 llvm-svn: 286115
* fixed typo in commentAndrey Churbanov2016-11-031-1/+1
| | | | llvm-svn: 285947
* Change task stealing to always get task from head of victim's deque.Andrey Churbanov2016-11-021-13/+8
| | | | | | Differential Revision: https://reviews.llvm.org/D26187 llvm-svn: 285833
* Fixed problem introduced by part of https://reviews.llvm.org/D21196.Andrey Churbanov2016-11-011-2/+2
| | | | | | | | | | | | Check Task Scheduling Constraint (TSC) on stealing of untied task. This is needed because the untied task can produce tied children those can break TSC if untied is not a descendant of current task. This can cause live lock on complex tyasking tests (e.g. kastors/strassen-task-dep). Differential Revision: https://reviews.llvm.org/D26182 llvm-svn: 285703
* Add more conditions to check whether task waiting is necessary in ↵Andrey Churbanov2016-11-011-4/+4
| | | | | | | | | | kmp_omp_taskwait. Differential Revision: https://reviews.llvm.org/D26058 Patch by Victor Campos llvm-svn: 285678
* Fixed a memory leak related to task dependencies.Andrey Churbanov2016-10-274-13/+65
| | | | | | | | Differential Revision: http://reviews.llvm.org/D25504 Patch by Alex Duran. llvm-svn: 285283
* Fixing typos in __kmp_release_deps trace outputsJonathan Peyton2016-10-261-4/+4
| | | | | | | | Patch by Victor Campos Differential Revision: https://reviews.llvm.org/D25972 llvm-svn: 285244
* Use getpagesize() instead of PAGE_SIZE macro when KMP_OS_LINUX is trueJonathan Peyton2016-10-263-14/+20
| | | | | | | | Patch by Victor Campos Differential Revision: https://reviews.llvm.org/D26001 llvm-svn: 285243
* Fixed memory leak mistakenly introduced by https://reviews.llvm.org/D23115Andrey Churbanov2016-10-201-3/+5
| | | | | | Differential Revision: http://reviews.llvm.org/D25510 llvm-svn: 284747
* [OpenMP] Fix issue with directives used in a macro.Samuel Antao2016-10-201-8/+9
| | | | | | | | | | | | | | | | | | | Summary: If directives are used in a macro, clang complains with: ``` src/projects/openmp/runtime/src/kmp_runtime.c:7486:2: error: embedding a directive within macro arguments has undefined behavior [-Werror,-Wembedded-directive] #if KMP_USE_MONITOR ``` This patch fixes two occurrences of the issue in `kmp_runtime.cpp`. Reviewers: tlwilmar, jlpeyton, AndreyChurbanov, Hahnfeld Subscribers: Hahnfeld, openmp-commits Differential Revision: https://reviews.llvm.org/D25823 llvm-svn: 284728
* Fix OpenMP 4.0 library buildJonathan Peyton2016-10-182-0/+9
| | | | | | | | Patch by Andrey Churbanov Differential Revision: https://reviews.llvm.org/D25505 llvm-svn: 284499
* Fix a compile error on musl-libc due to strerror_r() prototypeMichal Gorny2016-10-181-1/+1
| | | | | | | | | | | | Function strerror_r() has different signatures in different implementations of libc: glibc's version returns a char*, while BSDs and musl return a int. libomp unconditionally assumes glibc on Linux and thus fails to compile against musl-libc. This patch addresses this issue. Differential Revision: https://reviews.llvm.org/D25071 llvm-svn: 284492
* Mixed type atomic routines added for capture and update/capture reverse.Jonathan Peyton2016-10-183-1/+452
| | | | | | | | | | | | New mixed type atomic routines added for regular capture operations as well as reverse update/capture operations. LHS - all integer and float types (no complex so far), RHS - float16. Patch by Olga Malysheva Differential Revision: https://reviews.llvm.org/D25275 llvm-svn: 284489
* Code cleanup for the runtime without monitor threadJonathan Peyton2016-10-075-8/+46
| | | | | | | | | | This change removes/disables unnecessary code when monitor thread is not used. Patch by Hansang Bae Differential Revision: https://reviews.llvm.org/D25102 llvm-svn: 283577
* Enable omp_get_schedule() to return static steal type.Jonathan Peyton2016-10-072-4/+6
| | | | | | | As the code is now, calling omp_get_schedule() when OMP_SCHEDULE=static_steal will cause an assert. llvm-svn: 283576
* Insert missing checks for KMP_AFFINITY_CAPABLE() in affinity API.Jonathan Peyton2016-09-301-0/+12
| | | | | | | If affinity is not capable, then these API functions will perform the stubs version. llvm-svn: 282947
* Fix incorrect OpenMP version in Fortran module.Jonathan Peyton2016-09-302-2/+6
| | | | | | | | | | | | | Add check for "45" version to use "201511" string for OpenMP 4.5, otherwise "200505" is used in Fortran module. Also, fix kmp_openmp_version variable (used for the debugger, e.g.) and kmp_version_omp_api that is used in KMP_VERSION=1 output. Patch by Olga Malysheva Differential Revision: https://reviews.llvm.org/D24761 llvm-svn: 282868
* Mixed type atomic routines for unsigned integers.Jonathan Peyton2016-09-272-0/+36
| | | | | | | | | | New routines should be used for atomics like "<int>OP=<float>" when <int> is unsigned. Using functions __kmpc_atomic_fixed<bits>_<op>_fp) produces incorrect results Differential Revision: https://reviews.llvm.org/D24756 llvm-svn: 282509
* Disable monitor thread creation by default.Jonathan Peyton2016-09-279-6/+126
| | | | | | | | | | | | | This change set disables creation of the monitor thread by default. The global counter maintained by the monitor thread was replaced by logic that uses system time directly, and cyclic yielding on Linux target was also removed since there was no clear benefit of using it. Turning on KMP_USE_MONITOR variable (=1) enables creation of monitor thread again if it is really necessary for some reasons. Differential Revision: https://reviews.llvm.org/D24739 llvm-svn: 282507
* [cmake] Make libgomp & libiomp5 alias install optionalMichal Gorny2016-09-141-7/+9
| | | | | | | | | | | Introduce a new LIBOMP_INSTALL_VARIABLES cache variable that can be used to disable creating libgomp and libiomp5 aliases on 'make install'. Those aliases are undesired e.g. on Gentoo systems where libomp is used purely by clang. Differential Revision: https://reviews.llvm.org/D24563 llvm-svn: 281512
* [OMPT] fix task frame information for gomp interfaceJonas Hahnfeld2016-09-143-52/+52
| | | | | | | | | | | Previous differencials D23305-D23310 changed task frame information management only for the kmp interface, but not for the whole gomp interface. This broke some testcases when building with gcc. This patch fixes the broken task frame information for the gomp interface. Patch by Joachim Protze! Differential Revision: https://reviews.llvm.org/D24502 llvm-svn: 281468
* [OMPT] save exit address to lwt if availableJonas Hahnfeld2016-09-141-7/+14
| | | | | | | | | | | In case, the current team is a serialized team (lwt), the frame information should be written to this data structure. Before, nested serialized teams would overwrite the same task information. Patch by Joachim Protze! Differential Revision: https://reviews.llvm.org/D23310 llvm-svn: 281467
* [OMPT] fix __ompt_get_teaminfo to consult lwt entries of parent teamsJonas Hahnfeld2016-09-141-1/+6
| | | | | | | | | | | | | | | The comment already states, that this function should work similarly as __ompt_get_taskinfo. The function only looked for lwt entries of the current team, but not when unrolling the parents. This fix aligns the implementation to __ompt_get_taskinfo. The new test case creates a single theaded team (->lwt) and then a nested active team. Before the innermost print_id(1) would deliver a different team then the outer print_id(0). Patch by Joachim Protze! Differential Revision: https://reviews.llvm.org/D23309 llvm-svn: 281466
* [OMPT] Reset task exit frame when execution is finishedJonas Hahnfeld2016-09-141-0/+6
| | | | | | | | | | | | | | | | The exit address is set when execution of a task is started and should be reset as soon as the execution is finished. Especially for the asm implementation of __kmp_invoke_microtask, resetting in this call would be painfull, so reset just after the invokation. The testcase shows the effect of this patch: Before, the implicit barriers at the end of an implicit task would see an exit address for the implicit task. This barrier is a task scheduling point. Thus, any explicit task scheduled there would see an exit, but no reenter address for the implicit task. Patch by Joachim Protze! Differential Revision: https://reviews.llvm.org/D23307 llvm-svn: 281465
* [OMPT] Align implementation of reenter frame address to latest (frozen) ↵Jonas Hahnfeld2016-09-145-26/+39
| | | | | | | | | | | | | | | | version of OMPT spec The latest OMPT spec changed the semantic of a tasks reenter frame to be the application frame, that will be entered, when the runtime frame drops. Before it was the last frame in the runtime. This doesn't work for some gcc execution pathes or even clang generated code for : Since there is no runtime frame between the executed task and the encountering task. The test case compares exit and reenter addresses against addresses captured in application code Patch by Joachim Protze! Differential Revision: https://reviews.llvm.org/D23305 llvm-svn: 281464
* Fix bitmask upper bounds checkJonathan Peyton2016-09-123-25/+18
| | | | | | | | | | | | Rather than checking KMP_CPU_SETSIZE, which doesn't exist when using Hwloc, we use the get_max_proc() function which can vary based on the operating system. For example on Windows with multiple processor groups, it might be the case that the highest bit possible in the bitmask is not equal to the number of hardware threads on the machine but something higher than that. Differential Revision: https://reviews.llvm.org/D24206 llvm-svn: 281245
* [OPENMP] Implementation of omp_get_default_device and omp_set_default_deviceGeorge Rokos2016-09-097-20/+60
| | | | | | | | | Implementation of missing OpenMP 4.0 API functions omp_get_default_device and omp_set_default_device. Also, added support for the environment variable OMP_DEFAULT_DEVICE. Differential Revision: https://reviews.llvm.org/D23587 llvm-svn: 281065
* Move function into cpp file under KMP_AFFINITY_SUPPORTED guard.Jonathan Peyton2016-09-022-28/+25
| | | | | | | | | | | | When affinity isn't supported, __kmp_affinity_compact doesn't exist. The problem is that in kmp_affinity.h there is a function which uses it without the proper KMP_AFFINITY_SUPPORTED guard around it. The compiler was smart enough to ignore it and the function __kmp_affinity_cmp_Address_child_num which relies on it, but I think it is cleaner to have it under the proper guard. Since the function is only used in the kmp_affinity.cpp file and there aren't any plans to have it elsewhere. I have moved it there. llvm-svn: 280542
* Decouple the kmp_affin_mask_t type from determining if affinity is capableJonathan Peyton2016-09-022-4/+4
| | | | | | | the __kmp_affinity_determine_capable() functions are highly operating system specific. This change has the functions use the type they expect explicitly. llvm-svn: 280538
* Replace a bad instance of __kmp_free() with KMP_CPU_FREE_ARRAY() macro.Jonathan Peyton2016-09-021-1/+1
| | | | llvm-svn: 280530
* Use 'critical' reduction method when 'atomic' is not available but requested.Jonathan Peyton2016-09-022-8/+16
| | | | | | | | | | | | | In case atomic reduction method is not available (the compiler can't generate it) the assertion failure occurred if KMP_FORCE_REDUCTION=atomic was specified. This change replaces the assertion with a warning and sets the reduction method to the default one - 'critical'. Patch by Olga Malysheva Differential Revision: https://reviews.llvm.org/D23990 llvm-svn: 280519
* cleanup: fixed names of dummy arguments of Fortran interfaces declarations, ↵Andrey Churbanov2016-08-174-138/+158
| | | | | | no functional changes done llvm-svn: 278951
* Fixes for hierarchical barrier (possible hang if team size changed).Andrey Churbanov2016-08-111-0/+14
| | | | | | Differential Revision: http://reviews.llvm.org/D23175 llvm-svn: 278332
* kmp_gsupport: Fix library initialization with taskgroupJonas Hahnfeld2016-08-081-1/+1
| | | | | | Differential Revision: https://reviews.llvm.org/D23259 llvm-svn: 278003
* Do not block on explicit task depending on proxy taskJonas Hahnfeld2016-08-082-10/+16
| | | | | | | | | | | | | | | | | | | | | | Consider the following code: int dep; #pragma omp target nowait depend(out: dep) { sleep(1); } #pragma omp task depend(in: dep) { printf("Task with dependency\n"); } printf("Doing some work...\n"); In its current state the runtime will block on the second task and not continue execution. Differential Revision: https://reviews.llvm.org/D23116 llvm-svn: 277992
* __kmp_free_task: Fix for serial explicit tasks producing proxy tasksJonas Hahnfeld2016-08-081-14/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | Consider the following code which may be executed by a serial team: int dep; #pragma omp target nowait depend(out: dep) { sleep(1); } #pragma omp task depend(in: dep) { #pragma omp target nowait { sleep(1); } } Here the explicit task may not be freed until the nested proxy task has finished. The current code hasn't considered this and called __kmp_free_task anyway which triggered an assert because of remaining incomplete children: KMP_DEBUG_ASSERT( TCR_4(taskdata->td_incomplete_child_tasks) == 0 ); Differential Revision: https://reviews.llvm.org/D23115 llvm-svn: 277991
* Fixed x2APIC discovery for 256-processor architectures.Andrey Churbanov2016-08-051-3/+3
| | | | | | | | Mask for value read from ebx register returned by CPUID expanded to 0xFFFF. Differential Revision: https://reviews.llvm.org/D23203 llvm-svn: 277825
* kmp_taskdeps.cpp: Fix debugging outputJonas Hahnfeld2016-08-041-3/+5
| | | | | | | | node->dn.task is only filled after the dependencies are already processed. This currently leads to unhelpful output from KA_TRACE or even a crash if one enables KMP_SUPPORT_GRAPH_OUTPUT. llvm-svn: 277717
* Disable KMP_CANCEL_THREADS on AndroidPirama Arumuga Nainar2016-08-031-0/+6
| | | | | | | | | | | | Summary: Android does not have pthread_cancel. Disable KMP_CANCEL_THREADS if __ANDROID__ is defined. Subscribers: tberghammer, srhines, openmp-commits, danalbert Differential Revision: https://reviews.llvm.org/D23029 llvm-svn: 277618
* Make balanced affinity work on AArch64.Paul Osmialowski2016-07-291-57/+141
| | | | | | | | | | | This patch enables balanced affinity on machines that do not have hardware threads and have cores clustered into packages. In facts, balacing algorithm could be generalized for any arrangement with at least two levels of hierarchy (depth > 1). Differential Revision: https://reviews.llvm.org/D22365 llvm-svn: 277212
* Replace enum types in variadic functions by build-in types.Samuel Antao2016-07-223-5/+17
| | | | | | | | | | | | | | | | | | | | | | | Summary: When compiling the runtime library with clang we get warnings like: ``` error: passing an object that undergoes default argument promotion to 'va_start' has undefined behavior [-Werror,-Wvarargs] va_start( args, id ); ^ note: parameter of type 'kmp_i18n_id_t' (aka 'kmp_i18n_id') is declared here kmp_i18n_id_t id, ``` My understanding is that the va_start macro only gets the promoted type so it won't know what was the exact type of the argument, which can potentially not work for some targets given that the implementation of the the calling convention could not be done properly. This patch fixes that by using a built-in type in the function signature. Reviewers: tlwilmar, jlpeyton, AndreyChurbanov Subscribers: arpith-jacob, carlo.bertolli, caomhin, openmp-commits Differential Revision: https://reviews.llvm.org/D22427 llvm-svn: 276428
* http://reviews.llvm.org/D22134: Implementation of OpenMP 4.5 nonmonotonic ↵Andrey Churbanov2016-07-113-79/+176
| | | | | | schedule modifier llvm-svn: 275052
* Improving EPCC performance when linking with hwlocJonathan Peyton2016-07-083-2/+16
| | | | | | | | | | | | | | When linking with libhwloc, the ORDERED EPCC test slows down on big machines (> 48 cores). Performance analysis showed that a cache thrash was occurring and this padding helps alleviate the problem. Also, inside the main spin-wait loop in kmp_wait_release.h, we can eliminate the references to the global shared variables by instead creating a local variable, oversubscribed and instead checking that. Differential Revision: http://reviews.llvm.org/D22093 llvm-svn: 274894
* D22138: Added more Intel compiler versions as allowed build compilersAndrey Churbanov2016-07-081-0/+4
| | | | llvm-svn: 274854
* D22137: Memory leak fixed by adding missed cleanup of single level array of ↵Andrey Churbanov2016-07-081-2/+4
| | | | | | hot teams info llvm-svn: 274851
* D22136: Memory leaks fixed by adding missed __kmp_free() callsAndrey Churbanov2016-07-081-0/+2
| | | | llvm-svn: 274850
* __kmp_partition_places: Update assertion for new parameter update_master_onlyJonas Hahnfeld2016-07-041-2/+2
| | | | | | | | | | | | If update_master_only is set the place list is not completely traversed and therefore this assertion failed. Make it only trigger if update_master_only is false. (was introduced by D20539) Differential Revision: http://reviews.llvm.org/D21925 llvm-svn: 274482
* Fix checks on schedule structJonathan Peyton2016-07-011-19/+13
| | | | | | | | | | | | This change fixes an error in comparing the existing schedule on the team to the new schedule, in the chunk field. Also added additional checks and used KMP_CHECK_UPDATE where appropriate. Patch by Terry Wilmarth. Differential Revision: http://reviews.llvm.org/D21897 llvm-svn: 274371
OpenPOWER on IntegriCloud