Browse Source

examples/ : free allocated memory and unregister data from StarPU

Nathalie Furmento 14 years ago
parent
commit
0d1ef0f7bb

+ 2 - 0
examples/basic_examples/block.c

@@ -62,6 +62,7 @@ int execute_on(uint32_t where, device_func func, float *block, int pnx, int pny,
 	}
 
 	starpu_task_wait_for_all();
+	starpu_task_destroy(task);
 
 	/* update the array in RAM */
 	starpu_data_unregister(block_handle);
@@ -117,6 +118,7 @@ int main(int argc, char **argv)
         }
 
         FPRINTF(stderr,"TEST %s\n", ret==1?"PASSED":"FAILED");
+	free(block);
 
         starpu_shutdown();
 

+ 3 - 0
examples/basic_examples/hello_world.c

@@ -106,6 +106,9 @@ int main(int argc, char **argv)
 	
 	/* submit the task to StarPU */
 	starpu_task_submit(task);
+
+	/* destroy the task */
+	starpu_task_destroy(task);
 	
 	/* terminate StarPU: statistics and other debug outputs are not
 	 * guaranteed to be generated unless this function is called. Once it

+ 9 - 1
examples/basic_examples/mult.c

@@ -352,14 +352,22 @@ int main(__attribute__ ((unused)) int argc,
 	 * starpu_data_map_filters is called again on C_handle.
 	 * The second argument is the memory node where the different subsets
 	 * should be reassembled, 0 = main memory (RAM) */
+	starpu_data_unpartition(A_handle, 0);
+	starpu_data_unpartition(B_handle, 0);
 	starpu_data_unpartition(C_handle, 0);
 
 	/* stop monitoring matrix C : after this, it is not possible to pass C 
 	 * (or any subset of C) as a codelet input/output. This also implements
 	 * a barrier so that the piece of data is put back into main memory in
 	 * case it was only available on a GPU for instance. */
+	starpu_data_unregister(A_handle);
+	starpu_data_unregister(B_handle);
 	starpu_data_unregister(C_handle);
-	
+
+	free(A);
+	free(B);
+	free(C);
+
 	starpu_shutdown();
 
 	return 0;

+ 2 - 0
examples/basic_examples/vector_scal.c

@@ -127,6 +127,8 @@ int main(int argc, char **argv)
  	 * monitoring it */
 	starpu_data_unregister(vector_handle);
 
+	starpu_task_destroy(task);
+
 #ifdef STARPU_USE_OPENCL
         starpu_opencl_unload_opencl(&opencl_program);
 #endif

+ 1 - 0
examples/callback/callback.c

@@ -63,6 +63,7 @@ int main(int argc, char **argv)
 	starpu_task_submit(task);
 
 	starpu_task_wait_for_all();
+	starpu_data_unregister(handle);
 
 	FPRINTF(stderr, "v -> %d\n", v);
 

+ 3 - 1
examples/filters/fblock.c

@@ -144,6 +144,7 @@ int main(int argc, char **argv)
                         FPRINTF(stderr, "Error when submitting task\n");
                         exit(ret);
                 }
+		starpu_task_destroy(task);
         }
 
         /* Unpartition the data, unregister it from StarPU and shutdown */
@@ -155,7 +156,8 @@ int main(int argc, char **argv)
         FPRINTF(stderr, "OUT Block\n");
         print_block(block, NX, NY, NZ, NX, NX*NY);
 
-	starpu_shutdown();
+	free(block);
 
+	starpu_shutdown();
 	return 0;
 }

+ 1 - 0
examples/filters/fmatrix.c

@@ -88,6 +88,7 @@ int main(int argc, char **argv)
                 task->cl_arg = &factor;
                 task->cl_arg_size = sizeof(factor);
 		starpu_task_submit(task);
+		starpu_task_destroy(task);
 	}
 
         /* Unpartition the data, unregister it from StarPU and shutdown */

+ 1 - 0
examples/filters/fvector.c

@@ -83,6 +83,7 @@ int main(int argc, char **argv)
                 task->cl_arg_size = sizeof(factor);
 
 		starpu_task_submit(task);
+		starpu_task_destroy(task);
 	}
 
 	starpu_data_unpartition(handle, 0);

+ 17 - 8
examples/matvecmult/matvecmult.c

@@ -133,8 +133,14 @@ int main(int argc, char **argv)
         unsigned int mem_size_matrix, mem_size_vector, mem_size_mult;
 
 	starpu_data_handle matrix_handle, vector_handle, mult_handle;
+	int ret, submit;
 
-        starpu_init(&conf);
+        ret = starpu_init(&conf);
+	if (STARPU_UNLIKELY(ret == -ENODEV)) {
+                FPRINTF(stderr, "This application requires an OpenCL worker.\n");
+		starpu_shutdown();
+		exit(0);
+	}
 
         mem_size_matrix = width * height * sizeof(float);
         matrix = (float*)malloc(mem_size_matrix);
@@ -179,20 +185,23 @@ int main(int argc, char **argv)
         task->buffers[2].handle = mult_handle;
         task->buffers[2].mode = STARPU_RW;
 
-        int ret = starpu_task_submit(task);
-        if (STARPU_UNLIKELY(ret == -ENODEV)) {
+        submit = starpu_task_submit(task);
+        if (STARPU_UNLIKELY(submit == -ENODEV)) {
                 FPRINTF(stderr, "No worker may execute this task. This application requires an OpenCL worker.\n");
-                exit(0);
 	}
-
-	starpu_task_wait_for_all();
+	else {
+		starpu_task_wait_for_all();
+	}
 
 	starpu_data_unregister(matrix_handle);
 	starpu_data_unregister(vector_handle);
 	starpu_data_unregister(mult_handle);
 
-        int res = compareL2fe(correctResult, mult, height, 1e-6f);
-        FPRINTF(stdout, "TEST %s\n\n", (res == 0) ? "PASSED" : "FAILED !!!");
+        if (STARPU_LIKELY(submit != -ENODEV)) {
+		int res = compareL2fe(correctResult, mult, height, 1e-6f);
+		FPRINTF(stdout, "TEST %s\n\n", (res == 0) ? "PASSED" : "FAILED !!!");
+	}
+
 #if 0
         printArray(matrix, width*height);
         printArray(vector, width);

+ 6 - 0
examples/reductions/dot_product.c

@@ -206,6 +206,7 @@ int main(int argc, char **argv)
 		struct starpu_task *task = starpu_task_create();
 
 		task->cl = &dot_codelet;
+		task->destroy = 1;
 
 		task->buffers[0].handle = x_handles[block];
 		task->buffers[0].mode = STARPU_R;
@@ -232,6 +233,11 @@ int main(int argc, char **argv)
 
 	starpu_shutdown();
 
+	free(x);
+	free(y);
+	free(x_handles);
+	free(y_handles);
+
 	return 0;
 
 enodev: