1c87d2d20SMatthew G Knepley#!/usr/bin/env python 2c87d2d20SMatthew G Knepleyimport os 3c87d2d20SMatthew G Knepleyfrom benchmarkExample import PETScExample 4c87d2d20SMatthew G Knepley 5*6cbfa02cSMatthew G Knepleydef calculateNonzeros(n): 6*6cbfa02cSMatthew G Knepley num = 0 7*6cbfa02cSMatthew G Knepley # corners 8*6cbfa02cSMatthew G Knepley num += 2*3 + 2*4 9*6cbfa02cSMatthew G Knepley # edges 10*6cbfa02cSMatthew G Knepley num += 4*(n-2)*5 11*6cbfa02cSMatthew G Knepley # interior 12*6cbfa02cSMatthew G Knepley num += (n-2)*(n-2)*7 13*6cbfa02cSMatthew G Knepley return num 14*6cbfa02cSMatthew G Knepley 15c87d2d20SMatthew G Knepleydef processSummary(moduleName, times, events): 16c87d2d20SMatthew G Knepley '''Process the Python log summary into plot data''' 17c87d2d20SMatthew G Knepley m = __import__(moduleName) 18c87d2d20SMatthew G Knepley reload(m) 19c87d2d20SMatthew G Knepley # Total Time 20c87d2d20SMatthew G Knepley times.append(m.Time[0]) 21c87d2d20SMatthew G Knepley # Common events 22c87d2d20SMatthew G Knepley # Add the time and flop rate 230cfd297dSMatthew G Knepley for stageName, eventName in [('GPU_Stage','MatCUSPSetValBch'), ('CPU_Stage','ElemAssembly')]: 240cfd297dSMatthew G Knepley s = getattr(m, stageName) 250cfd297dSMatthew G Knepley if not eventName in events: 260cfd297dSMatthew G Knepley events[eventName] = [] 270cfd297dSMatthew G Knepley events[eventName].append((s.event[eventName].Time[0], s.event[eventName].Flops[0]/(s.event[eventName].Time[0] * 1e6))) 28c87d2d20SMatthew G Knepley return 29c87d2d20SMatthew G Knepley 30*6cbfa02cSMatthew G Knepleydef plotSummary(library, num, sizes, nonzeros, times, events): 31*6cbfa02cSMatthew G Knepley from pylab import legend, plot, show, title, xlabel, ylabel, ylim 32c87d2d20SMatthew G Knepley import numpy as np 33*6cbfa02cSMatthew G Knepley showEventTime = False 34*6cbfa02cSMatthew G Knepley showTimePerRow = False 35*6cbfa02cSMatthew G Knepley showTimePerNonzero = True 36c87d2d20SMatthew G Knepley print events 37c87d2d20SMatthew G Knepley if showEventTime: 38c87d2d20SMatthew G Knepley data = [] 39c87d2d20SMatthew G Knepley names = [] 40c87d2d20SMatthew G Knepley for event, style in [('MatCUSPSetValBch', 'b-'), ('ElemAssembly', 'b:')]: 41c87d2d20SMatthew G Knepley names.append(event) 42c87d2d20SMatthew G Knepley data.append(sizes) 43c87d2d20SMatthew G Knepley data.append(np.array(events[event])[:,0]) 44c87d2d20SMatthew G Knepley data.append(style) 45c87d2d20SMatthew G Knepley plot(*data) 46c87d2d20SMatthew G Knepley title('Performance on '+library+' Example '+str(num)) 47c87d2d20SMatthew G Knepley xlabel('Number of Dof') 48c87d2d20SMatthew G Knepley ylabel('Time (s)') 49c87d2d20SMatthew G Knepley legend(names, 'upper left', shadow = True) 50c87d2d20SMatthew G Knepley show() 51*6cbfa02cSMatthew G Knepley if showTimePerRow: 52*6cbfa02cSMatthew G Knepley data = [] 53*6cbfa02cSMatthew G Knepley names = [] 54*6cbfa02cSMatthew G Knepley for event, style in [('MatCUSPSetValBch', 'b-'), ('ElemAssembly', 'b:')]: 55*6cbfa02cSMatthew G Knepley names.append(event) 56*6cbfa02cSMatthew G Knepley data.append(sizes) 57*6cbfa02cSMatthew G Knepley rows = np.sqrt(sizes) 58*6cbfa02cSMatthew G Knepley data.append(np.array(events[event])[:,0]/rows/3) 59*6cbfa02cSMatthew G Knepley data.append(style) 60*6cbfa02cSMatthew G Knepley plot(*data) 61*6cbfa02cSMatthew G Knepley title('Performance on '+library+' Example '+str(num)) 62*6cbfa02cSMatthew G Knepley xlabel('Number of Dof') 63*6cbfa02cSMatthew G Knepley ylabel('Time/Row (s)') 64*6cbfa02cSMatthew G Knepley legend(names, 'upper left', shadow = True) 65*6cbfa02cSMatthew G Knepley show() 66*6cbfa02cSMatthew G Knepley if showTimePerNonzero: 67*6cbfa02cSMatthew G Knepley data = [] 68*6cbfa02cSMatthew G Knepley names = [] 69*6cbfa02cSMatthew G Knepley for event, style in [('MatCUSPSetValBch', 'b-'), ('ElemAssembly', 'b:')]: 70*6cbfa02cSMatthew G Knepley names.append(event) 71*6cbfa02cSMatthew G Knepley data.append(sizes) 72*6cbfa02cSMatthew G Knepley data.append(np.array(events[event])[:,0]/nonzeros * 10**9) 73*6cbfa02cSMatthew G Knepley data.append(style) 74*6cbfa02cSMatthew G Knepley plot(*data) 75*6cbfa02cSMatthew G Knepley title('Performance on '+library+' Example '+str(num)) 76*6cbfa02cSMatthew G Knepley xlabel('Number of Dof') 77*6cbfa02cSMatthew G Knepley ylabel('Time/Nonzero (ns)') 78*6cbfa02cSMatthew G Knepley legend(names, 'center right', shadow = True) 79*6cbfa02cSMatthew G Knepley show() 80c87d2d20SMatthew G Knepley return 81c87d2d20SMatthew G Knepley 82c87d2d20SMatthew G Knepleyif __name__ == '__main__': 83c87d2d20SMatthew G Knepley library = 'KSP' 84c87d2d20SMatthew G Knepley num = 4 85c87d2d20SMatthew G Knepley ex = PETScExample(library, num, log_summary_python='summary.py', preload='off') 86*6cbfa02cSMatthew G Knepley if 0: 87c87d2d20SMatthew G Knepley sizes = [] 88*6cbfa02cSMatthew G Knepley nonzeros = [] 89c87d2d20SMatthew G Knepley times = [] 90c87d2d20SMatthew G Knepley events = {} 91c87d2d20SMatthew G Knepley for n in [10, 20, 50, 100, 150, 200, 250, 300, 350]: 92c87d2d20SMatthew G Knepley ex.run(da_grid_x=n, da_grid_y=n, cusp_synchronize=1) 93c87d2d20SMatthew G Knepley sizes.append(n*n) 94*6cbfa02cSMatthew G Knepley nonzeros.append(calculateNonzeros(n)) 95c87d2d20SMatthew G Knepley processSummary('summary', times, events) 96*6cbfa02cSMatthew G Knepley plotSummary(library, num, sizes, nonzeros, times, events) 9721c1d55bSMatthew G Knepley else: 9821c1d55bSMatthew G Knepley sizes = [] 99*6cbfa02cSMatthew G Knepley nonzeros = [] 100*6cbfa02cSMatthew G Knepley times = [] 10121c1d55bSMatthew G Knepley for n in range(150, 1350, 100): 10221c1d55bSMatthew G Knepley sizes.append(n*n) 103*6cbfa02cSMatthew G Knepley nonzeros.append(calculateNonzeros(n)) 10421c1d55bSMatthew G Knepley 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)]} 105*6cbfa02cSMatthew G Knepley plotSummary(library, num, sizes, nonzeros, times, baconostEvents) 106