xref: /petsc/src/benchmarks/benchmarkAssembly.py (revision abe2904333b81592ed9a687cb777e3d68e855be6)
1#!/usr/bin/env python
2import os
3from benchmarkExample import PETScExample
4
5def processSummary(moduleName, times, events):
6  '''Process the Python log summary into plot data'''
7  m = __import__(moduleName)
8  reload(m)
9  # Total Time
10  times.append(m.Time[0])
11  # Common events
12  #   Add the time and flop rate
13  for stageName, eventName in [('GPU_Stage','MatCUSPSetValBch'), ('CPU_Stage','ElemAssembly')]:
14    s = getattr(m, stageName)
15    if not eventName in events:
16      events[eventName] = []
17    events[eventName].append((s.event[eventName].Time[0], s.event[eventName].Flops[0]/(s.event[eventName].Time[0] * 1e6)))
18  return
19
20def plotSummary(library, num, sizes, times, events):
21  from pylab import legend, plot, show, title, xlabel, ylabel
22  import numpy as np
23  showEventTime  = True
24  print events
25  if showEventTime:
26    data  = []
27    names = []
28    for event, style in [('MatCUSPSetValBch', 'b-'), ('ElemAssembly', 'b:')]:
29      names.append(event)
30      data.append(sizes)
31      data.append(np.array(events[event])[:,0])
32      data.append(style)
33    plot(*data)
34    title('Performance on '+library+' Example '+str(num))
35    xlabel('Number of Dof')
36    ylabel('Time (s)')
37    legend(names, 'upper left', shadow = True)
38    show()
39  return
40
41if __name__ == '__main__':
42  library = 'KSP'
43  num     = 4
44  ex      = PETScExample(library, num, log_summary_python='summary.py', preload='off')
45  if 1:
46    sizes   = []
47    times   = []
48    events  = {}
49    for n in [10, 20, 50, 100, 150, 200, 250, 300, 350]:
50      ex.run(da_grid_x=n, da_grid_y=n, cusp_synchronize=1)
51      sizes.append(n*n)
52      processSummary('summary', times, events)
53    plotSummary(library, num, sizes, times, events)
54  else:
55    times   = []
56    sizes   = []
57    for n in range(150, 1350, 100):
58      sizes.append(n*n)
59    baconostEvents = {'ElemAssembly': [(0.040919999999999998, 0.0), (0.1242, 0.0), (0.24410000000000001, 0.0), (0.374, 0.0), (0.56259999999999999, 0.0), (0.79049999999999998, 0.0), (1.0880000000000001, 0.0), (1.351, 0.0), (1.6930000000000001, 0.0), (2.0609999999999999, 0.0), (2.4820000000000002, 0.0), (3.0640000000000001, 0.0)], 'MatCUSPSetValBch': [(0.0123, 0.0), (0.023429999999999999, 0.0), (0.043540000000000002, 0.0), (0.06608, 0.0), (0.09579, 0.0), (0.12920000000000001, 0.0), (0.17169999999999999, 0.0), (0.2172, 0.0), (0.27179999999999999, 0.0), (0.48309999999999997, 0.0), (0.44180000000000003, 0.0), (0.51529999999999998, 0.0)]}
60    plotSummary(library, num, sizes, times, baconostEvents)
61