Empty libgomp for nvptx (was: [WIP] OpenMP 4 NVPTX support)

Thomas Schwinge thomas@codesourcery.com
Mon Aug 10 15:56:00 GMT 2015


Hi!

On Wed, 22 Jul 2015 18:38:44 +0200, Jakub Jelinek <jakub@redhat.com> wrote:
> On Wed, Jul 22, 2015 at 06:04:20PM +0200, Thomas Schwinge wrote:
> > On Tue, 21 Apr 2015 17:58:39 +0200, Jakub Jelinek <jakub@redhat.com> wrote:
> > > Attached is a minimal patch to get at least a trivial OpenMP 4.0 testcase
> > > offloading to NVPTX (the first patch).  The second patch is WIP, just first
> > > few needed changes to make libgomp to build for NVPTX (several weeks of work
> > > at least).
> > 
> > We're not in particular working on making nvptx offloading work for
> > OpenMP, but also for OpenACC offloading a tiny bit of code is required to
> > be shipped in an offloading device's runtime library -- code that
> > conceptually belongs into libgomp.  (On gomp-4_0-branch, it currently
> > lives in libgcc because that was easier to do.)  Actually, as I should
> > find out, building a "dummy" (empty) libgomp for nvptx is not actually
> > difficult.  Additionally to your second patch (U2; quoted at the end of
> > this email), we'll need the following:
> 
> The U2 version was a very early one, I've posted a newer version later,
> but supposedly we can go with my U2 (if you've tested it together with your
> patch, please check it in yourself) and your patch, and then
> incrementally start removing the zero sized stubs or replacing them with
> something real.

Yes, that's precisely the idea.  Committed in r226760:

commit fdcd05c84f79cec55fa61249febd4c1c21b772a7
Author: tschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Mon Aug 10 15:53:33 2015 +0000

    Empty libgomp for nvptx
    
    	* configure.ac (noconfigdirs): Don't add "target-libgomp" for target
    	nvptx*-*-*.
    	* configure: Regenerate.
    	libgomp/
    	* config/nvptx/affinity.c: New file.
    	* config/nvptx/alloc.c: Likewise.
    	* config/nvptx/bar.c: Likewise.
    	* config/nvptx/barrier.c: Likewise.
    	* config/nvptx/critical.c: Likewise.
    	* config/nvptx/env.c: Likewise.
    	* config/nvptx/error.c: Likewise.
    	* config/nvptx/fortran.c: Likewise.
    	* config/nvptx/iter.c: Likewise.
    	* config/nvptx/iter_ull.c: Likewise.
    	* config/nvptx/libgomp-plugin.c: Likewise.
    	* config/nvptx/lock.c: Likewise.
    	* config/nvptx/loop.c: Likewise.
    	* config/nvptx/loop_ull.c: Likewise.
    	* config/nvptx/mutex.c: Likewise.
    	* config/nvptx/oacc-async.c: Likewise.
    	* config/nvptx/oacc-cuda.c: Likewise.
    	* config/nvptx/oacc-host.c: Likewise.
    	* config/nvptx/oacc-init.c: Likewise.
    	* config/nvptx/oacc-mem.c: Likewise.
    	* config/nvptx/oacc-parallel.c: Likewise.
    	* config/nvptx/oacc-plugin.c: Likewise.
    	* config/nvptx/omp-lock.h: Likewise.
    	* config/nvptx/ordered.c: Likewise.
    	* config/nvptx/parallel.c: Likewise.
    	* config/nvptx/proc.c: Likewise.
    	* config/nvptx/ptrlock.c: Likewise.
    	* config/nvptx/sections.c: Likewise.
    	* config/nvptx/sem.c: Likewise.
    	* config/nvptx/single.c: Likewise.
    	* config/nvptx/splay-tree.c: Likewise.
    	* config/nvptx/target.c: Likewise.
    	* config/nvptx/task.c: Likewise.
    	* config/nvptx/team.c: Likewise.
    	* config/nvptx/time.c: Likewise.
    	* config/nvptx/work.c: Likewise.
    	* configure.ac: Don't probe pthreads support for host nvptx*-*-*.
    	* configure: Regenerate.
    	* configure.tgt (config_path): Set to "nvptx" for target
    	nvptx*-*-*.
    
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@226760 138bc75d-0d04-0410-961f-82ee72b054a4
---
 ChangeLog                       |    7 +++++++
 configure                       |    6 +++---
 configure.ac                    |    6 +++---
 libgomp/ChangeLog               |   44 +++++++++++++++++++++++++++++++++++++++
 libgomp/config/nvptx/omp-lock.h |   12 +++++++++++
 libgomp/configure               |    3 +++
 libgomp/configure.ac            |    3 +++
 libgomp/configure.tgt           |    4 ++++
 8 files changed, 79 insertions(+), 6 deletions(-)

