[Scipy-svn] r3569 - in trunk/scipy/sandbox/numexpr: . bench
scipy-svn at scipy.org
scipy-svn at scipy.org
Fri Nov 23 02:21:58 EST 2007
Author: cookedm
Date: 2007-11-23 01:21:55 -0600 (Fri, 23 Nov 2007)
New Revision: 3569
Added:
trunk/scipy/sandbox/numexpr/bench/
trunk/scipy/sandbox/numexpr/bench/boolean_timing.py
trunk/scipy/sandbox/numexpr/bench/timing.py
Removed:
trunk/scipy/sandbox/numexpr/boolean_timing.py
trunk/scipy/sandbox/numexpr/timing.py
Log:
[numexpr] Move timing files to a bench/ subdirectory
Copied: trunk/scipy/sandbox/numexpr/bench/boolean_timing.py (from rev 3568, trunk/scipy/sandbox/numexpr/boolean_timing.py)
Copied: trunk/scipy/sandbox/numexpr/bench/timing.py (from rev 3568, trunk/scipy/sandbox/numexpr/timing.py)
Deleted: trunk/scipy/sandbox/numexpr/boolean_timing.py
===================================================================
--- trunk/scipy/sandbox/numexpr/boolean_timing.py 2007-11-23 07:20:02 UTC (rev 3568)
+++ trunk/scipy/sandbox/numexpr/boolean_timing.py 2007-11-23 07:21:55 UTC (rev 3569)
@@ -1,139 +0,0 @@
-import sys
-import timeit
-import numpy
-
-array_size = 1000*1000
-iterations = 10
-
-numpy_ttime = 0
-numpy_sttime = 0
-numpy_nttime = 0
-numexpr_ttime = 0
-numexpr_sttime = 0
-numexpr_nttime = 0
-
-def compare_times(expr, nexpr):
- global numpy_ttime
- global numpy_sttime
- global numpy_nttime
- global numexpr_ttime
- global numexpr_sttime
- global numexpr_nttime
-
- print "******************* Expression:", expr
-
- setup_contiguous = setupNP_contiguous
- setup_strided = setupNP_strided
- setup_unaligned = setupNP_unaligned
-
- numpy_timer = timeit.Timer(expr, setup_contiguous)
- numpy_time = round(numpy_timer.timeit(number=iterations), 4)
- numpy_ttime += numpy_time
- print 'numpy:', numpy_time / iterations
-
- numpy_timer = timeit.Timer(expr, setup_strided)
- numpy_stime = round(numpy_timer.timeit(number=iterations), 4)
- numpy_sttime += numpy_stime
- print 'numpy strided:', numpy_stime / iterations
-
- numpy_timer = timeit.Timer(expr, setup_unaligned)
- numpy_ntime = round(numpy_timer.timeit(number=iterations), 4)
- numpy_nttime += numpy_ntime
- print 'numpy unaligned:', numpy_ntime / iterations
-
- evalexpr = 'evaluate("%s", optimization="aggressive")' % expr
- numexpr_timer = timeit.Timer(evalexpr, setup_contiguous)
- numexpr_time = round(numexpr_timer.timeit(number=iterations), 4)
- numexpr_ttime += numexpr_time
- print "numexpr:", numexpr_time/iterations,
- print "Speed-up of numexpr over numpy:", round(numpy_time/numexpr_time, 4)
-
- evalexpr = 'evaluate("%s", optimization="aggressive")' % expr
- numexpr_timer = timeit.Timer(evalexpr, setup_strided)
- numexpr_stime = round(numexpr_timer.timeit(number=iterations), 4)
- numexpr_sttime += numexpr_stime
- print "numexpr strided:", numexpr_stime/iterations,
- print "Speed-up of numexpr strided over numpy:", \
- round(numpy_stime/numexpr_stime, 4)
-
- evalexpr = 'evaluate("%s", optimization="aggressive")' % expr
- numexpr_timer = timeit.Timer(evalexpr, setup_unaligned)
- numexpr_ntime = round(numexpr_timer.timeit(number=iterations), 4)
- numexpr_nttime += numexpr_ntime
- print "numexpr unaligned:", numexpr_ntime/iterations,
- print "Speed-up of numexpr unaligned over numpy:", \
- round(numpy_ntime/numexpr_ntime, 4)
-
-
-
-setupNP = """\
-from numpy import arange, where, arctan2, sqrt
-from numpy import rec as records
-from numexpr import evaluate
-
-# Initialize a recarray of 16 MB in size
-r=records.array(None, formats='a%s,i4,f8', shape=%s)
-c1 = r.field('f0')%s
-i2 = r.field('f1')%s
-f3 = r.field('f2')%s
-c1[:] = "a"
-i2[:] = arange(%s)/1000
-f3[:] = i2/2.
-"""
-
-setupNP_contiguous = setupNP % (4, array_size,
- ".copy()", ".copy()", ".copy()",
- array_size)
-setupNP_strided = setupNP % (4, array_size, "", "", "", array_size)
-setupNP_unaligned = setupNP % (1, array_size, "", "", "", array_size)
-
-
-expressions = []
-expressions.append('i2 > 0')
-expressions.append('i2 < 0')
-expressions.append('i2 < f3')
-expressions.append('i2-10 < f3')
-expressions.append('i2*f3+f3*f3 > i2')
-expressions.append('0.1*i2 > arctan2(i2, f3)')
-expressions.append('i2%2 > 3')
-expressions.append('i2%10 < 4')
-expressions.append('i2**2 + (f3+1)**-2.5 < 3')
-expressions.append('(f3+1)**50 > i2')
-expressions.append('sqrt(i2**2 + f3**2) > 1')
-expressions.append('(i2>2) | ((f3**2>3) & ~(i2*f3<2))')
-
-def compare(expression=False):
- if expression:
- compare_times(expression, 1)
- sys.exit(0)
- nexpr = 0
- for expr in expressions:
- nexpr += 1
- compare_times(expr, nexpr)
- print
-
-if __name__ == '__main__':
-
- print 'Python version: %s' % sys.version
- print "NumPy version: %s" % numpy.__version__
-
- if len(sys.argv) > 1:
- expression = sys.argv[1]
- print "expression-->", expression
- compare(expression)
- else:
- compare()
-
- print "*************** TOTALS **************************"
- print "numpy total:", numpy_ttime/iterations
- print "numpy strided total:", numpy_sttime/iterations
- print "numpy unaligned total:", numpy_nttime/iterations
- print "numexpr total:", numexpr_ttime/iterations
- print "Speed-up of numexpr over numpy:", \
- round(numpy_ttime/numexpr_ttime, 3)
- print "numexpr strided total:", numexpr_sttime/iterations
- print "Speed-up of numexpr strided over numpy:", \
- round(numpy_sttime/numexpr_sttime, 3)
- print "numexpr unaligned total:", numexpr_nttime/iterations
- print "Speed-up of numexpr unaligned over numpy:", \
- round(numpy_nttime/numexpr_nttime, 3)
Deleted: trunk/scipy/sandbox/numexpr/timing.py
===================================================================
--- trunk/scipy/sandbox/numexpr/timing.py 2007-11-23 07:20:02 UTC (rev 3568)
+++ trunk/scipy/sandbox/numexpr/timing.py 2007-11-23 07:21:55 UTC (rev 3569)
@@ -1,136 +0,0 @@
-import timeit, numpy
-
-array_size = 1e6
-iterations = 10
-
-def compare_times(setup, expr):
- print "Expression:", expr
- namespace = {}
- exec setup in namespace
-
- numpy_timer = timeit.Timer(expr, setup)
- numpy_time = numpy_timer.timeit(number=iterations)
- print 'numpy:', numpy_time / iterations
-
- try:
- weave_timer = timeit.Timer('blitz("result=%s")' % expr, setup)
- weave_time = weave_timer.timeit(number=iterations)
- print "Weave:", weave_time/iterations
-
- print "Speed-up of weave over numpy:", numpy_time/weave_time
- except:
- print "Skipping weave timing"
-
- numexpr_timer = timeit.Timer('evaluate("%s", optimization="aggressive")' % expr, setup)
- numexpr_time = numexpr_timer.timeit(number=iterations)
- print "numexpr:", numexpr_time/iterations
-
- print "Speed-up of numexpr over numpy:", numpy_time/numexpr_time
- return numpy_time/numexpr_time
-
-setup1 = """\
-from numpy import arange
-try: from scipy.weave import blitz
-except: pass
-from numexpr import evaluate
-result = arange(%f)
-b = arange(%f)
-c = arange(%f)
-d = arange(%f)
-e = arange(%f)
-""" % ((array_size,)*5)
-expr1 = 'b*c+d*e'
-
-setup2 = """\
-from numpy import arange
-try: from scipy.weave import blitz
-except: pass
-from numexpr import evaluate
-a = arange(%f)
-b = arange(%f)
-result = arange(%f)
-""" % ((array_size,)*3)
-expr2 = '2*a+3*b'
-
-
-setup3 = """\
-from numpy import arange, sin, cos, sinh
-try: from scipy.weave import blitz
-except: pass
-from numexpr import evaluate
-a = arange(2*%f)[::2]
-b = arange(%f)
-result = arange(%f)
-""" % ((array_size,)*3)
-expr3 = '2*a + (cos(3)+5)*sinh(cos(b))'
-
-
-setup4 = """\
-from numpy import arange, sin, cos, sinh, arctan2
-try: from scipy.weave import blitz
-except: pass
-from numexpr import evaluate
-a = arange(2*%f)[::2]
-b = arange(%f)
-result = arange(%f)
-""" % ((array_size,)*3)
-expr4 = '2*a + arctan2(a, b)'
-
-
-setup5 = """\
-from numpy import arange, sin, cos, sinh, arctan2, sqrt, where
-try: from scipy.weave import blitz
-except: pass
-from numexpr import evaluate
-a = arange(2*%f, dtype=float)[::2]
-b = arange(%f, dtype=float)
-result = arange(%f, dtype=float)
-""" % ((array_size,)*3)
-expr5 = 'where(0.1*a > arctan2(a, b), 2*a, arctan2(a,b))'
-
-expr6 = 'where(a != 0.0, 2, b)'
-
-expr7 = 'where(a-10 != 0.0, a, 2)'
-
-expr8 = 'where(a%2 != 0.0, b+5, 2)'
-
-expr9 = 'where(a%2 != 0.0, 2, b+5)'
-
-expr10 = 'a**2 + (b+1)**-2.5'
-
-expr11 = '(a+1)**50'
-
-expr12 = 'sqrt(a**2 + b**2)'
-
-def compare(check_only=False):
- total = 0
- total += compare_times(setup1, expr1)
- print
- total += compare_times(setup2, expr2)
- print
- total += compare_times(setup3, expr3)
- print
- total += compare_times(setup4, expr4)
- print
- total += compare_times(setup5, expr6)
- print
- total += compare_times(setup5, expr7)
- print
- total += compare_times(setup5, expr8)
- print
- total += compare_times(setup5, expr9)
- print
- total += compare_times(setup5, expr10)
- print
- total += compare_times(setup5, expr11)
- print
- total += compare_times(setup5, expr12)
- print
- print "Average =", total / 11.0
- return total
-
-if __name__ == '__main__':
- averages = []
- for i in range(iterations):
- averages.append(compare())
- print "Averages:", ', '.join("%.2f" % x for x in averages)
More information about the Scipy-svn
mailing list