public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [gomp4] Lack of OpenACC NVPTX devices is not an error during scanning
@ 2015-05-19 10:40 Julian Brown
  2015-05-19 11:02 ` Jakub Jelinek
  2015-05-21 15:57 ` Thomas Schwinge
  0 siblings, 2 replies; 3+ messages in thread
From: Julian Brown @ 2015-05-19 10:40 UTC (permalink / raw)
  To: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 452 bytes --]

Hi,

This patch fixes an oversight whereby if the CUDA libraries are
available for some reason on a system that doesn't actually contain an
nVidia card, an OpenACC program will raise an error if the NVPTX
backend is picked as a default instead of falling back to some other
device instead.

OK for gomp4 branch? For trunk?

Thanks,

Julian

ChangeLog

    libgomp/
    * plugin/plugin-nvptx.c (nvptx_get_num_devices): Return zero
    on cuInit failure.

[-- Attachment #2: no-ptx-devices-not-error-1.diff --]
[-- Type: text/x-patch, Size: 839 bytes --]

commit 696a0d7e22bb8217ff581886cdf0979bfc2e85bb
Author: Julian Brown <julian@codesourcery.com>
Date:   Fri May 15 03:22:56 2015 -0700

    Lack of PTX devices is not an error during scanning.

diff --git a/libgomp/plugin/plugin-nvptx.c b/libgomp/plugin/plugin-nvptx.c
index b36691a..d09a91c 100644
--- a/libgomp/plugin/plugin-nvptx.c
+++ b/libgomp/plugin/plugin-nvptx.c
@@ -781,7 +781,13 @@ nvptx_get_num_devices (void)
      until cuInit has been called.  Just call it now (but don't yet do any
      further initialization).  */
   if (instantiated_devices == 0)
-    cuInit (0);
+    {
+      r = cuInit (0);
+      /* This is not an error: e.g. we may have CUDA libraries installed but
+         no devices available.  */
+      if (r != CUDA_SUCCESS)
+        return 0;
+    }
 
   r = cuDeviceGetCount (&n);
   if (r!= CUDA_SUCCESS)

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [gomp4] Lack of OpenACC NVPTX devices is not an error during scanning
  2015-05-19 10:40 [gomp4] Lack of OpenACC NVPTX devices is not an error during scanning Julian Brown
@ 2015-05-19 11:02 ` Jakub Jelinek
  2015-05-21 15:57 ` Thomas Schwinge
  1 sibling, 0 replies; 3+ messages in thread
From: Jakub Jelinek @ 2015-05-19 11:02 UTC (permalink / raw)
  To: Julian Brown; +Cc: gcc-patches

On Tue, May 19, 2015 at 11:36:58AM +0100, Julian Brown wrote:
> This patch fixes an oversight whereby if the CUDA libraries are
> available for some reason on a system that doesn't actually contain an
> nVidia card, an OpenACC program will raise an error if the NVPTX
> backend is picked as a default instead of falling back to some other
> device instead.
> 
> OK for gomp4 branch? For trunk?
> 
> Thanks,
> 
> Julian
> 
> ChangeLog
> 
>     libgomp/
>     * plugin/plugin-nvptx.c (nvptx_get_num_devices): Return zero
>     on cuInit failure.

LGTM.

	Jakub

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [gomp4] Lack of OpenACC NVPTX devices is not an error during scanning
  2015-05-19 10:40 [gomp4] Lack of OpenACC NVPTX devices is not an error during scanning Julian Brown
  2015-05-19 11:02 ` Jakub Jelinek
@ 2015-05-21 15:57 ` Thomas Schwinge
  1 sibling, 0 replies; 3+ messages in thread
From: Thomas Schwinge @ 2015-05-21 15:57 UTC (permalink / raw)
  To: Julian Brown; +Cc: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 2866 bytes --]

Hi Julian!

On Tue, 19 May 2015 11:36:58 +0100, Julian Brown <julian@codesourcery.com> wrote:
> This patch fixes an oversight whereby if the CUDA libraries are
> available for some reason on a system that doesn't actually contain an
> nVidia card, an OpenACC program will raise an error if the NVPTX
> backend is picked as a default instead of falling back to some other
> device instead.

Thanks for fixing this!  (Has already been committed to trunk in r223352,
and to gomp-4_0-branch in r223351.)

Your patch:

> --- a/libgomp/plugin/plugin-nvptx.c
> +++ b/libgomp/plugin/plugin-nvptx.c
> @@ -781,7 +781,13 @@ nvptx_get_num_devices (void)
>       until cuInit has been called.  Just call it now (but don't yet do any
>       further initialization).  */
>    if (instantiated_devices == 0)
> -    cuInit (0);
> +    {
> +      r = cuInit (0);
> +      /* This is not an error: e.g. we may have CUDA libraries installed but
> +         no devices available.  */
> +      if (r != CUDA_SUCCESS)
> +        return 0;
> +    }
>  
>    r = cuDeviceGetCount (&n);
>    if (r!= CUDA_SUCCESS)

In early March, I had noticed the same problem, and came up with the
following patch -- but :-( unfortunately never got around to pushing it
upstream.  I'm now posting my patch just for completeness; I think yours
is sufficient/better: no safe-guard should be needed to the cuInit call
in nvptx_init, because when that is called, we're rightfully expecting to
be able to initialize a PTX device, and in nvptx_get_num_devices, yours
is "more conservative" in doing the right thing ("no PTX offloading
device available") for all kinds of cuInit errors.

commit 6032dde185d0d45d779a1bbf0a5baee7131c0b8c
Author: Thomas Schwinge <thomas@codesourcery.com>
Date:   Sun Mar 1 14:36:02 2015 +0100

    libgomp nvptx plugin: Gracefully handle CUDA_ERROR_NO_DEVICE.
---
 libgomp/plugin/plugin-nvptx.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git libgomp/plugin/plugin-nvptx.c libgomp/plugin/plugin-nvptx.c
index 78e705f..0c1e826 100644
--- libgomp/plugin/plugin-nvptx.c
+++ libgomp/plugin/plugin-nvptx.c
@@ -592,6 +592,8 @@ nvptx_init (void)
     return -1;
 
   r = cuInit (0);
+  if (r == CUDA_ERROR_NO_DEVICE)
+    r = CUDA_SUCCESS;
   if (r != CUDA_SUCCESS)
     GOMP_PLUGIN_fatal ("cuInit error: %s", cuda_error (r));
 
@@ -715,7 +717,13 @@ nvptx_get_num_devices (void)
      until cuInit has been called.  Just call it now (but don't yet do any
      further initialization).  */
   if (!ptx_inited)
-    cuInit (0);
+    {
+      r = cuInit (0);
+      if (r == CUDA_ERROR_NO_DEVICE)
+	return 0;
+      if (r != CUDA_SUCCESS)
+	GOMP_PLUGIN_fatal ("cuInit error: %s", cuda_error (r));
+    }
 
   r = cuDeviceGetCount (&n);
   if (r!= CUDA_SUCCESS)


Grüße,
 Thomas

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-05-21 15:50 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-05-19 10:40 [gomp4] Lack of OpenACC NVPTX devices is not an error during scanning Julian Brown
2015-05-19 11:02 ` Jakub Jelinek
2015-05-21 15:57 ` Thomas Schwinge

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).