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