Arax -8d09c51940345c86062e8ef2427c705ae66e5926
A Runtime Framework for Decoupling Applications from Heterogeneous Accelerators
Loading...
Searching...
No Matches
arax_task.c
Go to the documentation of this file.
1#include "arax.h"
2#include "arax_pipe.h"
3#include "arax_data.h"
4#include "utils/timer.h"
5#include <stdlib.h>
6
7arax_task_msg_s* arax_task_alloc(arax_pipe_s *vpipe, arax_accel *accel, arax_proc *proc, size_t host_size, int ins,
8 arax_data **dev_in, int outs, arax_data **dev_out)
9{
10 arax_assert(accel);
11 arax_assert(proc);
12 // Size of io array
13 const size_t io_size = sizeof(arax_data *) * (ins + outs);
14
15 arax_task_msg_s *task;
16
17 task = (arax_task_msg_s *) arax_object_register(&(vpipe->objs),
18 ARAX_TYPE_TASK, "Task",
19 sizeof(arax_task_msg_s) + io_size + host_size, 1);
20
21 if (!task) // GCOV_EXCL_LINE
22 return 0; // GCOV_EXCL_LINE
23
24 async_completion_init(&(vpipe->async), &(task->done));
25
26 task->accel = accel;
27 task->proc = proc;
28 task->pipe = vpipe;
29 task->in_count = ins;
30 task->out_count = outs;
31 task->host_size = host_size;
32
33 arax_data **dest = task->io;
34 int cnt;
35
36 for (cnt = 0; cnt < ins; cnt++, dest++) {
37 *dest = dev_in[cnt];
38 arax_data_input_init(*dest, accel);
39 arax_data_annotate(*dest, "%s:in[%d]", ((arax_proc_s *) proc)->obj.name, cnt);
40 }
41
42 for (cnt = 0; cnt < outs; cnt++, dest++) {
43 *dest = dev_out[cnt];
44 arax_data_output_init(*dest, accel);
45 arax_data_annotate(*dest, "%s:out[%d]", ((arax_proc_s *) proc)->obj.name, cnt);
46 }
47
48 return task;
49} /* arax_task_alloc */
50
51void* arax_task_host_data(arax_task_msg_s *task, size_t size)
52{
54 arax_assert(size == task->host_size);
55
56 if (task->host_size == 0)
57 return 0;
58
59 const size_t io_size = sizeof(arax_data *) * (task->in_count + task->out_count);
60
61 return (char *) (task + 1) + io_size;
62}
63
65{
66 arax_object_s *accel = task->accel;
67
69
71
73 task->state = task_issued;
74 arax_vaccel_add_task((arax_vaccel_s *) accel, task);
75}
76
82
84{
85 msg->state = state;
87}
88
90{
91 arax_task_msg_s *_task = (arax_task_msg_s *) obj;
92 int cnt;
93
94 for (cnt = 0; cnt < _task->in_count + _task->out_count; cnt++) {
95 // printf("\t\tboom task data free %p\n",_task->io[cnt]);
96 arax_object_ref_dec(_task->io[cnt]);
97 }
98
99 if (_task->accel)
101 else
102 fprintf(stderr, "arax_task(%p,%s) dtor called, task possibly unissued!\n", obj, obj->name);
103}
struct arax_pipe arax_pipe_s
void arax_accel
Definition arax_types.h:9
void arax_proc
Definition arax_types.h:14
arax_task_state_e
Definition arax_types.h:62
@ task_issued
Definition arax_types.h:64
@ task_completed
Definition arax_types.h:65
void arax_data
Definition arax_types.h:56
#define arax_assert(EXPR)
Definition arax_assert.h:7
#define arax_assert_obj(OBJ, TYPE)
Definition arax_assert.h:12
#define utils_timer_set(NAME, WHAT)
Definition timer.h:13
#define arax_data_annotate(DATA,...)
Definition arax_data.h:158
@ ARAX_TYPE_VIRT_ACCEL
Definition arax_object.h:17
@ ARAX_TYPE_TASK
Definition arax_object.h:20
#define ARAX_OBJ_DTOR_DECL(TYPE)
struct arax_task_msg arax_task_msg_s
void async_completion_init(async_meta_s *meta, async_completion_s *completion)
void async_completion_complete(async_completion_s *completion)
void async_completion_wait(async_completion_s *completion)
arax_pipe_s * vpipe
Definition impl.c:17
void arax_data_output_init(arax_data_s *data, arax_accel *accel)
Definition arax_data.c:240
void arax_data_input_init(arax_data_s *data, arax_accel *accel)
Definition arax_data.c:229
arax_object_s * arax_object_register(arax_object_repo_s *repo, arax_object_type_e type, const char *name, size_t size, const int ref_count)
Definition arax_object.c:98
void arax_object_ref_inc(arax_object_s *obj)
int arax_object_ref_dec(arax_object_s *obj)
void arax_task_wait_done(arax_task_msg_s *msg)
Definition arax_task.c:77
arax_task_msg_s * arax_task_alloc(arax_pipe_s *vpipe, arax_accel *accel, arax_proc *proc, size_t host_size, int ins, arax_data **dev_in, int outs, arax_data **dev_out)
Definition arax_task.c:7
void arax_task_mark_done(arax_task_msg_s *msg, arax_task_state_e state)
Definition arax_task.c:83
void * arax_task_host_data(arax_task_msg_s *task, size_t size)
Definition arax_task.c:51
void arax_task_submit(arax_task_msg_s *task)
Definition arax_task.c:64
void arax_vaccel_add_task(arax_vaccel_s *accel, arax_task *task)
Definition arax_vaccel.c:32
arax_task_state_e state
Definition arax_task.h:19
arax_accel * accel
Definition arax_task.h:13
arax_pipe_s * pipe
Definition arax_task.h:12
arax_data * io[]
Definition arax_task.h:22
async_completion_s done
Definition arax_task.h:21
arax_proc * proc
Definition arax_task.h:14
size_t host_size
Definition arax_task.h:15
arax_task_stats_s stats
Definition arax_task.h:20
utils_timer_s task_duration
Definition arax_types.h:75