source: branches/numpy_anuga_validation/automated_validation_tests/fitting/validate_benchmark_fit.py @ 7242

Last change on this file since 7242 was 7242, checked in by rwilson, 14 years ago

Changed time/memory values to those on current hardware.

File size: 4.4 KB
Line 
1"""Automatic verification that the ANUGA fitting code is not taking more time
2or memory than usual.  This test has been tailored for computers in GA.
3
4I'm leaving a 20% error margin
5
6Note, going from version 4897 to 4917 uses more memory, based on how
7memory is measured here. What is actually happening is the mesh
8generation is using less memory, in version 4917.  In version 4897
9mesh gen uses and frees up more memory, so python asks for less extra
10memory in the fitting stage.  So overall version 4917 is an
11improvement.
12
13RAW DATA
14 version 4897
15test_fit_time_and_mem (__main__.Test_uq) ...  very start mem_usage() 98108
16 before fitting mem_usage() 134696
17 after fitting mem_usage() 155820
18
19version 4917
20test_fit_time_and_mem (__main__.Test_uq) ...  very start mem_usage() 98076
21 before fitting mem_usage() 120012
22 after fitting mem_usage() 150212
23time 15.19490695
24mem 30200
25
262009 June 22 - RW
27Changed the time/memory values to be exactly those found on the hardware.
28Took 10 measurements, used maximum in found values.
29
30"""
31
32import unittest
33import os, sys
34
35from anuga.fit_interpolate.benchmark_least_squares import BenchmarkLeastSquares
36
37class Test_uq(unittest.TestCase):
38    def setUp(self):
39        pass
40
41    def tearDown(self):
42        pass
43
44    # FIXME test the time to put .pts elevation into a domain object
45    # FIXME do tests for interpolate as well.
46
47    # A version round 4872 has slower times.
48    # That's because v4872 is using geo-ref, whereas the
49    # previous version did not.
50
51    def test_fit_time_and_mem(self):
52        import socket
53        host =  socket.gethostname()
54        ben = BenchmarkLeastSquares()
55        (time, mem, num_tri, one_t,
56         more_t, quad_t) = ben.trial(num_of_points=1000,
57                                     maxArea=0.0001,
58                                     is_fit=True,
59                                     segments_in_mesh=False,
60                                     use_file_type='pts',
61                                     save=False
62                                    )
63
64        # define dictionary of expected time/memory usage per machine
65        # key must be unique *prefix* of machine name, lowercase
66        # value is tuple: (time, memory) in seconds and KiB
67        expected_results = {'tornado':  (10.8, 40468),  # tornado headnode
68                            'cyclone':  (7.4,  40468),  # cyclone headnode
69                            'compute':  (10.8, 40468),  # cluster computenode
70                            'nautilus': (8.1 , 16104),  # Ole's 32bit Ubuntu
71                            'bogong':   (14.2, 30000),  # ANU?
72                            'pc-31569': (31.6, 15000),  # DSG's PC
73                            'pc-32572': (12.8, 15788),  # Ross' 32bit work Ubuntu
74                            'saturn':   (12.8, 39404)   # Ross' 64bit home Ubuntu
75                           } 
76
77        # Get expected machine values, else a default set of values
78        time_standard = 15.0        # max of above, plus a little
79        mem_standard = 40000
80        for key in expected_results:
81            if host.lower().startswith(key):
82                (time_standard, mem_standard) = expected_results[key]
83
84        # don't want exception here, report on time *and* memory
85        got_error = False
86        msg = ('Time used was %.1f s, standard is %.1f s +20%% (%.1f s)'
87               % (time, time_standard, int(time_standard*1.2)))
88        #print msg
89        #assert time < time_standard*1.2, msg
90        if time > time_standard*1.2:
91            print msg
92            got_error = True
93
94        if sys.platform == 'win32':
95            # Memory usage does not work on windows
96            return
97       
98        # Before change: https://datamining.anu.edu.au/anuga/changeset/5855
99        # which closed tickets 244 and 302, mem_standard was as above.
100        # Temporary until ticket:242 is fixed increase it by 25%
101        #mem_standard *= 1.25
102        # Ticket:242 is now fixed (19 Jan 2009), so mem_standard is
103        #reduced again
104
105        msg = ('Memory used was %d KiB, standard is %d KiB +20%% (%d KiB)'
106               % (mem, mem_standard, int(mem_standard*1.2)))
107        #print msg
108        assert mem < mem_standard*1.2, msg           
109
110        if got_error:
111            raise RuntimeError
112           
113#-------------------------------------------------------------
114if __name__ == "__main__":
115    suite = unittest.makeSuite(Test_uq,'test')
116    runner = unittest.TextTestRunner(verbosity=2)
117    runner.run(suite)
Note: See TracBrowser for help on using the repository browser.