diff options
Diffstat (limited to 'openmp/runtime/src/kmp_taskdeps.cpp')
| -rw-r--r-- | openmp/runtime/src/kmp_taskdeps.cpp | 122 |
1 files changed, 1 insertions, 121 deletions
diff --git a/openmp/runtime/src/kmp_taskdeps.cpp b/openmp/runtime/src/kmp_taskdeps.cpp index 34ea3793d1d..b5d53f1ae68 100644 --- a/openmp/runtime/src/kmp_taskdeps.cpp +++ b/openmp/runtime/src/kmp_taskdeps.cpp @@ -16,6 +16,7 @@ #include "kmp.h" #include "kmp_io.h" #include "kmp_wait_release.h" +#include "kmp_taskdeps.h" #if OMPT_SUPPORT #include "ompt-specific.h" #endif @@ -52,26 +53,6 @@ static inline kmp_depnode_t *__kmp_node_ref(kmp_depnode_t *node) { return node; } -static inline void __kmp_node_deref(kmp_info_t *thread, kmp_depnode_t *node) { - if (!node) - return; - - kmp_int32 n = KMP_ATOMIC_DEC(&node->dn.nrefs) - 1; - if (n == 0) { - KMP_ASSERT(node->dn.nrefs == 0); -#if USE_FAST_MEMORY - __kmp_fast_free(thread, node); -#else - __kmp_thread_free(thread, node); -#endif - } -} - -#define KMP_ACQUIRE_DEPNODE(gtid, n) __kmp_acquire_lock(&(n)->dn.lock, (gtid)) -#define KMP_RELEASE_DEPNODE(gtid, n) __kmp_release_lock(&(n)->dn.lock, (gtid)) - -static void __kmp_depnode_list_free(kmp_info_t *thread, kmp_depnode_list *list); - enum { KMP_DEPHASH_OTHER_SIZE = 97, KMP_DEPHASH_MASTER_SIZE = 997 }; static inline kmp_int32 __kmp_dephash_hash(kmp_intptr_t addr, size_t hsize) { @@ -113,34 +94,6 @@ static kmp_dephash_t *__kmp_dephash_create(kmp_info_t *thread, return h; } -void __kmp_dephash_free_entries(kmp_info_t *thread, kmp_dephash_t *h) { - for (size_t i = 0; i < h->size; i++) { - if (h->buckets[i]) { - kmp_dephash_entry_t *next; - for (kmp_dephash_entry_t *entry = h->buckets[i]; entry; entry = next) { - next = entry->next_in_bucket; - __kmp_depnode_list_free(thread, entry->last_ins); - __kmp_node_deref(thread, entry->last_out); -#if USE_FAST_MEMORY - __kmp_fast_free(thread, entry); -#else - __kmp_thread_free(thread, entry); -#endif - } - h->buckets[i] = 0; - } - } -} - -void __kmp_dephash_free(kmp_info_t *thread, kmp_dephash_t *h) { - __kmp_dephash_free_entries(thread, h); -#if USE_FAST_MEMORY - __kmp_fast_free(thread, h); -#else - __kmp_thread_free(thread, h); -#endif -} - static kmp_dephash_entry * __kmp_dephash_find(kmp_info_t *thread, kmp_dephash_t *h, kmp_intptr_t addr) { kmp_int32 bucket = __kmp_dephash_hash(addr, h->size); @@ -192,22 +145,6 @@ static kmp_depnode_list_t *__kmp_add_node(kmp_info_t *thread, return new_head; } -static void __kmp_depnode_list_free(kmp_info_t *thread, - kmp_depnode_list *list) { - kmp_depnode_list *next; - - for (; list; list = next) { - next = list->next; - - __kmp_node_deref(thread, list->node); -#if USE_FAST_MEMORY - __kmp_fast_free(thread, list); -#else - __kmp_thread_free(thread, list); -#endif - } -} - static inline void __kmp_track_dependence(kmp_depnode_t *source, kmp_depnode_t *sink, kmp_task_t *sink_task) { @@ -386,63 +323,6 @@ static bool __kmp_check_deps(kmp_int32 gtid, kmp_depnode_t *node, return npredecessors > 0 ? true : false; } -void __kmp_release_deps(kmp_int32 gtid, kmp_taskdata_t *task) { - kmp_info_t *thread = __kmp_threads[gtid]; - kmp_depnode_t *node = task->td_depnode; - - if (task->td_dephash) { - KA_TRACE( - 40, ("__kmp_release_deps: T#%d freeing dependencies hash of task %p.\n", - gtid, task)); - __kmp_dephash_free(thread, task->td_dephash); - task->td_dephash = NULL; - } - - if (!node) - return; - - KA_TRACE(20, ("__kmp_release_deps: T#%d notifying successors of task %p.\n", - gtid, task)); - - KMP_ACQUIRE_DEPNODE(gtid, node); - node->dn.task = - NULL; // mark this task as finished, so no new dependencies are generated - KMP_RELEASE_DEPNODE(gtid, node); - - kmp_depnode_list_t *next; - for (kmp_depnode_list_t *p = node->dn.successors; p; p = next) { - kmp_depnode_t *successor = p->node; - kmp_int32 npredecessors = KMP_ATOMIC_DEC(&successor->dn.npredecessors) - 1; - - // successor task can be NULL for wait_depends or because deps are still - // being processed - if (npredecessors == 0) { - KMP_MB(); - if (successor->dn.task) { - KA_TRACE(20, ("__kmp_release_deps: T#%d successor %p of %p scheduled " - "for execution.\n", - gtid, successor->dn.task, task)); - __kmp_omp_task(gtid, successor->dn.task, false); - } - } - - next = p->next; - __kmp_node_deref(thread, p->node); -#if USE_FAST_MEMORY - __kmp_fast_free(thread, p); -#else - __kmp_thread_free(thread, p); -#endif - } - - __kmp_node_deref(thread, node); - - KA_TRACE( - 20, - ("__kmp_release_deps: T#%d all successors of %p notified of completion\n", - gtid, task)); -} - /*! @ingroup TASKING @param loc_ref location of the original task directive |

