1#!/usr/bin/env python 2# Testing the new parallel scanner class 3 4import os 5backupdir = os.getcwd() 6 7import numpy as np 8import pysces 9 10tbox=pysces.PyscesUtils.TimerBox() 11import time 12 13m=pysces.model('isola2a') 14 15ser = pysces.Scanner(m) 16 17print("Serial execution...") 18print("Start: ", tbox.normal_timer('SER')) 19print(next(tbox.SER)) 20t1=time.time() 21ser.quietRun = True 22ser.addScanParameter('V4',60,100,11) 23ser.addScanParameter('V1',100,160,16) 24ser.addScanParameter('V2',100,130,16,slave=True) 25ser.addScanParameter('V3',80,90,6) 26ser.addUserOutput('J_R1', 'A', 'ecR4_X','ccJR1_R1') 27#ser.addUserOutput('J_R1', 'A') 28ser.Run() 29print("Done: ", next(tbox.SER)) 30t2=time.time() 31print("Duration: %.2f seconds" % (t2-t1)) 32ser.statespersecond = len(ser.ScanSpace)/(t2-t1) 33print("States per second: %.1f" % ser.statespersecond) 34 35print("\n\nParallel execution...scans per run =", 100) 36par = pysces.ParScanner(m) 37par.scans_per_run = 100 38t3=time.time() 39par.addScanParameter('V4',60,100,11) 40par.addScanParameter('V1',100,160,16) 41par.addScanParameter('V2',100,130,16,slave=True) 42par.addScanParameter('V3',80,90,6) 43par.addUserOutput('J_R1', 'A', 'ecR4_X', 'ccJR1_R1') 44#par.addUserOutput('J_R1', 'A') 45par.Run() 46t4=time.time() 47print("Duration: %.2f seconds" % (t4-t3)) 48par.statespersecond = par.Tsteps/(t4-t3) 49print("States per second: %.1f" % par.statespersecond) 50 51print("\n Speedup with load balanced TaskClient: %.2f" % (par.statespersecond/ser.statespersecond)) 52 53print("\n\nParallel execution...using RunScatter") 54par2 = pysces.ParScanner(m) 55t5=time.time() 56par2.addScanParameter('V4',60,100,11) 57par2.addScanParameter('V1',100,160,16) 58par2.addScanParameter('V2',100,130,16,slave=True) 59par2.addScanParameter('V3',80,90,6) 60par2.addUserOutput('J_R1', 'A', 'ecR4_X', 'ccJR1_R1') 61#par2.addUserOutput('J_R1', 'A') 62par2.RunScatter() 63t6=time.time() 64print("Duration: %.2f seconds" % (t6-t5)) 65par2.statespersecond = par2.Tsteps/(t6-t5) 66print("States per second: %.1f" % par2.statespersecond) 67 68print("\n Speedup with RunScatter: %.2f" % (par2.statespersecond/ser.statespersecond)) 69 70print("\n===========\nComparing results...") 71#comp = np.equal(ser.SteadyStateResults, par.SteadyStateResults[::5]) 72#print np.alltrue(comp) 73#comp2 = np.equal(ser.UserOutputResults, par.UserOutputResults[::5]) 74#print np.alltrue(comp) 75 76sss = ser.SteadyStateResults 77pss = par.SteadyStateResults 78suo = ser.UserOutputResults 79puo = par.UserOutputResults 80p2ss = par2.SteadyStateResults 81p2uo = par2.UserOutputResults 82 83print("serial vs. parallel s/s results : ", np.alltrue(np.equal(sss,pss))) 84print("serial vs. parallel user output : ", np.alltrue(np.equal(suo,puo))) 85print("TaskClient vs RunScatter s/s results: ", np.alltrue(np.equal(pss,p2ss))) 86print("TaskClient vs RunScatter user output: ", np.alltrue(np.equal(puo,p2uo))) 87 88 89os.chdir(backupdir)