source: anuga_validation/automated_validation_tests/fitting/validate_benchmark_fit.py @ 7341

Last change on this file since 7341 was 7341, checked in by ole, 15 years ago

Updated benchmark timings for Asus EEE 900

File size: 4.7 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
54        # get hostname - for *nix and Windows
55        host = socket.gethostname()
56
57        # define dictionary of expected time/memory usage per machine.
58        # key must be unique *prefix* of machine name, lowercase.
59        # value is tuple: (time, memory) in seconds and KiB.
60        # On UNIX platforms, you can find the name by using the command
61        # hostname
62        expected_results = {'tornado':  (10.8, 40468),  # tornado headnode
63                            'cyclone':  (7.4,  40468),  # cyclone headnode
64                            'compute':  (10.8, 40468),  # cluster computenode
65                            'nautilus': (8.1,  16104),  # Ole's 32bit Ubuntu
66                            'bogong':   (14.2, 30000),  # ANU?
67                            'pc-31569': (31.6, 15000),  # DSG's PC?
68                            'pc-32572': (12.8, 15788),  # Ross' 32bit work Ubuntu
69                            'saturn':   (12.8, 39404),  # Ross' 64bit home Ubuntu
70                            'desktop':  (27.0, 30000)   # Ole's 32 bit home Ubuntu (old)
71                           } 
72
73        # run trial, report on time and memory
74        ben = BenchmarkLeastSquares()
75        (time, mem, num_tri, one_t,
76         more_t, quad_t) = ben.trial(num_of_points=1000,
77                                     maxArea=0.0001,
78                                     is_fit=True,
79                                     segments_in_mesh=False,
80                                     use_file_type='pts',
81                                     save=False
82                                    )
83
84        # Get expected machine values, else a default set of values
85        time_standard = 35.0        # max of above, plus a little
86        mem_standard = 40000
87        for key in expected_results:
88            if host.lower().startswith(key):
89                (time_standard, mem_standard) = expected_results[key]
90                break
91
92        # don't want exception here, report on time *and* memory
93        got_error = False
94        msg = ('Time used was %.1f s, standard is %.1f s +20%% (%.1f s)'
95               % (time, time_standard, int(time_standard*1.2)))
96        #print msg
97        #assert time < time_standard*1.2, msg
98        if time > time_standard*1.2:
99            print msg
100            got_error = True
101
102        if sys.platform == 'win32':
103            # Memory usage does not work on windows
104            return
105       
106        # Before change: https://datamining.anu.edu.au/anuga/changeset/5855
107        # which closed tickets 244 and 302, mem_standard was as above.
108        # Temporary until ticket:242 is fixed increase it by 25%
109        #mem_standard *= 1.25
110        # Ticket:242 is now fixed (19 Jan 2009), so mem_standard is
111        #reduced again
112
113        msg = ('Memory used was %d KiB, standard is %d KiB +20%% (%d KiB)'
114               % (mem, mem_standard, int(mem_standard*1.2)))
115        #print msg
116        assert mem < mem_standard*1.2, msg           
117
118        if got_error:
119            raise RuntimeError
120           
121#-------------------------------------------------------------
122if __name__ == "__main__":
123    suite = unittest.makeSuite(Test_uq,'test')
124    runner = unittest.TextTestRunner(verbosity=2)
125    runner.run(suite)
Note: See TracBrowser for help on using the repository browser.