public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [gomp4] remove goacc locking
@ 2015-09-28 16:19 Nathan Sidwell
  2015-10-01  8:15 ` Thomas Schwinge
  0 siblings, 1 reply; 3+ messages in thread
From: Nathan Sidwell @ 2015-09-28 16:19 UTC (permalink / raw)
  To: GCC Patches

[-- Attachment #1: Type: text/plain, Size: 117 bytes --]

I've committed this to remove the now no longer needed lock and unlock builtins 
and related infrastructure.

nathan

[-- Attachment #2: gomp4-nolock.patch --]
[-- Type: text/x-patch, Size: 14465 bytes --]

2015-09-28  Nathan Sidwell  <nathan@codesourcery.com>

	* target.def (GOACC_LOCK): Delete hook.
	* doc/tm.texi.in (TARGET_GOACC_LOCK): Delete.
	* doc/tm.texi: Rebuilt.
	* targhooks.h (default_goacc_lock): Delete.
	* internal-fn.def (GOACC_LOCK,  GOACC_UNLOCK, GOACC_LOCK_INIT): Delete.
	* internal-fn.c (expand_GOACC_LOCK, expand_GOACC_UNLOCK,
	expand_GOACC_LOCK_INIT): Delete.
	* omp-low.c (lower_oacc_reductions): Remove locking.
	(execute_oacc_transform): Remove lock transforming.
	(default_goacc_lock): Delete.
	
	* config/nvptx/nvptx-protos.h (nvptx_expand_oacc_lock): Delete.
	* config/nvptx/nvptx.md (oacc_lock, oacc_unlock, oacc_lock_init):
	Delete.
	(nvptx_spin_lock, nvptx_spin_reset): Delete.
	* config/nvptx/nvptx.c (LOCK_GLOBAL, LOCK_SHARED, LOCK_MAX): Delete.
	(lock_names, lock_space, lock_level, lock_used): Delete.
	(force_global_locks): Delete.
	(nvptx_option_override): Do not initialize lock syms.
	(nvptx_expand_oacc_lock): Delete.
	(nvptx_file_end): Do not finalize locks.
	(TARGET_GOACC_LOCK): Delete.

Index: internal-fn.def
===================================================================
--- internal-fn.def	(revision 228200)
+++ internal-fn.def	(working copy)
@@ -81,13 +81,6 @@ DEF_INTERNAL_FN (UNIQUE, ECF_NOTHROW | E
 DEF_INTERNAL_FN (GOACC_DIM_SIZE, ECF_CONST | ECF_NOTHROW | ECF_LEAF, ".")
 DEF_INTERNAL_FN (GOACC_DIM_POS, ECF_PURE | ECF_NOTHROW | ECF_LEAF, ".")
 
-/* LOCK, UNLOCK & LOCK_INIT operate a mutex used for reductions.  The first
-   argument is the compute dimension of the reduction and the second
-   argument is a loop identifer.  */
-DEF_INTERNAL_FN (GOACC_LOCK, ECF_NOTHROW | ECF_LEAF, "..")
-DEF_INTERNAL_FN (GOACC_UNLOCK, ECF_NOTHROW | ECF_LEAF, "..")
-DEF_INTERNAL_FN (GOACC_LOCK_INIT, ECF_NOTHROW | ECF_LEAF, "..")
-
 /* REDUCTION_SETUP, REDUCTION_INIT, REDUCTION_FINI and REDUCTION_TEARDOWN
    together define a generic interface to support gang, worker and vector
    reductions. All of the functions take the following form
Index: config/nvptx/nvptx-protos.h
===================================================================
--- config/nvptx/nvptx-protos.h	(revision 228200)
+++ config/nvptx/nvptx-protos.h	(working copy)
@@ -34,7 +34,6 @@ extern const char *nvptx_section_for_dec
 #ifdef RTX_CODE
 extern void nvptx_expand_oacc_fork (unsigned);
 extern void nvptx_expand_oacc_join (unsigned);
-extern void nvptx_expand_oacc_lock (rtx, int);
 extern void nvptx_expand_call (rtx, rtx);
 extern rtx nvptx_expand_compare (rtx);
 extern const char *nvptx_ptx_type_from_mode (machine_mode, bool);
Index: config/nvptx/nvptx.md
===================================================================
--- config/nvptx/nvptx.md	(revision 228200)
+++ config/nvptx/nvptx.md	(working copy)
@@ -1371,36 +1371,6 @@
   return asms[INTVAL (operands[1])];
 })
 
-(define_expand "oacc_lock"
-  [(unspec_volatile:SI [(match_operand:SI 0 "const_int_operand" "")
-		        (match_operand:SI 1 "const_int_operand" "")]
-		       UNSPECV_LOCK)]
-  ""
-{
-  nvptx_expand_oacc_lock (operands[0], 0);
-  DONE;
-})
-
-(define_expand "oacc_unlock"
-  [(unspec_volatile:SI [(match_operand:SI 0 "const_int_operand" "")
-		        (match_operand:SI 1 "const_int_operand" "")]
-		       UNSPECV_LOCK)]
-  ""
-{
-  nvptx_expand_oacc_lock (operands[0], +1);
-  DONE;
-})
-
-(define_expand "oacc_lock_init"
-  [(unspec_volatile:SI [(match_operand:SI 0 "const_int_operand" "")
-		        (match_operand:SI 1 "const_int_operand" "")]
-		       UNSPECV_LOCK)]
-  ""
-{
-  nvptx_expand_oacc_lock (operands[0], -1);
-  DONE;
-})
-
 (define_insn "nvptx_fork"
   [(unspec_volatile:SI [(match_operand:SI 0 "const_int_operand" "")]
 		       UNSPECV_FORK)]
@@ -1588,23 +1558,3 @@
 		    UNSPECV_MEMBAR)]
   ""
   "%.\\tmembar%B0;")
-
-;; spin lock and reset
-(define_insn "nvptx_spin_lock"
-   [(parallel
-     [(set (match_operand:SI 2 "register_operand" "=R")
-	   (unspec_volatile:SI [(match_operand:SI 0 "memory_operand" "m")
-			        (match_operand:SI 1 "const_int_operand" "i")]
-			       UNSPECV_LOCK))
-      (set (match_operand:BI 3 "register_operand" "=R") (const_int 0))
-      (label_ref (match_operand 4 "" ""))])]
-   ""
-   "%4:\\tatom%R1.cas.b32\\t%2, %0, 0, 1;\\n\\t\\tsetp.ne.u32\\t%3, %2, 0;\\n\\t@%3\\tbra.uni\\t%4;")
-
-(define_insn "nvptx_spin_reset"
-   [(set (match_operand:SI 2 "register_operand" "=R")
-	    (unspec_volatile:SI [(match_operand:SI 0 "memory_operand" "m")
-				 (match_operand:SI 1 "const_int_operand" "i")]
-				UNSPECV_LOCK))]
-   ""
-   "%.\\tatom%R1.exch.b32\\t%2, %0, 0;")
Index: config/nvptx/nvptx.c
===================================================================
--- config/nvptx/nvptx.c	(revision 228200)
+++ config/nvptx/nvptx.c	(working copy)
@@ -122,21 +122,6 @@ static unsigned worker_bcast_align;
 #define worker_bcast_name "__worker_bcast"
 static GTY(()) rtx worker_bcast_sym;
 
-/* Global and shared lock variables.  Allocated at end of compilation,
-   if used.  Again, PTX lacks common blocks, so we can't share across
-   compilations.  */
-#define LOCK_GLOBAL 0
-#define LOCK_SHARED 1
-#define LOCK_MAX    2
-static const char *const lock_names[] = {"__global_lock", "__shared_lock"};
-static const unsigned lock_space[] = {ADDR_SPACE_GLOBAL, ADDR_SPACE_SHARED};
-static const unsigned lock_level[] = {BARRIER_GLOBAL, BARRIER_SHARED};
-static GTY(()) rtx lock_syms[LOCK_MAX];
-static bool lock_used[LOCK_MAX];
-
-/* FIXME: Temporary workaround for worker locks.  */
-static bool force_global_locks = true;
-
 /* Size of buffer needed for worker reductions.  This has to be
    disjoing from the worker broadcast array, as both may be live
    concurrently.  */
@@ -208,9 +193,6 @@ nvptx_option_override (void)
 
   worker_red_sym = gen_rtx_SYMBOL_REF (Pmode, worker_red_name);
   worker_red_align = GET_MODE_ALIGNMENT (SImode) / BITS_PER_UNIT;
-
-  for (unsigned ix = LOCK_MAX; ix--;)
-    lock_syms[ix] = gen_rtx_SYMBOL_REF (Pmode, lock_names[ix]);
 }
 
 /* Return the mode to be used when declaring a ptx object for OBJ.
@@ -1271,44 +1253,6 @@ nvptx_expand_oacc_join (unsigned mode)
   nvptx_emit_joining (GOMP_DIM_MASK (mode), false);
 }
 
-/* Expander for reduction locking and unlocking.  We expect SRC to be
-   gang or worker level.  */
-
-void
-nvptx_expand_oacc_lock (rtx src, int direction)
-{
-  unsigned HOST_WIDE_INT kind;
-  rtx pat;
-  
-  kind = INTVAL (src) == GOMP_DIM_GANG ? LOCK_GLOBAL : LOCK_SHARED;
-  kind = force_global_locks ? LOCK_GLOBAL : kind;
-  lock_used[kind] = true;
-
-  rtx mem = gen_rtx_MEM (SImode, lock_syms[kind]);
-  rtx space = GEN_INT (lock_space[kind]);
-  rtx barrier = NULL_RTX;
-  rtx tmp = gen_reg_rtx (SImode);
-
-  if (direction >= 0)
-    barrier = gen_nvptx_membar (GEN_INT (lock_level[kind]));
-
-  if (direction > 0)
-    emit_insn (barrier);
-  if (!direction)
-    {
-      rtx_code_label *label = gen_label_rtx ();
-
-      LABEL_NUSES (label)++;
-      pat = gen_nvptx_spin_lock (mem, space, tmp, gen_reg_rtx (BImode), label);
-    }
-  else
-    /* We can use reset for both unlock and initialization.  */
-    pat = gen_nvptx_spin_reset (mem, space, tmp);
-  emit_insn (pat);
-  if (!direction)
-    emit_insn (barrier);
-}
-
 /* Generate instruction(s) to unpack a 64 bit object into 2 32 bit
    objects.  */
 
@@ -4103,16 +4047,6 @@ nvptx_file_end (void)
 	       worker_red_align,
 	       worker_red_name, worker_red_hwm);
     }
-
-  /* Emit lock variables.  */
-  for (unsigned ix = LOCK_MAX; ix--;)
-    if (lock_used[ix])
-      {
-	fprintf (asm_out_file, "// BEGIN VAR DEF: %s\n", lock_names[ix]);
-	fprintf (asm_out_file, "%s .u32 %s;\n",
-		 nvptx_section_from_addr_space (lock_space[ix]),
-		 lock_names[ix]);
-      }
 }
 \f
 /* Expander for the shuffle builtins.  */
@@ -4930,9 +4864,6 @@ nvptx_use_anchors_for_symbol (const_rtx
 #undef TARGET_GOACC_FORK_JOIN
 #define TARGET_GOACC_FORK_JOIN nvptx_xform_fork_join
 
-#undef TARGET_GOACC_LOCK
-#define TARGET_GOACC_LOCK nvptx_xform_lock
-
 #undef TARGET_GOACC_REDUCTION
 #define TARGET_GOACC_REDUCTION nvptx_goacc_reduction
 
Index: internal-fn.c
===================================================================
--- internal-fn.c	(revision 228200)
+++ internal-fn.c	(working copy)
@@ -2026,45 +2026,6 @@ expand_GOACC_DIM_POS (gcall *ARG_UNUSED
 #endif
 }
 
-static void
-expand_GOACC_LOCK (gcall *ARG_UNUSED (stmt))
-{
-#ifdef HAVE_oacc_lock
-  rtx dim = expand_normal (gimple_call_arg (stmt, 0));
-  rtx id = expand_normal (gimple_call_arg (stmt, 1));
-  
-  emit_insn (gen_oacc_lock (dim, id));
-#else
-  gcc_unreachable ();
-#endif
-}
-
-static void
-expand_GOACC_UNLOCK (gcall *ARG_UNUSED (stmt))
-{
-#ifdef HAVE_oacc_unlock
-  rtx dim = expand_normal (gimple_call_arg (stmt, 0));
-  rtx id = expand_normal (gimple_call_arg (stmt, 1));
-  
-  emit_insn (gen_oacc_unlock (dim, id));
-#else
-  gcc_unreachable ();
-#endif
-}
-
-static void
-expand_GOACC_LOCK_INIT (gcall *ARG_UNUSED (stmt))
-{
-#ifdef HAVE_oacc_lock_init
-  rtx dim = expand_normal (gimple_call_arg (stmt, 0));
-  rtx id = expand_normal (gimple_call_arg (stmt, 1));
-  
-  emit_insn (gen_oacc_lock_init (dim, id));
-#else
-  gcc_unreachable ();
-#endif
-}
-
 /* This should get expanded in oacc_transform.  */
 
 static void
Index: omp-low.c
===================================================================
--- omp-low.c	(revision 228200)
+++ omp-low.c	(working copy)
@@ -4718,14 +4718,11 @@ expand_oacc_get_thread_num (gimple_seq *
    before-loop forking sequence in FORK_SEQ and the after-loop joining
    sequence to JOIN_SEQ.  The general form of these sequences is
 
-     GOACC_LOCK_INIT
      GOACC_REDUCTION_SETUP
      GOACC_FORK
      GOACC_REDUCTION_INIT
      ...
-     GOACC_LOCK
      GOACC_REDUCTION_FINI
-     GOACC_UNLOCK
      GOACC_JOIN
      GOACC_REDUCTION_TEARDOWN.  */
 
@@ -4833,30 +4830,12 @@ lower_oacc_reductions (location_t loc, t
       }
 
   /* Now stitch things together.  */
-  if (count)
-    {
-      gcall *init = gimple_build_call_internal
-	(IFN_GOACC_LOCK_INIT, 2, level, lid);
-      gimple_seq_add_stmt (fork_seq, init);
-    }
   gimple_seq_add_seq (fork_seq, before_fork);
   if (fork)
     gimple_seq_add_stmt (fork_seq, fork);
   gimple_seq_add_seq (fork_seq, after_fork);
 
-  if (count)
-    {
-      gcall *init = gimple_build_call_internal
-	(IFN_GOACC_LOCK, 2, level, lid);
-      gimple_seq_add_stmt (join_seq, init);
-    }
   gimple_seq_add_seq (join_seq, before_join);
-  if (count)
-    {
-      gcall *init = gimple_build_call_internal
-	(IFN_GOACC_UNLOCK, 2, level, lid);
-      gimple_seq_add_stmt (join_seq, init);
-    }
   if (join)
     gimple_seq_add_stmt (join_seq, join);
   gimple_seq_add_seq (join_seq, after_join);
@@ -14914,13 +14893,6 @@ execute_oacc_transform ()
 		rescan = 0;
 		break;
 
-	      case IFN_GOACC_LOCK:
-	      case IFN_GOACC_UNLOCK:
-	      case IFN_GOACC_LOCK_INIT:
-		if (targetm.goacc.lock (call, dims, ifn_code))
-		  rescan = -1;
-		break;
-
 	      case IFN_GOACC_REDUCTION_SETUP:
 	      case IFN_GOACC_REDUCTION_INIT:
 	      case IFN_GOACC_REDUCTION_FINI:
@@ -15026,37 +14998,6 @@ default_goacc_fork_join (gcall *ARG_UNUS
     }
 
   return false;
-}
-
-/* Default lock/unlock early expander.  Delete the function calls if
-   there is no RTL expander.  */
-
-bool
-default_goacc_lock (gcall *ARG_UNUSED (call), const int*ARG_UNUSED (dims),
-		    unsigned ifn_code)
-{
-  switch (ifn_code)
-    {
-    case IFN_GOACC_LOCK:
-#ifndef HAVE_oacc_lock
-      return true;
-#endif
-      break;
-    case IFN_GOACC_UNLOCK:
-#ifndef HAVE_oacc_unlock
-      return true;
-#endif
-      break;
-    case IFN_GOACC_LOCK_INIT:
-#ifndef HAVE_oacc_lock_init
-      return true;
-#endif
-      break;
-    default:
-      gcc_unreachable ();
-    }
-
-  return false;
 }
 
 /* Default goacc.reduction early expander.
Index: target.def
===================================================================
--- target.def	(revision 228200)
+++ target.def	(working copy)
@@ -1671,16 +1671,6 @@ bool, (gcall *call, const int dims[], bo
 default_goacc_fork_join)
 
 DEFHOOK
-(lock,
-"This hook should convert IFN_GOACC_LOCK, IFN_GOACC_UNLOCK,\n\
-IFN_GOACC_LOCK_INIT function calls to target-specific gimple.  It is\n\
-executed during the oacc_xform pass.  It should return true, if the\n\
-functions should be deleted.  The default hook returns true, if there\n\
-are no RTL expanders for them.",
-bool, (gcall *call, const int dims[], unsigned ifn_code),
-default_goacc_lock)
-
-DEFHOOK
 (reduction,
 "This hook is used by the oacc_transform pass to expand calls to the\n\
 internal functions @var{GOACC_REDUCTION_SETUP},\n\
Index: doc/tm.texi
===================================================================
--- doc/tm.texi	(revision 228200)
+++ doc/tm.texi	(working copy)
@@ -5768,14 +5768,6 @@ pass.  It should return true, if the fun
 default hook returns true, if there are no RTL expanders for them.
 @end deftypefn
 
-@deftypefn {Target Hook} bool TARGET_GOACC_LOCK (gcall *@var{call}, const int @var{dims[]}, unsigned @var{ifn_code})
-This hook should convert IFN_GOACC_LOCK, IFN_GOACC_UNLOCK,
-IFN_GOACC_LOCK_INIT function calls to target-specific gimple.  It is
-executed during the oacc_xform pass.  It should return true, if the
-functions should be deleted.  The default hook returns true, if there
-are no RTL expanders for them.
-@end deftypefn
-
 @deftypefn {Target Hook} bool TARGET_GOACC_REDUCTION (gcall *@var{call})
 This hook is used by the oacc_transform pass to expand calls to the
 internal functions @var{GOACC_REDUCTION_SETUP},
Index: doc/tm.texi.in
===================================================================
--- doc/tm.texi.in	(revision 228200)
+++ doc/tm.texi.in	(working copy)
@@ -4253,8 +4253,6 @@ address;  but often a machine-dependent
 
 @hook TARGET_GOACC_FORK_JOIN
 
-@hook TARGET_GOACC_LOCK
-
 @hook TARGET_GOACC_REDUCTION
 
 @node Anchored Addresses
Index: targhooks.h
===================================================================
--- targhooks.h	(revision 228200)
+++ targhooks.h	(working copy)
@@ -111,7 +111,6 @@ extern bool default_goacc_reduction (gca
 extern bool default_goacc_validate_dims (tree, int [], int);
 extern unsigned default_goacc_dim_limit (unsigned);
 extern bool default_goacc_fork_join (gcall *, const int [], bool);
-extern bool default_goacc_lock (gcall *, const int [], unsigned);
 
 /* These are here, and not in hooks.[ch], because not all users of
    hooks.h include tm.h, and thus we don't have CUMULATIVE_ARGS.  */

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [gomp4] remove goacc locking
  2015-09-28 16:19 [gomp4] remove goacc locking Nathan Sidwell
@ 2015-10-01  8:15 ` Thomas Schwinge
  2015-10-01 12:28   ` Nathan Sidwell
  0 siblings, 1 reply; 3+ messages in thread
From: Thomas Schwinge @ 2015-10-01  8:15 UTC (permalink / raw)
  To: Nathan Sidwell; +Cc: GCC Patches

[-- Attachment #1: Type: text/plain, Size: 3921 bytes --]

Hi Nathan!

On Mon, 28 Sep 2015 11:56:09 -0400, Nathan Sidwell <nathan@acm.org> wrote:
> I've committed this to remove the now no longer needed lock and unlock builtins 
> and related infrastructure.

If I understand correctly, it is an implementation detail of the nvptx
offloading implementation that it doesn't require such locking
primitives, but such locking may still be required for other (future)
offloading implementations, at which point something like the following
would have to be introduced again:

> 	* target.def (GOACC_LOCK): Delete hook.
> 	* doc/tm.texi.in (TARGET_GOACC_LOCK): Delete.
> 	* doc/tm.texi: Rebuilt.
> 	* targhooks.h (default_goacc_lock): Delete.
> 	* internal-fn.def (GOACC_LOCK,  GOACC_UNLOCK, GOACC_LOCK_INIT): Delete.
> 	* internal-fn.c (expand_GOACC_LOCK, expand_GOACC_UNLOCK,
> 	expand_GOACC_LOCK_INIT): Delete.
> 	* omp-low.c (lower_oacc_reductions): Remove locking.
> 	(execute_oacc_transform): Remove lock transforming.
> 	(default_goacc_lock): Delete.

(Of course, I agree that it doesn't make sense to try to maintain such a
locking implementation, if now/currently there isn't any user of it.)

> 	* config/nvptx/nvptx-protos.h (nvptx_expand_oacc_lock): Delete.
> 	* config/nvptx/nvptx.md (oacc_lock, oacc_unlock, oacc_lock_init):
> 	Delete.
> 	(nvptx_spin_lock, nvptx_spin_reset): Delete.
> 	* config/nvptx/nvptx.c (LOCK_GLOBAL, LOCK_SHARED, LOCK_MAX): Delete.
> 	(lock_names, lock_space, lock_level, lock_used): Delete.
> 	(force_global_locks): Delete.
> 	(nvptx_option_override): Do not initialize lock syms.
> 	(nvptx_expand_oacc_lock): Delete.
> 	(nvptx_file_end): Do not finalize locks.
> 	(TARGET_GOACC_LOCK): Delete.

> --- config/nvptx/nvptx.c	(revision 228200)
> +++ config/nvptx/nvptx.c	(working copy)

> @@ -4930,9 +4864,6 @@ nvptx_use_anchors_for_symbol (const_rtx
>  #undef TARGET_GOACC_FORK_JOIN
>  #define TARGET_GOACC_FORK_JOIN nvptx_xform_fork_join
>  
> -#undef TARGET_GOACC_LOCK
> -#define TARGET_GOACC_LOCK nvptx_xform_lock
> -
>  #undef TARGET_GOACC_REDUCTION
>  #define TARGET_GOACC_REDUCTION nvptx_goacc_reduction

    [...]/source-gcc/gcc/config/nvptx/nvptx.c:4328:1: warning: 'bool nvptx_xform_lock(gcall*, const int*, unsigned int)' defined but not used [-Wunused-function]+}
     nvptx_xform_lock (gcall *ARG_UNUSED (call),+}
     ^+}

Committed to gomp-4_0-branch in r228321:

commit a65ecefb6320407b221297880e9c25e1b7b9a430
Author: tschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Thu Oct 1 08:12:01 2015 +0000

    Address -Wunused-function diagnostic
    
    	gcc/
    	* config/nvptx/nvptx.c (nvptx_xform_lock): Remove function.
    
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gomp-4_0-branch@228321 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog.gomp       |    4 ++++
 gcc/config/nvptx/nvptx.c |    9 ---------
 2 files changed, 4 insertions(+), 9 deletions(-)

diff --git gcc/ChangeLog.gomp gcc/ChangeLog.gomp
index c4033e0..3a9e01d 100644
--- gcc/ChangeLog.gomp
+++ gcc/ChangeLog.gomp
@@ -1,3 +1,7 @@
+2015-10-01  Thomas Schwinge  <thomas@codesourcery.com>
+
+	* config/nvptx/nvptx.c (nvptx_xform_lock): Remove function.
+
 2015-09-30  Thomas Schwinge  <thomas@codesourcery.com>
 
 	* tree-cfg.c (replace_ssa_name): Revert obsolete changes.
diff --git gcc/config/nvptx/nvptx.c gcc/config/nvptx/nvptx.c
index e81cbba..fcebf02 100644
--- gcc/config/nvptx/nvptx.c
+++ gcc/config/nvptx/nvptx.c
@@ -4322,15 +4322,6 @@ nvptx_xform_fork_join (gcall *call, const int dims[],
   return false;
 }
 
-/* Check lock & unlock.  We don't reqyire any locks.  */
-
-static bool
-nvptx_xform_lock (gcall *ARG_UNUSED (call),
-		  const int *ARG_UNUSED (dims), unsigned ARG_UNUSED (ifn_code))
-{
-  return true;
-}
-
 static tree
 nvptx_get_worker_red_addr (tree type, tree rid, tree lid)
 {


Grüße,
 Thomas

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [gomp4] remove goacc locking
  2015-10-01  8:15 ` Thomas Schwinge
