Prechádzať zdrojové kódy

SOCL: when starpu_init fails, get clGetPlatformIDs to return 0

Nathalie Furmento 13 rokov pred
rodič
commit
3e82805e99
2 zmenil súbory, kde vykonal 36 pridanie a 16 odobranie
  1. 17 15
      socl/src/cl_getplatformids.c
  2. 19 1
      socl/src/init.c

+ 17 - 15
socl/src/cl_getplatformids.c

@@ -16,6 +16,8 @@
 
 #include "socl.h"
 
+extern int _starpu_init_failed;
+
 /**
  * \brief Get StarPU platform ID
  */
@@ -24,24 +26,24 @@ soclGetPlatformIDs(cl_uint          num_entries,
                  cl_platform_id * platforms,
                  cl_uint *        num_platforms) CL_API_SUFFIX__VERSION_1_0
 {
-   if ((num_entries == 0 && platforms != NULL)
-       || (num_platforms == NULL && platforms == NULL))
-	   return CL_INVALID_VALUE;
-
-   if (starpu_opencl_worker_get_count() == 0) {
-      DEBUG_MSG("StarPU didn't find any OpenCL device. Try disabling CUDA support in StarPU (export STARPU_NCUDA=0).\n")
+     if (_starpu_init_failed)
+     {
+	  if (num_platforms != NULL)
+	       *num_platforms = 0;
+	  return CL_SUCCESS;
+     }
 
-      if (num_platforms != NULL)
-         *num_platforms = 0;
-   }
-   else {
+     if ((num_entries == 0 && platforms != NULL)
+	 || (num_platforms == NULL && platforms == NULL))
+	  return CL_INVALID_VALUE;
 
-      if (platforms != NULL)
-         platforms[0] = &socl_platform;
+     else {
+	  if (platforms != NULL)
+	       platforms[0] = &socl_platform;
 
-      if (num_platforms != NULL)
-         *num_platforms = 1;
-   }
+	  if (num_platforms != NULL)
+	       *num_platforms = 1;
+     }
 
    return CL_SUCCESS;
 }

+ 19 - 1
socl/src/init.c

@@ -18,6 +18,8 @@
 #include "gc.h"
 #include "mem_objects.h"
 
+int _starpu_init_failed;
+
 /**
  * Initialize SOCL
  */
@@ -32,7 +34,23 @@ __attribute__((constructor)) static void socl_init() {
 
   mem_object_init();
 
-  starpu_init(&conf);
+  _starpu_init_failed = starpu_init(&conf);
+  if (_starpu_init_failed != 0)
+  {
+       DEBUG_MSG("Error when calling starpu_init: %d\n", _starpu_init_failed);
+  }
+  else {
+       if (starpu_cpu_worker_get_count() == 0)
+       {
+	    DEBUG_MSG("StarPU did not find any CPU device. SOCL needs at least 1 CPU.\n");
+	    _starpu_init_failed = -ENODEV;
+       }
+       if (starpu_opencl_worker_get_count() == 0)
+       {
+	    DEBUG_MSG("StarPU didn't find any OpenCL device. Try disabling CUDA support in StarPU (export STARPU_NCUDA=0).\n");
+	    _starpu_init_failed = -ENODEV;
+       }
+  }
 
   /* Disable dataflow implicit dependencies */
   starpu_data_set_default_sequential_consistency_flag(0);