]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Revert "OpenACC reference count consistency checking"
authorJulian Brown <julian@codesourcery.com>
Fri, 31 Jul 2020 15:22:00 +0000 (08:22 -0700)
committerKwok Cheung Yeung <kcy@codesourcery.com>
Thu, 22 Apr 2021 17:14:28 +0000 (10:14 -0700)
This reverts commit 56ebcdff802678b11deb1a9c3f6d20d33498e944.

libgomp/libgomp.h
libgomp/oacc-parallel.c
libgomp/target.c

index d22210b4cbd0ae7e82d3acf2a8010a0f7bb86658..6f2e0f134167ab8464dd88fd744126c73e2a47f5 100644 (file)
@@ -988,17 +988,9 @@ struct target_var_desc {
   uintptr_t length;
 };
 
-/* Uncomment to enable reference-count consistency checking (for development
-   use only).  */
-//#define RC_CHECKING 1
-
 struct target_mem_desc {
   /* Reference count.  */
   uintptr_t refcount;
-#ifdef RC_CHECKING
-  uintptr_t refcount_chk;
-  bool mark;
-#endif
   /* All the splay nodes allocated together.  */
   splay_tree_node array;
   /* Start of the target region.  */
@@ -1054,10 +1046,6 @@ struct splay_tree_key_s {
   uintptr_t refcount;
   /* Dynamic reference count.  */
   uintptr_t dynamic_refcount;
-#ifdef RC_CHECKING
-  /* The recalculated reference count, for verification.  */
-  uintptr_t refcount_chk;
-#endif
   struct splay_tree_aux *aux;
 };
 
@@ -1211,12 +1199,6 @@ extern void gomp_detach_pointer (struct gomp_device_descr *,
                                 struct goacc_asyncqueue *, splay_tree_key,
                                 uintptr_t, bool, struct gomp_coalesce_buf *);
 
-#ifdef RC_CHECKING
-extern void dump_tgt (const char *, struct target_mem_desc *);
-extern void gomp_rc_check (struct gomp_device_descr *,
-                          struct target_mem_desc *);
-#endif
-
 extern struct target_mem_desc *gomp_map_vars (struct gomp_device_descr *,
                                              size_t, void **, void **,
                                              size_t *, void *, bool,
index 9ac9a81469cba8575997eaaa2745fa38b4aba457..56aee1874fef37a0978c42063f86bafd0b26a36e 100644 (file)
@@ -545,15 +545,6 @@ GOACC_parallel_keyed (int flags_m, void (*fn) (void *),
                               nca_info);
   free (nca_info);
 
-#ifdef RC_CHECKING
-  gomp_mutex_lock (&acc_dev->lock);
-  assert (tgt);
-  dump_tgt (__FUNCTION__, tgt);
-  tgt->prev = thr->mapped_data;
-  gomp_rc_check (acc_dev, tgt);
-  gomp_mutex_unlock (&acc_dev->lock);
-#endif
-
   if (profiling_p)
     {
       prof_info.event_type = acc_ev_enter_data_end;
@@ -630,12 +621,6 @@ GOACC_parallel_keyed (int flags_m, void (*fn) (void *),
       thr->prof_info = NULL;
       thr->api_info = NULL;
     }
-
-#ifdef RC_CHECKING
-  gomp_mutex_lock (&acc_dev->lock);
-  gomp_rc_check (acc_dev, thr->mapped_data);
-  gomp_mutex_unlock (&acc_dev->lock);
-#endif
 }
 
 /* Legacy entry point (GCC 5).  Only provide host fallback execution.  */
@@ -751,12 +736,6 @@ GOACC_data_start (int flags_m, size_t mapnum,
       tgt->prev = thr->mapped_data;
       thr->mapped_data = tgt;
 
-#ifdef RC_CHECKING
-      gomp_mutex_lock (&acc_dev->lock);
-      gomp_rc_check (acc_dev, thr->mapped_data);
-      gomp_mutex_unlock (&acc_dev->lock);
-#endif
-
       goto out_prof;
     }
 
@@ -851,12 +830,6 @@ GOACC_data_end (void)
   gomp_unmap_vars (tgt, true);
   gomp_debug (0, "  %s: mappings restored\n", __FUNCTION__);
 
-#ifdef RC_CHECKING
-  gomp_mutex_lock (&thr->dev->lock);
-  gomp_rc_check (thr->dev, thr->mapped_data);
-  gomp_mutex_unlock (&thr->dev->lock);
-#endif
-
   if (profiling_p)
     {
       prof_info.event_type = acc_ev_exit_data_end;
@@ -1036,12 +1009,6 @@ GOACC_update (int flags_m, size_t mapnum,
       thr->prof_info = NULL;
       thr->api_info = NULL;
     }
-
-#ifdef RC_CHECKING
-  gomp_mutex_lock (&acc_dev->lock);
-  gomp_rc_check (acc_dev, thr->mapped_data);
-  gomp_mutex_unlock (&acc_dev->lock);
-#endif
 }
 
 
index 851609586bd82155a99ebc0e655c3a93a601bcb5..b4db0c2b453d30ca585cd92e7ce2e8079ab68575 100644 (file)
@@ -38,9 +38,6 @@
 #include <string.h>
 #include <assert.h>
 #include <errno.h>
-#ifdef RC_CHECKING
-#include <stdio.h>
-#endif
 
 #ifdef PLUGIN_SUPPORT
 #include <dlfcn.h>
@@ -368,185 +365,6 @@ gomp_free_device_memory (struct gomp_device_descr *devicep, void *devptr)
     }
 }
 
