summaryrefslogtreecommitdiffstats
path: root/Tools
diff options
context:
space:
mode:
authorSteve Holden <steve@holdenweb.com>2006-05-26 16:27:59 (GMT)
committerSteve Holden <steve@holdenweb.com>2006-05-26 16:27:59 (GMT)
commit431a76314df929d42192fe4bb087eb97d158de87 (patch)
treed4e329932cd3ae725727346214ad73eb35f069d1 /Tools
parent0cbf2c57852d64855b88305dfa7d77f84936a674 (diff)
downloadcpython-431a76314df929d42192fe4bb087eb97d158de87.zip
cpython-431a76314df929d42192fe4bb087eb97d158de87.tar.gz
cpython-431a76314df929d42192fe4bb087eb97d158de87.tar.bz2
Add -t option to allow easy test selection.
Action verbose option correctly. Tweak operation counts. Add empty and new instances tests. Enable comparisons across different warp factors. Change version.
Diffstat (limited to 'Tools')
-rw-r--r--Tools/pybench/Arithmetic.py10
-rw-r--r--Tools/pybench/Calls.py8
-rw-r--r--Tools/pybench/Constructs.py6
-rw-r--r--Tools/pybench/Dict.py10
-rwxr-xr-xTools/pybench/Empty.py23
-rw-r--r--Tools/pybench/Exceptions.py4
-rw-r--r--Tools/pybench/Imports.py6
-rw-r--r--Tools/pybench/Instances.py2
-rw-r--r--Tools/pybench/Lists.py6
-rw-r--r--Tools/pybench/Lookups.py10
-rwxr-xr-xTools/pybench/NewInstances.py66
-rw-r--r--Tools/pybench/Numbers.py8
-rw-r--r--Tools/pybench/Setup.py5
-rw-r--r--Tools/pybench/Strings.py14
-rw-r--r--Tools/pybench/Tuples.py4
-rw-r--r--Tools/pybench/Unicode.py14
-rwxr-xr-xTools/pybench/pybench.py170
17 files changed, 255 insertions, 111 deletions
diff --git a/Tools/pybench/Arithmetic.py b/Tools/pybench/Arithmetic.py
index 4ed6219..229396c 100644
--- a/Tools/pybench/Arithmetic.py
+++ b/Tools/pybench/Arithmetic.py
@@ -4,7 +4,7 @@ class SimpleIntegerArithmetic(Test):
version = 0.3
operations = 5 * (3 + 5 + 5 + 3 + 3 + 3)
- rounds = 120000
+ rounds = 1200*21
def test(self):
@@ -159,7 +159,7 @@ class SimpleFloatArithmetic(Test):
version = 0.3
operations = 5 * (3 + 5 + 5 + 3 + 3 + 3)
- rounds = 100000
+ rounds = 1000*30
def test(self):
@@ -314,7 +314,7 @@ class SimpleIntFloatArithmetic(Test):
version = 0.3
operations = 5 * (3 + 5 + 5 + 3 + 3 + 3)
- rounds = 120000
+ rounds = 1200*30
def test(self):
@@ -470,7 +470,7 @@ class SimpleLongArithmetic(Test):
version = 0.3
operations = 5 * (3 + 5 + 5 + 3 + 3 + 3)
- rounds = 30000
+ rounds = 300*32
def test(self):
@@ -625,7 +625,7 @@ class SimpleComplexArithmetic(Test):
version = 0.3
operations = 5 * (3 + 5 + 5 + 3 + 3 + 3)
- rounds = 40000
+ rounds = 400*27
def test(self):
diff --git a/Tools/pybench/Calls.py b/Tools/pybench/Calls.py
index e295243..a94887b 100644
--- a/Tools/pybench/Calls.py
+++ b/Tools/pybench/Calls.py
@@ -4,7 +4,7 @@ class PythonFunctionCalls(Test):
version = 0.3
operations = 5*(1+4+4+2)
- rounds = 60000
+ rounds = 600*22
def test(self):
@@ -113,7 +113,7 @@ class BuiltinFunctionCalls(Test):
version = 0.4
operations = 5*(2+5+5+5)
- rounds = 30000
+ rounds = 300*24
def test(self):
@@ -234,7 +234,7 @@ class PythonMethodCalls(Test):
version = 0.3
operations = 5*(6 + 5 + 4)
- rounds = 20000
+ rounds = 200*27
def test(self):
@@ -376,7 +376,7 @@ class Recursion(Test):
version = 0.3
operations = 5
- rounds = 50000
+ rounds = 500*21
def test(self):
diff --git a/Tools/pybench/Constructs.py b/Tools/pybench/Constructs.py
index 00045bd..f7ebe73 100644
--- a/Tools/pybench/Constructs.py
+++ b/Tools/pybench/Constructs.py
@@ -4,7 +4,7 @@ class IfThenElse(Test):
version = 0.31
operations = 30*3 # hard to say...
- rounds = 150000
+ rounds = 1500*27
def test(self):
@@ -471,7 +471,7 @@ class NestedForLoops(Test):
version = 0.3
operations = 1000*10*5
- rounds = 150
+ rounds = 100
def test(self):
@@ -496,7 +496,7 @@ class ForLoops(Test):
version = 0.1
operations = 5 * 5
- rounds = 8000
+ rounds = 80*25
def test(self):
diff --git a/Tools/pybench/Dict.py b/Tools/pybench/Dict.py
index 54aeae7..d1b3833 100644
--- a/Tools/pybench/Dict.py
+++ b/Tools/pybench/Dict.py
@@ -4,7 +4,7 @@ class DictCreation(Test):
version = 0.3
operations = 5*(5 + 5)
- rounds = 60000
+ rounds = 600*24
def test(self):
@@ -79,7 +79,7 @@ class DictWithStringKeys(Test):
version = 0.1
operations = 5*(6 + 6)
- rounds = 200000
+ rounds = 2000*30
def test(self):
@@ -168,7 +168,7 @@ class DictWithFloatKeys(Test):
version = 0.1
operations = 5*(6 + 6)
- rounds = 200000
+ rounds = 20000
def test(self):
@@ -257,7 +257,7 @@ class DictWithIntegerKeys(Test):
version = 0.1
operations = 5*(6 + 6)
- rounds = 200000
+ rounds = 2000*19
def test(self):
@@ -346,7 +346,7 @@ class SimpleDictManipulation(Test):
version = 0.3
operations = 5*(6 + 6 + 6 + 6)
- rounds = 50000
+ rounds = 500*44
def test(self):
diff --git a/Tools/pybench/Empty.py b/Tools/pybench/Empty.py
new file mode 100755
index 0000000..3c54851
--- /dev/null
+++ b/Tools/pybench/Empty.py
@@ -0,0 +1,23 @@
+from pybench import Test
+
+class EmptyTest(Test):
+ """This is just here as a potential measure of repeatability."""
+
+ version = 0.3
+ operations = 1
+ rounds = 60000
+
+ def test(self):
+
+ l = []
+ for i in xrange(self.rounds):
+ pass
+
+
+ def calibrate(self):
+
+ l = []
+
+ for i in xrange(self.rounds):
+ pass
+
diff --git a/Tools/pybench/Exceptions.py b/Tools/pybench/Exceptions.py
index 7e55708..d6c8941 100644
--- a/Tools/pybench/Exceptions.py
+++ b/Tools/pybench/Exceptions.py
@@ -4,7 +4,7 @@ class TryRaiseExcept(Test):
version = 0.1
operations = 2 + 3
- rounds = 60000
+ rounds = 600*25
def test(self):
@@ -44,7 +44,7 @@ class TryExcept(Test):
version = 0.1
operations = 15 * 10
- rounds = 200000
+ rounds = 2000*16
def test(self):
diff --git a/Tools/pybench/Imports.py b/Tools/pybench/Imports.py
index 85eb604..b953919 100644
--- a/Tools/pybench/Imports.py
+++ b/Tools/pybench/Imports.py
@@ -8,7 +8,7 @@ class SecondImport(Test):
version = 0.1
operations = 5 * 5
- rounds = 20000
+ rounds = 2000*15
def test(self):
@@ -53,7 +53,7 @@ class SecondPackageImport(Test):
version = 0.1
operations = 5 * 5
- rounds = 20000
+ rounds = 200*20
def test(self):
@@ -97,7 +97,7 @@ class SecondSubmoduleImport(Test):
version = 0.1
operations = 5 * 5
- rounds = 20000
+ rounds = 200*17
def test(self):
diff --git a/Tools/pybench/Instances.py b/Tools/pybench/Instances.py
index 9b1929d..199b129 100644
--- a/Tools/pybench/Instances.py
+++ b/Tools/pybench/Instances.py
@@ -4,7 +4,7 @@ class CreateInstances(Test):
version = 0.2
operations = 3 + 7 + 4
- rounds = 60000
+ rounds = 600*17
def test(self):
diff --git a/Tools/pybench/Lists.py b/Tools/pybench/Lists.py
index 4c18e99..844612f 100644
--- a/Tools/pybench/Lists.py
+++ b/Tools/pybench/Lists.py
@@ -4,7 +4,7 @@ class SimpleListManipulation(Test):
version = 0.3
operations = 5* (6 + 6 + 6)
- rounds = 60000
+ rounds = 600*45
def test(self):
@@ -132,7 +132,7 @@ class ListSlicing(Test):
version = 0.4
operations = 25*(3+1+2+1)
- rounds = 400
+ rounds = 4*45
def test(self):
@@ -169,7 +169,7 @@ class SmallLists(Test):
version = 0.3
operations = 5*(1+ 6 + 6 + 3 + 1)
- rounds = 60000
+ rounds = 600*15
def test(self):
diff --git a/Tools/pybench/Lookups.py b/Tools/pybench/Lookups.py
index e5529cd..47ad94a 100644
--- a/Tools/pybench/Lookups.py
+++ b/Tools/pybench/Lookups.py
@@ -4,7 +4,7 @@ class SpecialClassAttribute(Test):
version = 0.3
operations = 5*(12 + 12)
- rounds = 100000
+ rounds = 1000*16
def test(self):
@@ -185,7 +185,7 @@ class NormalClassAttribute(Test):
version = 0.3
operations = 5*(12 + 12)
- rounds = 100000
+ rounds = 1000*20
def test(self):
@@ -371,7 +371,7 @@ class SpecialInstanceAttribute(Test):
version = 0.3
operations = 5*(12 + 12)
- rounds = 100000
+ rounds = 1000*14
def test(self):
@@ -559,7 +559,7 @@ class NormalInstanceAttribute(Test):
version = 0.3
operations = 5*(12 + 12)
- rounds = 100000
+ rounds = 1000*22
def test(self):
@@ -747,7 +747,7 @@ class BuiltinMethodLookup(Test):
version = 0.3
operations = 5*(3*5 + 3*5)
- rounds = 70000
+ rounds = 700*15
def test(self):
diff --git a/Tools/pybench/NewInstances.py b/Tools/pybench/NewInstances.py
new file mode 100755
index 0000000..a352638
--- /dev/null
+++ b/Tools/pybench/NewInstances.py
@@ -0,0 +1,66 @@
+from pybench import Test
+
+class CreateNewInstances(Test):
+
+ version = 0.1
+ operations = 3 + 7 + 4
+ rounds = 60000
+
+ def test(self):
+
+ class c(object):
+ pass
+
+ class d(object):
+ def __init__(self,a,b,c):
+ self.a = a
+ self.b = b
+ self.c = c
+
+ class e(object):
+ def __init__(self,a,b,c=4):
+ self.a = a
+ self.b = b
+ self.c = c
+ self.d = a
+ self.e = b
+ self.f = c
+
+ for i in xrange(self.rounds):
+ o = c()
+ o1 = c()
+ o2 = c()
+ p = d(i,i,3)
+ p1 = d(i,i,3)
+ p2 = d(i,3,3)
+ p3 = d(3,i,3)
+ p4 = d(i,i,i)
+ p5 = d(3,i,3)
+ p6 = d(i,i,i)
+ q = e(i,i,3)
+ q1 = e(i,i,3)
+ q2 = e(i,i,3)
+ q3 = e(i,i)
+
+ def calibrate(self):
+
+ class c(object):
+ pass
+
+ class d(object):
+ def __init__(self,a,b,c):
+ self.a = a
+ self.b = b
+ self.c = c
+
+ class e(object):
+ def __init__(self,a,b,c=4):
+ self.a = a
+ self.b = b
+ self.c = c
+ self.d = a
+ self.e = b
+ self.f = c
+
+ for i in xrange(self.rounds):
+ pass
diff --git a/Tools/pybench/Numbers.py b/Tools/pybench/Numbers.py
index a6aea33..e89d00f 100644
--- a/Tools/pybench/Numbers.py
+++ b/Tools/pybench/Numbers.py
@@ -4,7 +4,7 @@ class CompareIntegers(Test):
version = 0.1
operations = 30 * 5
- rounds = 120000
+ rounds = 1200*21
def test(self):
@@ -200,7 +200,7 @@ class CompareFloats(Test):
version = 0.1
operations = 30 * 5
- rounds = 60000
+ rounds = 600*27
def test(self):
@@ -396,7 +396,7 @@ class CompareFloatsIntegers(Test):
version = 0.1
operations = 30 * 5
- rounds = 60000
+ rounds = 600*16
def test(self):
@@ -592,7 +592,7 @@ class CompareLongs(Test):
version = 0.1
operations = 30 * 5
- rounds = 60000
+ rounds = 600*24
def test(self):
diff --git a/Tools/pybench/Setup.py b/Tools/pybench/Setup.py
index 906a2a9..1f2f454 100644
--- a/Tools/pybench/Setup.py
+++ b/Tools/pybench/Setup.py
@@ -17,11 +17,16 @@ Number_of_rounds = 10
Warp_factor = 20
# Import tests
+#from Empty import *
from Arithmetic import *
from Calls import *
from Constructs import *
from Lookups import *
from Instances import *
+try:
+ from NewInstances import *
+except:
+ print "Cannot test new-style objects"
from Lists import *
from Tuples import *
from Dict import *
diff --git a/Tools/pybench/Strings.py b/Tools/pybench/Strings.py
index b01843a..43309da 100644
--- a/Tools/pybench/Strings.py
+++ b/Tools/pybench/Strings.py
@@ -5,7 +5,7 @@ class ConcatStrings(Test):
version = 0.1
operations = 10 * 5
- rounds = 60000
+ rounds = 6000
def test(self):
@@ -87,7 +87,7 @@ class CompareStrings(Test):
version = 0.2
operations = 10 * 5
- rounds = 200000
+ rounds = 2000*22
def test(self):
@@ -169,7 +169,7 @@ class CompareInternedStrings(Test):
version = 0.1
operations = 10 * 5
- rounds = 200000
+ rounds = 2000*28
def test(self):
@@ -251,7 +251,7 @@ class CreateStringsWithConcat(Test):
version = 0.1
operations = 10 * 5
- rounds = 80000
+ rounds = 800*32
def test(self):
@@ -326,7 +326,7 @@ class StringSlicing(Test):
version = 0.1
operations = 5 * 7
- rounds = 100000
+ rounds = 1000*15
def test(self):
@@ -389,7 +389,7 @@ if hasattr('', 'lower'):
version = 0.1
operations = 3 * (5 + 4 + 2 + 1)
- rounds = 70000
+ rounds = 14000
def test(self):
@@ -462,7 +462,7 @@ if hasattr('', 'lower'):
version = 0.1
operations = 10 * 7
- rounds = 80000
+ rounds = 800*24
def test(self):
diff --git a/Tools/pybench/Tuples.py b/Tools/pybench/Tuples.py
index e84ea53..842fa3e 100644
--- a/Tools/pybench/Tuples.py
+++ b/Tools/pybench/Tuples.py
@@ -4,7 +4,7 @@ class TupleSlicing(Test):
version = 0.31
operations = 3 * 25 * 10 * 7
- rounds = 400
+ rounds = 100
def test(self):
@@ -272,7 +272,7 @@ class SmallTuples(Test):
version = 0.3
operations = 5*(1 + 3 + 6 + 2)
- rounds = 80000
+ rounds = 800*16
def test(self):
diff --git a/Tools/pybench/Unicode.py b/Tools/pybench/Unicode.py
index 366f171..86839b5 100644
--- a/Tools/pybench/Unicode.py
+++ b/Tools/pybench/Unicode.py
@@ -10,7 +10,7 @@ class ConcatUnicode(Test):
version = 0.1
operations = 10 * 5
- rounds = 60000
+ rounds = 600*7
def test(self):
@@ -92,7 +92,7 @@ class CompareUnicode(Test):
version = 0.1
operations = 10 * 5
- rounds = 150000
+ rounds = 1500*17
def test(self):
@@ -174,7 +174,7 @@ class CreateUnicodeWithConcat(Test):
version = 0.1
operations = 10 * 5
- rounds = 80000
+ rounds = 800*12
def test(self):
@@ -249,7 +249,7 @@ class UnicodeSlicing(Test):
version = 0.1
operations = 5 * 7
- rounds = 100000
+ rounds = 10000
def test(self):
@@ -310,7 +310,7 @@ class UnicodeMappings(Test):
version = 0.1
operations = 3 * (5 + 4 + 2 + 1)
- rounds = 10000
+ rounds = 100*15
def test(self):
@@ -383,7 +383,7 @@ class UnicodePredicates(Test):
version = 0.1
operations = 5 * 9
- rounds = 100000
+ rounds = 1000*25
def test(self):
@@ -460,7 +460,7 @@ else:
version = 0.1
operations = 5 * 8
- rounds = 100000
+ rounds = 1000*15
def test(self):
diff --git a/Tools/pybench/pybench.py b/Tools/pybench/pybench.py
index b20c3f3..f190d77 100755
--- a/Tools/pybench/pybench.py
+++ b/Tools/pybench/pybench.py
@@ -35,7 +35,7 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE !
"""
# Version number
-__version__ = '1.3'
+__version__ = '1.4'
#
# NOTE: Use xrange for all test loops unless you want to face
@@ -98,7 +98,7 @@ class Test:
# Number of rounds to execute per test run. This should be
# adjusted to a figure that results in a test run-time of between
# 20-50 seconds.
- rounds = 100000
+ rounds = 10000
### Internal variables
@@ -115,6 +115,8 @@ class Test:
if warp > 1:
self.rounds = self.rounds / warp
+ if self.rounds == 0:
+ self.rounds = 1
self.warp = warp
self.times = []
self.overhead = []
@@ -137,12 +139,13 @@ class Test:
cruns = self.cruns
# first calibrate
offset = 0.0
- for i in range(cruns):
- t = clock()
- calibrate()
- t = clock() - t
- offset = offset + t
- offset = offset / cruns
+ if cruns:
+ for i in range(cruns):
+ t = clock()
+ calibrate()
+ t = clock() - t
+ offset = offset + t
+ offset = offset / cruns
# now the real thing
t = clock()
test()
@@ -175,13 +178,18 @@ class Test:
def stat(self):
- """ Returns two value: average time per run and average per
- operation.
+ """ Returns four values:
+ minimum round time
+ average time per round
+ average time per operation
+ average overhead time
+ XXX Should this take warp factors into account?
"""
runs = len(self.times)
if runs == 0:
return 0,0
+ mintime = min(self.times)
totaltime = reduce(operator.add,self.times,0.0)
avg = totaltime / float(runs)
op_avg = totaltime / float(runs * self.rounds * self.operations)
@@ -191,7 +199,7 @@ class Test:
else:
# use self.last_timing - not too accurate
ov_avg = self.last_timing[2]
- return avg,op_avg,ov_avg
+ return mintime, avg, op_avg, ov_avg
### Load Setup
@@ -210,105 +218,132 @@ class Benchmark:
roundtime = 0 # Average round time
version = None # Benchmark version number (see __init__)
# as float x.yy
- starttime = None # Benchmark start time
def __init__(self):
self.tests = {}
self.version = 0.31
- def load_tests(self,setupmod,warp=1):
+ def load_tests(self, setupmod, warp=1, limitnames="", verbose=0):
self.warp = warp
+ if limitnames:
+ limitnames = re.compile(limitnames, re.I)
+ else:
+ limitnames = None
tests = self.tests
- print 'Searching for tests...'
+ if verbose:
+ print 'Searching for tests ...',
setupmod.__dict__.values()
for c in setupmod.__dict__.values():
- if hasattr(c,'is_a_test') and c.__name__ != 'Test':
- tests[c.__name__] = c(warp)
+ if not hasattr(c,'is_a_test'):
+ continue
+ name = c.__name__
+ if name == 'Test':
+ continue
+ if limitnames is not None and limitnames.search(name) is None:
+ continue
+ tests[name] = c(warp)
l = tests.keys()
l.sort()
- for t in l:
- print ' ',t
+ if verbose:
+ print
+ for t in l:
+ print ' ', t
+ print len(l), "tests found"
print
- def run(self):
+ def run(self, verbose):
tests = self.tests.items()
tests.sort()
clock = time.clock
- print 'Running %i round(s) of the suite: ' % self.rounds
+ print 'Running %i round(s) of the suite at warp factor %i:' % (self.rounds, self.warp)
print
- self.starttime = time.time()
roundtime = clock()
for i in range(self.rounds):
- print ' Round %-25i real abs overhead' % (i+1)
+ roundstarttime = clock()
+ if verbose:
+ print ' Round %-25i real abs overhead' % (i+1)
for j in range(len(tests)):
name,t = tests[j]
- print '%30s:' % name,
+ if verbose:
+ print '%30s:' % name,
t.run()
- print ' %.3fr %.3fa %.3fo' % t.last_timing
- print ' ----------------------'
- print ' Average round time: %.3f seconds' % \
- ((clock() - roundtime)/(i+1))
- print
+ if verbose:
+ print ' %.3fr %.3fa %.3fo' % t.last_timing
+ if verbose:
+ print ' ----------------------'
+ print ' Average round time: %.3f seconds' % \
+ ((clock() - roundtime)/(i+1))
+ print
+ else:
+ print '%d done in %.3f seconds' % (i+1, (clock() - roundstarttime))
self.roundtime = (clock() - roundtime) / self.rounds
print
def print_stat(self, compare_to=None, hidenoise=0):
if not compare_to:
- print '%-30s per run per oper. overhead' % 'Tests:'
- print '-'*72
+ print '%-30s min run avg run per oprn overhead' % 'Tests:'
+ print '-'*77
tests = self.tests.items()
tests.sort()
+ totalmintime = 0
for name,t in tests:
- avg,op_avg,ov_avg = t.stat()
- print '%30s: %10.2f ms %7.2f us %7.2f ms' % \
- (name,avg*1000.0,op_avg*1000000.0,ov_avg*1000.0)
- print '-'*72
- print '%30s: %10.2f ms' % \
- ('Average round time',self.roundtime * 1000.0)
+ mintime,avg,op_avg,ov_avg = t.stat()
+ totalmintime += mintime
+ print '%30s: %9.2f ms %9.2f ms %6.2f us %6.2f' % \
+ (name,mintime*1000.0,avg*1000.0,op_avg*1000000.0,ov_avg*1000.0)
+ print '-'*77
+ print '%30s: %9.2f ms' % \
+ ('Notional minimum round time', totalmintime * 1000.0)
else:
- print '%-30s per run per oper. diff *)' % \
+ print 'Comparing with: %s (rounds=%i, warp=%i)' % \
+ (compare_to.name,compare_to.rounds,compare_to.warp)
+ print '%-30s min run cmp run avg run diff' % \
'Tests:'
- print '-'*72
+ print '-'*77
tests = self.tests.items()
tests.sort()
compatible = 1
- for name,t in tests:
- avg,op_avg,ov_avg = t.stat()
+ totalmintime = other_totalmintime = 0
+ for name, t in tests:
+ mintime, avg, op_avg, ov_avg = t.stat()
+ totalmintime += mintime
try:
other = compare_to.tests[name]
except KeyError:
other = None
if other and other.version == t.version and \
other.operations == t.operations:
- avg1,op_avg1,ov_avg1 = other.stat()
- qop_avg = (op_avg/op_avg1-1.0)*100.0
+ mintime1, avg1, op_avg1, ov_avg1 = other.stat()
+ other_totalmintime += mintime1
+ diff = ((mintime*self.warp)/(mintime1*other.warp) - 1.0)*100.0
if hidenoise and abs(qop_avg) < 10:
- qop_avg = ''
+ diff = ''
else:
- qop_avg = '%+7.2f%%' % qop_avg
+ diff = '%+7.2f%%' % diff
else:
- qavg,qop_avg = 'n/a', 'n/a'
+ qavg, diff = 'n/a', 'n/a'
compatible = 0
- print '%30s: %10.2f ms %7.2f us %8s' % \
- (name,avg*1000.0,op_avg*1000000.0,qop_avg)
- print '-'*72
+ print '%30s: %8.2f ms %8.2f ms %8.2f ms %8s' % \
+ (name,mintime*1000.0,mintime1*1000.0 * compare_to.warp/self.warp, avg*1000.0,diff)
+ print '-'*77
+ #
+ # Summarise test results
+ #
if compatible and compare_to.roundtime > 0 and \
compare_to.version == self.version:
- print '%30s: %10.2f ms %+7.2f%%' % \
- ('Average round time',self.roundtime * 1000.0,
- ((self.roundtime*self.warp)/
- (compare_to.roundtime*compare_to.warp)-1.0)*100.0)
+ print '%30s: %8.2f ms %8.2f ms %+7.2f%%' % \
+ ('Notional minimum round time', totalmintime * 1000.0,
+ other_totalmintime * 1000.0 * compare_to.warp/self.warp,
+ ((totalmintime*self.warp)/
+ (other_totalmintime*compare_to.warp)-1.0)*100.0)
else:
- print '%30s: %10.2f ms n/a' % \
- ('Average round time',self.roundtime * 1000.0)
- print
- print '*) measured against: %s (rounds=%i, warp=%i)' % \
- (compare_to.name,compare_to.rounds,compare_to.warp)
+ print '%30s: %9.2f ms n/a' % \
+ ('Notional minimum round time', totalmintime * 1000.0)
print
def print_machine():
@@ -339,7 +374,12 @@ class PyBenchCmdline(Application):
SwitchOption('-S','show statistics of benchmarks',0),
ArgumentOption('-w','set warp factor to arg',Setup.Warp_factor),
SwitchOption('-d','hide noise in compares', 0),
+ SwitchOption('-v','verbose output (not recommended)', 0),
SwitchOption('--no-gc','disable garbage collection', 0),
+ SwitchOption('--no-syscheck',
+ '"disable" sys check interval (set to sys.maxint)', 0),
+ ArgumentOption('-t', 'tests containing substring', ''),
+ ArgumentOption('-C', 'number of calibration runs (default 0)', '')
]
about = """\
@@ -380,6 +420,11 @@ python pybench.py -s p15 -c p14
hidenoise = self.values['-d']
warp = self.values['-w']
nogc = self.values['--no-gc']
+ limitnames = self.values['-t']
+ verbose = self.verbose
+ nosyscheck = self.values['--no-syscheck']
+
+ print 'PYBENCH',__version__
# Switch off GC
if nogc:
@@ -390,8 +435,13 @@ python pybench.py -s p15 -c p14
else:
if self.values['--no-gc']:
gc.disable()
+ print 'NO GC'
+
+ # maximise sys check interval
+ if nosyscheck:
+ sys.setcheckinterval(sys.maxint)
+ print 'CHECKINTERVAL =', sys.maxint
- print 'PYBENCH',__version__
print
if not compare_to:
@@ -436,9 +486,9 @@ python pybench.py -s p15 -c p14
# Create benchmark object
bench = Benchmark()
bench.rounds = rounds
- bench.load_tests(Setup,warp)
+ bench.load_tests(Setup, warp, limitnames, verbose)
try:
- bench.run()
+ bench.run(verbose)
except KeyboardInterrupt:
print
print '*** KeyboardInterrupt -- Aborting'