23 #ifndef __DATA_REQUEST_H__
24 #define __DATA_REQUEST_H__
26 #include <semaphore.h>
32 #pragma GCC visibility push(hidden)
38 #define MAX_PENDING_REQUESTS_PER_NODE 5
39 #define MAX_PENDING_PREFETCH_REQUESTS_PER_NODE 2
40 #define MAX_PENDING_IDLE_REQUESTS_PER_NODE 1
42 #define MAX_PUSH_TIME 1000
48 void (*callback_func)(
void *);
53 enum _starpu_data_request_inout
55 _STARPU_DATA_REQUEST_IN, _STARPU_DATA_REQUEST_OUT
60 LIST_TYPE(_starpu_data_request,
65 starpu_data_handle_t handle;
73 unsigned handling_node;
75 enum _starpu_data_request_inout inout;
85 enum starpu_data_access_mode mode;
100 enum starpu_is_prefetch prefetch:3;
103 struct starpu_task *task;
106 unsigned nb_tasks_prefetch;
120 struct _starpu_data_request *next_same_req;
126 unsigned next_req_count;
130 unsigned long com_id;
132 PRIO_LIST_TYPE(_starpu_data_request, prio)
136 LIST_TYPE(_starpu_data_requester,
138 enum starpu_data_access_mode mode;
141 unsigned is_requested_by_codelet;
145 unsigned buffer_index;
152 void (*ready_data_callback)(
void *argcb);
155 PRIO_LIST_TYPE(_starpu_data_requester, prio)
157 void _starpu_init_data_request_lists(
void);
158 void _starpu_deinit_data_request_lists(
void);
159 void _starpu_post_data_request(
struct _starpu_data_request *r);
161 int _starpu_handle_node_data_requests(
unsigned handling_node,
unsigned peer_node,
enum _starpu_data_request_inout inout,
enum _starpu_may_alloc may_alloc,
unsigned *pushed);
162 int _starpu_handle_node_prefetch_requests(
unsigned handling_node,
unsigned peer_node,
enum _starpu_data_request_inout inout,
enum _starpu_may_alloc may_alloc,
unsigned *pushed);
163 int _starpu_handle_node_idle_requests(
unsigned handling_node,
unsigned peer_node,
enum _starpu_data_request_inout inout,
enum _starpu_may_alloc may_alloc,
unsigned *pushed);
165 int _starpu_handle_pending_node_data_requests(
unsigned handling_node,
unsigned peer_node,
enum _starpu_data_request_inout inout);
166 int _starpu_handle_all_pending_node_data_requests(
unsigned handling_node,
unsigned peer_node,
enum _starpu_data_request_inout inout);
168 int _starpu_check_that_no_data_request_exists(
unsigned handling_node);
169 int _starpu_check_that_no_data_request_is_pending(
unsigned handling_node,
unsigned peer_node,
enum _starpu_data_request_inout inout);
171 struct _starpu_data_request *_starpu_create_data_request(starpu_data_handle_t handle,
175 enum starpu_data_access_mode mode,
177 struct starpu_task *task,
178 enum starpu_is_prefetch is_prefetch,
180 unsigned is_write_invalidation,
181 const char *origin) STARPU_ATTRIBUTE_MALLOC;
183 int _starpu_wait_data_request_completion(
struct _starpu_data_request *r,
enum _starpu_may_alloc may_alloc);
185 void _starpu_data_request_append_callback(
struct _starpu_data_request *r,
186 void (*callback_func)(
void *),
189 void _starpu_update_prefetch_status(
struct _starpu_data_request *r,
enum starpu_is_prefetch prefetch);
191 #pragma GCC visibility pop
Definition: coherency.h:47
Definition: copy_driver.h:71
#define STARPU_MAXNODES
Definition: starpu_config.h:217
Definition: starpu_spinlock.h:82
Definition: data_request.h:47