[gegl] cl: Keeping track of preferred work group size for each kernel
- From: Victor Matheus de Araujo Oliveira <vmaolive src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] cl: Keeping track of preferred work group size for each kernel
- Date: Fri, 6 Apr 2012 18:48:01 +0000 (UTC)
commit 00d2621b07a6aae4ece5b37b86b0a2009416bc6b
Author: Victor Oliveira <victormatheus gmail com>
Date: Fri Apr 6 14:57:45 2012 -0300
cl: Keeping track of preferred work group size for each kernel
gegl/opencl/gegl-cl-init.c | 16 +++++++++++++---
gegl/opencl/gegl-cl-init.h | 5 +++--
2 files changed, 16 insertions(+), 5 deletions(-)
---
diff --git a/gegl/opencl/gegl-cl-init.c b/gegl/opencl/gegl-cl-init.c
index ade7d5c..6cc67aa 100644
--- a/gegl/opencl/gegl-cl-init.c
+++ b/gegl/opencl/gegl-cl-init.c
@@ -339,7 +339,7 @@ gegl_cl_compile_and_build (const char *program_source, const char *kernel_name[]
guint kernel_n = 0;
while (kernel_name[++kernel_n] != NULL);
- cl_data = (gegl_cl_run_data *) g_malloc(sizeof(gegl_cl_run_data)+sizeof(cl_kernel)*kernel_n);
+ cl_data = (gegl_cl_run_data *) g_new(gegl_cl_run_data, 1);
CL_SAFE_CALL( cl_data->program = gegl_clCreateProgramWithSource(gegl_cl_get_context(), 1, &program_source,
&length, &errcode) );
@@ -371,9 +371,19 @@ gegl_cl_compile_and_build (const char *program_source, const char *kernel_name[]
GEGL_NOTE (GEGL_DEBUG_OPENCL, "Compiling successful\n");
}
+ cl_data->kernel = g_new (cl_kernel, kernel_n);
+ cl_data->work_group_size = g_new (size_t, kernel_n);
+
for (i=0; i<kernel_n; i++)
- CL_SAFE_CALL( cl_data->kernel[i] =
- gegl_clCreateKernel(cl_data->program, kernel_name[i], &errcode) );
+ {
+ CL_SAFE_CALL( cl_data->kernel[i] =
+ gegl_clCreateKernel(cl_data->program, kernel_name[i], &errcode) );
+
+ CL_SAFE_CALL( errcode = gegl_clGetKernelWorkGroupInfo (cl_data->kernel[i], gegl_cl_get_device(), CL_KERNEL_WORK_GROUP_SIZE,
+ sizeof(size_t), &cl_data->work_group_size[i], NULL) );
+
+ g_printf ("%s: %lu (%s)\n", kernel_name[i], cl_data->work_group_size[i], gegl_cl_errstring(errcode));
+ }
g_hash_table_insert(cl_program_hash, g_strdup (program_source), (void*)cl_data);
}
diff --git a/gegl/opencl/gegl-cl-init.h b/gegl/opencl/gegl-cl-init.h
index 8445ae8..0000d81 100644
--- a/gegl/opencl/gegl-cl-init.h
+++ b/gegl/opencl/gegl-cl-init.h
@@ -53,8 +53,9 @@ size_t gegl_cl_get_iter_height (void);
typedef struct
{
- cl_program program;
- cl_kernel kernel[];
+ cl_program *program;
+ cl_kernel *kernel;
+ size_t *work_group_size;
} gegl_cl_run_data;
gegl_cl_run_data *gegl_cl_compile_and_build (const char *program_source,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]