浏览代码

Make tests/datawizard/data_invalidation.c work with OpenCL.

Cyril Roelandt 13 年之前
父节点
当前提交
a2aab0d34e
共有 1 个文件被更改,包括 35 次插入1 次删除
  1. 35 1
      tests/datawizard/data_invalidation.c

+ 35 - 1
tests/datawizard/data_invalidation.c

@@ -21,6 +21,9 @@
 #include <errno.h>
 #include <starpu.h>
 #include <starpu_cuda.h>
+#ifdef STARPU_USE_OPENCL
+#include <starpu_opencl.h>
+#endif
 #include <stdlib.h>
 #include "../helper.h"
 
@@ -50,6 +53,35 @@ static void cuda_memset_codelet(void *descr[], __attribute__ ((unused)) void *_a
 }
 #endif
 
+#ifdef STARPU_USE_OPENCL
+static void opencl_memset_codelet(void *buffers[], void *args)
+{
+	(void) args;
+
+	cl_command_queue queue;
+	int id = starpu_worker_get_id();
+	int devid = starpu_worker_get_devid(id);
+	starpu_opencl_get_queue(devid, &queue);
+
+	cl_mem buffer = (cl_mem) STARPU_VECTOR_GET_DEV_HANDLE(buffers[0]);
+	unsigned length = STARPU_VECTOR_GET_NX(buffers[0]);
+	char *v = malloc(length);
+	STARPU_ASSERT(v != NULL);
+	memset(v, 42, length);
+
+	clEnqueueWriteBuffer(queue,
+			buffer,
+			CL_TRUE,
+			0,      /* offset */
+			length, /* sizeof (char) */
+			v,
+			0,      /* num_events_in_wait_list */
+			NULL,   /* event_wait_list */
+			NULL    /* event */);
+			
+}
+#endif /* !STARPU_USE_OPENCL */
+
 static void cpu_memset_codelet(void *descr[], __attribute__ ((unused)) void *_args)
 {
 	STARPU_SKIP_IF_VALGRIND;
@@ -62,11 +94,13 @@ static void cpu_memset_codelet(void *descr[], __attribute__ ((unused)) void *_ar
 
 static struct starpu_codelet memset_cl =
 {
-	.where = STARPU_CPU|STARPU_CUDA,
 	.cpu_funcs = {cpu_memset_codelet, NULL},
 #ifdef STARPU_USE_CUDA
 	.cuda_funcs = {cuda_memset_codelet, NULL},
 #endif
+#ifdef STARPU_USE_OPENCL
+	.opencl_funcs = {opencl_memset_codelet, NULL},
+#endif
 	.nbuffers = 1,
 	.modes = {STARPU_W}
 };