Arax -8d09c51940345c86062e8ef2427c705ae66e5926
A Runtime Framework for Decoupling Applications from Heterogeneous Accelerators
Loading...
Searching...
No Matches
arax_vaccel.c
Go to the documentation of this file.
1#include "arax_pipe.h"
2
3arax_vaccel_s* arax_vaccel_init(arax_pipe_s *pipe, const char *name,
5{
6 arax_vaccel_s *vaccel = (arax_vaccel_s *)
8
9 if (!vaccel) // GCOV_EXCL_LINE
10 return 0; // GCOV_EXCL_LINE
11
12 vaccel->phys = 0;
13 vaccel->cid = (uint64_t) -1;
14 vaccel->priority = (uint64_t) -1;
15 utils_spinlock_init(&(vaccel->lock) );
16 if (!utils_queue_init(&(vaccel->queue) ) ) // GCOV_EXCL_LINE
17 return 0; // GCOV_EXCL_LINE
18
19 utils_list_node_init(&(vaccel->vaccels), vaccel);
20 vaccel->type = type;
21 vaccel->meta = 0;
22 vaccel->ordering = SEQUENTIAL;
23
24 if (accel)
25 arax_accel_add_vaccel(accel, vaccel);
26 else
27 arax_pipe_add_orphan_vaccel(pipe, vaccel);
28
29 return vaccel;
30}
31
33{
34 utils_spinlock_lock(&(accel->lock));
35 while (!utils_queue_push(&(accel->queue), task));
36 if (accel->phys)
38 utils_spinlock_unlock(&(accel->lock));
39}
40
42{
44 arax_vaccel_s *vaccel = (arax_vaccel_s *) accel;
45
46 vaccel->ordering = ordering;
47}
48
56
57uint64_t arax_vaccel_set_cid(arax_vaccel_s *vaccel, uint64_t cid)
58{
60 vaccel->cid = cid;
61 return vaccel->cid;
62}
63
65{
67 return vaccel->cid;
68}
69
70uint64_t arax_vaccel_set_job_priority(arax_vaccel_s *vaccel, uint64_t priority)
71{
73 vaccel->priority = priority;
74 return vaccel->priority;
75}
76
78{
80 return vaccel->priority;
81}
82
83void arax_vaccel_set_meta(arax_vaccel_s *vaccel, void *meta)
84{
86 vaccel->meta = meta;
87}
88
90{
92 return vaccel->meta;
93}
94
96{
98 return &(vaccel->queue);
99}
100
106
112
114{
115 arax_vaccel_s *vaccel = (arax_vaccel_s *) obj;
116
118
119 if (vaccel->phys)
120 arax_accel_del_vaccel(vaccel->phys, vaccel);
121 else
122 arax_pipe_remove_orphan_vaccel(pipe, vaccel);
123}
struct arax_pipe arax_pipe_s
void arax_task
Definition arax_types.h:51
enum arax_accel_state arax_accel_state_e
enum arax_accel_type arax_accel_type_e
struct arax_accel_stats arax_accel_stats_s
#define arax_assert_obj(OBJ, TYPE)
Definition arax_assert.h:12
struct queue utils_queue_s
Definition queue.h:30
@ ARAX_TYPE_VIRT_ACCEL
Definition arax_object.h:17
#define ARAX_OBJ_DTOR_DECL(TYPE)
arax_accel_ordering_e
Definition arax_vaccel.h:17
@ SEQUENTIAL
Definition arax_vaccel.h:18
arax_accel_state_e arax_accel_get_stat(arax_accel_s *accel, arax_accel_stats_s *stat)
Definition arax_accel.c:89
void arax_accel_del_vaccel(arax_accel_s *accel, arax_vaccel_s *vaccel)
Definition arax_accel.c:156
void arax_accel_add_task(arax_accel_s *accel)
Definition arax_accel.c:38
void arax_accel_add_vaccel(arax_accel_s *accel, arax_vaccel_s *vaccel)
Definition arax_accel.c:108
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_pipe_add_orphan_vaccel(arax_pipe_s *pipe, arax_vaccel_s *vac)
Definition arax_pipe.c:63
void arax_pipe_remove_orphan_vaccel(arax_pipe_s *pipe, arax_vaccel_s *vac)
Definition arax_pipe.c:100
arax_accel_state_e arax_vaccel_get_stat(arax_vaccel_s *accel, arax_accel_stats_s *stat)
uint64_t arax_vaccel_get_job_priority(arax_vaccel_s *vaccel)
Definition arax_vaccel.c:77
arax_vaccel_s * arax_vaccel_init(arax_pipe_s *pipe, const char *name, arax_accel_type_e type, arax_accel_s *accel)
Definition arax_vaccel.c:3
void arax_vaccel_add_task(arax_vaccel_s *accel, arax_task *task)
Definition arax_vaccel.c:32
uint64_t arax_vaccel_set_cid(arax_vaccel_s *vaccel, uint64_t cid)
Definition arax_vaccel.c:57
unsigned int arax_vaccel_queue_size(arax_vaccel_s *vaccel)
void arax_vaccel_set_meta(arax_vaccel_s *vaccel, void *meta)
Definition arax_vaccel.c:83
void * arax_vaccel_get_meta(arax_vaccel_s *vaccel)
Definition arax_vaccel.c:89
arax_accel_ordering_e arax_vaccel_get_ordering(arax_accel_s *accel)
Definition arax_vaccel.c:49
uint64_t arax_vaccel_get_cid(arax_vaccel_s *vaccel)
Definition arax_vaccel.c:64
void arax_vaccel_set_ordering(arax_accel_s *accel, arax_accel_ordering_e ordering)
Definition arax_vaccel.c:41
uint64_t arax_vaccel_set_job_priority(arax_vaccel_s *vaccel, uint64_t priority)
Definition arax_vaccel.c:70
utils_queue_s * arax_vaccel_queue(arax_vaccel_s *vaccel)
Definition arax_vaccel.c:95
void utils_list_node_init(utils_list_node_s *node, void *owner)
Definition list.c:74
#define utils_spinlock_lock(V)
Definition queue.c:35
#define utils_spinlock_init(V)
Definition queue.c:34
utils_queue_s * utils_queue_init(void *buff)
Definition queue.c:39
unsigned int utils_queue_used_slots(utils_queue_s *q)
Definition queue.c:51
#define utils_spinlock_unlock(V)
Definition queue.c:36
void * utils_queue_push(utils_queue_s *q, void *data)
Definition queue.c:89
arax_accel_ordering_e ordering
Definition arax_vaccel.h:33
utils_spinlock lock
Definition arax_vaccel.h:34
uint64_t cid
Definition arax_vaccel.h:36
arax_accel_s * phys
Definition arax_vaccel.h:38
arax_accel_type_e type
Definition arax_vaccel.h:32
utils_list_node_s vaccels
Definition arax_vaccel.h:35
utils_queue_s queue
Definition arax_vaccel.h:40
uint64_t priority
Definition arax_vaccel.h:37
arax_object_repo_s objs
Definition arax_pipe.h:33