StarPU Internal Handbook
coherency.h
Go to the documentation of this file.
1 /* StarPU --- Runtime system for heterogeneous multicore architectures.
2  *
3  * Copyright (C) 2008-2021 Université de Bordeaux, CNRS (LaBRI UMR 5800), Inria
4  *
5  * StarPU is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU Lesser General Public License as published by
7  * the Free Software Foundation; either version 2.1 of the License, or (at
8  * your option) any later version.
9  *
10  * StarPU is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13  *
14  * See the GNU Lesser General Public License in COPYING.LGPL for more details.
15  */
16 
17 #ifndef __COHERENCY__H__
18 #define __COHERENCY__H__
19 
22 #include <starpu.h>
23 #include <common/config.h>
24 
25 #include <common/starpu_spinlock.h>
26 #include <common/rwlock.h>
27 #include <common/timing.h>
28 #include <common/fxt.h>
29 #include <common/list.h>
30 
32 #include <datawizard/datastats.h>
33 #include <datawizard/memstats.h>
35 
36 enum _starpu_cache_state
37 {
38  STARPU_OWNER,
39  STARPU_SHARED,
40  STARPU_INVALID
41 };
42 
45 {
46  starpu_data_handle_t handle;
47 
50 
52  int refcnt;
53 
54  char memory_node;
55 
57  enum _starpu_cache_state state: 2;
58 
61  unsigned relaxed_coherency:2;
62 
64  unsigned initialized:1;
65 
67  unsigned allocated:1;
74 
82  struct _starpu_data_request *request[STARPU_MAXNODES];
83 
85  struct _starpu_mem_chunk * mc;
86 };
87 
88 struct _starpu_data_requester_prio_list;
89 
91 {
92  unsigned long id;
93  struct _starpu_jobid_list *next;
94 };
95 
98 {
99  struct starpu_task *task;
100  struct _starpu_task_wrapper_list *next;
101 };
102 
105 {
106  struct starpu_task *task;
107  struct _starpu_task_wrapper_dlist *next;
108  struct _starpu_task_wrapper_dlist *prev;
109 };
110 
111 extern int _starpu_has_not_important_data;
112 
113 typedef void (*_starpu_data_handle_unregister_hook)(starpu_data_handle_t);
114 
117 {
118  int magic;
119  struct _starpu_data_requester_prio_list req_list;
123  unsigned refcnt;
125  unsigned unlocking_reqs;
129  enum starpu_data_access_mode current_mode;
132 
137  unsigned busy_count;
139  unsigned busy_waiting;
140  starpu_pthread_mutex_t busy_mutex;
141  starpu_pthread_cond_t busy_cond;
142 
146  starpu_data_handle_t *active_children;
147  starpu_data_handle_t **active_readonly_children;
150  unsigned nsiblings;
151  starpu_data_handle_t *siblings;
152  unsigned sibling_index;
153  unsigned depth;
156  starpu_data_handle_t children;
157  unsigned nchildren;
159  unsigned nplans;
161  struct starpu_codelet *switch_cl;
170  unsigned partitioned;
172  unsigned readonly:1;
173 
175  unsigned active:1;
176  unsigned active_ro:1;
177 
179  struct _starpu_data_replicate per_node[STARPU_MAXNODES];
180  struct _starpu_data_replicate *per_worker;
181 
182  struct starpu_data_interface_ops *ops;
183 
185  uint32_t footprint;
186 
189 
191  uint32_t wt_mask;
192 
196 
200  unsigned initialized;
202  unsigned ooc;
203 
206  starpu_pthread_mutex_t sequential_consistency_mutex;
207 
212  enum starpu_data_access_mode last_submitted_mode;
213  struct starpu_task *last_sync_task;
214  struct _starpu_task_wrapper_dlist last_submitted_accessors;
215 
223  unsigned long last_submitted_ghost_sync_id;
224  struct _starpu_jobid_list *last_submitted_ghost_accessors_id;
225 
228  unsigned post_sync_tasks_cnt;
229 
230  /*
231  * Reductions
232  */
233 
238  struct starpu_codelet *redux_cl;
239  struct starpu_codelet *init_cl;
240 
245 
249  struct _starpu_data_requester_prio_list reduction_req_list;
250 
251  starpu_data_handle_t *reduction_tmp_handles;
252 
254  struct _starpu_data_request *write_invalidation_req;
255 
256  unsigned lazy_unregister;
257 
258 #ifdef STARPU_OPENMP
259  unsigned removed_from_context_hash;
260 #endif
261 
263  void *mpi_data;
264 
265  _starpu_memory_stats_t memory_stats;
266 
267  unsigned int mf_node; //XXX
268 
270  _starpu_data_handle_unregister_hook unregister_hook;
271 
272  struct starpu_arbiter *arbiter;
274  struct _starpu_data_requester_prio_list arbitered_req_list;
275 
280 
283  unsigned dimensions;
284  int coordinates[5];
285 
288  void *user_data;
289 };
290 
297 int _starpu_fetch_data_on_node(starpu_data_handle_t handle, int node, struct _starpu_data_replicate *replicate,
298  enum starpu_data_access_mode mode, unsigned detached, enum _starpu_is_prefetch is_prefetch, unsigned async,
299  void (*callback_func)(void *), void *callback_arg, int prio, const char *origin);
301 void _starpu_release_data_on_node(struct _starpu_data_state *state, uint32_t default_wt_mask,
302  struct _starpu_data_replicate *replicate);
303 
304 void _starpu_update_data_state(starpu_data_handle_t handle,
305  struct _starpu_data_replicate *requesting_replicate,
306  enum starpu_data_access_mode mode);
307 
308 uint32_t _starpu_get_data_refcnt(struct _starpu_data_state *state, unsigned node);
309 
310 size_t _starpu_data_get_size(starpu_data_handle_t handle);
311 size_t _starpu_data_get_alloc_size(starpu_data_handle_t handle);
312 
313 uint32_t _starpu_data_get_footprint(starpu_data_handle_t handle);
314 
315 void __starpu_push_task_output(struct _starpu_job *j);
318 
319 void _starpu_release_nowhere_task_output(struct _starpu_job *j);
320 
321 struct _starpu_worker;
322 STARPU_ATTRIBUTE_WARN_UNUSED_RESULT
323 int _starpu_fetch_task_input(struct starpu_task *task, struct _starpu_job *j, int async);
324 void _starpu_fetch_task_input_tail(struct starpu_task *task, struct _starpu_job *j, struct _starpu_worker *worker);
325 void _starpu_fetch_nowhere_task_input(struct _starpu_job *j);
326 
327 int _starpu_select_src_node(struct _starpu_data_state *state, unsigned destination);
328 int _starpu_determine_request_path(starpu_data_handle_t handle,
329  int src_node, int dst_node,
330  enum starpu_data_access_mode mode, int max_len,
331  unsigned *src_nodes, unsigned *dst_nodes,
332  unsigned *handling_nodes, unsigned write_invalidation);
333 
338 struct _starpu_data_request *_starpu_create_request_to_fetch_data(starpu_data_handle_t handle,
339  struct _starpu_data_replicate *dst_replicate,
340  enum starpu_data_access_mode mode, enum _starpu_is_prefetch is_prefetch,
341  unsigned async,
342  void (*callback_func)(void *), void *callback_arg, int prio, const char *origin);
343 
344 void _starpu_redux_init_data_replicate(starpu_data_handle_t handle, struct _starpu_data_replicate *replicate, int workerid);
345 void _starpu_data_start_reduction_mode(starpu_data_handle_t handle);
346 void _starpu_data_end_reduction_mode(starpu_data_handle_t handle);
347 void _starpu_data_end_reduction_mode_terminate(starpu_data_handle_t handle);
348 
349 void _starpu_data_set_unregister_hook(starpu_data_handle_t handle, _starpu_data_handle_unregister_hook func);
350 
351 #endif // __COHERENCY__H__
unsigned busy_count
Definition: coherency.h:137
void * mpi_data
Definition: coherency.h:263
struct _starpu_task_wrapper_list * post_sync_tasks
Definition: coherency.h:227
unsigned readonly
Definition: coherency.h:172
struct starpu_codelet * redux_cl
Definition: coherency.h:238
unsigned nactive_readonly_children
Definition: coherency.h:148
struct starpu_codelet * switch_cl
Definition: coherency.h:161
struct _starpu_data_requester_prio_list arbitered_req_list
Definition: coherency.h:274
_starpu_data_handle_unregister_hook unregister_hook
Definition: coherency.h:270
struct _starpu_data_request * request[STARPU_MAXNODES]
Definition: coherency.h:82
struct _starpu_data_request * write_invalidation_req
Definition: coherency.h:254
enum _starpu_cache_state state
Definition: coherency.h:57
unsigned active
Definition: coherency.h:175
enum starpu_data_access_mode current_mode
Definition: coherency.h:129
unsigned unlocking_reqs
Definition: coherency.h:125
starpu_data_handle_t * siblings
Definition: coherency.h:151
unsigned switch_cl_nparts
Definition: coherency.h:163
struct _starpu_data_state * father_handle
Definition: coherency.h:145
starpu_data_handle_t children
Definition: coherency.h:156
unsigned automatically_allocated
Definition: coherency.h:73
unsigned ooc
Definition: coherency.h:202
starpu_pthread_mutex_t sequential_consistency_mutex
Definition: coherency.h:206
unsigned nplans
Definition: coherency.h:159
struct _starpu_mem_chunk * mc
Definition: coherency.h:85
int refcnt
Definition: coherency.h:52
unsigned relaxed_coherency
Definition: coherency.h:61
enum starpu_data_access_mode last_submitted_mode
Definition: coherency.h:212
int last_locality
Definition: coherency.h:279
struct _starpu_data_replicate per_node[STARPU_MAXNODES]
Definition: coherency.h:179
struct _starpu_spinlock header_lock
Definition: coherency.h:131
unsigned busy_waiting
Definition: coherency.h:139
unsigned partitioned
Definition: coherency.h:170
unsigned initialized
Definition: coherency.h:200
void * data_interface
Definition: coherency.h:49
int home_node
Definition: coherency.h:188
struct _starpu_data_state * root_handle
Definition: coherency.h:144
unsigned last_submitted_ghost_sync_id_is_valid
Definition: coherency.h:222
void _starpu_release_data_on_node(struct _starpu_data_state *state, uint32_t default_wt_mask, struct _starpu_data_replicate *replicate)
int _starpu_fetch_data_on_node(starpu_data_handle_t handle, int node, struct _starpu_data_replicate *replicate, enum starpu_data_access_mode mode, unsigned detached, enum _starpu_is_prefetch is_prefetch, unsigned async, void(*callback_func)(void *), void *callback_arg, int prio, const char *origin)
void _starpu_push_task_output(struct _starpu_job *j)
uint32_t wt_mask
Definition: coherency.h:191
unsigned depth
Definition: coherency.h:153
unsigned initialized
Definition: coherency.h:64
unsigned nsiblings
Definition: coherency.h:150
struct _starpu_data_requester_prio_list reduction_req_list
Definition: coherency.h:249
void * user_data
Definition: coherency.h:288
struct _starpu_data_request * _starpu_create_request_to_fetch_data(starpu_data_handle_t handle, struct _starpu_data_replicate *dst_replicate, enum starpu_data_access_mode mode, enum _starpu_is_prefetch is_prefetch, unsigned async, void(*callback_func)(void *), void *callback_arg, int prio, const char *origin)
unsigned refcnt
Definition: coherency.h:123
unsigned dimensions
Definition: coherency.h:283
starpu_data_handle_t ** active_readonly_children
Definition: coherency.h:147
unsigned sequential_consistency
Definition: coherency.h:198
unsigned reduction_refcnt
Definition: coherency.h:244
unsigned is_not_important
Definition: coherency.h:195
unsigned allocated
Definition: coherency.h:67
starpu_data_handle_t * active_children
Definition: coherency.h:146
uint32_t footprint
Definition: coherency.h:185
Definition: coherency.h:45
Definition: coherency.h:117
Definition: coherency.h:91
Definition: coherency.h:105
Definition: coherency.h:98
_starpu_is_prefetch
Definition: copy_driver.h:51
Definition: starpu_spinlock.h:82
Definition: jobs.h:79
Definition: workers.h:70