On 26.05.21 14:06, Jakub Jelinek wrote:
When gcc is configured for nvptx offloading with --without-cuda-driver
and full CUDA isn't installed, many libgomp.oacc-*/* tests fail,
some of them because cuda.h header can't be found, others because
the tests can't be linked against -lcuda, -lcudart or -lcublas. [...]
The following patch adds 3 new effective targets and uses them in tests that
needs those.

Tested on x86_64-linux with nvptx offloading --without-cuda-driver where it
fixes many FAILs, but I don't have full cuda installed to test whether it
doesn't disable any tests even when cuda is available.

I tested it with ppc64le-linux and nvptx offloading and it did work as
expected: all three new effective-target checks run successfully and all
modified testcases link and run. (Albeit lib-74.c, lib-78.c, and
lib-81.c do fail at execution time, but that's a different issue.).

Hence, looks good to me.

Thanks,

Tobias

2021-05-26  Jakub Jelinek<ja...@redhat.com>

      * testsuite/lib/libgomp.exp (check_effective_target_openacc_cuda,
      check_effective_target_openacc_cublas,
      check_effective_target_openacc_cudart): New.
      * testsuite/libgomp.oacc-fortran/host_data-4.f90: Require effective
      target openacc_cublas.
      * testsuite/libgomp.oacc-fortran/host_data-2.f90: Likewise.
      * testsuite/libgomp.oacc-fortran/host_data-3.f: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/lib-91.c: Require effective
      target openacc_cuda.
      * testsuite/libgomp.oacc-c-c++-common/lib-70.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/lib-90.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/lib-75.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/lib-69.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/lib-74.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/lib-81.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/lib-72.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/lib-85.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/pr87835.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/lib-82.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/lib-73.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/lib-83.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/lib-78.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/lib-76.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/lib-84.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/lib-79.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/host_data-1.c: Require effective
      targets openacc_cublas and openacc_cudart.
      * testsuite/libgomp.oacc-c-c++-common/context-1.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/context-2.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/context-3.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/context-4.c: Likewise.
      * testsuite/libgomp.oacc-c-c++-common/acc_get_property-nvptx.c:
      Require effective target openacc_cudart.
      * testsuite/libgomp.oacc-c-c++-common/asyncwait-1.c: Add -DUSE_CUDA_H
      for effective target openacc_cuda and add && defined USE_CUDA_H to
      preprocessor conditionals.  Guard -lcuda also on openacc_cuda
      effective target.

--- libgomp/testsuite/lib/libgomp.exp.jj      2021-05-25 13:43:02.800121273 
+0200
+++ libgomp/testsuite/lib/libgomp.exp 2021-05-26 12:18:56.562556244 +0200
@@ -479,3 +479,56 @@ proc check_effective_target_openacc_rade
      return 0;
  }

+# Return 1 if cuda.h and -lcuda are available.
+
+proc check_effective_target_openacc_cuda { } {
+    return [check_no_compiler_messages openacc_cuda executable {
+#include <cuda.h>
+int main() {
+    CUdevice dev;
+    CUresult r = cuDeviceGet (&dev, 0);
+    if (r != CUDA_SUCCESS)
+     return 1;
+    return 0;
+} } "-lcuda" ]
+}
+
+# Return 1 if cublas_v2.h and -lcublas are available.
+
+proc check_effective_target_openacc_cublas { } {
+    return [check_no_compiler_messages openacc_cublas executable {
+#include <cuda.h>
+#include <cublas_v2.h>
+int main() {
+    cublasStatus_t s;
+    cublasHandle_t h;
+    CUdevice dev;
+    CUresult r = cuDeviceGet (&dev, 0);
+    if (r != CUDA_SUCCESS)
+     return 1;
+    s = cublasCreate (&h);
+    if (s != CUBLAS_STATUS_SUCCESS)
+     return 1;
+    return 0;
+} } "-lcuda -lcublas" ]
+}
+
+# Return 1 if cuda_runtime_api.h and -lcudart are available.
+
+proc check_effective_target_openacc_cudart { } {
+    return [check_no_compiler_messages openacc_cudart executable {
+#include <cuda.h>
+#include <cuda_runtime_api.h>
+int main() {
+    cudaError_t e;
+    int devn;
+    CUdevice dev;
+    CUresult r = cuDeviceGet (&dev, 0);
+    if (r != CUDA_SUCCESS)
+     return 1;
+    e = cudaGetDevice (&devn);
+    if (e != cudaSuccess)
+     return 1;
+    return 0;
+} } "-lcuda -lcudart" ]
+}
--- libgomp/testsuite/libgomp.oacc-fortran/host_data-4.f90.jj 2020-01-15 
11:05:22.016099296 +0100
+++ libgomp/testsuite/libgomp.oacc-fortran/host_data-4.f90    2021-05-26 
12:30:46.839676386 +0200
@@ -2,6 +2,7 @@

  ! { dg-do run { target openacc_nvidia_accel_selected } }
  ! { dg-additional-options "-lcublas -Wall -Wextra" }
