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