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
|
class ResourceRequirement(object):
def __init__(self, res_id, num_writes=1, write_length=1,
num_reads=0, read_length=0):
self.res_id = res_id
self.max_writes = num_writes
self.max_reads = num_reads
self.max_write_length = write_length
self.max_read_length = read_length
@property
def max_requests(self):
"Number of requests of any kind."
return self.max_writes + self.max_reads
@property
def max_length(self):
"Maximum request length (of any kind)."
return max(self.max_write_length, self.max_read_length)
def add_request(self, length, read=False):
"Increase requirements."
if read:
self.max_reads += 1
self.max_read_length = max(self.max_read_length, length)
else:
self.max_writes += 1
self.max_write_length = max(self.max_write_length, length)
def add_read_request(self, length):
self.add_request(length, True)
def add_write_request(self, length):
self.add_request(length, False)
def convert_reads_to_writes(self):
self.max_writes = self.max_requests
self.max_write_length = self.max_length
self.max_reads = 0
self.max_read_length = 0
class ResourceRequirements(dict):
def __missing__(self, key):
self[key] = ResourceRequirement(key, 0, 0, 0, 0)
return self[key]
def initialize_resource_model(taskset):
for t in taskset:
# mapping of res_id to ResourceRequirement object
t.resmodel = ResourceRequirements()
|