+! { dg-require-effective-target openacc_cublas }

  module cublas
    interface
--- libgomp/testsuite/libgomp.oacc-fortran/host_data-2.f90.jj 2020-01-15 
11:05:22.016099296 +0100
+++ libgomp/testsuite/libgomp.oacc-fortran/host_data-2.f90    2021-05-26 
12:30:46.840676372 +0200
@@ -3,6 +3,7 @@

  ! { dg-do run { target openacc_nvidia_accel_selected } }
  ! { dg-additional-options "-lcublas -Wall -Wextra" }
+! { dg-require-effective-target openacc_cublas }

  program test
    implicit none
--- libgomp/testsuite/libgomp.oacc-fortran/host_data-3.f.jj   2020-01-15 
11:05:22.016099296 +0100
+++ libgomp/testsuite/libgomp.oacc-fortran/host_data-3.f      2021-05-26 
12:30:46.840676372 +0200
@@ -2,6 +2,7 @@

  ! { dg-do run { target openacc_nvidia_accel_selected } }
  ! { dg-additional-options "-lcublas -Wall -Wextra" }
+! { dg-require-effective-target openacc_cublas }

        include "cublas-fixed.h"

--- libgomp/testsuite/libgomp.oacc-c-c++-common/lib-91.c.jj   2020-01-15 
11:05:22.010099387 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/lib-91.c      2021-05-26 
12:30:46.840676372 +0200
@@ -1,5 +1,6 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda" } */
+/* { dg-require-effective-target openacc_cuda } */

  #include <stdlib.h>
  #include <unistd.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/lib-70.c.jj   2020-01-15 
11:05:22.009099402 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/lib-70.c      2021-05-26 
12:30:46.840676372 +0200
@@ -1,5 +1,6 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda" } */
+/* { dg-require-effective-target openacc_cuda } */

  #include <stdio.h>
  #include <stdlib.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/lib-90.c.jj   2020-01-15 
11:05:22.010099387 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/lib-90.c      2021-05-26 
12:30:46.840676372 +0200
@@ -1,5 +1,6 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda" } */
+/* { dg-require-effective-target openacc_cuda } */

  #include <pthread.h>
  #include <stdio.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/lib-75.c.jj   2020-01-15 
11:05:22.009099402 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/lib-75.c      2021-05-26 
12:30:46.840676372 +0200
@@ -1,5 +1,6 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda" } */
+/* { dg-require-effective-target openacc_cuda } */

  #include <stdio.h>
  #include <unistd.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/host_data-1.c.jj      
2020-01-15 11:05:22.006099448 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/host_data-1.c 2021-05-26 
12:30:46.840676372 +0200
@@ -1,5 +1,7 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lm -lcuda -lcublas -lcudart -Wall -Wextra" } */
+/* { dg-require-effective-target openacc_cublas } */
+/* { dg-require-effective-target openacc_cudart } */

  #include <stdlib.h>
  #include <math.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/context-1.c.jj        
2020-01-15 11:05:22.005099463 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/context-1.c   2021-05-26 
12:30:46.840676372 +0200
@@ -1,5 +1,7 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda -lcublas -lcudart" } */
+/* { dg-require-effective-target openacc_cublas } */
+/* { dg-require-effective-target openacc_cudart } */

  #include <stdio.h>
  #include <stdlib.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/lib-69.c.jj   2020-01-15 