-#ifdef RC_CHECKING
-void
-dump_tgt (const char *where, struct target_mem_desc *tgt)
-{
-  if (!getenv ("GOMP_DEBUG_TGT"))
-    return;
-
-  fprintf (stderr, "%s: %s: tgt=%p\n", __FUNCTION__, where, (void*) tgt);
-  fprintf (stderr, "refcount=%d\n", (int) tgt->refcount);
-  fprintf (stderr, "tgt_start=%p\n", (void*) tgt->tgt_start);
-  fprintf (stderr, "tgt_end=%p\n", (void*) tgt->tgt_end);
-  fprintf (stderr, "to_free=%p\n", tgt->to_free);
-  fprintf (stderr, "list_count=%d\n", (int) tgt->list_count);
-  for (int i = 0; i < tgt->list_count; i++)
-    {
-      fprintf (stderr, "list item %d:\n", i);
-      fprintf (stderr, "  key: %p\n", (void*) tgt->list[i].key);
-      if (tgt->list[i].key)
-       {
-         fprintf (stderr, "  key.host_start=%p\n",
-                  (void*) tgt->list[i].key->host_start);
-         fprintf (stderr, "  key.host_end=%p\n",
-                  (void*) tgt->list[i].key->host_end);
-         fprintf (stderr, "  key.tgt=%p\n", (void*) tgt->list[i].key->tgt);
-         fprintf (stderr, "  key.offset=%d\n",
-                  (int) tgt->list[i].key->tgt_offset);
-         fprintf (stderr, "  key.refcount=%d\n",
-                  (int) tgt->list[i].key->refcount);
-         if (tgt->list[i].key->refcount == REFCOUNT_LINK)
-           fprintf (stderr, "  key.aux.link_key=%p\n",
-                    (void*) tgt->list[i].key->aux->link_key);
-         else
-           {
-             fprintf (stderr, "  key.virtual_refcount=%d\n",
-                      (int) tgt->list[i].key->virtual_refcount);
-             fprintf (stderr, "  key.aux.attach_count=%p\n",
-                      (void*) tgt->list[i].key->aux->attach_count);
-           }
-       }
-    }
-  fprintf (stderr, "\n");
-}
-
-static void
-rc_check_clear (splay_tree_node node)
-{
-  splay_tree_key k = &node->key;
-
-  k->refcount_chk = 0;
-  k->tgt->refcount_chk = 0;
-  k->tgt->mark = false;
-
-  if (node->left)
-    rc_check_clear (node->left);
-  if (node->right)
-    rc_check_clear (node->right);
-}
-
-static void
-rc_check_count (splay_tree_node node)
-{
-  splay_tree_key k = &node->key;
-  struct target_mem_desc *t;
-
-  /* Add virtual reference counts ("acc enter data", etc.) for this key.  */
-  k->refcount_chk += k->virtual_refcount;
-
-  t = k->tgt;
-  t->refcount_chk++;
-
-  if (!t->mark)
-    {
-      for (int i = 0; i < t->list_count; i++)
-       if (t->list[i].key)
-         t->list[i].key->refcount_chk++;
-
-      t->mark = true;
-    }
-
-  if (node->left)
-    rc_check_count (node->left);
-  if (node->right)
-    rc_check_count (node->right);
-}
-
-static bool
-rc_check_verify (splay_tree_node node, bool noisy, bool errors)
-{
-  splay_tree_key k = &node->key;
-  struct target_mem_desc *t;
-
-  if (k->refcount != REFCOUNT_INFINITY)
-    {
-      if (noisy)
-       fprintf (stderr, "key %p (%p..+%d): rc=%d/%d, virt_rc=%d\n", k,
-                (void *) k->host_start, (int) (k->host_end - k->host_start),
-                (int) k->refcount, (int) k->refcount_chk,
-                (int) k->virtual_refcount);
-
-      if (k->refcount != k->refcount_chk)
-       {
-         if (noisy)
-           fprintf (stderr, "  -- key refcount mismatch!\n");
-         errors = true;
-       }
-
-      t = k->tgt;
-
-      if (noisy)
-       fprintf (stderr, "tgt %p: rc=%d/%d\n", t, (int) t->refcount,
-                (int) t->refcount_chk);
-
-      if (t->refcount != t->refcount_chk)
-       {
-         if (noisy)
-           fprintf (stderr,
-                    "  -- target memory descriptor refcount mismatch!\n");
-         errors = true;
-       }
-    }
-
-  if (node->left)
-    errors |= rc_check_verify (node->left, noisy, errors);
-  if (node->right)
-    errors |= rc_check_verify (node->right, noisy, errors);
-
-  return errors;
-}
-
-/* Call with device locked.  */
-
-attribute_hidden void
-gomp_rc_check (struct gomp_device_descr *devicep, struct target_mem_desc *tgt)
-{
-  splay_tree sp = &devicep->mem_map;
-
-  bool noisy = getenv ("GOMP_DEBUG_TGT") != 0;
-
-  if (noisy)
-    fprintf (stderr, "\n*** GOMP_RC_CHECK ***\n\n");
-
-  if (sp->root)
-    {
-      rc_check_clear (sp->root);
-
-      for (struct target_mem_desc *t = tgt; t; t = t->prev)
-       {
-         t->refcount_chk = 0;
-         t->mark = false;
-       }
-
-      /* Add references for interconnected splay-tree keys.  */
-      rc_check_count (sp->root);
-
-      /* Add references for the tgt for a currently-executing kernel and/or
-        any enclosing data directives.  */
-      for (struct target_mem_desc *t = tgt; t; t = t->prev)
-       {
-         t->refcount_chk++;
-
-         if (!t->mark)
-           {
-             for (int i = 0; i < t->list_count; i++)
-               if (t->list[i].key)
-                 t->list[i].key->refcount_chk++;
-
-             t->mark = true;
-           }
-       }
-
-      if (rc_check_verify (sp->root, noisy, false))
-       {
-         gomp_mutex_unlock (&devicep->lock);
-         gomp_fatal ("refcount checking failure");
-       }
-    }
-}
-#endif
-
 /* Handle the case where gomp_map_lookup, splay_tree_lookup or
    gomp_map_0len_lookup found oldn for newn.
    Helper function of gomp_map_vars.  */