-
Notifications
You must be signed in to change notification settings - Fork 0
/
parser.py
48 lines (39 loc) · 1.43 KB
/
parser.py
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
import sys
from utils import DAG, Task, TaskType
class Parser:
"""
@brief : parses input task graph with the following stucture
NODE <index> <children list> <node type> <node cost> <parallelization overhead>
<node type> : ROOT, COMPUTATION, TRANSFER, END
@return : DAG
"""
def __init__(self):
self.no_nodes = 0
self.dag = None
def parse(self):
for line in sys.stdin:
task_info = line.split()
if task_info[0] == "NODE_COUNT":
self.no_nodes = int(task_info[1])
continue
if task_info[0] != "NODE":
continue
task_type = TaskType.parse_type(task_info[3])
memory = flops = 0
if task_type == TaskType.COMPUTATION:
flops=int(task_info[4])
elif task_type == TaskType.TRANSFER:
memory=int(task_info[4])
t = Task(task_id=int(task_info[1]),
task_type=task_type,
memory=memory, flops=flops)
children = task_info[2].split(',')
if task_type == TaskType.END:
children = []
children = [int(child) for child in children]
if task_type == TaskType.ROOT:
self.dag = DAG()
self.dag.task = t
self.dag.kids_indices = children
else:
self.dag.insert(t, children, None)