Browse Source

starpufft: improve ENODEV error detections

   functions returning a struct starpu_task * will now return NULL when submission fails
   functions calling them and returning void will now return an int, 0 on success or 1 on error
Nathalie Furmento 13 years ago
parent
commit
2fee82fa36

+ 4 - 2
starpufft/examples/testx.c

@@ -222,7 +222,8 @@ int main(int argc, char *argv[])
 	printf("CUDA took %2.2f ms (%2.2f MB/s)\n\n", timing/1000, bytes/timing);
 #endif
 
-	STARPUFFT(execute)(plan, in, out);
+	ret = STARPUFFT(execute)(plan, in, out);
+	if (ret == 1) return 77;
 	STARPUFFT(showstats)(stdout);
 
 #ifdef STARPU_HAVE_FFTW
@@ -236,7 +237,8 @@ int main(int argc, char *argv[])
 	starpu_vector_data_register(&in_handle, 0, (uintptr_t) in, size, sizeof(*in));
 	starpu_vector_data_register(&out_handle, 0, (uintptr_t) out, size, sizeof(*out));
 
-	STARPUFFT(execute_handle)(plan, in_handle, out_handle);
+	ret = STARPUFFT(execute_handle)(plan, in_handle, out_handle);
+	if (ret == 1) return 77;
 
 	starpu_data_unregister(in_handle);
 	starpu_data_unregister(out_handle);

+ 3 - 3
starpufft/starpufft.h

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2009, 2011  Université de Bordeaux 1
- * Copyright (C) 2010  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -39,10 +39,10 @@ starpufft(plan) starpufft(plan_dft_c2r_1d)(int n, unsigned flags); \
 void *starpufft(malloc)(size_t n); \
 void starpufft(free)(void *p); \
 \
-void starpufft(execute)(starpufft(plan) p, void *in, void *out); \
+int starpufft(execute)(starpufft(plan) p, void *in, void *out); \
 struct starpu_task *starpufft(start)(starpufft(plan) p, void *in, void *out); \
 \
-void starpufft(execute_handle)(starpufft(plan) p, starpu_data_handle_t in, starpu_data_handle_t out); \
+int starpufft(execute_handle)(starpufft(plan) p, starpu_data_handle_t in, starpu_data_handle_t out); \
 struct starpu_task *starpufft(start_handle)(starpufft(plan) p, starpu_data_handle_t in, starpu_data_handle_t out); \
 \
 void starpufft(cleanup)(starpufft(plan) p); \

+ 10 - 4
starpufft/starpufftx.c

@@ -268,7 +268,7 @@ STARPUFFT(start_handle)(STARPUFFT(plan) plan, starpu_data_handle_t in, starpu_da
 	return STARPUFFT(start1dC2C)(plan, in, out);
 }
 
-void
+int
 STARPUFFT(execute)(STARPUFFT(plan) plan, void *in, void *out)
 {
 	int ret;
@@ -280,22 +280,28 @@ STARPUFFT(execute)(STARPUFFT(plan) plan, void *in, void *out)
 
 	struct starpu_task *task = STARPUFFT(start)(plan, in, out);
 	gettimeofday(&submit_tasks, NULL);
-	ret = starpu_task_wait(task);
-	STARPU_ASSERT(ret == 0);
+	if (task)
+	{
+	     ret = starpu_task_wait(task);
+	     STARPU_ASSERT(ret == 0);
+	}
 
 	STARPUFFT(cleanup)(plan);
 
 	gettimeofday(&end, NULL);
+	return (task == NULL ? 1 : 0);
 }
 
-void
+int
 STARPUFFT(execute_handle)(STARPUFFT(plan) plan, starpu_data_handle_t in, starpu_data_handle_t out)
 {
 	int ret;
 
 	struct starpu_task *task = STARPUFFT(start_handle)(plan, in, out);
+	if (!task) return 1;
 	ret = starpu_task_wait(task);
 	STARPU_ASSERT(ret == 0);
+	return 0;
 }
 
 /* Destroy FFTW plans, unregister and free buffers, and free tags */

+ 8 - 0
starpufft/starpufftx1d.c

@@ -782,24 +782,31 @@ STARPUFFT(start1dC2C)(STARPUFFT(plan) plan, starpu_data_handle_t in, starpu_data
 if (PARALLEL) {
 	for (z=0; z < plan->totsize1; z++) {
 		ret = starpu_task_submit(plan->twist1_tasks[z]);
+		if (ret == -ENODEV) return NULL;
 		STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
 		ret = starpu_task_submit(plan->fft1_tasks[z]);
+		if (ret == -ENODEV) return NULL;
 		STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
 	}
 
 	ret = starpu_task_submit(plan->join_task);
+	if (ret == -ENODEV) return NULL;
 	STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
 
 	for (z=0; z < plan->totsize3; z++) {
 		ret = starpu_task_submit(plan->twist2_tasks[z]);
+		if (ret == -ENODEV) return NULL;
 		STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
 		ret = starpu_task_submit(plan->fft2_tasks[z]);
+		if (ret == -ENODEV) return NULL;
 		STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
 		ret = starpu_task_submit(plan->twist3_tasks[z]);
+		if (ret == -ENODEV) return NULL;
 		STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
 	}
 
 	ret = starpu_task_submit(plan->end_task);
+	if (ret == -ENODEV) return NULL;
 	STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
 
 	return plan->end_task;
@@ -815,6 +822,7 @@ if (PARALLEL) {
 	task->cl_arg = plan;
 
 	ret = starpu_task_submit(task);
+	if (ret == -ENODEV) return NULL;
 	STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
 	return task;
 }

+ 8 - 0
starpufft/starpufftx2d.c

@@ -780,24 +780,31 @@ STARPUFFT(start2dC2C)(STARPUFFT(plan) plan, starpu_data_handle_t in, starpu_data
 if (PARALLEL) {
 	for (z=0; z < plan->totsize1; z++) {
 		ret = starpu_task_submit(plan->twist1_tasks[z]);
+		if (ret == -ENODEV) return NULL;
 		STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
 		ret = starpu_task_submit(plan->fft1_tasks[z]);
+		if (ret == -ENODEV) return NULL;
 		STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
 	}
 
 	ret = starpu_task_submit(plan->join_task);
+	if (ret == -ENODEV) return NULL;
 	STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
 
 	for (z=0; z < plan->totsize3; z++) {
 		ret = starpu_task_submit(plan->twist2_tasks[z]);
+		if (ret == -ENODEV) return NULL;
 		STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
 		ret = starpu_task_submit(plan->fft2_tasks[z]);
+		if (ret == -ENODEV) return NULL;
 		STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
 		ret = starpu_task_submit(plan->twist3_tasks[z]);
+		if (ret == -ENODEV) return NULL;
 		STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
 	}
 
 	ret = starpu_task_submit(plan->end_task);
+	if (ret == -ENODEV) return NULL;
 	STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
 
 	return plan->end_task;
@@ -813,6 +820,7 @@ if (PARALLEL) {
 	task->cl_arg = plan;
 
 	ret = starpu_task_submit(task);
+	if (ret == -ENODEV) return NULL;
 	STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
 	return task;
 }