|
@@ -126,218 +126,6 @@ void starpu_codelet_unpack_discard_arg(struct starpu_codelet_pack_arg_data *stat
|
|
|
state->nargs++;
|
|
|
}
|
|
|
|
|
|
-int _starpu_codelet_pack_args(void **arg_buffer, size_t *arg_buffer_size, va_list varg_list)
|
|
|
-{
|
|
|
- int arg_type;
|
|
|
-
|
|
|
- struct starpu_codelet_pack_arg_data state;
|
|
|
- starpu_codelet_pack_arg_init(&state);
|
|
|
-
|
|
|
- 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)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, starpu_data_handle_t);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_DATA_ARRAY)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, starpu_data_handle_t*);
|
|
|
- (void)va_arg(varg_list, int);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_DATA_MODE_ARRAY)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, struct starpu_data_descr*);
|
|
|
- (void)va_arg(varg_list, int);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_VALUE)
|
|
|
- {
|
|
|
- /* We have a constant value: this should be followed by a pointer to the cst value and the size of the constant */
|
|
|
- void *ptr = va_arg(varg_list, void *);
|
|
|
- size_t ptr_size = va_arg(varg_list, size_t);
|
|
|
-
|
|
|
- starpu_codelet_pack_arg(&state, ptr, ptr_size);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_CL_ARGS)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, void *);
|
|
|
- (void)va_arg(varg_list, size_t);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_CL_ARGS_NFREE)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, void *);
|
|
|
- (void)va_arg(varg_list, size_t);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_TASK_DEPS_ARRAY)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, unsigned);
|
|
|
- (void)va_arg(varg_list, struct starpu_task **);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_TASK_END_DEPS_ARRAY)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, unsigned);
|
|
|
- (void)va_arg(varg_list, struct starpu_task **);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_CALLBACK)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, _starpu_callback_func_t);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_CALLBACK_WITH_ARG)
|
|
|
- {
|
|
|
- va_arg(varg_list, _starpu_callback_func_t);
|
|
|
- va_arg(varg_list, void *);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_CALLBACK_WITH_ARG_NFREE)
|
|
|
- {
|
|
|
- va_arg(varg_list, _starpu_callback_func_t);
|
|
|
- va_arg(varg_list, void *);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_CALLBACK_ARG)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, void *);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_CALLBACK_ARG_NFREE)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, void *);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_EPILOGUE_CALLBACK)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, _starpu_callback_func_t);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_EPILOGUE_CALLBACK_ARG)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, void *);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_PROLOGUE_CALLBACK)
|
|
|
- {
|
|
|
- va_arg(varg_list, _starpu_callback_func_t);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_PROLOGUE_CALLBACK_ARG)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, void *);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_PROLOGUE_CALLBACK_ARG_NFREE)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, void *);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_PROLOGUE_CALLBACK_POP)
|
|
|
- {
|
|
|
- va_arg(varg_list, _starpu_callback_func_t);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_PROLOGUE_CALLBACK_POP_ARG)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, void *);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_PROLOGUE_CALLBACK_POP_ARG_NFREE)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, void *);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_PRIORITY)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, int);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_EXECUTE_ON_NODE)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, int);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_EXECUTE_ON_DATA)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, starpu_data_handle_t);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_EXECUTE_WHERE)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, unsigned long long);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_EXECUTE_ON_WORKER)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, int);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_WORKER_ORDER)
|
|
|
- {
|
|
|
- va_arg(varg_list, unsigned);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_SCHED_CTX)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, unsigned);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_HYPERVISOR_TAG)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, int);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_POSSIBLY_PARALLEL)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, unsigned);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_FLOPS)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, double);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_TAG || arg_type==STARPU_TAG_ONLY)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, starpu_tag_t);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_NAME)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, const char *);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_NODE_SELECTION_POLICY)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, int);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_TASK_COLOR)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, int);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_TASK_SYNCHRONOUS)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, int);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_HANDLES_SEQUENTIAL_CONSISTENCY)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, unsigned char *);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_TASK_END_DEP)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, int);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_TASK_WORKERIDS)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, unsigned);
|
|
|
- (void)va_arg(varg_list, uint32_t*);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_SEQUENTIAL_CONSISTENCY)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, unsigned);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_TASK_PROFILING_INFO)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, struct starpu_profiling_task_info *);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_TASK_NO_SUBMITORDER)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, unsigned);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_TASK_SCHED_DATA)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, void *);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_TASK_FILE)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, const char *);
|
|
|
- }
|
|
|
- else if (arg_type==STARPU_TASK_LINE)
|
|
|
- {
|
|
|
- (void)va_arg(varg_list, int);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- STARPU_ABORT_MSG("Unrecognized argument %d, did you perhaps forget to end arguments with 0?\n", arg_type);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- starpu_codelet_pack_arg_fini(&state, arg_buffer, arg_buffer_size);
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
void starpu_task_insert_data_make_room(struct starpu_codelet *cl, struct starpu_task *task, int *allocated_buffers, int current_buffer, int room)
|
|
|
{
|
|
|
if (current_buffer + room > STARPU_NMAXBUFS)
|