diff --git ChangeLog ChangeLog
index bd0f35e..6d3a8a0 100644
--- ChangeLog
+++ ChangeLog
@@ -1,3 +1,10 @@
+2015-08-10  Thomas Schwinge  <thomas@codesourcery.com>
+	    Jakub Jelinek  <jakub@redhat.com>
+
+	* configure.ac (noconfigdirs): Don't add "target-libgomp" for target
+	nvptx*-*-*.
+	* configure: Regenerate.
+
 2015-08-06  Yaakov Selkowitz  <yselkowi@redhat.com>
 
 	* Makefile.def (libiconv): Define bootstrap=true.
diff --git configure configure
index 6d7152e..79257fd 100755
--- configure
+++ configure
@@ -3168,9 +3168,8 @@ if test x$enable_static_libjava != xyes ; then
 fi
 
 
-# Disable libgomp on non POSIX hosted systems.
+# Enable libgomp by default on hosted POSIX systems, and a few others.
 if test x$enable_libgomp = x ; then
-    # Enable libgomp by default on hosted POSIX systems.
     case "${target}" in
     *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu | *-*-kopensolaris*-gnu)
 	;;
@@ -3180,6 +3179,8 @@ if test x$enable_libgomp = x ; then
 	;;
     *-*-darwin* | *-*-aix*)
 	;;
+    nvptx*-*-*)
+	;;
     *)
 	noconfigdirs="$noconfigdirs target-libgomp"
 	;;
@@ -3917,7 +3918,6 @@ case "${target}" in
     noconfigdirs="$noconfigdirs gdb"
     ;;
   nvptx*-*-*)
-    # nvptx is just a compiler
     noconfigdirs="$noconfigdirs target-libssp target-libstdc++-v3 target-libobjc"
     ;;
   or1k*-*-*)
diff --git configure.ac configure.ac
index fbc49ce..452fc05 100644
--- configure.ac
+++ configure.ac
@@ -529,9 +529,8 @@ if test x$enable_static_libjava != xyes ; then
 fi
 AC_SUBST(EXTRA_CONFIGARGS_LIBJAVA)
 
-# Disable libgomp on non POSIX hosted systems.
+# Enable libgomp by default on hosted POSIX systems, and a few others.
 if test x$enable_libgomp = x ; then
-    # Enable libgomp by default on hosted POSIX systems.
     case "${target}" in
     *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu | *-*-kopensolaris*-gnu)
 	;;
@@ -541,6 +540,8 @@ if test x$enable_libgomp = x ; then
 	;;
     *-*-darwin* | *-*-aix*)
 	;;
+    nvptx*-*-*)
+	;;
     *)
 	noconfigdirs="$noconfigdirs target-libgomp"
 	;;
@@ -1257,7 +1258,6 @@ case "${target}" in
     noconfigdirs="$noconfigdirs gdb"
     ;;
   nvptx*-*-*)
-    # nvptx is just a compiler
     noconfigdirs="$noconfigdirs target-libssp target-libstdc++-v3 target-libobjc"
     ;;
   or1k*-*-*)
diff --git libgomp/ChangeLog libgomp/ChangeLog
index 3b60290..084aabd 100644
--- libgomp/ChangeLog
+++ libgomp/ChangeLog
@@ -1,4 +1,48 @@
 2015-08-10  Thomas Schwinge  <thomas@codesourcery.com>
+	    Jakub Jelinek  <jakub@redhat.com>
+
+	* config/nvptx/affinity.c: New file.
+	* config/nvptx/alloc.c: Likewise.
+	* config/nvptx/bar.c: Likewise.
+	* config/nvptx/barrier.c: Likewise.
+	* config/nvptx/critical.c: Likewise.
+	* config/nvptx/env.c: Likewise.
+	* config/nvptx/error.c: Likewise.
+	* config/nvptx/fortran.c: Likewise.
+	* config/nvptx/iter.c: Likewise.
+	* config/nvptx/iter_ull.c: Likewise.
+	* config/nvptx/libgomp-plugin.c: Likewise.
+	* config/nvptx/lock.c: Likewise.
+	* config/nvptx/loop.c: Likewise.
+	* config/nvptx/loop_ull.c: Likewise.
+	* config/nvptx/mutex.c: Likewise.
+	* config/nvptx/oacc-async.c: Likewise.
+	* config/nvptx/oacc-cuda.c: Likewise.
+	* config/nvptx/oacc-host.c: Likewise.
+	* config/nvptx/oacc-init.c: Likewise.
+	* config/nvptx/oacc-mem.c: Likewise.
+	* config/nvptx/oacc-parallel.c: Likewise.
+	* config/nvptx/oacc-plugin.c: Likewise.
+	* config/nvptx/omp-lock.h: Likewise.
+	* config/nvptx/ordered.c: Likewise.
+	* config/nvptx/parallel.c: Likewise.
+	* config/nvptx/proc.c: Likewise.
+	* config/nvptx/ptrlock.c: Likewise.
+	* config/nvptx/sections.c: Likewise.
+	* config/nvptx/sem.c: Likewise.
+	* config/nvptx/single.c: Likewise.
+	* config/nvptx/splay-tree.c: Likewise.
+	* config/nvptx/target.c: Likewise.
+	* config/nvptx/task.c: Likewise.
+	* config/nvptx/team.c: Likewise.
+	* config/nvptx/time.c: Likewise.
+	* config/nvptx/work.c: Likewise.
+	* configure.ac: Don't probe pthreads support for host nvptx*-*-*.
+	* configure: Regenerate.
+	* configure.tgt (config_path): Set to "nvptx" for target
+	nvptx*-*-*.
+
+2015-08-10  Thomas Schwinge  <thomas@codesourcery.com>
 
 	* testsuite/libgomp.oacc-c-c++-common/vector-type-1.c: New file.
 
