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