[0/7,libgomp,amdgcn] AMD GCN Offloading Support

Message ID cover.1573560401.git.ams@codesourcery.com
Headers show
Series
  • AMD GCN Offloading Support
Related show

Message

Andrew Stubbs Nov. 12, 2019, 1:29 p.m.
Hi all,

This patch series contributes initial OpenMP and OpenACC support for AMD
GCN GPUs.

The test results are not yet perfect, but there are many more passes than
failures, so this is a good starting point.  The rest of the issues can
be addressed as bugs during stage 3.

I have another, unfinished, patch to massage the testsuite itself.  I'll
post this shortly, once I've finished checking the forward port is
appropriate.

This series implements only single-worker support for OpenACC.  Julian
Brown may post the multiple-worker support soon, if it isn't too
difficult to forward-port.  Otherwise that will have to wait for GCC 11.

Andrew

Andrew Stubbs (7):
  Move generic libgomp files from nvptx to accel
  GCN mkoffload
  Add device number to GOMP_OFFLOAD_openacc_async_construct
  GCN libgomp port
  Optimize GCN OpenMP malloc performance
  Use a single worker for OpenACC on AMD GCN
  GCN Libgomp Plugin

 gcc/config/gcn/gcn.c                          |    4 +-
 gcc/config/gcn/gcn.opt                        |    2 +-
 gcc/config/gcn/mkoffload.c                    |  694 +++
 gcc/config/gcn/offload.h                      |   35 +
 include/gomp-constants.h                      |    2 +
 libgomp/Makefile.am                           |    2 +-
 libgomp/Makefile.in                           |   61 +-
 libgomp/config.h.in                           |    3 +
 .../config/{nvptx => accel}/libgomp-plugin.c  |    0
 libgomp/config/{nvptx => accel}/lock.c        |    0
 libgomp/config/{nvptx => accel}/mutex.c       |    0
 libgomp/config/{nvptx => accel}/mutex.h       |    0
 libgomp/config/{nvptx => accel}/oacc-async.c  |    0
 libgomp/config/{nvptx => accel}/oacc-cuda.c   |    0
 libgomp/config/{nvptx => accel}/oacc-host.c   |    0
 libgomp/config/{nvptx => accel}/oacc-init.c   |    0
 libgomp/config/{nvptx => accel}/oacc-mem.c    |    0
 libgomp/config/{nvptx => accel}/oacc-plugin.c |    0
 libgomp/config/{nvptx => accel}/omp-lock.h    |    0
 libgomp/config/{nvptx => accel}/openacc.f90   |    1 +
 libgomp/config/{nvptx => accel}/pool.h        |    0
 libgomp/config/{nvptx => accel}/proc.c        |    0
 libgomp/config/{nvptx => accel}/ptrlock.c     |    0
 libgomp/config/{nvptx => accel}/ptrlock.h     |    0
 libgomp/config/{nvptx => accel}/sem.c         |    0
 libgomp/config/{nvptx => accel}/sem.h         |    0
 .../{nvptx => accel}/thread-stacksize.h       |    0
 libgomp/config/gcn/affinity-fmt.c             |   51 +
 libgomp/config/gcn/bar.c                      |  232 +
 libgomp/config/gcn/bar.h                      |  168 +
 libgomp/config/gcn/doacross.h                 |   58 +
 libgomp/config/gcn/icv-device.c               |   72 +
 libgomp/config/gcn/oacc-target.c              |   31 +
 libgomp/config/gcn/simple-bar.h               |   61 +
 libgomp/config/gcn/target.c                   |   67 +
 libgomp/config/gcn/task.c                     |   39 +
 libgomp/config/gcn/team.c                     |  212 +
 libgomp/config/gcn/time.c                     |   52 +
 libgomp/configure                             |   61 +-
 libgomp/configure.ac                          |    2 +-
 libgomp/configure.tgt                         |    6 +-
 libgomp/libgomp-plugin.h                      |    5 +-
 libgomp/libgomp.h                             |   74 +
 libgomp/oacc-async.c                          |    3 +-
 libgomp/oacc-host.c                           |    2 +-
 libgomp/oacc-int.h                            |    9 +-
 libgomp/oacc-target.c                         |    1 +
 libgomp/openacc.f90                           |    1 +
 libgomp/openacc.h                             |    1 +
 libgomp/plugin/Makefrag.am                    |   14 +
 libgomp/plugin/configfrag.ac                  |   35 +
 libgomp/plugin/plugin-gcn.c                   | 3985 +++++++++++++++++
 libgomp/plugin/plugin-nvptx.c                 |    2 +-
 libgomp/team.c                                |   15 +-
 libgomp/work.c                                |    4 +-
 55 files changed, 6035 insertions(+), 32 deletions(-)
 create mode 100644 gcc/config/gcn/mkoffload.c
 create mode 100644 gcc/config/gcn/offload.h
 rename libgomp/config/{nvptx => accel}/libgomp-plugin.c (100%)
 rename libgomp/config/{nvptx => accel}/lock.c (100%)
 rename libgomp/config/{nvptx => accel}/mutex.c (100%)
 rename libgomp/config/{nvptx => accel}/mutex.h (100%)
 rename libgomp/config/{nvptx => accel}/oacc-async.c (100%)
 rename libgomp/config/{nvptx => accel}/oacc-cuda.c (100%)
 rename libgomp/config/{nvptx => accel}/oacc-host.c (100%)
 rename libgomp/config/{nvptx => accel}/oacc-init.c (100%)
 rename libgomp/config/{nvptx => accel}/oacc-mem.c (100%)
 rename libgomp/config/{nvptx => accel}/oacc-plugin.c (100%)
 rename libgomp/config/{nvptx => accel}/omp-lock.h (100%)
 rename libgomp/config/{nvptx => accel}/openacc.f90 (98%)
 rename libgomp/config/{nvptx => accel}/pool.h (100%)
 rename libgomp/config/{nvptx => accel}/proc.c (100%)
 rename libgomp/config/{nvptx => accel}/ptrlock.c (100%)
 rename libgomp/config/{nvptx => accel}/ptrlock.h (100%)
 rename libgomp/config/{nvptx => accel}/sem.c (100%)
 rename libgomp/config/{nvptx => accel}/sem.h (100%)
 rename libgomp/config/{nvptx => accel}/thread-stacksize.h (100%)
 create mode 100644 libgomp/config/gcn/affinity-fmt.c
 create mode 100644 libgomp/config/gcn/bar.c
 create mode 100644 libgomp/config/gcn/bar.h
 create mode 100644 libgomp/config/gcn/doacross.h
 create mode 100644 libgomp/config/gcn/icv-device.c
 create mode 100644 libgomp/config/gcn/oacc-target.c
 create mode 100644 libgomp/config/gcn/simple-bar.h
 create mode 100644 libgomp/config/gcn/target.c
 create mode 100644 libgomp/config/gcn/task.c
 create mode 100644 libgomp/config/gcn/team.c
 create mode 100644 libgomp/config/gcn/time.c
 create mode 100644 libgomp/oacc-target.c
 create mode 100644 libgomp/plugin/plugin-gcn.c

