Explorar o código

examples: when submission fails because it does not find a suitable worker, it is not an error, just skip the example

Nathalie Furmento %!s(int64=13) %!d(string=hai) anos
pai
achega
f766606c07
Modificáronse 3 ficheiros con 49 adicións e 29 borrados
  1. 16 6
      examples/cg/cg.c
  2. 11 11
      examples/cg/cg.h
  3. 22 12
      examples/cg/cg_kernels.c

+ 16 - 6
examples/cg/cg.c

@@ -244,24 +244,29 @@ static void display_matrix(void)
  *	Main loop
  */
 
-static void cg(void)
+static int cg(void)
 {
 	double delta_new, delta_old, delta_0;
 	double alpha, beta;
 
 	int i = 0;
+	int ret;
 
 	/* r <- b */
-	copy_handle(r_handle, b_handle, nblocks);
+	ret = copy_handle(r_handle, b_handle, nblocks);
+	if (ret == -ENODEV) return ret;
 
 	/* r <- r - A x */
-	gemv_kernel(r_handle, A_handle, x_handle, 1.0, -1.0, nblocks, use_reduction); 
+	ret = gemv_kernel(r_handle, A_handle, x_handle, 1.0, -1.0, nblocks, use_reduction); 
+	if (ret == -ENODEV) return ret;
 
 	/* d <- r */
-	copy_handle(d_handle, r_handle, nblocks);
+	ret = copy_handle(d_handle, r_handle, nblocks);
+	if (ret == -ENODEV) return ret;
 
 	/* delta_new = dot(r,r) */
-	dot_kernel(r_handle, r_handle, rtr_handle, nblocks, use_reduction);
+	ret = dot_kernel(r_handle, r_handle, rtr_handle, nblocks, use_reduction);
+	if (ret == -ENODEV) return ret;
 
 	starpu_data_acquire(rtr_handle, STARPU_R);
 	delta_new = rtr;
@@ -393,7 +398,8 @@ int main(int argc, char **argv)
 	register_data();
 	partition_data();
 
-	cg();
+	ret = cg();
+	if (ret == -ENODEV) goto enodev;
 
 	ret = check();
 
@@ -403,4 +409,8 @@ int main(int argc, char **argv)
 	starpu_shutdown();
 
 	return ret;
+
+enodev:
+	starpu_shutdown();
+	return 77;
 }

+ 11 - 11
examples/cg/cg.h

@@ -57,28 +57,28 @@
 #define cublasscal	cublasSscal
 #endif
 
-void dot_kernel(starpu_data_handle_t v1,
-                starpu_data_handle_t v2,
-                starpu_data_handle_t s,
-		unsigned nblocks,
-		int use_reduction);
+int dot_kernel(starpu_data_handle_t v1,
+	       starpu_data_handle_t v2,
+	       starpu_data_handle_t s,
+	       unsigned nblocks,
+	       int use_reduction);
 
