Samuel Thibault преди 13 години
родител
ревизия
f4b2c1908e
променени са 5 файла, в които са добавени 137 реда и са изтрити 184 реда
  1. 5 2
      tests/Makefile.am
  2. 2 91
      tests/datawizard/gpu_register.c
  3. 2 91
      tests/datawizard/in_place_partition.c
  4. 108 0
      tests/datawizard/scal.c
  5. 20 0
      tests/datawizard/scal.h

+ 5 - 2
tests/Makefile.am

@@ -22,6 +22,7 @@ AM_LDFLAGS = $(STARPU_CUDA_LDFLAGS) $(STARPU_OPENCL_LDFLAGS)
 
 EXTRA_DIST =					\
 	helper.h				\
+	datawizard/scal.h			\
 	microbenchs/null_kernel_gordon.c	\
 	datawizard/sync_and_notify_data_gordon_kernels.c \
 	datawizard/sync_and_notify_data_opencl_codelet.cl\
@@ -268,7 +269,8 @@ datawizard_sync_and_notify_data_implicit_SOURCES +=	\
 endif
 
 datawizard_in_place_partition_SOURCES =	\
-	datawizard/in_place_partition.c
+	datawizard/in_place_partition.c	\
+	datawizard/scal.c
 if STARPU_USE_CUDA
 datawizard_in_place_partition_SOURCES +=	\
 	datawizard/scal_cuda.cu
@@ -279,7 +281,8 @@ datawizard_in_place_partition_SOURCES +=	\
 endif
 
 datawizard_gpu_register_SOURCES =	\
-	datawizard/gpu_register.c
+	datawizard/gpu_register.c	\
+	datawizard/scal.c
 if STARPU_USE_CUDA
 datawizard_gpu_register_SOURCES +=	\
 	datawizard/scal_cuda.cu

+ 2 - 91
tests/datawizard/gpu_register.c

@@ -17,96 +17,7 @@
 #include <starpu.h>
 #include <starpu_opencl.h>
 #include "../helper.h"