-- 
2.20.1

Comments

Andrew Stubbs Nov. 13, 2019, 12:46 p.m. | #1
These patches are now all committed. I've adjusted the changelogs to 
list all the proper authors (apologies if I missed anyone).

Thank you for the quick reviews, Jakub. :-)

Andrew

On 12/11/2019 13:29, Andrew Stubbs wrote:
> Hi all,

> 

> This patch series contributes initial OpenMP and OpenACC support for AMD

> GCN GPUs.

> 

> The test results are not yet perfect, but there are many more passes than

> failures, so this is a good starting point.  The rest of the issues can

> be addressed as bugs during stage 3.

> 

> I have another, unfinished, patch to massage the testsuite itself.  I'll

> post this shortly, once I've finished checking the forward port is

> appropriate.

> 

> This series implements only single-worker support for OpenACC.  Julian

> Brown may post the multiple-worker support soon, if it isn't too

> difficult to forward-port.  Otherwise that will have to wait for GCC 11.

> 

> Andrew

> 

> Andrew Stubbs (7):

>    Move generic libgomp files from nvptx to accel

>    GCN mkoffload

>    Add device number to GOMP_OFFLOAD_openacc_async_construct

>    GCN libgomp port

>    Optimize GCN OpenMP malloc performance

>    Use a single worker for OpenACC on AMD GCN

>    GCN Libgomp Plugin

> 

>   gcc/config/gcn/gcn.c                          |    4 +-

>   gcc/config/gcn/gcn.opt                        |    2 +-

>   gcc/config/gcn/mkoffload.c                    |  694 +++

>   gcc/config/gcn/offload.h                      |   35 +

>   include/gomp-constants.h                      |    2 +

>   libgomp/Makefile.am                           |    2 +-

>   libgomp/Makefile.in                           |   61 +-

>   libgomp/config.h.in                           |    3 +

>   .../config/{nvptx => accel}/libgomp-plugin.c  |    0

>   libgomp/config/{nvptx => accel}/lock.c        |    0

>   libgomp/config/{nvptx => accel}/mutex.c       |    0

>   libgomp/config/{nvptx => accel}/mutex.h       |    0

>   libgomp/config/{nvptx => accel}/oacc-async.c  |    0

>   libgomp/config/{nvptx => accel}/oacc-cuda.c   |    0

>   libgomp/config/{nvptx => accel}/oacc-host.c   |    0

>   libgomp/config/{nvptx => accel}/oacc-init.c   |    0

>   libgomp/config/{nvptx => accel}/oacc-mem.c    |    0

>   libgomp/config/{nvptx => accel}/oacc-plugin.c |    0

>   libgomp/config/{nvptx => accel}/omp-lock.h    |    0

