xref: /petsc/src/benchmarks/benchmarkAssembly.py (revision c87d2d203551e9a04d165033c33b6408d980aaa7)
1*c87d2d20SMatthew G Knepley#!/usr/bin/env python
2*c87d2d20SMatthew G Knepleyimport os
3*c87d2d20SMatthew G Knepleyfrom benchmarkExample import PETScExample
4*c87d2d20SMatthew G Knepley
5*c87d2d20SMatthew G Knepleydef processSummary(moduleName, times, events):
6*c87d2d20SMatthew G Knepley  '''Process the Python log summary into plot data'''
7*c87d2d20SMatthew G Knepley  m = __import__(moduleName)
8*c87d2d20SMatthew G Knepley  reload(m)
9*c87d2d20SMatthew G Knepley  # Total Time
10*c87d2d20SMatthew G Knepley  times.append(m.Time[0])
11*c87d2d20SMatthew G Knepley  # Common events
12*c87d2d20SMatthew G Knepley  #   Add the time and flop rate
13*c87d2d20SMatthew G Knepley  for name in ['MatCUSPSetValBch', 'ElemAssembly']:
14*c87d2d20SMatthew G Knepley    if not name in events:
15*c87d2d20SMatthew G Knepley      events[name] = []
16*c87d2d20SMatthew G Knepley    events[name].append((m.Main_Stage.event[name].Time[0], m.Main_Stage.event[name].Flops[0]/(m.Main_Stage.event[name].Time[0] * 1e6)))
17*c87d2d20SMatthew G Knepley  return
18*c87d2d20SMatthew G Knepley
19*c87d2d20SMatthew G Knepleydef plotSummary(library, num, sizes, times, events):
20*c87d2d20SMatthew G Knepley  from pylab import legend, plot, show, title, xlabel, ylabel
21*c87d2d20SMatthew G Knepley  import numpy as np
22*c87d2d20SMatthew G Knepley  showEventTime  = True
23*c87d2d20SMatthew G Knepley  print events
24*c87d2d20SMatthew G Knepley  if showEventTime:
25*c87d2d20SMatthew G Knepley    data  = []
26*c87d2d20SMatthew G Knepley    names = []
27*c87d2d20SMatthew G Knepley    for event, style in [('MatCUSPSetValBch', 'b-'), ('ElemAssembly', 'b:')]:
28*c87d2d20SMatthew G Knepley      names.append(event)
29*c87d2d20SMatthew G Knepley      data.append(sizes)
30*c87d2d20SMatthew G Knepley      data.append(np.array(events[event])[:,0])
31*c87d2d20SMatthew G Knepley      data.append(style)
32*c87d2d20SMatthew G Knepley    plot(*data)
33*c87d2d20SMatthew G Knepley    title('Performance on '+library+' Example '+str(num))
34*c87d2d20SMatthew G Knepley    xlabel('Number of Dof')
35*c87d2d20SMatthew G Knepley    ylabel('Time (s)')
36*c87d2d20SMatthew G Knepley    legend(names, 'upper left', shadow = True)
37*c87d2d20SMatthew G Knepley    show()
38*c87d2d20SMatthew G Knepley  return
39*c87d2d20SMatthew G Knepley
40*c87d2d20SMatthew G Knepleyif __name__ == '__main__':
41*c87d2d20SMatthew G Knepley  library = 'KSP'
42*c87d2d20SMatthew G Knepley  num     = 4
43*c87d2d20SMatthew G Knepley  ex      = PETScExample(library, num, log_summary_python='summary.py', preload='off')
44*c87d2d20SMatthew G Knepley  sizes   = []
45*c87d2d20SMatthew G Knepley  times   = []
46*c87d2d20SMatthew G Knepley  events  = {}
47*c87d2d20SMatthew G Knepley  for n in [10, 20, 50, 100, 150, 200, 250, 300, 350]:
48*c87d2d20SMatthew G Knepley    ex.run(da_grid_x=n, da_grid_y=n, cusp_synchronize=1)
49*c87d2d20SMatthew G Knepley    sizes.append(n*n)
50*c87d2d20SMatthew G Knepley    processSummary('summary', times, events)
51*c87d2d20SMatthew G Knepley  plotSummary(library, num, sizes, times, events)
52