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)