|
@@ -26,6 +26,7 @@ struct _UfoLaminoBpTaskPrivate {
|
|
|
gint proj_idx;
|
|
|
CLParameters params;
|
|
|
gboolean cleaned;
|
|
|
+ gboolean produced;
|
|
|
};
|
|
|
|
|
|
static void ufo_task_interface_init (UfoTaskIface *iface);
|
|
@@ -111,7 +112,7 @@ ufo_lamino_bp_task_get_structure (UfoTask *task,
|
|
|
UfoInputParam **input_params,
|
|
|
UfoTaskMode *mode)
|
|
|
{
|
|
|
- *mode = UFO_TASK_MODE_REDUCE;
|
|
|
+ *mode = UFO_TASK_MODE_REDUCTOR;
|
|
|
*n_inputs = 1;
|
|
|
*input_params = g_new0 (UfoInputParam, 1);
|
|
|
(*input_params)[0].n_dims = 2;
|
|
@@ -121,10 +122,10 @@ static gboolean
|
|
|
ufo_lamino_bp_task_process (UfoGpuTask *task,
|
|
|
UfoBuffer **inputs,
|
|
|
UfoBuffer *output,
|
|
|
- UfoRequisition *requisition,
|
|
|
- UfoGpuNode *node)
|
|
|
+ UfoRequisition *requisition)
|
|
|
{
|
|
|
UfoLaminoBpTaskPrivate *priv;
|
|
|
+ UfoGpuNode *node;
|
|
|
cl_command_queue cmd_queue;
|
|
|
cl_mem in_mem;
|
|
|
cl_mem out_mem;
|
|
@@ -153,6 +154,7 @@ ufo_lamino_bp_task_process (UfoGpuTask *task,
|
|
|
priv->params.mat_5 = cg * ct;
|
|
|
|
|
|
// send parameters to GPU
|
|
|
+ node = UFO_GPU_NODE (ufo_task_node_get_proc_node (UFO_TASK_NODE (task)));
|
|
|
cmd_queue = ufo_gpu_node_get_cmd_queue (node);
|
|
|
|
|
|
UFO_RESOURCES_CHECK_CLERR (clEnqueueWriteBuffer (cmd_queue,
|
|
@@ -189,17 +191,22 @@ ufo_lamino_bp_task_process (UfoGpuTask *task,
|
|
|
return TRUE;
|
|
|
}
|
|
|
|
|
|
-static void
|
|
|
-ufo_lamino_bp_task_reduce (UfoGpuTask *task,
|
|
|
- UfoBuffer *output,
|
|
|
- UfoRequisition *requisition,
|
|
|
- UfoGpuNode *node)
|
|
|
+static gboolean
|
|
|
+ufo_lamino_bp_task_generate (UfoGpuTask *task,
|
|
|
+ UfoBuffer *output,
|
|
|
+ UfoRequisition *requisition)
|
|
|
{
|
|
|
UfoLaminoBpTaskPrivate *priv;
|
|
|
+ UfoGpuNode *node;
|
|
|
cl_command_queue cmd_queue;
|
|
|
cl_mem out_mem;
|
|
|
|
|
|
priv = UFO_LAMINO_BP_TASK_GET_PRIVATE (task);
|
|
|
+
|
|
|
+ if (priv->produced)
|
|
|
+ return FALSE;
|
|
|
+
|
|
|
+ node = UFO_GPU_NODE (ufo_task_node_get_proc_node (UFO_TASK_NODE (task)));
|
|
|
cmd_queue = ufo_gpu_node_get_cmd_queue (node);
|
|
|
out_mem = ufo_buffer_get_device_array (output, cmd_queue);
|
|
|
|
|
@@ -211,6 +218,8 @@ ufo_lamino_bp_task_reduce (UfoGpuTask *task,
|
|
|
UFO_RESOURCES_CHECK_CLERR (clEnqueueNDRangeKernel (cmd_queue, priv->norm_kernel,
|
|
|
3, NULL, requisition->dims, NULL,
|
|
|
0, NULL, NULL));
|
|
|
+ priv->produced = TRUE;
|
|
|
+ return TRUE;
|
|
|
}
|
|
|
|
|
|
static UfoNode *
|
|
@@ -355,7 +364,7 @@ static void
|
|
|
ufo_gpu_task_interface_init (UfoGpuTaskIface *iface)
|
|
|
{
|
|
|
iface->process = ufo_lamino_bp_task_process;
|
|
|
- iface->reduce = ufo_lamino_bp_task_reduce;
|
|
|
+ iface->generate = ufo_lamino_bp_task_generate;
|
|
|
}
|
|
|
|
|
|
static void
|
|
@@ -464,4 +473,5 @@ ufo_lamino_bp_task_init(UfoLaminoBpTask *self)
|
|
|
self->priv = priv = UFO_LAMINO_BP_TASK_GET_PRIVATE(self);
|
|
|
priv->param_mem = NULL;
|
|
|
priv->cleaned = FALSE;
|
|
|
+ priv->produced = FALSE;
|
|
|
}
|