-void gemv_kernel(starpu_data_handle_t v1,
+int gemv_kernel(starpu_data_handle_t v1,
                 starpu_data_handle_t matrix, 
                 starpu_data_handle_t v2,
                 TYPE p1, TYPE p2,
 		unsigned nblocks,
 		int use_reduction);
 
-void axpy_kernel(starpu_data_handle_t v1,
+int axpy_kernel(starpu_data_handle_t v1,
 		starpu_data_handle_t v2, TYPE p1,
 		unsigned nblocks);
 
-void scal_axpy_kernel(starpu_data_handle_t v1, TYPE p1,
-			starpu_data_handle_t v2, TYPE p2,
-			unsigned nblocks);
+int scal_axpy_kernel(starpu_data_handle_t v1, TYPE p1,
+		     starpu_data_handle_t v2, TYPE p2,
+		     unsigned nblocks);
 
-void copy_handle(starpu_data_handle_t dst,
+int copy_handle(starpu_data_handle_t dst,
 		starpu_data_handle_t src,
 		unsigned nblocks);
 

+ 22 - 12
examples/cg/cg_kernels.c

@@ -255,16 +255,17 @@ static struct starpu_codelet dot_kernel_cl =
 	.model = &dot_kernel_model
 };
 
-void dot_kernel(starpu_data_handle_t v1,
-		starpu_data_handle_t v2,
-		starpu_data_handle_t s,
-		unsigned nblocks,
-		int use_reduction)
+int dot_kernel(starpu_data_handle_t v1,
+	       starpu_data_handle_t v2,
+	       starpu_data_handle_t s,
+	       unsigned nblocks,
+	       int use_reduction)
 {
 	int ret;
 
 	/* Blank the accumulation variable */
 	ret = starpu_insert_task(&bzero_variable_cl, STARPU_W, s, 0);
+	if (ret == -ENODEV) return ret;
 	STARPU_CHECK_RETURN_VALUE(ret, "starpu_insert_task");
 
 	unsigned b;
@@ -277,6 +278,7 @@ void dot_kernel(starpu_data_handle_t v1,
 					 0);
 		STARPU_CHECK_RETURN_VALUE(ret, "starpu_insert_task");
 	}
+	return 0;
 }
 
 /*
@@ -403,7 +405,7 @@ static struct starpu_codelet gemv_kernel_cl =
 	.model = &gemv_kernel_model
 };
 
-void gemv_kernel(starpu_data_handle_t v1,
+int gemv_kernel(starpu_data_handle_t v1,
 		starpu_data_handle_t matrix,
 		starpu_data_handle_t v2,
 		TYPE p1, TYPE p2,
@@ -419,6 +421,7 @@ void gemv_kernel(starpu_data_handle_t v1,
 					 STARPU_RW, starpu_data_get_sub_data(v1, 1, b2),
 					 STARPU_VALUE, &p1, sizeof(p1),
 					 0);
+		if (ret == -ENODEV) return ret;
 		STARPU_CHECK_RETURN_VALUE(ret, "starpu_insert_task");
 	}
 
@@ -437,6 +440,7 @@ void gemv_kernel(starpu_data_handle_t v1,
 			STARPU_CHECK_RETURN_VALUE(ret, "starpu_insert_task");
 		}
 	}
+	return 0;
 }
 
 /*
@@ -498,9 +502,9 @@ static struct starpu_codelet scal_axpy_kernel_cl =
 	.model = &scal_axpy_kernel_model
 };
 
-void scal_axpy_kernel(starpu_data_handle_t v1, TYPE p1,
-			starpu_data_handle_t v2, TYPE p2,
-			unsigned nblocks)
+int scal_axpy_kernel(starpu_data_handle_t v1, TYPE p1,
+		     starpu_data_handle_t v2, TYPE p2,
+		     unsigned nblocks)
 {
 	int ret;
 	unsigned b;
@@ -512,8 +516,10 @@ void scal_axpy_kernel(starpu_data_handle_t v1, TYPE p1,
 					 STARPU_VALUE, &p1, sizeof(p1),
 					 STARPU_VALUE, &p2, sizeof(p2),
 					 0);
+		if (ret == -ENODEV) return ret;
 		STARPU_CHECK_RETURN_VALUE(ret, "starpu_insert_task");
 	}
+	return 0;
 }
 
 
@@ -570,7 +576,7 @@ static struct starpu_codelet axpy_kernel_cl =
 	.model = &axpy_kernel_model
 };
 
-void axpy_kernel(starpu_data_handle_t v1,
+int axpy_kernel(starpu_data_handle_t v1,
 		starpu_data_handle_t v2, TYPE p1,
 		unsigned nblocks)
 {
@@ -583,8 +589,10 @@ void axpy_kernel(starpu_data_handle_t v1,
 					 STARPU_R,  starpu_data_get_sub_data(v2, 1, b),
 					 STARPU_VALUE, &p1, sizeof(p1),
 					 0);
+		if (ret == -ENODEV) return ret;
 		STARPU_CHECK_RETURN_VALUE(ret, "starpu_insert_task");
 	}
+	return 0;
 }
 
 
@@ -634,7 +642,7 @@ static struct starpu_codelet copy_handle_cl =
 	.model = &copy_handle_model
 };
 
-void copy_handle(starpu_data_handle_t dst, starpu_data_handle_t src, unsigned nblocks)
+int copy_handle(starpu_data_handle_t dst, starpu_data_handle_t src, unsigned nblocks)
 {
 	int ret;
 	unsigned b;
@@ -644,6 +652,8 @@ void copy_handle(starpu_data_handle_t dst, starpu_data_handle_t src, unsigned nb
 					 STARPU_W, starpu_data_get_sub_data(dst, 1, b),
 					 STARPU_R, starpu_data_get_sub_data(src, 1, b),
 					 0);
+		if (ret == -ENODEV) return ret;
 		STARPU_CHECK_RETURN_VALUE(ret, "starpu_insert_task");
 	}
-} 
+	return 0;
+}