diff --git libgomp/config/nvptx/affinity.c libgomp/config/nvptx/affinity.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/alloc.c libgomp/config/nvptx/alloc.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/bar.c libgomp/config/nvptx/bar.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/barrier.c libgomp/config/nvptx/barrier.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/critical.c libgomp/config/nvptx/critical.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/env.c libgomp/config/nvptx/env.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/error.c libgomp/config/nvptx/error.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/fortran.c libgomp/config/nvptx/fortran.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/iter.c libgomp/config/nvptx/iter.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/iter_ull.c libgomp/config/nvptx/iter_ull.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/libgomp-plugin.c libgomp/config/nvptx/libgomp-plugin.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/lock.c libgomp/config/nvptx/lock.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/loop.c libgomp/config/nvptx/loop.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/loop_ull.c libgomp/config/nvptx/loop_ull.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/mutex.c libgomp/config/nvptx/mutex.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/oacc-async.c libgomp/config/nvptx/oacc-async.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/oacc-cuda.c libgomp/config/nvptx/oacc-cuda.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/oacc-host.c libgomp/config/nvptx/oacc-host.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/oacc-init.c libgomp/config/nvptx/oacc-init.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/oacc-mem.c libgomp/config/nvptx/oacc-mem.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/oacc-parallel.c libgomp/config/nvptx/oacc-parallel.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/oacc-plugin.c libgomp/config/nvptx/oacc-plugin.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/omp-lock.h libgomp/config/nvptx/omp-lock.h
new file mode 100644
index 0000000..2ca7c5e
--- /dev/null
+++ libgomp/config/nvptx/omp-lock.h
@@ -0,0 +1,12 @@
+/* This header is used during the build process to find the size and 
+   alignment of the public OpenMP locks, so that we can export data
+   structures without polluting the namespace.
+
+   When using the Linux futex primitive, non-recursive locks require
+   one int.  Recursive locks require we identify the owning task
+   and so require in addition one int and a pointer.  */
+
+typedef int omp_lock_t;
+typedef struct { int lock, count; void *owner; } omp_nest_lock_t;
+typedef int omp_lock_25_t;
+typedef struct { int owner, count; } omp_nest_lock_25_t;
diff --git libgomp/config/nvptx/ordered.c libgomp/config/nvptx/ordered.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/parallel.c libgomp/config/nvptx/parallel.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/proc.c libgomp/config/nvptx/proc.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/ptrlock.c libgomp/config/nvptx/ptrlock.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/sections.c libgomp/config/nvptx/sections.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/sem.c libgomp/config/nvptx/sem.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/single.c libgomp/config/nvptx/single.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/splay-tree.c libgomp/config/nvptx/splay-tree.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/target.c libgomp/config/nvptx/target.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/task.c libgomp/config/nvptx/task.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/team.c libgomp/config/nvptx/team.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/time.c libgomp/config/nvptx/time.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/config/nvptx/work.c libgomp/config/nvptx/work.c
new file mode 100644
index 0000000..e69de29
diff --git libgomp/configure libgomp/configure
index f1a92ba..867ce40 100755
--- libgomp/configure
+++ libgomp/configure
@@ -15041,6 +15041,9 @@ case "$host" in
   *-*-rtems*)
     # RTEMS supports Pthreads, but the library is not available at GCC build time.
     ;;
+  nvptx*-*-*)
+    # NVPTX does not support Pthreads, has its own code replacement.
+    ;;
   *)
     # Check to see if -pthread or -lpthread is needed.  Prefer the former.
     # In case the pthread.h system header is not found, this test will fail.
diff --git libgomp/configure.ac libgomp/configure.ac
index 9cf0218..b1696d0 100644
--- libgomp/configure.ac
+++ libgomp/configure.ac
@@ -179,6 +179,9 @@ case "$host" in
   *-*-rtems*)
     # RTEMS supports Pthreads, but the library is not available at GCC build time.
     ;;
+  nvptx*-*-*)
+    # NVPTX does not support Pthreads, has its own code replacement.
+    ;;
   *)
     # Check to see if -pthread or -lpthread is needed.  Prefer the former.
     # In case the pthread.h system header is not found, this test will fail.
diff --git libgomp/configure.tgt libgomp/configure.tgt
index 2970f6f..8fad977 100644
--- libgomp/configure.tgt
+++ libgomp/configure.tgt
@@ -151,6 +151,10 @@ case "${target}" in
 	XLDFLAGS="${XLDFLAGS} -lpthread"
 	;;
 
+  nvptx*-*-*)
+	config_path="nvptx"
+	;;
+
   *)
 	;;
 


Grüße,
 Thomas
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 472 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20150810/3a764b66/attachment.sig>


More information about the Gcc-patches mailing list