11:05:22.009099402 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/lib-69.c      2021-05-26 
12:30:46.840676372 +0200
@@ -1,5 +1,6 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda" } */
+/* { dg-require-effective-target openacc_cuda } */

  #include <stdio.h>
  #include <unistd.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/lib-74.c.jj   2020-01-15 
11:05:22.009099402 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/lib-74.c      2021-05-26 
12:30:46.840676372 +0200
@@ -1,5 +1,6 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda" } */
+/* { dg-require-effective-target openacc_cuda } */

  #include <stdio.h>
  #include <stdlib.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/context-2.c.jj        
2020-01-15 11:05:22.005099463 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/context-2.c   2021-05-26 
12:30:46.841676358 +0200
@@ -1,5 +1,7 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda -lcublas -lcudart" } */
+/* { dg-require-effective-target openacc_cublas } */
+/* { dg-require-effective-target openacc_cudart } */

  #include <stdio.h>
  #include <stdlib.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/lib-81.c.jj   2020-01-15 
11:05:22.010099387 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/lib-81.c      2021-05-26 
12:30:46.841676358 +0200
@@ -1,5 +1,6 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda" } */
+/* { dg-require-effective-target openacc_cuda } */

  #include <stdio.h>
  #include <stdlib.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/context-3.c.jj        
2020-01-15 11:05:22.005099463 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/context-3.c   2021-05-26 
12:30:46.841676358 +0200
@@ -1,5 +1,7 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda -lcublas -lcudart" } */
+/* { dg-require-effective-target openacc_cublas } */
+/* { dg-require-effective-target openacc_cudart } */

  #include <stdio.h>
  #include <stdlib.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/lib-72.c.jj   2020-01-15 
11:05:22.009099402 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/lib-72.c      2021-05-26 
12:30:46.841676358 +0200
@@ -1,5 +1,6 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda" } */
+/* { dg-require-effective-target openacc_cuda } */

  #include <stdio.h>
  #include <unistd.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/lib-85.c.jj   2020-01-15 
11:05:22.010099387 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/lib-85.c      2021-05-26 
12:30:46.841676358 +0200
@@ -1,5 +1,6 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda" } */
+/* { dg-require-effective-target openacc_cuda } */

  #include <stdlib.h>
  #include <unistd.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/asyncwait-1.c.jj      
2020-01-15 11:05:22.004099478 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/asyncwait-1.c 2021-05-26 
12:30:46.841676358 +0200
@@ -1,9 +1,10 @@
  /* { dg-do run } */
-/* { dg-additional-options "-lcuda" { target openacc_nvidia_accel_selected } } 
*/
+/* { dg-additional-options "-DUSE_CUDA_H" { target openacc_cuda } } */
+/* { dg-additional-options "-lcuda" { target { openacc_nvidia_accel_selected 
&& openacc_cuda } } } */

  #include <openacc.h>
  #include <stdlib.h>
-#if defined ACC_DEVICE_TYPE_nvidia
+#if defined ACC_DEVICE_TYPE_nvidia && defined USE_CUDA_H
  #include "cuda.h"
  #endif

@@ -13,7 +14,7 @@
  int
  main (int argc, char **argv)
  {
-#if defined ACC_DEVICE_TYPE_nvidia
+#if defined ACC_DEVICE_TYPE_nvidia && defined USE_CUDA_H
      CUresult r;
      CUstream stream1;
  #endif
@@ -22,7 +23,7 @@ main (int argc, char **argv)
      int i;
      int nbytes;

-#if defined ACC_DEVICE_TYPE_nvidia
+#if defined ACC_DEVICE_TYPE_nvidia && defined USE_CUDA_H
      acc_init (acc_device_nvidia);
  #endif

@@ -216,7 +217,7 @@ main (int argc, char **argv)
      }


-#if defined ACC_DEVICE_TYPE_nvidia
+#if defined ACC_DEVICE_TYPE_nvidia && defined USE_CUDA_H
      r = cuStreamCreate (&stream1, CU_STREAM_NON_BLOCKING);
      if (r != CUDA_SUCCESS)
      {
@@ -650,7 +651,7 @@ main (int argc, char **argv)
      }


