@@ -37,8 +37,9 @@ def read_data(filename):
37
37
with open (filename , "r" , encoding = "utf8" ) as fh :
38
38
re_thread = re .compile (r'^VLPROFTHREAD (\d+)$' )
39
39
re_record = re .compile (r'^VLPROFEXEC (\S+) (\d+)(.*)$' )
40
+ # The hierBlock argument is optional
40
41
re_payload_mtaskBegin = re .compile (
41
- r'id (\d+) predictStart (\d+) cpu (\d+) module \s*(\w+)?' )
42
+ r'id (\d+) predictStart (\d+) cpu (\d+)(?: hierBlock)? \s*(\w+)?' )
42
43
re_payload_mtaskEnd = re .compile (r'predictCost (\d+)' )
43
44
re_payload_wait = re .compile (r'cpu (\d+)' )
44
45
@@ -75,8 +76,9 @@ def read_data(filename):
75
76
SectionStack .pop ()
76
77
Sections [thread ].append ((tick , tuple (SectionStack )))
77
78
elif kind == "MTASK_BEGIN" :
78
- mtask , predict_start , ecpu , module = re_payload_mtaskBegin .match (
79
+ mtask , predict_start , ecpu , hier_block = re_payload_mtaskBegin .match (
79
80
payload ).groups ()
81
+ hier_block = "" if hier_block is None else hier_block
80
82
mtask = int (mtask )
81
83
predict_start = int (predict_start )
82
84
ecpu = int (ecpu )
@@ -85,25 +87,26 @@ def read_data(filename):
85
87
'start' : tick ,
86
88
'mtask' : mtask ,
87
89
'predict_start' : predict_start ,
88
- 'module ' : module ,
90
+ 'hier_block ' : hier_block ,
89
91
'cpu' : ecpu
90
92
})
91
- Mtasks [(module , mtask )]['begin' ] = tick
92
- Mtasks [(module , mtask )]['predict_start' ] = predict_start
93
- Mtasks [(module , mtask )]['thread' ] = thread
94
- MtasksStack .append ((module , mtask , records [- 1 ]))
93
+ Mtasks [(hier_block , mtask )]['begin' ] = tick
94
+ Mtasks [(hier_block , mtask )]['predict_start' ] = predict_start
95
+ Mtasks [(hier_block , mtask )]['thread' ] = thread
96
+ MtasksStack .append ((hier_block , mtask , records [- 1 ]))
95
97
elif kind == "MTASK_END" :
96
98
predict_cost , = re_payload_mtaskEnd .match (payload ).groups ()
97
99
mtask = int (mtask )
98
- module , mtask , record = MtasksStack .pop ()
100
+ hier_block , mtask , record = MtasksStack .pop ()
99
101
predict_cost = int (predict_cost )
100
- begin = Mtasks [(module , mtask )]['begin' ]
102
+ begin = Mtasks [(hier_block , mtask )]['begin' ]
101
103
record ['end' ] = tick
102
104
assert record and records [- 1 ]['start' ] <= records [- 1 ]['end' ] <= tick
103
105
record ['predict_cost' ] = predict_cost
104
- Mtasks [(module , mtask )]['elapsed' ] += tick - begin
105
- Mtasks [(module , mtask )]['predict_cost' ] = predict_cost
106
- Mtasks [(module , mtask )]['end' ] = max (Mtasks [(module , mtask )]['end' ], tick )
106
+ Mtasks [(hier_block , mtask )]['elapsed' ] += tick - begin
107
+ Mtasks [(hier_block , mtask )]['predict_cost' ] = predict_cost
108
+ Mtasks [(hier_block , mtask )]['end' ] = max (Mtasks [(hier_block , mtask )]['end' ],
109
+ tick )
107
110
elif kind == "THREAD_SCHEDULE_WAIT_BEGIN" :
108
111
ecpu = int (re_payload_wait .match (payload ).groups ()[0 ])
109
112
ThreadScheduleWait [ecpu ].append (tick )
@@ -237,17 +240,17 @@ def report_mtasks():
237
240
long_mtask = None
238
241
predict_mtask_time = 0
239
242
predict_elapsed = 0
240
- for (module , mtaskId ) in Mtasks :
241
- record = Mtasks [(module , mtaskId )]
243
+ for (hier_block , mtask_id ) in Mtasks :
244
+ record = Mtasks [(hier_block , mtask_id )]
242
245
predict_mtask_time += record ['predict_cost' ]
243
246
total_mtask_time += record ['elapsed' ]
244
247
thread_mtask_time [record ['thread' ]] += record ['elapsed' ]
245
248
predict_end = record ['predict_start' ] + record ['predict_cost' ]
246
249
predict_elapsed = max (predict_elapsed , predict_end )
247
250
if record ['elapsed' ] > long_mtask_time :
248
251
long_mtask_time = record ['elapsed' ]
249
- long_mtask = mtaskId
250
- long_mtask_module = module
252
+ long_mtask = mtask_id
253
+ long_mtask_hier_block = hier_block
251
254
Global ['predict_last_end' ] = predict_elapsed
252
255
253
256
serialTime = ElapsedTime - ExecGraphTime
@@ -276,8 +279,8 @@ def report_mtasks():
276
279
max_p2e = - 1000000
277
280
max_mtask = None
278
281
279
- for (module , mtaskId ) in sorted (Mtasks .keys ()):
280
- mtask = Mtasks [(module , mtaskId )]
282
+ for (hier_block , mtask_id ) in sorted (Mtasks .keys ()):
283
+ mtask = Mtasks [(hier_block , mtask_id )]
281
284
if mtask ['elapsed' ] > 0 :
282
285
if mtask ['predict_cost' ] == 0 :
283
286
mtask ['predict_cost' ] = 1 # don't log(0) below
@@ -286,41 +289,42 @@ def report_mtasks():
286
289
287
290
if p2e_ratio > max_p2e :
288
291
max_p2e = p2e_ratio
289
- max_mtask = mtaskId
290
- max_module = module
292
+ max_mtask = mtask_id
293
+ max_hier_block = hier_block
291
294
if p2e_ratio < min_p2e :
292
295
min_p2e = p2e_ratio
293
- min_mtask = mtaskId
294
- min_module = module
296
+ min_mtask = mtask_id
297
+ min_hier_block = hier_block
295
298
296
299
print ("\n MTask statistics:" )
297
- if long_mtask_module :
298
- print (" Longest mtask id = {} from module '{}'" .format (long_mtask , long_mtask_module ))
300
+ if long_mtask_hier_block :
301
+ print (" Longest mtask id = {} from hier_block '{}'" .format (long_mtask ,
302
+ long_mtask_hier_block ))
299
303
else :
300
304
print (" Longest mtask id = {}" .format (long_mtask ))
301
305
print (" Longest mtask time = {:.2%} of time elapsed in parallelized code" .format (
302
306
long_mtask_time / ExecGraphTime ))
303
307
print (" min log(p2e) = %0.3f" % min_p2e , end = "" )
304
308
305
- if min_module :
306
- print (" from module '%s' mtask %d (predict %d," %
307
- (min_module , min_mtask , Mtasks [(min_module , min_mtask )]['predict_cost' ]),
309
+ if min_hier_block :
310
+ print (" from hier_block '%s' mtask %d (predict %d," %
311
+ (min_hier_block , min_mtask , Mtasks [(min_hier_block , min_mtask )]['predict_cost' ]),
308
312
end = "" )
309
313
else :
310
314
print (" from mtask %d (predict %d," %
311
- (min_mtask , Mtasks [(min_module , min_mtask )]['predict_cost' ]),
315
+ (min_mtask , Mtasks [(min_hier_block , min_mtask )]['predict_cost' ]),
312
316
end = "" )
313
- print (" elapsed %d)" % Mtasks [(min_module , min_mtask )]['elapsed' ])
317
+ print (" elapsed %d)" % Mtasks [(min_hier_block , min_mtask )]['elapsed' ])
314
318
print (" max log(p2e) = %0.3f" % max_p2e , end = "" )
315
- if max_module :
316
- print (" from module '%s' mtask %d (predict %d," %
317
- (max_module , max_mtask , Mtasks [(max_module , max_mtask )]['predict_cost' ]),
319
+ if max_hier_block :
320
+ print (" from hier_block '%s' mtask %d (predict %d," %
321
+ (max_hier_block , max_mtask , Mtasks [(max_hier_block , max_mtask )]['predict_cost' ]),
318
322
end = "" )
319
323
else :
320
324
print (" from mtask %d (predict %d," %
321
- (max_mtask , Mtasks [(max_module , max_mtask )]['predict_cost' ]),
325
+ (max_mtask , Mtasks [(max_hier_block , max_mtask )]['predict_cost' ]),
322
326
end = "" )
323
- print (" elapsed %d)" % Mtasks [(max_module , max_mtask )]['elapsed' ])
327
+ print (" elapsed %d)" % Mtasks [(max_hier_block , max_mtask )]['elapsed' ])
324
328
325
329
stddev = statistics .pstdev (p2e_ratios )
326
330
mean = statistics .mean (p2e_ratios )
@@ -506,8 +510,8 @@ def write_vcd(filename):
506
510
# Compute scale so predicted graph is of same width as interval
507
511
measured_scaling = (end - start ) / Global ['predict_last_end' ]
508
512
# Predict mtasks that fill the time the execution occupied
509
- for (module , mtaskId ) in Mtasks :
510
- mtask = Mtasks [(module , mtaskId )]
513
+ for (hier_block , mtask_id ) in Mtasks :
514
+ mtask = Mtasks [(hier_block , mtask_id )]
511
515
thread = mtask ['thread' ]
512
516
pred_scaled_start = start + int (mtask ['predict_start' ] * measured_scaling )
513
517
pred_scaled_end = start + int (
@@ -516,7 +520,7 @@ def write_vcd(filename):
516
520
continue
517
521
518
522
mcode = getCode (32 , 'predicted' , 't%d_mtask' % thread )
519
- addValue (mcode , pred_scaled_start , mtaskId )
523
+ addValue (mcode , pred_scaled_start , mtask_id )
520
524
addValue (mcode , pred_scaled_end , None )
521
525
522
526
parallelism ['predicted' ][pred_scaled_start ] += 1
0 commit comments