>   libgomp/config/{nvptx => accel}/openacc.f90   |    1 +

>   libgomp/config/{nvptx => accel}/pool.h        |    0

>   libgomp/config/{nvptx => accel}/proc.c        |    0

>   libgomp/config/{nvptx => accel}/ptrlock.c     |    0

>   libgomp/config/{nvptx => accel}/ptrlock.h     |    0

>   libgomp/config/{nvptx => accel}/sem.c         |    0

>   libgomp/config/{nvptx => accel}/sem.h         |    0

>   .../{nvptx => accel}/thread-stacksize.h       |    0

>   libgomp/config/gcn/affinity-fmt.c             |   51 +

>   libgomp/config/gcn/bar.c                      |  232 +

>   libgomp/config/gcn/bar.h                      |  168 +

>   libgomp/config/gcn/doacross.h                 |   58 +

>   libgomp/config/gcn/icv-device.c               |   72 +

>   libgomp/config/gcn/oacc-target.c              |   31 +

>   libgomp/config/gcn/simple-bar.h               |   61 +

>   libgomp/config/gcn/target.c                   |   67 +

>   libgomp/config/gcn/task.c                     |   39 +

>   libgomp/config/gcn/team.c                     |  212 +

>   libgomp/config/gcn/time.c                     |   52 +

>   libgomp/configure                             |   61 +-

>   libgomp/configure.ac                          |    2 +-

>   libgomp/configure.tgt                         |    6 +-

>   libgomp/libgomp-plugin.h                      |    5 +-

>   libgomp/libgomp.h                             |   74 +

>   libgomp/oacc-async.c                          |    3 +-

>   libgomp/oacc-host.c                           |    2 +-

>   libgomp/oacc-int.h                            |    9 +-

>   libgomp/oacc-target.c                         |    1 +

>   libgomp/openacc.f90                           |    1 +

>   libgomp/openacc.h                             |    1 +

>   libgomp/plugin/Makefrag.am                    |   14 +

>   libgomp/plugin/configfrag.ac                  |   35 +

>   libgomp/plugin/plugin-gcn.c                   | 3985 +++++++++++++++++

>   libgomp/plugin/plugin-nvptx.c                 |    2 +-

>   libgomp/team.c                                |   15 +-

>   libgomp/work.c                                |    4 +-

>   55 files changed, 6035 insertions(+), 32 deletions(-)

>   create mode 100644 gcc/config/gcn/mkoffload.c

>   create mode 100644 gcc/config/gcn/offload.h

>   rename libgomp/config/{nvptx => accel}/libgomp-plugin.c (100%)

>   rename libgomp/config/{nvptx => accel}/lock.c (100%)

>   rename libgomp/config/{nvptx => accel}/mutex.c (100%)

>   rename libgomp/config/{nvptx => accel}/mutex.h (100%)

>   rename libgomp/config/{nvptx => accel}/oacc-async.c (100%)

>   rename libgomp/config/{nvptx => accel}/oacc-cuda.c (100%)

>   rename libgomp/config/{nvptx => accel}/oacc-host.c (100%)

>   rename libgomp/config/{nvptx => accel}/oacc-init.c (100%)

>   rename libgomp/config/{nvptx => accel}/oacc-mem.c (100%)

>   rename libgomp/config/{nvptx => accel}/oacc-plugin.c (100%)

>   rename libgomp/config/{nvptx => accel}/omp-lock.h (100%)

>   rename libgomp/config/{nvptx => accel}/openacc.f90 (98%)

>   rename libgomp/config/{nvptx => accel}/pool.h (100%)

>   rename libgomp/config/{nvptx => accel}/proc.c (100%)

>   rename libgomp/config/{nvptx => accel}/ptrlock.c (100%)

>   rename libgomp/config/{nvptx => accel}/ptrlock.h (100%)

>   rename libgomp/config/{nvptx => accel}/sem.c (100%)

>   rename libgomp/config/{nvptx => accel}/sem.h (100%)

>   rename libgomp/config/{nvptx => accel}/thread-stacksize.h (100%)

>   create mode 100644 libgomp/config/gcn/affinity-fmt.c

>   create mode 100644 libgomp/config/gcn/bar.c

>   create mode 100644 libgomp/config/gcn/bar.h

>   create mode 100644 libgomp/config/gcn/doacross.h

>   create mode 100644 libgomp/config/gcn/icv-device.c

>   create mode 100644 libgomp/config/gcn/oacc-target.c

>   create mode 100644 libgomp/config/gcn/simple-bar.h

>   create mode 100644 libgomp/config/gcn/target.c

>   create mode 100644 libgomp/config/gcn/task.c

>   create mode 100644 libgomp/config/gcn/team.c

>   create mode 100644 libgomp/config/gcn/time.c

>   create mode 100644 libgomp/oacc-target.c

>   create mode 100644 libgomp/plugin/plugin-gcn.c

>