1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
#ifndef SHAREDRES_H
#define SHAREDRES_H
#include "sharedres_types.h"
// spinlocks
BlockingBounds* task_fair_mutex_bounds(const ResourceSharingInfo& info,
unsigned int procs_per_cluster,
int dedicated_irq = NO_CPU);
BlockingBounds* task_fair_rw_bounds(const ResourceSharingInfo& info,
const ResourceSharingInfo& info_mtx,
unsigned int procs_per_cluster,
int dedicated_irq = NO_CPU);
BlockingBounds* phase_fair_rw_bounds(const ResourceSharingInfo& info,
unsigned int procs_per_cluster,
int dedicated_irq = NO_CPU);
// s-oblivious protocols
BlockingBounds* global_omlp_bounds(const ResourceSharingInfo& info,
unsigned int num_procs);
BlockingBounds* global_fmlp_bounds(const ResourceSharingInfo& info);
BlockingBounds* clustered_omlp_bounds(const ResourceSharingInfo& info,
unsigned int procs_per_cluster,
int dedicated_irq = NO_CPU);
BlockingBounds* clustered_rw_omlp_bounds(const ResourceSharingInfo& info,
unsigned int procs_per_cluster,
int dedicated_irq = NO_CPU);
BlockingBounds* clustered_kx_omlp_bounds(const ResourceSharingInfo& info,
const ReplicaInfo& replicaInfo,
unsigned int procs_per_cluster,
int dedicated_irq);
BlockingBounds* part_omlp_bounds(const ResourceSharingInfo& info);
// s-aware protocols
BlockingBounds* part_fmlp_bounds(const ResourceSharingInfo& info,
bool preemptive = true);
BlockingBounds* mpcp_bounds(const ResourceSharingInfo& info,
bool use_virtual_spinning);
BlockingBounds* dpcp_bounds(const ResourceSharingInfo& info,
const ResourceLocality& locality);
// Still missing:
// ==============
// clustered_omlp_kex_bounds
// clustered_omlp_rw_bounds
// spin_rw_wpref_bounds
// spin_rw_rpref_bounds
#endif
|