| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
[OpenMP] Fix the test issue when libomp is built as a static library (#113522) | 1 年前 | |
[test] Convert test for PR36720 to c89 GCC 4.8.5 defaults to this old C standard. I think we should make the tests pass a newer -std=c99|c11 but that's too intrusive for now... Differential Revision: https://reviews.llvm.org/D50084 llvm-svn: 338490 | 7 年前 | |
[OpenMP] fix endianness dependent definitions in OMP headers for MSVC (#84540) MSVC does not define __BYTE_ORDER__ making the check for BigEndian erroneously evaluate to true and breaking the struct definitions in MSVC compiled builds correspondingly. The fix adds an additional check for whether __BYTE_ORDER__ is defined by the compiler to fix these. --------- Co-authored-by: Vadim Paretsky <b-vadipa@microsoft.com> | 2 年前 | |
[OpenMP] fix endianness dependent definitions in OMP headers for MSVC (#84540) MSVC does not define __BYTE_ORDER__ making the check for BigEndian erroneously evaluate to true and breaking the struct definitions in MSVC compiled builds correspondingly. The fix adds an additional check for whether __BYTE_ORDER__ is defined by the compiler to fix these. --------- Co-authored-by: Vadim Paretsky <b-vadipa@microsoft.com> | 2 年前 | |
kmp_gsupport: Fix library initialization with taskgroup Differential Revision: https://reviews.llvm.org/D23259 llvm-svn: 278003 | 9 年前 | |
[OpenMP] Fixed Bug 49356 Bug 49356 (https://bugs.llvm.org/show_bug.cgi?id=49356) reports crash in the test case tasking/bug_taskwait_detach.cpp, which is caused by the wrong function declaration. gtid in __kmpc_omp_task should be kmp_int32. Reviewed By: AndreyChurbanov Differential Revision: https://reviews.llvm.org/D102584 | 5 年前 | |
[OpenMP][Tests][NFC] Actually check for test outcome The CHECK: line in the test had no effect, because the test does not pipe to FileCheck. Since the test only checks for a single value, encode the result in the return value of the test. | 4 年前 | |
[OpenMP] Fix task state and taskteams for serial teams (#86859) * Serial teams now use a stack (similar to dispatch buffers) * Serial teams always use t_task_team[0] as the task team and the second pointer is a next pointer for the stack t_task_team[1] is interpreted as a stack of task teams where each level is a nested level inner serial team outer serial team [ t_task_team[0] ] -> (task_team) [ t_task_team[0] ] -> (task_team) [ next ] ----------------> [ next ] -> ... * Remove the task state memo stack from thread structure. * Instead of a thread-private stack, use team structure to store th_task_state of the primary thread. When coming out of a parallel, restore the primary thread's task state. The new field in the team structure doesn't cause sizeof(team) to change and is in the cache line which is only read/written by the primary thread. Fixes: #50602 Fixes: #69368 Fixes: #69733 Fixes: #79416 | 2 年前 | |
[OpenMP] Fix task state and taskteams for serial teams (#86859) * Serial teams now use a stack (similar to dispatch buffers) * Serial teams always use t_task_team[0] as the task team and the second pointer is a next pointer for the stack t_task_team[1] is interpreted as a stack of task teams where each level is a nested level inner serial team outer serial team [ t_task_team[0] ] -> (task_team) [ t_task_team[0] ] -> (task_team) [ next ] ----------------> [ next ] -> ... * Remove the task state memo stack from thread structure. * Instead of a thread-private stack, use team structure to store th_task_state of the primary thread. When coming out of a parallel, restore the primary thread's task state. The new field in the team structure doesn't cause sizeof(team) to change and is in the cache line which is only read/written by the primary thread. Fixes: #50602 Fixes: #69368 Fixes: #69733 Fixes: #79416 | 2 年前 | |
[OpenMP] Fix task state and taskteams for serial teams (#86859) * Serial teams now use a stack (similar to dispatch buffers) * Serial teams always use t_task_team[0] as the task team and the second pointer is a next pointer for the stack t_task_team[1] is interpreted as a stack of task teams where each level is a nested level inner serial team outer serial team [ t_task_team[0] ] -> (task_team) [ t_task_team[0] ] -> (task_team) [ next ] ----------------> [ next ] -> ... * Remove the task state memo stack from thread structure. * Instead of a thread-private stack, use team structure to store th_task_state of the primary thread. When coming out of a parallel, restore the primary thread's task state. The new field in the team structure doesn't cause sizeof(team) to change and is in the cache line which is only read/written by the primary thread. Fixes: #50602 Fixes: #69368 Fixes: #69733 Fixes: #79416 | 2 年前 | |
[OpenMP] Fix task state and taskteams for serial teams (#86859) * Serial teams now use a stack (similar to dispatch buffers) * Serial teams always use t_task_team[0] as the task team and the second pointer is a next pointer for the stack t_task_team[1] is interpreted as a stack of task teams where each level is a nested level inner serial team outer serial team [ t_task_team[0] ] -> (task_team) [ t_task_team[0] ] -> (task_team) [ next ] ----------------> [ next ] -> ... * Remove the task state memo stack from thread structure. * Instead of a thread-private stack, use team structure to store th_task_state of the primary thread. When coming out of a parallel, restore the primary thread's task state. The new field in the team structure doesn't cause sizeof(team) to change and is in the cache line which is only read/written by the primary thread. Fixes: #50602 Fixes: #69368 Fixes: #69733 Fixes: #79416 | 2 年前 | |
[OpenMP] Fix nested parallel with tasking (#87309) When a nested parallel region ends, the runtime calls __kmp_join_call(). During this call, the primary thread of the nested parallel region will reset its tid (retval of omp_get_thread_num()) to what it was in the outer parallel region. A data race occurs with the current code when another worker thread from the nested inner parallel region tries to steal tasks from the primary thread's task deque. The worker thread reads the tid value directly from the primary thread's data structure and may read the wrong value. This change just uses the calculated victim_tid from execute_tasks() directly in the steal_task() routine rather than reading tid from the data structure. Fixes: #87307 | 2 年前 | |
[OpenMP][libomp] Fix tasking debug assert (#95823) The debug assert is meant to check that the index is a valid which means the runtime needs to check against the size of the array instead of the number of threads. A free()-ed thread put back in the thread pool may index into anywhere inside the task team's available array from 0 to tt_max_threads potentially. Fixes: #94260 | 2 年前 | |
[OpenMP][libomp] Fix tasking debug assert (#95823) The debug assert is meant to check that the index is a valid which means the runtime needs to check against the size of the array instead of the number of threads. A free()-ed thread put back in the thread pool may index into anywhere inside the task team's available array from 0 to tt_max_threads potentially. Fixes: #94260 | 2 年前 | |
New implementation of OpenMP 5.0 detached tasks. Patch by Alex Duran Differential Revision: https://reviews.llvm.org/D62485 llvm-svn: 363799 | 7 年前 | |
New implementation of OpenMP 5.0 detached tasks. Patch by Alex Duran Differential Revision: https://reviews.llvm.org/D62485 llvm-svn: 363799 | 7 年前 | |
[OpenMP][Tests] Sync struct DEP with the runtime (#69982) struct DEP defined in multiple testcases must correspond to runtime's struct kmp_depend_info. The former defines flags as int, and the latter as kmp_uint8_t. This discrepancy goes unnoticed on little-endian systems, but breaks big-endian ones. Make flags in struct DEP unsigned char. | 2 年前 | |
[OpenMP] libomp: runtime part of omp_all_memory task dependence implementation. New omp_all_memory task dependence type is implemented. Library recognizes the new type via either (dependence_address == NULL && dependence_flag == 0x80) or (dependence_address == SIZE_MAX). A task with new dependence type depends on each preceding task with any dependence type (kind of a dependence barrier). Differential Revision: https://reviews.llvm.org/D108574 | 4 年前 | |
[OpenMP] Optimized trivial multiple edges from task dependency graph From "3.1 Reducing the number of edges" of this [[ https://hal.science/hal-04136674v1/ | paper ]] - Optimization (b) Task (dependency) nodes have a successors list built upon passed dependency. Given the following code, B will be added to A's successors list building the graph A -> B // A # pragma omp task depend(out: x) {} // B # pragma omp task depend(in: x) {} In the following code, B is currently added twice to A's successor list // A # pragma omp task depend(out: x, y) {} // B # pragma omp task depend(in: x, y) {} This patch removes such dupplicates by checking lastly inserted task in A successor list. Authored by: Romain Pereira (rpereira-dev) Differential Revision: https://reviews.llvm.org/D158544 | 2 年前 | |
[OpenMP] Optimized trivial multiple edges from task dependency graph From "3.1 Reducing the number of edges" of this [[ https://hal.science/hal-04136674v1/ | paper ]] - Optimization (b) Task (dependency) nodes have a successors list built upon passed dependency. Given the following code, B will be added to A's successors list building the graph A -> B // A # pragma omp task depend(out: x) {} // B # pragma omp task depend(in: x) {} In the following code, B is currently added twice to A's successor list // A # pragma omp task depend(out: x, y) {} // B # pragma omp task depend(in: x, y) {} This patch removes such dupplicates by checking lastly inserted task in A successor list. Authored by: Romain Pereira (rpereira-dev) Differential Revision: https://reviews.llvm.org/D158544 | 2 年前 | |
[OpenMP] Optimized trivial multiple edges from task dependency graph From "3.1 Reducing the number of edges" of this [[ https://hal.science/hal-04136674v1/ | paper ]] - Optimization (b) Task (dependency) nodes have a successors list built upon passed dependency. Given the following code, B will be added to A's successors list building the graph A -> B // A # pragma omp task depend(out: x) {} // B # pragma omp task depend(in: x) {} In the following code, B is currently added twice to A's successor list // A # pragma omp task depend(out: x, y) {} // B # pragma omp task depend(in: x, y) {} This patch removes such dupplicates by checking lastly inserted task in A successor list. Authored by: Romain Pereira (rpereira-dev) Differential Revision: https://reviews.llvm.org/D158544 | 2 年前 | |
[OpenMP] NFC: Fix trivial typo Differential Revision: https://reviews.llvm.org/D77430 | 6 年前 | |
[OpenMP] NFC: Fix trivial typo Differential Revision: https://reviews.llvm.org/D77430 | 6 年前 | |
[OpenMP] NFC: Fix trivial typo Differential Revision: https://reviews.llvm.org/D77430 | 6 年前 | |
[OpenMP] NFC: Fix trivial typo Differential Revision: https://reviews.llvm.org/D77430 | 6 年前 | |
[OpenMP] Remove OMP spec versioning Remove all older OMP spec versioning from the runtime and build system. Patch by Terry Wilmarth Differential Revision: https://reviews.llvm.org/D64534 llvm-svn: 365963 | 6 年前 | |
Remove REQUIRES OMP spec version within lit tests This is a follow up patch to D64534 (r365963) which removed all OMP spec versioning within the OpenMP runtime codebase. This patch removes REQUIRES: openmp-x.y lines from lit tests. llvm-svn: 366341 | 6 年前 | |
[OpenMP] Add strict mode in num_tasks and grainsize This patch adds new API __kmpc_taskloop_5 to accomadate strict modifier (introduced in OpenMP 5.1) in num_tasks and grainsize clause. Differential Revision: https://reviews.llvm.org/D92352 | 5 年前 | |
[OpenMP] libomp: runtime part of omp_all_memory task dependence implementation. New omp_all_memory task dependence type is implemented. Library recognizes the new type via either (dependence_address == NULL && dependence_flag == 0x80) or (dependence_address == SIZE_MAX). A task with new dependence type depends on each preceding task with any dependence type (kind of a dependence barrier). Differential Revision: https://reviews.llvm.org/D108574 | 4 年前 | |
[OpenMP] libomp: taskwait depend implementation fixed. Fix for https://bugs.llvm.org/show_bug.cgi?id=49723. Eliminated references from task dependency hash to node allocated on stack, thus eliminated accesses to stale memory. So the node now never freed. Uncommented assertion which triggered when stale memory accessed. Removed unneeded ref count increment for stack allocated node. Differential Revision: https://reviews.llvm.org/D106705 | 4 年前 | |
[OpenMP][Tests] Sync struct DEP with the runtime (#69982) struct DEP defined in multiple testcases must correspond to runtime's struct kmp_depend_info. The former defines flags as int, and the latter as kmp_uint8_t. This discrepancy goes unnoticed on little-endian systems, but breaks big-endian ones. Make flags in struct DEP unsigned char. | 2 年前 | |
Bug fix for hang when tasks used in nested parallel Bug fix for hang when omp task and nested parallelism used together. Still some problem remains with task state saving/restoring, but user's case works fine now. All tasking unit tests passed as well. Patch by Andrey Churbanov Differential Revision: http://reviews.llvm.org/D21558 llvm-svn: 273297 | 9 年前 | |
Add test case for nested creation of tasks For discussion in D23115 llvm-svn: 277730 | 9 年前 | |
[OpenMP] Fixup bugs found during fuzz testing (#143455) A lot of these only trip when using sanitizers with the library. * Insert forgotten free()s * Change (-1) << amount to 0xffffffffu as left shifting a negative is UB * Fixup integer parser to return INT_MAX when parsing huge string of digits. e.g., 452523423423423423 returns INT_MAX * Fixup range parsing for affinity mask so integer overflow does not occur * Don't assert when branch bits are 0, instead warn user that is invalid and use the default value. * Fixup kmp_set_defaults() so the C version only uses null terminated strings and the Fortran version uses the string + size version. * Make sure the KMP_ALIGN_ALLOC is power of two, otherwise use CACHE_LINE. * Disallow ability to set KMP_TASKING=1 (task barrier) this doesn't work and hasn't worked for a long time. * Limit KMP_HOT_TEAMS_MAX_LEVEL to 1024, an array is allocated based on this value. * Remove integer values for OMP_PROC_BIND. The specification only allows strings and CSV of strings. * Fix setting KMP_AFFINITY=disabled + OMP_DISPLAY_AFFINITY=TRUE | 1 年前 | |
[OpenMP][Tests] Sync struct DEP with the runtime (#69982) struct DEP defined in multiple testcases must correspond to runtime's struct kmp_depend_info. The former defines flags as int, and the latter as kmp_uint8_t. This discrepancy goes unnoticed on little-endian systems, but breaks big-endian ones. Make flags in struct DEP unsigned char. | 2 年前 | |
[OpenMP][Tests] Sync struct DEP with the runtime (#69982) struct DEP defined in multiple testcases must correspond to runtime's struct kmp_depend_info. The former defines flags as int, and the latter as kmp_uint8_t. This discrepancy goes unnoticed on little-endian systems, but breaks big-endian ones. Make flags in struct DEP unsigned char. | 2 年前 | |
[OpenMP] Introduce GOMP mutexinoutset in the runtime Encapsulate GOMP task dependencies in separate class and introduce the new mutexinoutset dependency type. This separate class allows future GOMP task APIs easier access to the task dependency functionality and better ability to propagate new dependency types to all existing GOMP task APIs which use task dependencies. Differential Revision: https://reviews.llvm.org/D87267 | 5 年前 | |
[OpenMP] Add support for GOMP depobj GOMP depobjs are represented as a two intptr_t array. The first element is the base address of the dependency and the second element is the flag indicating the type the depobj represents. Differential Revision: https://reviews.llvm.org/D108790 | 4 年前 | |
[OpenMP] support depend clause for taskwait directive, by Deepak Eachempati. This patch adds clang (parsing, sema, serialization, codegen) support for the 'depend' clause on the 'taskwait' directive. Reviewed By: ABataev Differential Revision: https://reviews.llvm.org/D113540 | 4 年前 | |
[OpenMP] libomp: fixed implementation of OMP 5.1 inoutset task dependence type Refactored code of dependence processing and added new inoutset dependence type. Compiler can set dependence flag to 0x8 when call __kmpc_omp_task_with_deps. All dependence flags library gets so far and corresponding dependence types: 1 - IN, 2 - OUT, 3 - INOUT, 4 - MUTEXINOUTSET, 8 - INOUTSET. Differential Revision: https://reviews.llvm.org/D97085 | 5 年前 | |
[OpenMP][tests][NFC] Update test status for gcc 11 and 12 gcc 11 introduced support for depend clause, but the gomp interface of libomp does not yet handle the information. Also remove -fopenmp-version=50, which is no longer needed for clang, but not supported by gcc. | 4 年前 | |
[OpenMP][Tests] fix data race in an OpenMP runtime test Reviewed by: AndreyChurbanov Differential Revision: https://reviews.llvm.org/D81804 | 6 年前 | |
[OpenMP] Implement task record and replay mechanism This patch implements the "task record and replay" mechanism. The idea is to be able to store tasks and their dependencies in the runtime so that we do not pay the cost of task creation and dependency resolution for future executions. The objective is to improve fine-grained task performance, both for those from "omp task" and "taskloop". The entry point of the recording phase is __kmpc_start_record_task, and the end of record is triggered by __kmpc_end_record_task. Tasks encapsulated between a record start and a record end are saved, meaning that the runtime stores their dependencies and structures, referred to as TDG, in order to replay them in subsequent executions. In these TDG replays, we start the execution by scheduling all root tasks (tasks that do not have input dependencies), and there will be no involvement of a hash table to track the dependencies, yet tasks do not need to be created again. At the beginning of __kmpc_start_record_task, we must check if a TDG has already been recorded. If yes, the function returns 0 and starts to replay the TDG by calling __kmp_exec_tdg; if not, we start to record, and the function returns 1. An integer uniquely identifies TDGs. Currently, this identifier needs to be incremented manually in the source code. Still, depending on how this feature would eventually be used in the library, the caller function must do it; also, the caller function needs to implement a mechanism to skip the associated region, according to the return value of __kmpc_start_record_task. Reviewed By: tianshilei1992 Differential Revision: https://reviews.llvm.org/D146642 | 3 年前 | |
[OpenMP] Implement task record and replay mechanism This patch implements the "task record and replay" mechanism. The idea is to be able to store tasks and their dependencies in the runtime so that we do not pay the cost of task creation and dependency resolution for future executions. The objective is to improve fine-grained task performance, both for those from "omp task" and "taskloop". The entry point of the recording phase is __kmpc_start_record_task, and the end of record is triggered by __kmpc_end_record_task. Tasks encapsulated between a record start and a record end are saved, meaning that the runtime stores their dependencies and structures, referred to as TDG, in order to replay them in subsequent executions. In these TDG replays, we start the execution by scheduling all root tasks (tasks that do not have input dependencies), and there will be no involvement of a hash table to track the dependencies, yet tasks do not need to be created again. At the beginning of __kmpc_start_record_task, we must check if a TDG has already been recorded. If yes, the function returns 0 and starts to replay the TDG by calling __kmp_exec_tdg; if not, we start to record, and the function returns 1. An integer uniquely identifies TDGs. Currently, this identifier needs to be incremented manually in the source code. Still, depending on how this feature would eventually be used in the library, the caller function must do it; also, the caller function needs to implement a mechanism to skip the associated region, according to the return value of __kmpc_start_record_task. Reviewed By: tianshilei1992 Differential Revision: https://reviews.llvm.org/D146642 | 3 年前 | |
[OpenMP] Fix taskgraph dependency tracking, memory access, and initialization (#136837) This commit resolves multiple issues in the OpenMP taskgraph implementation: - Fix a potential use of uninitialized is_taskgraph and tdg fields when a task is created outside of a taskgraph construct. - Fix use of task ID field when accessing the taskgraph’s record_map. - Fix resizing and copying of the successors array when its capacity is exceeded. Fixes memory management flaws, invalid memory accesses, and uninitialized data risks in taskgraph operations. | 1 年前 | |
[OpenMP] Implement task record and replay mechanism This patch implements the "task record and replay" mechanism. The idea is to be able to store tasks and their dependencies in the runtime so that we do not pay the cost of task creation and dependency resolution for future executions. The objective is to improve fine-grained task performance, both for those from "omp task" and "taskloop". The entry point of the recording phase is __kmpc_start_record_task, and the end of record is triggered by __kmpc_end_record_task. Tasks encapsulated between a record start and a record end are saved, meaning that the runtime stores their dependencies and structures, referred to as TDG, in order to replay them in subsequent executions. In these TDG replays, we start the execution by scheduling all root tasks (tasks that do not have input dependencies), and there will be no involvement of a hash table to track the dependencies, yet tasks do not need to be created again. At the beginning of __kmpc_start_record_task, we must check if a TDG has already been recorded. If yes, the function returns 0 and starts to replay the TDG by calling __kmp_exec_tdg; if not, we start to record, and the function returns 1. An integer uniquely identifies TDGs. Currently, this identifier needs to be incremented manually in the source code. Still, depending on how this feature would eventually be used in the library, the caller function must do it; also, the caller function needs to implement a mechanism to skip the associated region, according to the return value of __kmpc_start_record_task. Reviewed By: tianshilei1992 Differential Revision: https://reviews.llvm.org/D146642 | 3 年前 | |
[OpenMP] Implement printing TDGs to dot files This patch implements the "__kmp_print_tdg_dot" function, that prints a task dependency graph into a dot file containing the tasks and their dependencies. It is activated through a new environment variable "KMP_TDG_DOT" Reviewed By: tianshilei1992 Differential Revision: https://reviews.llvm.org/D150962 | 3 年前 | |
[OpenMP] Implement task record and replay mechanism This patch implements the "task record and replay" mechanism. The idea is to be able to store tasks and their dependencies in the runtime so that we do not pay the cost of task creation and dependency resolution for future executions. The objective is to improve fine-grained task performance, both for those from "omp task" and "taskloop". The entry point of the recording phase is __kmpc_start_record_task, and the end of record is triggered by __kmpc_end_record_task. Tasks encapsulated between a record start and a record end are saved, meaning that the runtime stores their dependencies and structures, referred to as TDG, in order to replay them in subsequent executions. In these TDG replays, we start the execution by scheduling all root tasks (tasks that do not have input dependencies), and there will be no involvement of a hash table to track the dependencies, yet tasks do not need to be created again. At the beginning of __kmpc_start_record_task, we must check if a TDG has already been recorded. If yes, the function returns 0 and starts to replay the TDG by calling __kmp_exec_tdg; if not, we start to record, and the function returns 1. An integer uniquely identifies TDGs. Currently, this identifier needs to be incremented manually in the source code. Still, depending on how this feature would eventually be used in the library, the caller function must do it; also, the caller function needs to implement a mechanism to skip the associated region, according to the return value of __kmpc_start_record_task. Reviewed By: tianshilei1992 Differential Revision: https://reviews.llvm.org/D146642 | 3 年前 | |
Fix for bugzilla https://bugs.llvm.org/show_bug.cgi?id=39970 Broken tests fixed Differential Revision: https://reviews.llvm.org/D55598 llvm-svn: 349017 | 7 年前 | |
[OpenMP] Add LIT test on task depend clause The working of depend clause with iterator modifier can be correctly tested by means of execution tests and not at the LLVM IR level. These tests are imported/inspired from the SOLLVE tests. SOLLVE repo: https://github.com/SOLLVE/sollve_vv Differential Revision: https://reviews.llvm.org/D146706 | 3 年前 | |
[openmp] Disable tests flaky on Debian https://bugs.llvm.org/show_bug.cgi?id=45397 | 6 年前 | |
Remove trailing whitespace from tests llvm-svn: 269841 | 10 年前 | |
Remove trailing whitespace from tests llvm-svn: 269841 | 10 年前 | |
Remove trailing whitespace from tests llvm-svn: 269841 | 10 年前 | |
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 | 10 年前 | |
Remove REQUIRES OMP spec version within lit tests This is a follow up patch to D64534 (r365963) which removed all OMP spec versioning within the OpenMP runtime codebase. This patch removes REQUIRES: openmp-x.y lines from lit tests. llvm-svn: 366341 | 6 年前 | |
[OpenMP] libomp: implemented task priorities. Before this patch task priorities were ignored, that was a valid implementation as the task priority is a hint according to OpenMP specification. Implemented shared list of sorted (high -> low) task deques one per task priority value. Tasks execution changed to first check if priority tasks ready for execution exist, and these tasks executed before others; otherwise usual tasks execution mechanics work. Differential Revision: https://reviews.llvm.org/D119676 | 4 年前 | |
[OpenMP] Insert missing variable update inside loop While loop within task priority code did not have necessary update of variable which could lead to hangs if two threads collided when both attempted to execute the compare_and_exchange. Fixes: https://github.com/llvm/llvm-project/issues/62867 Differential Revision: https://reviews.llvm.org/D151138 | 3 年前 | |
Remove trailing whitespace from tests llvm-svn: 269841 | 10 年前 | |
[OpenMP] Implement GOMP task reductions Implement the remaining GOMP_* functions to support task reductions in taskgroup, parallel, loop, and taskloop constructs. The unused mem argument to many of the work-sharing constructs has to do with the scan() directive/ inscan() modifier. If mem is set, each function will call KMP_FATAL() and tell the user scan/inscan is unsupported. The GOMP reduction implementation is kept separate from our implementation because of how GOMP presents reduction data and computes the reductions. GOMP expects the privatized copies to be present even after a #pragma omp parallel reduction(task:...) region has ended so the data is stored inside GOMP's uintptr_t* data pseudo-structure. This style is tightly coupled with GCC compiler codegen. There also isn't any init(), combiner(), fini() functions in GOMP's codegen so the two implementations were to disparate to try to wrap GOMP's around our own. Differential Revision: https://reviews.llvm.org/D98806 | 5 年前 | |
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 | 10 年前 | |
[OpenMP] NFC: Fix trivial typos in comments Submitted by: kiszk Differential Revision: https://reviews.llvm.org/D72171 | 6 年前 | |
[OpenMP] NFC: Fix trivial typos in comments Submitted by: kiszk Differential Revision: https://reviews.llvm.org/D72171 | 6 年前 | |
[openmp] Fixed taskloop recursive splitting so that taskloop tasks have same parent tasks. Differential Revision: https://reviews.llvm.org/D80577 | 6 年前 | |
[openmp] [test] Skip kernel-breaking tests on NetBSD The omp_taskloop_num_tasks and omp_taskwait have deadlooped on the NetBSD buildbot previously, practically hanging the host running it. Disable them until we can find a good solution, or make the kernel less fragile. llvm-svn: 361825 | 7 年前 | |
Fix for bugzilla https://bugs.llvm.org/show_bug.cgi?id=39970 Broken tests fixed Differential Revision: https://reviews.llvm.org/D55598 llvm-svn: 349017 | 7 年前 | |
[OpenMP] Implement GOMP task reductions Implement the remaining GOMP_* functions to support task reductions in taskgroup, parallel, loop, and taskloop constructs. The unused mem argument to many of the work-sharing constructs has to do with the scan() directive/ inscan() modifier. If mem is set, each function will call KMP_FATAL() and tell the user scan/inscan is unsupported. The GOMP reduction implementation is kept separate from our implementation because of how GOMP presents reduction data and computes the reductions. GOMP expects the privatized copies to be present even after a #pragma omp parallel reduction(task:...) region has ended so the data is stored inside GOMP's uintptr_t* data pseudo-structure. This style is tightly coupled with GCC compiler codegen. There also isn't any init(), combiner(), fini() functions in GOMP's codegen so the two implementations were to disparate to try to wrap GOMP's around our own. Differential Revision: https://reviews.llvm.org/D98806 | 5 年前 | |
[OpenMP] Implement GOMP task reductions Implement the remaining GOMP_* functions to support task reductions in taskgroup, parallel, loop, and taskloop constructs. The unused mem argument to many of the work-sharing constructs has to do with the scan() directive/ inscan() modifier. If mem is set, each function will call KMP_FATAL() and tell the user scan/inscan is unsupported. The GOMP reduction implementation is kept separate from our implementation because of how GOMP presents reduction data and computes the reductions. GOMP expects the privatized copies to be present even after a #pragma omp parallel reduction(task:...) region has ended so the data is stored inside GOMP's uintptr_t* data pseudo-structure. This style is tightly coupled with GCC compiler codegen. There also isn't any init(), combiner(), fini() functions in GOMP's codegen so the two implementations were to disparate to try to wrap GOMP's around our own. Differential Revision: https://reviews.llvm.org/D98806 | 5 年前 | |
[OpenMP] Implement GOMP task reductions Implement the remaining GOMP_* functions to support task reductions in taskgroup, parallel, loop, and taskloop constructs. The unused mem argument to many of the work-sharing constructs has to do with the scan() directive/ inscan() modifier. If mem is set, each function will call KMP_FATAL() and tell the user scan/inscan is unsupported. The GOMP reduction implementation is kept separate from our implementation because of how GOMP presents reduction data and computes the reductions. GOMP expects the privatized copies to be present even after a #pragma omp parallel reduction(task:...) region has ended so the data is stored inside GOMP's uintptr_t* data pseudo-structure. This style is tightly coupled with GCC compiler codegen. There also isn't any init(), combiner(), fini() functions in GOMP's codegen so the two implementations were to disparate to try to wrap GOMP's around our own. Differential Revision: https://reviews.llvm.org/D98806 | 5 年前 | |
[OpenMP] Implement GOMP task reductions Implement the remaining GOMP_* functions to support task reductions in taskgroup, parallel, loop, and taskloop constructs. The unused mem argument to many of the work-sharing constructs has to do with the scan() directive/ inscan() modifier. If mem is set, each function will call KMP_FATAL() and tell the user scan/inscan is unsupported. The GOMP reduction implementation is kept separate from our implementation because of how GOMP presents reduction data and computes the reductions. GOMP expects the privatized copies to be present even after a #pragma omp parallel reduction(task:...) region has ended so the data is stored inside GOMP's uintptr_t* data pseudo-structure. This style is tightly coupled with GCC compiler codegen. There also isn't any init(), combiner(), fini() functions in GOMP's codegen so the two implementations were to disparate to try to wrap GOMP's around our own. Differential Revision: https://reviews.llvm.org/D98806 | 5 年前 | |
[OpenMP] Fix task state and taskteams for serial teams (#86859) * Serial teams now use a stack (similar to dispatch buffers) * Serial teams always use t_task_team[0] as the task team and the second pointer is a next pointer for the stack t_task_team[1] is interpreted as a stack of task teams where each level is a nested level inner serial team outer serial team [ t_task_team[0] ] -> (task_team) [ t_task_team[0] ] -> (task_team) [ next ] ----------------> [ next ] -> ... * Remove the task state memo stack from thread structure. * Instead of a thread-private stack, use team structure to store th_task_state of the primary thread. When coming out of a parallel, restore the primary thread's task state. The new field in the team structure doesn't cause sizeof(team) to change and is in the cache line which is only read/written by the primary thread. Fixes: #50602 Fixes: #69368 Fixes: #69733 Fixes: #79416 | 2 年前 | |
[OpenMP] Fix if0 task with dependencies in the runtime The current GOMP interface for serialized tasks does not take into account task dependencies. Add the check and wait for dependencies. Fixes: https://bugs.llvm.org/show_bug.cgi?id=46573 Differential Revision: https://reviews.llvm.org/D87271 | 5 年前 | |
[OpenMP] Fix if0 task with dependencies in the runtime The current GOMP interface for serialized tasks does not take into account task dependencies. Add the check and wait for dependencies. Fixes: https://bugs.llvm.org/show_bug.cgi?id=46573 Differential Revision: https://reviews.llvm.org/D87271 | 5 年前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 年前 | ||
| 7 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 9 年前 | ||
| 5 年前 | ||
| 4 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 2 年前 | ||
| 4 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 6 年前 | ||
| 6 年前 | ||
| 6 年前 | ||
| 6 年前 | ||
| 6 年前 | ||
| 6 年前 | ||
| 5 年前 | ||
| 4 年前 | ||
| 4 年前 | ||
| 2 年前 | ||
| 9 年前 | ||
| 9 年前 | ||
| 1 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 5 年前 | ||
| 4 年前 | ||
| 4 年前 | ||
| 5 年前 | ||
| 4 年前 | ||
| 6 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 1 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 7 年前 | ||
| 3 年前 | ||
| 6 年前 | ||
| 10 年前 | ||
| 10 年前 | ||
| 10 年前 | ||
| 10 年前 | ||
| 6 年前 | ||
| 4 年前 | ||
| 3 年前 | ||
| 10 年前 | ||
| 5 年前 | ||
| 10 年前 | ||
| 6 年前 | ||
| 6 年前 | ||
| 6 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 5 年前 | ||
| 5 年前 | ||
| 5 年前 | ||
| 5 年前 | ||
| 2 年前 | ||
| 5 年前 | ||
| 5 年前 |