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