浏览代码

gcc: Make the `vector_scal' example more robust.

* gcc-plugin/examples/vector_scal/vector_scal.c (check): Return a
  `bool'.
  (main): Call `check' before `shutdown'.  Introduce an inner scope so
  that VECTOR is freed before `shutdown' is called (this is necessary
  when CUDA tasks are used.)
Ludovic Courtès 13 年之前
父节点
当前提交
570cafce0e
共有 1 个文件被更改,包括 20 次插入9 次删除
  1. 20 9
      gcc-plugin/examples/vector_scal/vector_scal.c

+ 20 - 9
gcc-plugin/examples/vector_scal/vector_scal.c

@@ -28,6 +28,8 @@
 	- CUDA
 	- Filters
  */
+
+#include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
 
@@ -136,21 +138,24 @@ vector_scal_opencl (size_t size, float vector[size], float factor)
 
 
 #define EPSILON 1e-3
-static int
+static bool
 check (size_t size, float vector[size], float factor)
 {
   size_t i;
+
   for (i = 0; i < size; i++)
     if (vector[i] - i * factor > EPSILON)
-      return 1;
+      return false;
 
-  return 0;
+  return true;
 }
 
 
 int
 main (void)
 {
+  bool valid;
+
 #pragma starpu initialize
 
 #ifdef STARPU_USE_OPENCL
@@ -161,18 +166,24 @@ main (void)
 #define NX     0x100000
 #define FACTOR 3.14
 
-  float vector[NX] __attribute__ ((heap_allocated));
+  {
+    float vector[NX] __attribute__ ((heap_allocated));
 
 #pragma starpu register vector
 
-  size_t i;
-  for (i = 0; i < NX; i++)
-    vector[i] = (float) i;
+    size_t i;
+    for (i = 0; i < NX; i++)
+      vector[i] = (float) i;
 
-  vector_scal (NX, vector, FACTOR);
+    vector_scal (NX, vector, FACTOR);
 
 #pragma starpu wait
+
+    valid = check (NX, vector, FACTOR);
+
+  } /* VECTOR is automatically freed here.  */
+
 #pragma starpu shutdown
 
-  return check (NX, vector, FACTOR) ? EXIT_FAILURE : EXIT_SUCCESS;
+  return valid ? EXIT_SUCCESS : EXIT_FAILURE;
 }