-
-void scal_func_cpu(void *buffers[], void *cl_arg)
-{
-	unsigned i;
-
-	struct starpu_vector_interface *vector = (struct starpu_vector_interface *) buffers[0];
-	unsigned *val = (unsigned *) STARPU_VECTOR_GET_PTR(vector);
-	unsigned n = STARPU_VECTOR_GET_NX(vector);
-
-	/* scale the vector */
-	for (i = 0; i < n; i++)
-		val[i] *= 2;
-}
-
-#ifdef STARPU_USE_CUDA
-extern void scal_func_cuda(void *buffers[], void *cl_arg);
-#endif
-
-#ifdef STARPU_USE_OPENCL
-static struct starpu_opencl_program opencl_program;
-
-void scal_func_opencl(void *buffers[], void *_args)
-{
-	int id, devid;
-        cl_int err;
-	cl_kernel kernel;
-	cl_command_queue queue;
-	cl_event event;
-
-	unsigned n = STARPU_VECTOR_GET_NX(buffers[0]);
-	cl_mem val = (cl_mem)STARPU_VECTOR_GET_DEV_HANDLE(buffers[0]);
-	unsigned offset = STARPU_VECTOR_GET_OFFSET(buffers[0]);
-
-	id = starpu_worker_get_id();
-	devid = starpu_worker_get_devid(id);
-
-	err = starpu_opencl_load_kernel(&kernel, &queue, &opencl_program, "vector_mult_opencl", devid);
-	if (err != CL_SUCCESS) STARPU_OPENCL_REPORT_ERROR(err);
-
-	err = clSetKernelArg(kernel, 0, sizeof(val), &val);
-	err |= clSetKernelArg(kernel, 1, sizeof(offset), &offset);
-	err |= clSetKernelArg(kernel, 2, sizeof(n), &n);
-	if (err) STARPU_OPENCL_REPORT_ERROR(err);
-
-	{
-		size_t global=n;
-		size_t local;
-                size_t s;
-                cl_device_id device;
-
-                starpu_opencl_get_device(devid, &device);
-
-                err = clGetKernelWorkGroupInfo (kernel, device, CL_KERNEL_WORK_GROUP_SIZE, sizeof(local), &local, &s);
-                if (err != CL_SUCCESS) STARPU_OPENCL_REPORT_ERROR(err);
-                if (local > global) local=global;
-
-		err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, &local, 0, NULL, &event);
-		if (err != CL_SUCCESS) STARPU_OPENCL_REPORT_ERROR(err);
-	}
-
-	clFinish(queue);
-	starpu_opencl_collect_stats(event);
-	clReleaseEvent(event);
-
-	starpu_opencl_release_kernel(kernel);
-}
-#endif
-
-static struct starpu_codelet codelet =
-{
-        .where = STARPU_CPU
-#ifdef STARPU_USE_CUDA
-		| STARPU_CUDA
-#endif
-#ifdef STARPU_USE_OPENCL
-		| STARPU_OPENCL
-#endif
-		,
-	.cpu_funcs = { scal_func_cpu, NULL },
-#ifdef STARPU_USE_OPENCL
-	.opencl_funcs = { scal_func_opencl, NULL },
-#endif
-#ifdef STARPU_USE_CUDA
-	.cuda_funcs = { scal_func_cuda, NULL },
-#endif
-	.modes = { STARPU_RW },
-        .model = NULL,
-        .nbuffers = 1
-};
-
+#include "scal.h"
 
 int main(int argc, char **argv)
 {
@@ -168,7 +79,7 @@ int main(int argc, char **argv)
 		struct starpu_task *task = starpu_task_create();
 
 		task->handles[0] = starpu_data_get_sub_data(handle, 1, i);
-		task->cl = &codelet;
+		task->cl = &scal_codelet;
 		task->execute_on_a_specific_worker = 1;
 		task->workerid = i;
 

+ 2 - 91
tests/datawizard/in_place_partition.c

@@ -17,96 +17,7 @@
 #include <starpu.h>
 #include <starpu_opencl.h>
 #include "../helper.h"
-
-void scal_func_cpu(void *buffers[], void *cl_arg)
-{
-	unsigned i;
-
-	struct starpu_vector_interface *vector = (struct starpu_vector_interface *) buffers[0];
-	unsigned *val = (unsigned *) STARPU_VECTOR_GET_PTR(vector);
-	unsigned n = STARPU_VECTOR_GET_NX(vector);
-
-	/* scale the vector */
-	for (i = 0; i < n; i++)
-		val[i] *= 2;
-}
-
-#ifdef STARPU_USE_CUDA
-extern void scal_func_cuda(void *buffers[], void *cl_arg);
-#endif
-
-#ifdef STARPU_USE_OPENCL
-static struct starpu_opencl_program opencl_program;
-
-void scal_func_opencl(void *buffers[], void *_args)
-{
-	int id, devid;
-        cl_int err;
-	cl_kernel kernel;
-	cl_command_queue queue;
-	cl_event event;
-
-	unsigned n = STARPU_VECTOR_GET_NX(buffers[0]);
-	cl_mem val = (cl_mem)STARPU_VECTOR_GET_DEV_HANDLE(buffers[0]);
-	unsigned offset = STARPU_VECTOR_GET_OFFSET(buffers[0]);
-
-	id = starpu_worker_get_id();
-	devid = starpu_worker_get_devid(id);
-
-	err = starpu_opencl_load_kernel(&kernel, &queue, &opencl_program, "vector_mult_opencl", devid);
-	if (err != CL_SUCCESS) STARPU_OPENCL_REPORT_ERROR(err);
-
-	err = clSetKernelArg(kernel, 0, sizeof(val), &val);
-	err |= clSetKernelArg(kernel, 1, sizeof(offset), &offset);
-	err |= clSetKernelArg(kernel, 2, sizeof(n), &n);
-	if (err) STARPU_OPENCL_REPORT_ERROR(err);
-
-	{
-		size_t global=n;
-		size_t local;
-                size_t s;
-                cl_device_id device;
-
-                starpu_opencl_get_device(devid, &device);
-
-                err = clGetKernelWorkGroupInfo (kernel, device, CL_KERNEL_WORK_GROUP_SIZE, sizeof(local), &local, &s);
-                if (err != CL_SUCCESS) STARPU_OPENCL_REPORT_ERROR(err);
-                if (local > global) local=global;
-
-		err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, &local, 0, NULL, &event);
-		if (err != CL_SUCCESS) STARPU_OPENCL_REPORT_ERROR(err);
-	}
-
-	clFinish(queue);
-	starpu_opencl_collect_stats(event);
-	clReleaseEvent(event);
-
-	starpu_opencl_release_kernel(kernel);
-}
-#endif
-
-static struct starpu_codelet codelet =
-{
-        .where = STARPU_CPU
-#ifdef STARPU_USE_CUDA
-		| STARPU_CUDA
-#endif
-#ifdef STARPU_USE_OPENCL
-		| STARPU_OPENCL
-#endif
-		,
-	.cpu_funcs = { scal_func_cpu, NULL },
-#ifdef STARPU_USE_OPENCL
-	.opencl_funcs = { scal_func_opencl, NULL },
-#endif
-#ifdef STARPU_USE_CUDA
-	.cuda_funcs = { scal_func_cuda, NULL },
-#endif
-	.modes = { STARPU_RW },
-        .model = NULL,
-        .nbuffers = 1
-};
-
+#include "scal.h"
 
 int main(int argc, char **argv)
 {
@@ -147,7 +58,7 @@ int main(int argc, char **argv)
 		struct starpu_task *task = starpu_task_create();
 
 		task->handles[0] = starpu_data_get_sub_data(handle, 1, i);
-		task->cl = &codelet;
+		task->cl = &scal_codelet;
 		task->execute_on_a_specific_worker = 1;
 		task->workerid = i;
 

+ 108 - 0
tests/datawizard/scal.c

@@ -0,0 +1,108 @@
+/* StarPU --- Runtime system for heterogeneous multicore architectures.
+ *
+ * Copyright (C) 2011  Université de Bordeaux 1
+ *
+ * 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
+ * the Free Software Foundation; either version 2.1 of the License, or (at
+ * your option) any later version.
+ *
+ * StarPU is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * See the GNU Lesser General Public License in COPYING.LGPL for more details.
+ */
+
+#include <starpu.h>
+#include <starpu_opencl.h>
+
+static void scal_func_cpu(void *buffers[], void *cl_arg)
+{
+	unsigned i;
+
+	struct starpu_vector_interface *vector = (struct starpu_vector_interface *) buffers[0];
+	unsigned *val = (unsigned *) STARPU_VECTOR_GET_PTR(vector);
+	unsigned n = STARPU_VECTOR_GET_NX(vector);
+
+	/* scale the vector */
+	for (i = 0; i < n; i++)
+		val[i] *= 2;
+}
+
+#ifdef STARPU_USE_CUDA
+extern void scal_func_cuda(void *buffers[], void *cl_arg);
+#endif
+
+#ifdef STARPU_USE_OPENCL
+struct starpu_opencl_program opencl_program;
+
+static void scal_func_opencl(void *buffers[], void *_args)
+{
+	int id, devid;
+        cl_int err;
+	cl_kernel kernel;
+	cl_command_queue queue;
+	cl_event event;
+
+	unsigned n = STARPU_VECTOR_GET_NX(buffers[0]);
+	cl_mem val = (cl_mem)STARPU_VECTOR_GET_DEV_HANDLE(buffers[0]);
+	unsigned offset = STARPU_VECTOR_GET_OFFSET(buffers[0]);
+
+	id = starpu_worker_get_id();
+	devid = starpu_worker_get_devid(id);
+
+	err = starpu_opencl_load_kernel(&kernel, &queue, &opencl_program, "vector_mult_opencl", devid);
+	if (err != CL_SUCCESS) STARPU_OPENCL_REPORT_ERROR(err);
+
+	err = clSetKernelArg(kernel, 0, sizeof(val), &val);
+	err |= clSetKernelArg(kernel, 1, sizeof(offset), &offset);
+	err |= clSetKernelArg(kernel, 2, sizeof(n), &n);
+	if (err) STARPU_OPENCL_REPORT_ERROR(err);
+
+	{
+		size_t global=n;
+		size_t local;
+                size_t s;
+                cl_device_id device;
+
+                starpu_opencl_get_device(devid, &device);
+
+                err = clGetKernelWorkGroupInfo (kernel, device, CL_KERNEL_WORK_GROUP_SIZE, sizeof(local), &local, &s);
+                if (err != CL_SUCCESS) STARPU_OPENCL_REPORT_ERROR(err);
+                if (local > global) local=global;
+
+		err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, &local, 0, NULL, &event);
+		if (err != CL_SUCCESS) STARPU_OPENCL_REPORT_ERROR(err);
+	}
+
+	clFinish(queue);
+	starpu_opencl_collect_stats(event);
+	clReleaseEvent(event);
+
+	starpu_opencl_release_kernel(kernel);
+}
+#endif
+
+struct starpu_codelet scal_codelet =
+{
+        .where = STARPU_CPU
+#ifdef STARPU_USE_CUDA
+		| STARPU_CUDA
+#endif
+#ifdef STARPU_USE_OPENCL
+		| STARPU_OPENCL
+#endif
+		,
+	.cpu_funcs = { scal_func_cpu, NULL },
+#ifdef STARPU_USE_OPENCL
+	.opencl_funcs = { scal_func_opencl, NULL },
+#endif
+#ifdef STARPU_USE_CUDA
+	.cuda_funcs = { scal_func_cuda, NULL },
+#endif
+	.modes = { STARPU_RW },
+        .model = NULL,
+        .nbuffers = 1
+};
+

+ 20 - 0
tests/datawizard/scal.h

@@ -0,0 +1,20 @@
+/* StarPU --- Runtime system for heterogeneous multicore architectures.
+ *
+ * Copyright (C) 2011  Université de Bordeaux 1
+ *
+ * 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
+ * the Free Software Foundation; either version 2.1 of the License, or (at
+ * your option) any later version.
+ *
+ * StarPU is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * See the GNU Lesser General Public License in COPYING.LGPL for more details.
+ */
+
+#include <starpu.h>
+
+extern struct starpu_codelet scal_codelet;
+extern struct starpu_opencl_program opencl_program;