78
78
`starpu_insert_task' arguments. */
79
79
const struct insert_task_argument *expected_insert_task_arguments;
81
/* Expected targets of the codelets submitted. */
82
static int expected_insert_task_targets = STARPU_CPU | STARPU_OPENCL;
82
86
starpu_insert_task (struct starpu_codelet *cl, ...)
84
88
assert (cl->name != NULL && strlen (cl->name) > 0);
85
assert (cl->where == (STARPU_CPU | STARPU_OPENCL));
87
/* TODO: Call `cpu_func' & co. and check whether they do the right
90
assert (cl->cpu_funcs[0] != NULL);
91
assert (cl->opencl_funcs[0] != NULL);
92
assert (cl->cuda_funcs[0] == NULL);
89
assert (cl->where == expected_insert_task_targets);
91
assert ((cl->where & STARPU_CPU) == 0
92
? cl->cpu_funcs[0] == NULL
93
: cl->cpu_funcs[0] != NULL);
94
assert ((cl->where & STARPU_OPENCL) == 0
95
? cl->opencl_funcs[0] == NULL
96
: cl->opencl_funcs[0] != NULL);
97
assert ((cl->where & STARPU_CUDA) == 0
98
? cl->cuda_funcs[0] == NULL
99
: cl->cuda_funcs[0] != NULL);
102
size_t i, scalars, pointers, cl_args_offset;
103
void *pointer_args[123];
104
struct starpu_vector_interface pointer_args_ifaces[123];
105
unsigned char cl_args[234];
97
107
va_start (args, cl);
99
109
const struct insert_task_argument *expected;
100
for (expected = expected_insert_task_arguments, pointer_arg = 0;
110
for (expected = expected_insert_task_arguments,
111
cl_args_offset = 1, scalars = 0, pointers = 0;
101
112
expected->type != 0;
119
130
assert (size == expected->size);
120
131
assert (arg != NULL);
121
132
assert (!memcmp (arg, expected->pointer, size));
134
/* Pack ARG into CL_ARGS. */
135
assert (cl_args_offset + size + sizeof size < sizeof cl_args);
136
memcpy (&cl_args[cl_args_offset], &size, sizeof size);
137
cl_args_offset += sizeof size;
138
memcpy (&cl_args[cl_args_offset], arg, size);
139
cl_args_offset += size;
129
149
starpu_data_handle_t handle;
130
150
handle = starpu_data_lookup (expected->pointer);
131
assert (type == cl->modes[pointer_arg++]);
152
assert (type == cl->modes[pointers]);
132
153
assert (va_arg (args, void *) == handle);
155
< sizeof pointer_args_ifaces / sizeof pointer_args_ifaces[0]);
157
pointer_args_ifaces[pointers].ptr = (uintptr_t) expected->pointer;
158
pointer_args_ifaces[pointers].dev_handle =
159
(uintptr_t) expected->pointer; /* for OpenCL */
160
pointer_args_ifaces[pointers].elemsize = 1;
161
pointer_args_ifaces[pointers].nx = 1;
162
pointer_args_ifaces[pointers].offset = 0;
146
178
tasks_submitted++;
180
/* Finish packing the scalar arguments in CL_ARGS. */
181
cl_args[0] = (unsigned char) scalars;
182
for (i = 0; i < pointers; i++)
183
pointer_args[i] = &pointer_args_ifaces[i];
185
/* Call the codelets. */
186
if (cl->where & STARPU_CPU)
187
cl->cpu_funcs[0] (pointer_args, cl_args);
188
if (cl->where & STARPU_OPENCL)
189
cl->opencl_funcs[0] (pointer_args, cl_args);
190
if (cl->where & STARPU_CUDA)
191
cl->cuda_funcs[0] (pointer_args, cl_args);
165
210
va_start (args, cl_raw_arg);
167
for (arg = 0, offset = 1, size = 0;
212
for (arg = 0, offset = 1;
169
214
arg++, offset += sizeof (size_t) + size)
173
218
argp = va_arg (args, void *);
174
size = *(size_t *) &cl_arg[size];
219
size = *(size_t *) &cl_arg[offset];
176
memcpy (argp, &cl_arg[offset], size);
221
memcpy (argp, &cl_arg[offset + sizeof size], size);
282
/* Number of `starpu_data_acquire' calls. */
283
static unsigned int data_acquire_calls;
285
/* Variable describing the expected `starpu_data_acquire' arguments. */
327
struct data_release_arguments
329
/* Pointer to the data being released. */
333
/* Number of `starpu_data_{acquire,release}' calls. */
334
static unsigned int data_acquire_calls, data_release_calls;
336
/* Variable describing the expected `starpu_data_{acquire,release}'
286
338
struct data_acquire_arguments expected_acquire_arguments;
339
struct data_release_arguments expected_release_arguments;
289
342
starpu_data_acquire (starpu_data_handle_t handle, enum starpu_access_mode mode)