@ 2015-10-01 12:28   ` Nathan Sidwell
  0 siblings, 0 replies; 3+ messages in thread
From: Nathan Sidwell @ 2015-10-01 12:28 UTC (permalink / raw)
  To: Thomas Schwinge; +Cc: GCC Patches

On 10/01/15 04:14, Thomas Schwinge wrote:
> Hi Nathan!
>
> On Mon, 28 Sep 2015 11:56:09 -0400, Nathan Sidwell <nathan@acm.org> wrote:
>> I've committed this to remove the now no longer needed lock and unlock builtins
>> and related infrastructure.
>
> If I understand correctly, it is an implementation detail of the nvptx
> offloading implementation that it doesn't require such locking
> primitives, but such locking may still be required for other (future)
> offloading implementations, at which point something like the following
> would have to be introduced again:

I thought about that.  Other implementations can also use the lockless idiom. 
There's always going to be a cmp&swap atomic, otherwise the HW is terribly 
designed.  lock/unlock doesn't work between PTX warps, as we've discovered, and 
I think the same will probably be true of HSA, as that's roughly the same 
conceptually.  If it turns out I'm wrong, these bits can always be resurrected then.

The reason I originally went with lock/unlock is that it was conceptually 
simpler.  The lockless scheme is quite straight forwards, once one understands 
the underlying concept.

nathan

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-10-01 12:28 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-09-28 16:19 [gomp4] remove goacc locking Nathan Sidwell
2015-10-01  8:15 ` Thomas Schwinge
2015-10-01 12:28   ` Nathan Sidwell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).