|
@@ -172,6 +172,15 @@ int _starpu_codelet_pack_args(void **arg_buffer, size_t arg_buffer_size, va_list
|
|
|
{
|
|
|
(void)va_arg(varg_list, void *);
|
|
|
}
|
|
|
+ else if (arg_type==STARPU_FREE_DEP_CALLBACK)
|
|
|
+ {
|
|
|
+ va_arg(varg_list, _starpu_callback_func_t);
|
|
|
+ va_arg(varg_list, void *);
|
|
|
+ }
|
|
|
+ else if (arg_type==STARPU_FREE_DEP_CALLBACK_ARG)
|
|
|
+ {
|
|
|
+ (void)va_arg(varg_list, void *);
|
|
|
+ }
|
|
|
else if (arg_type==STARPU_PRIORITY)
|
|
|
{
|
|
|
(void)va_arg(varg_list, int);
|
|
@@ -228,6 +237,11 @@ int _starpu_insert_task_create_and_submit(void *arg_buffer, size_t arg_buffer_si
|
|
|
|
|
|
cl_arg_wrapper->callback_func = NULL;
|
|
|
|
|
|
+ struct insert_task_cb_wrapper *free_dep_cl_arg_wrapper = (struct insert_task_cb_wrapper *) malloc(sizeof(struct insert_task_cb_wrapper));
|
|
|
+ STARPU_ASSERT(free_dep_cl_arg_wrapper);
|
|
|
+
|
|
|
+ free_dep_cl_arg_wrapper->callback_func = NULL;
|
|
|
+
|
|
|
while((arg_type = va_arg(varg_list, int)) != 0)
|
|
|
{
|
|
|
if (arg_type & STARPU_R || arg_type & STARPU_W || arg_type & STARPU_SCRATCH || arg_type & STARPU_REDUX)
|
|
@@ -296,6 +310,20 @@ int _starpu_insert_task_create_and_submit(void *arg_buffer, size_t arg_buffer_si
|
|
|
void *callback_arg = va_arg(varg_list, void *);
|
|
|
cl_arg_wrapper->callback_arg = callback_arg;
|
|
|
}
|
|
|
+ else if (arg_type==STARPU_FREE_DEP_CALLBACK)
|
|
|
+ {
|
|
|
+ void (*callback_func)(void *);
|
|
|
+ void *callback_arg;
|
|
|
+ callback_func = va_arg(varg_list, _starpu_callback_func_t);
|
|
|
+ callback_arg = va_arg(varg_list, void *);
|
|
|
+ free_dep_cl_arg_wrapper->callback_func = callback_func;
|
|
|
+ free_dep_cl_arg_wrapper->callback_arg = callback_arg;
|
|
|
+ }
|
|
|
+ else if (arg_type==STARPU_FREE_DEP_CALLBACK_ARG)
|
|
|
+ {
|
|
|
+ void *callback_arg = va_arg(varg_list, void *);
|
|
|
+ cl_arg_wrapper->callback_arg = callback_arg;
|
|
|
+ }
|
|
|
else if (arg_type==STARPU_PRIORITY)
|
|
|
{
|
|
|
/* Followed by a priority level */
|
|
@@ -346,6 +374,9 @@ int _starpu_insert_task_create_and_submit(void *arg_buffer, size_t arg_buffer_si
|
|
|
(*task)->callback_func = starpu_task_insert_callback_wrapper;
|
|
|
(*task)->callback_arg = cl_arg_wrapper;
|
|
|
|
|
|
+ (*task)->prolog_func = starpu_task_insert_callback_wrapper;
|
|
|
+ (*task)->prolog_arg = cl_arg_wrapper;
|
|
|
+
|
|
|
int ret = starpu_task_submit(*task);
|
|
|
|
|
|
if (STARPU_UNLIKELY(ret == -ENODEV))
|
|
@@ -356,6 +387,7 @@ int _starpu_insert_task_create_and_submit(void *arg_buffer, size_t arg_buffer_si
|
|
|
(*task)->cl->name ? (*task)->cl->name :
|
|
|
((*task)->cl->model && (*task)->cl->model->symbol)?(*task)->cl->model->symbol:"none");
|
|
|
free(cl_arg_wrapper);
|
|
|
+ free(free_dep_cl_arg_wrapper);
|
|
|
}
|
|
|
|
|
|
return ret;
|