-#if defined ACC_DEVICE_TYPE_nvidia
+#if defined ACC_DEVICE_TYPE_nvidia && defined USE_CUDA_H
      r = cuStreamCreate (&stream1, CU_STREAM_NON_BLOCKING);
      if (r != CUDA_SUCCESS)
      {
@@ -902,7 +903,7 @@ main (int argc, char **argv)
              abort ();
      }

-#if defined ACC_DEVICE_TYPE_nvidia
+#if defined ACC_DEVICE_TYPE_nvidia && defined USE_CUDA_H
      acc_shutdown (acc_device_nvidia);
  #endif

--- libgomp/testsuite/libgomp.oacc-c-c++-common/context-4.c.jj        
2020-01-15 11:05:22.005099463 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/context-4.c   2021-05-26 
12:30:46.841676358 +0200
@@ -1,5 +1,7 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda -lcublas -lcudart" } */
+/* { dg-require-effective-target openacc_cublas } */
+/* { dg-require-effective-target openacc_cudart } */

  #include <stdio.h>
  #include <stdlib.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/pr87835.c.jj  2020-01-15 
11:05:22.012099357 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/pr87835.c     2021-05-26 
12:30:46.841676358 +0200
@@ -1,5 +1,6 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda" } */
+/* { dg-require-effective-target openacc_cuda } */

  #include <openacc.h>
  #include <stdlib.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/lib-82.c.jj   2020-01-15 
11:05:22.010099387 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/lib-82.c      2021-05-26 
12:30:46.841676358 +0200
@@ -1,5 +1,6 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda" } */
+/* { dg-require-effective-target openacc_cuda } */

  #include <stdio.h>
  #include <stdlib.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/lib-73.c.jj   2020-01-15 
11:05:22.009099402 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/lib-73.c      2021-05-26 
12:30:46.841676358 +0200
@@ -1,5 +1,6 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda" } */
+/* { dg-require-effective-target openacc_cuda } */

  #include <stdio.h>
  #include <unistd.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/lib-83.c.jj   2020-01-15 
11:05:22.010099387 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/lib-83.c      2021-05-26 
12:30:46.842676343 +0200
@@ -1,5 +1,6 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda" } */
+/* { dg-require-effective-target openacc_cuda } */

  #include <stdio.h>
  #include <stdlib.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/lib-78.c.jj   2020-01-15 
11:05:22.009099402 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/lib-78.c      2021-05-26 
12:30:46.842676343 +0200
@@ -1,5 +1,6 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda" } */
+/* { dg-require-effective-target openacc_cuda } */

  #include <stdio.h>
  #include <stdlib.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/lib-76.c.jj   2020-01-15 
11:05:22.009099402 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/lib-76.c      2021-05-26 
12:30:46.842676343 +0200
@@ -1,5 +1,6 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda" } */
+/* { dg-require-effective-target openacc_cuda } */

  #include <stdio.h>
  #include <stdlib.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/lib-84.c.jj   2020-01-15 
11:05:22.010099387 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/lib-84.c      2021-05-26 
12:30:46.842676343 +0200
@@ -1,5 +1,6 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda" } */
+/* { dg-require-effective-target openacc_cuda } */

  #include <stdlib.h>
  #include <unistd.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/acc_get_property-nvptx.c.jj   
2020-02-08 21:30:00.156978896 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/acc_get_property-nvptx.c      
2021-05-26 12:30:46.842676343 +0200
@@ -4,6 +4,7 @@
  /* { dg-additional-sources acc_get_property-aux.c } */
  /* { dg-additional-options "-lcuda -lcudart" } */
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
+/* { dg-require-effective-target openacc_cudart } */

  #include <openacc.h>
  #include <cuda.h>
--- libgomp/testsuite/libgomp.oacc-c-c++-common/lib-79.c.jj   2020-01-15 
11:05:22.009099402 +0100
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/lib-79.c      2021-05-26 
12:30:46.842676343 +0200
@@ -1,5 +1,6 @@
  /* { dg-do run { target openacc_nvidia_accel_selected } } */
  /* { dg-additional-options "-lcuda" } */
+/* { dg-require-effective-target openacc_cuda } */

  #include <stdio.h>
  #include <stdlib.h>
-----------------
Mentor Graphics (Deutschland) GmbH, Arnulfstrasse 201, 80634 München 
Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Frank 
Thürauf

Reply via email to