[libgomp, nvptx] Add error with recompilation hint for launch failure
authorCesar Philippidis <cesar@codesourcery.com>
Thu, 26 Jul 2018 11:42:29 +0000 (04:42 -0700)
committerTom de Vries <vries@gcc.gnu.org>
Thu, 26 Jul 2018 11:42:29 +0000 (11:42 +0000)
Currently, when a kernel is lauched with too many workers, it results in a cuda
launch failure.  This is triggered f.i. for parallel-loop-1.c at -O0 on a Quadro
M1200.

This patch detects this situation, and errors out with a hint on how to fix it.

Build and reg-tested on x86_64 with nvptx accelerator.

2018-07-26  Cesar Philippidis  <cesar@codesourcery.com>
    Tom de Vries  <tdevries@suse.de>

* plugin/plugin-nvptx.c (nvptx_exec): Error if the hardware doesn't have
sufficient resources to launch a kernel, and give a hint on how to fix
it.

Co-Authored-By: Tom de Vries <tdevries@suse.de>
From-SVN: r262997

libgomp/ChangeLog
libgomp/plugin/plugin-nvptx.c

index 6c5ff91983d6745b45cc567aa23e14660cd607d2..27ff705e90997df6c2eb0993cf56c30403edaaa8 100644 (file)
@@ -1,3 +1,10 @@
+2018-07-26  Cesar Philippidis  <cesar@codesourcery.com>
+           Tom de Vries  <tdevries@suse.de>
+
+       * plugin/plugin-nvptx.c (nvptx_exec): Error if the hardware doesn't have
+       sufficient resources to launch a kernel, and give a hint on how to fix
+       it.
+
 2018-07-26  Cesar Philippidis  <cesar@codesourcery.com>
            Tom de Vries  <tdevries@suse.de>
 
index 5d9b5151e9534505c9e61d1bfc9c1d0718669d1c..3a4077a131522ec5e6d29c363904839e42abc31b 100644 (file)
@@ -1204,6 +1204,21 @@ nvptx_exec (void (*fn), size_t mapnum, void **hostaddrs, void **devaddrs,
          dims[i] = default_dims[i];
     }
 
+  /* Check if the accelerator has sufficient hardware resources to
+     launch the offloaded kernel.  */
+  if (dims[GOMP_DIM_WORKER] * dims[GOMP_DIM_VECTOR]
+      > targ_fn->max_threads_per_block)
+    {
+      int suggest_workers
+       = targ_fn->max_threads_per_block / dims[GOMP_DIM_VECTOR];
+      GOMP_PLUGIN_fatal ("The Nvidia accelerator has insufficient resources to"
+                        " launch '%s' with num_workers = %d; recompile the"
+                        " program with 'num_workers = %d' on that offloaded"
+                        " region or '-fopenacc-dim=:%d'",
+                        targ_fn->launch->fn, dims[GOMP_DIM_WORKER],
+                        suggest_workers, suggest_workers);
+    }
+
   /* This reserves a chunk of a pre-allocated page of memory mapped on both
      the host and the device. HP is a host pointer to the new chunk, and DP is
      the corresponding device pointer.  */