Browse Source

doc: update with OpenCL codelet

Nathalie Furmento 15 years ago
parent
commit
a98e588307
4 changed files with 49 additions and 19 deletions
  1. 8 4
      doc/Makefile.am
  2. 18 3
      doc/starpu.texi
  3. 12 0
      doc/vector_scal_c.texi
  4. 11 12
      examples/basic_examples/vector_scal_opencl.c

+ 8 - 4
doc/Makefile.am

@@ -22,11 +22,15 @@ EXTRA_DIST = starpu.pdf
 
 AM_MAKEINFOHTMLFLAGS = --css-include=$(top_srcdir)/doc/starpu.css --no-headers --no-split
 
-#$(top_srcdir)/doc/starpu.texi: vector_scal_c.texi vector_scal_cuda.texi
+#$(top_srcdir)/doc/starpu.texi: vector_scal_c.texi vector_scal_cuda.texi vector_scal_opencl.texi vector_scal_opencl_codelet.texi
 #vector_scal_c.texi: $(top_srcdir)/examples/basic_examples/vector_scal.c
-#	cat $< | sed 's/{/@{/g' | sed 's/}/@}/g' | sed 's/\t/    /' > $@
+#	cat $< | sed 's/{/@{/g' | sed 's/}/@}/g' | sed 's/\t/    /g' > $@
 #vector_scal_cuda.texi: $(top_srcdir)/examples/basic_examples/vector_scal_cuda.cu
-#	cat $< | sed 's/{/@{/g' | sed 's/}/@}/g' | sed 's/\t/    /' > $@
+#	cat $< | sed 's/{/@{/g' | sed 's/}/@}/g' | sed 's/\t/    /g' > $@
+#vector_scal_opencl.texi: $(top_srcdir)/examples/basic_examples/vector_scal_opencl.c
+#	cat $< | sed 's/{/@{/g' | sed 's/}/@}/g' | sed 's/\t/    /g' > $@
+#vector_scal_opencl_codelet.texi: $(top_srcdir)/examples/basic_examples/vector_scal_opencl_codelet.cl
+#	cat $< | sed 's/{/@{/g' | sed 's/}/@}/g' | sed 's/\t/    /g' > $@
 #
 #CLEANFILES= \
-#	vector_scal_c.texi vector_scal_cuda.texi
+#	vector_scal_c.texi vector_scal_cuda.texi vector_scal_opencl.texi vector_scal_opencl_codelet.texi

+ 18 - 3
doc/starpu.texi

@@ -2127,8 +2127,23 @@ or by disabling CUDA devices:
 @node OpenCL Codelet
 @section OpenCL Codelet
 
-@c @smallexample
-@c @include vector_scal_cuda.texi
-@c @end smallexample
+@menu
+* Invoking the kernel::         
+* Source of the kernel::        
+@end menu
+
+@node Invoking the kernel
+@subsection Invoking the kernel
+
+@smallexample
+@include vector_scal_opencl.texi
+@end smallexample
+
+@node Source of the kernel
+@subsection Source of the kernel
+
+@smallexample
+@include vector_scal_opencl_codelet.texi
+@end smallexample
 
 @bye

+ 12 - 0
doc/vector_scal_c.texi

@@ -62,12 +62,16 @@ static void scal_cpu_func(void *buffers[], void *cl_arg)
 @}
 
 extern void scal_cuda_func(void *buffers[], void *_args);
+extern void scal_opencl_func(void *buffers[], void *_args);
 
 static starpu_codelet cl = @{
     .where = STARPU_CPU
 #ifdef STARPU_USE_CUDA
     	| STARPU_CUDA
 #endif
+#ifdef STARPU_USE_OPENCL
+    	| STARPU_OPENCL
+#endif
     	,
     /* CPU implementation of the codelet */
     .cpu_func = scal_cpu_func,
@@ -75,6 +79,10 @@ static starpu_codelet cl = @{
     /* CUDA implementation of the codelet */
     .cuda_func = scal_cuda_func,
 #endif
+#ifdef STARPU_USE_OPENCL
+    /* OpenCL implementation of the codelet */
+    .opencl_func = scal_opencl_func,
+#endif
     .nbuffers = 1
 @};
 
@@ -92,6 +100,10 @@ int main(int argc, char **argv)
     /* Initialize StarPU with default configuration */
     starpu_init(NULL);
 
+#ifdef STARPU_USE_OPENCL
+        _starpu_opencl_compile_source_to_opencl("examples/basic_examples/vector_scal_opencl_codelet.cl");
+#endif
+
     /* Tell StaPU to associate the "vector" vector with the "vector_handle"
      * identifier. When a task needs to access a piece of data, it should
      * refer to the handle that is associated to it.

+ 11 - 12
examples/basic_examples/vector_scal_opencl.c

@@ -23,31 +23,31 @@
 
 void scal_opencl_func(void *buffers[], void *_args)
 {
-        float *factor = (float *)_args;
-        struct starpu_vector_interface_s *vector = (struct starpu_vector_interface_s *) buffers[0];
+	float *factor = (float *)_args;
+	struct starpu_vector_interface_s *vector = (struct starpu_vector_interface_s *) buffers[0];
 	int id, devid, err;
 	cl_kernel kernel;
 	cl_command_queue queue;
 
-        /* length of the vector */
-        unsigned n = STARPU_GET_VECTOR_NX(vector);
-        /* local copy of the vector pointer */
-        float *val = (float *)STARPU_GET_VECTOR_PTR(vector);
+	/* length of the vector */
+	unsigned n = STARPU_GET_VECTOR_NX(vector);
+	/* local copy of the vector pointer */
+	float *val = (float *)STARPU_GET_VECTOR_PTR(vector);
 
-        id = starpu_worker_get_id();
-        devid = starpu_worker_get_devid(id);
+	id = starpu_worker_get_id();
+	devid = starpu_worker_get_devid(id);
 
 	err = starpu_opencl_load_kernel(&kernel, &queue,
-                                        "examples/basic_examples/vector_scal_opencl_codelet.cl", "vectorScal", devid);
+					"examples/basic_examples/vector_scal_opencl_codelet.cl",
+					"vectorScal", devid);
 	if (err != CL_SUCCESS) STARPU_OPENCL_REPORT_ERROR(err);
 
 	err = 0;
 	err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &val);
 	err = clSetKernelArg(kernel, 1, sizeof(int), &n);
-        err |= clSetKernelArg(kernel, 2, sizeof(float), (void*)factor);
+	err |= clSetKernelArg(kernel, 2, sizeof(float), (void*)factor);
 
 	if (err) STARPU_OPENCL_REPORT_ERROR(err);
-
 	{
 		size_t global=1;
 		size_t local=1;
@@ -58,5 +58,4 @@ void scal_opencl_func(void *buffers[], void *_args)
 	clFinish(queue);
 
 	starpu_opencl_release(kernel);
-
 }