Vbench performance benchmarks for NumPy

Performance Benchmarks

These historical benchmark graphs were produced with vbench.

These historical benchmark graphs were produced with vbench (ATM with yet to be integrated upstream changes in https://github.com/pydata/vbench/pull/33).

Original repository with the The numpy_vb_common setup script defining various variables and data structures used through-out the bench can be found on github .

Results were collected on a following machine:

  • Dual AMD Opteron(tm) Processor 246, 3GB RAM
  • Debian wheezy, amd-64 build (chroot on Debian with 3.2.0-4-amd64 kernel)
  • Python 2.7.3 64-bit

cpuinfo:

vendor_id       : AuthenticAMD
cpu family      : 15
model           : 5
model name      : AMD Opteron(tm) Processor 246
stepping        : 8
microcode       : 0x46
cpu MHz         : 1994.032
cache size      : 1024 KB
fpu             : yes
fpu_exception   : yes
cpuid level     : 1
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx
                  fxsr sse sse2 syscall nx mmxext lm 3dnowext 3dnow rep_good nopl
bogomips        : 3988.06
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management: ts ttp

Benchmarks Performance Analysis

Benchmark Check Slowdown % Reference date Reference timing Target timing Possible recent
numpy.add.reduce(axis=0)_float16 ConsistentlyWorse(10) 189.1 2011.06.02 7 20 4e179f0...00a8c0c
numpy.any_fast ConsistentlyWorse(10) 179.4 2011.03.29 0.0017 0.0047 0e091af...0625671
numpy.all_fast ConsistentlyWorse(10) 177.3 2011.03.29 0.0017 0.0047 f14d5e1...06440c1
numpy.small_reduction ConsistentlyWorse(10) 84.6 2011.04.02 0.0024 0.0046 8bcb756...fb037eb
median_odd_small ConsistentlyWorse(10) 75.5 2011.03.18 0.018 0.031 eb61066...74b0836
median_even_small ConsistentlyWorse(10) 74.3 2011.03.29 0.018 0.031 eb61066...74b0836
memcpy_int8 ConsistentlyWorse(10) 68.7 2011.04.02 0.0018 0.0024 fe0f6cc...7e8e7a2
numpy.identity(100) ConsistentlyWorse(10) 52.2 2011.12.04 0.009 0.014 58350f4...cd0b8e7
numpy.ones(100) ConsistentlyWorse(10) 47.3 2011.04.02 0.002 0.0029 eb61066...74b0836
numpy.linalg.norm(a)_float16 ConsistentlyWorse(10) 34.5 2014.11.19 0.11 0.13 a32625e...4083883
numpy.ma.masked_array() ConsistentlyWorse(10) 33.4 2014.08.04 0.022 0.028 e73ee5d...eb61066
strided_assign_complex128 ConsistentlyWorse(10) 33.2 2011.03.26 0.023 0.03 cfa095a...9671491
min_np.intp ConsistentlyWorse(10) 32.3 2011.08.26 0.021 0.028 fb037eb...31b94e8
copyto_8_sparse ConsistentlyWorse(10) 31.3 2011.08.26 0.15 0.22 e73ee5d...eb61066
numpy.tril(l10x10) ConsistentlyWorse(10) 30.3 2014.02.15 0.015 0.019 7be18ed...3b22d87
numpy.vstack(l) ConsistentlyWorse(10) 29.6 2011.04.02 0.007 0.0089 7be18ed...3b22d87
numpy.ma.masked_array(l100,t100) ConsistentlyWorse(10) 24.1 2014.07.30 0.034 0.042 eb61066...74b0836
numpy.array(l) ConsistentlyWorse(10) 21.9 2014.07.05 0.0027 0.0031 1657544...7be18ed
sort_inplace ConsistentlyWorse(10) 21.9 2011.03.29 0.13 0.15 N/A
a[np.ix_(indexes_, indexes_)]=1 ConsistentlyWorse(10) 20.9 2014.04.03 1.3 1.6 1657544...7be18ed
sort ConsistentlyWorse(10) 20.8 2011.03.29 0.14 0.15 N/A
a[np.ix_(indexes_rand_, indexes_rand_)]=1 ConsistentlyWorse(10) 20.3 2014.03.27 1.3 1.6 e73ee5d...eb61066
numpy.array([1]) ConsistentlyWorse(10) 18.9 2014.06.09 0.00099 0.0011 975267d...25aff4d
numpy.ones_like(a)_10types ConsistentlyWorse(10) 18.6 2012.03.10 0.2 0.23 eb61066...74b0836
numpy.add.reduce(axis=1)_int64 ConsistentlyWorse(10) 18.2 2011.07.06 2.1 2.5 23f20aa...68ffaec
numpy.add.reduce(axis=1)_int32 ConsistentlyWorse(10) 17.2 2014.11.19 1.7 2 975267d...25aff4d
numpy.add.reduce(axis=1)_longfloat ConsistentlyWorse(10) 16.5 2011.06.09 4.8 5.5 e73ee5d...eb61066
numpy.arange(100) ConsistentlyWorse(10) 15.5 2014.06.30 0.00077 0.00089 fb037eb...31b94e8
numpy.array([]) ConsistentlyWorse(10) 14.2 2014.05.16 0.00076 0.00084 975267d...25aff4d
numpy.not_bool ConsistentlyWorse(10) 13.6 2014.10.20 0.0024 0.0028 b6903d7...029662b
where_2_broadcast ConsistentlyWorse(10) 10.5 2014.05.26 0.04 0.044 fe7816d...fb40fe8
numpy.ldexp(a,a)_3types ConsistentlyWorse(10) 10.5 2014.05.26 0.57 0.63 a435de3...0e091af
numpy.hstack(l) ConsistentlyWorse(10) 10.2 2011.03.27 0.0068 0.0074 c7ad14f...fe0f6cc
numpy.right_shift(a,a)_3types ConsistentlyWorse(10) 9.8 2014.10.21 0.093 0.1 5eb6e36...6a4aa59
numpy.add.reduce(axis=0)_int16 ConsistentlyWorse(10) 9.6 2014.10.21 1.7 1.9 8bcb756...fb037eb
numpy.add.reduce(axis=0)_int64 ConsistentlyWorse(10) 8.7 2014.10.21 2.3 2.5 e73ee5d...eb61066
bincount_weights ConsistentlyWorse(10) 8.4 2014.03.16 0.43 0.47 68ffaec...8bcb756
where_2 ConsistentlyWorse(10) 7.7 2014.03.13 0.041 0.044 22ae193...e065a26
numpy.spacing(a)_7types ConsistentlyWorse(10) 7.6 2014.10.21 0.91 0.98 8e113c9...9636420
numpy.add.reduce(axis=1)_float16 ConsistentlyWorse(10) 7.0 2014.03.30 5.1 5.6 53a202b...c2d7845
numpy.einsum(‘ijk,jil->kl’, a, b) ConsistentlyWorse(10) 6.9 2011.04.03 63 69 53a202b...c2d7845
numpy.array(1) ConsistentlyWorse(10) 6.8 2014.06.09 0.00043 0.00052 bd8d70a...3dfc6d6
percentile ConsistentlyWorse(10) 6.8 2014.10.21 0.099 0.11 22ae193...e065a26
cont_assign_int8 ConsistentlyWorse(10) 6.4 2014.06.08 0.0014 0.0015 eb61066...74b0836
numpy.less_than_scalar2_numpy.float32 ConsistentlyWorse(10) 6.1 2014.05.19 0.0074 0.0078 8cdc5f5...73d87a7
memcpy_complex128 ConsistentlyWorse(10) 5.9 2013.09.22 0.076 0.081 0d30aef...066be28
copyto_8_dense ConsistentlyWorse(10) 5.1 2011.08.26 0.18 0.19 fb037eb...31b94e8
cont_assign_int16 ConsistentlyWorse(10) 5.1 2014.05.19 0.0036 0.0041 25aff4d...f14d5e1
numpy.random.normal(size=(100,100)) ConsistentlyWorse(10) 5.0 2012.01.28 0.83 0.85 befb246...22ae193
a[indexes_] ConsistentlyWorse(10) 5.0 2014.07.20 0.25 0.26 c7ad14f...fe0f6cc
numpy.empty(100) ConsistentlyWorse(10) 5.0 2014.06.08 0.00093 0.001 7b3809b...df9db6e
numpy.add.reduce(axis=0)_complex64 ConsistentlyWorse(10) 4.9 2012.09.02 2.8 2.9 eb61066...74b0836
numpy.less_than_scalar2_numpy.float64 ConsistentlyWorse(10) 4.7 2014.06.30 0.011 0.012 caeb888...002b0de
a[indexes_rand_] ConsistentlyWorse(10) 4.6 2014.07.20 0.25 0.26 c7ad14f...fe0f6cc
median_even_inplace ConsistentlyWorse(10) 4.6 2014.10.16 0.051 0.052 eb61066...74b0836
numpy.add_scalar_conv_complex ConsistentlyWorse(10) 4.5 2014.11.19 0.0013 0.0015 c7ad14f...fe0f6cc
numpy.ma.masked_array(l100) ConsistentlyWorse(10) 4.5 2014.05.26 1.1 1.2 23f20aa...68ffaec
numpy.add_scalar_conv ConsistentlyWorse(10) 4.2 2014.10.24 0.0012 0.0014 fa14ae0...58350f4
numpy.signbit(a)_7types ConsistentlyWorse(10) 4.2 2014.05.26 0.32 0.33 1e72312...860489c
numpy.linalg.det(a)_int64 ConsistentlyWorse(10) 3.7 2014.06.02 0.09 0.093 e73ee5d...eb61066
numpy.linalg.det(a)_int16 ConsistentlyWorse(10) 3.5 2014.07.04 0.085 0.087 c7ad14f...fe0f6cc
numpy.linalg.norm(a)_int32 ConsistentlyWorse(10) 3.4 2014.10.21 0.027 0.027 1246dbc...8dd530b
numpy.zeros(100) ConsistentlyWorse(10) 3.3 2014.06.08 0.00096 0.001 fa14ae0...58350f4
numpy.power(a,a)_10types ConsistentlyWorse(10) 3.2 2011.05.07 3.4 3.5 e73ee5d...eb61066
numpy.add.reduce(axis=0)_complex256 ConsistentlyWorse(10) 2.8 2013.04.03 12 13 fe7816d...fb40fe8
numpy.add.reduce(axis=1) ConsistentlyWorse(10) 2.7 2014.04.03 38 39 975267d...25aff4d
strided_copy_complex128 ConsistentlyWorse(10) 2.6 2014.06.02 0.1 0.11 c2d7845...9bfd76e
numpy.linalg.norm(a)_float64 ConsistentlyWorse(10) 2.5 2014.10.21 0.034 0.034 c7ad14f...fe0f6cc
numpy.diagflat(l100) ConsistentlyWorse(10) 2.2 2014.06.30 0.029 0.03 975267d...25aff4d
numpy.linalg.norm(a)_complex64 ConsistentlyWorse(10) 2.1 2014.10.21 0.051 0.052 c7ad14f...fe0f6cc
a[:,indexes_]=1 ConsistentlyWorse(10) 2.1 2014.06.02 0.4 0.41 fe7816d...fb40fe8
a[:,indexes_] ConsistentlyWorse(10) 2.1 2014.10.21 0.46 0.47 fb037eb...31b94e8
numpy.diagflat([l50, l50]) ConsistentlyWorse(10) 2.1 2014.07.03 0.03 0.031 975267d...25aff4d
a[indexes_]=1 ConsistentlyWorse(10) 2.0 2014.06.08 0.28 0.28 eb61066...74b0836
numpy.floor(a)_7types ConsistentlyWorse(10) 2.0 2014.03.30 0.84 0.86 8cdc5f5...73d87a7
numpy.sin(a)_10types ConsistentlyWorse(10) 1.9 2014.10.26 7 7.1 060aed9...c7ad14f
a[:,indexes_rand_]=1 ConsistentlyWorse(10) 1.9 2014.06.02 0.46 0.47 fe7816d...fb40fe8
numpy.linalg.norm(a)_float32 ConsistentlyWorse(10) 1.9 2014.10.11 0.029 0.03 c7ad14f...fe0f6cc
numpy.rint(a)_10types ConsistentlyWorse(10) 1.9 2014.10.17 1.3 1.4 49b0628...db710ce
numpy.add_scalar2_numpy.float32 ConsistentlyWorse(10) 1.8 2014.07.06 0.011 0.013 4d94317...927cfcf
numpy.isnan(a)_10types ConsistentlyWorse(10) 1.8 2014.10.19 0.41 0.42 6457686...8e113c9
numpy.frexp(a)_7types ConsistentlyWorse(10) 1.8 2014.06.02 0.9 0.93 256d256...23ee379
numpy.random.weibull(1, size=(100,100)) ConsistentlyWorse(10) 1.5 2013.09.22 1.2 1.3 68ffaec...8bcb756
numpy.sqrt(a)_10types ConsistentlyWorse(10) 1.5 2014.07.10 2.2 2.3 424b56e...12472aa
strided_copy_float32 ConsistentlyWorse(10) 1.5 2014.06.08 0.02 0.02 fb40fe8...256d256
numpy.isfinite(a)_10types ConsistentlyWorse(10) 1.4 2014.10.19 0.47 0.48 280f605...fe7816d
numpy.isinf(a)_10types ConsistentlyWorse(10) 1.3 2014.10.19 0.65 0.65 fe7816d...fb40fe8
numpy.conjugate(a)_10types ConsistentlyWorse(10) 1.3 2014.10.16 0.49 0.5 eb61066...74b0836
vb_savez_squares ConsistentlyWorse(10) 1.2 2014.07.10 4.5e+02 4.5e+02 eb61066...74b0836
numpy.conj(a)_10types ConsistentlyWorse(10) 1.2 2014.11.17 0.49 0.5 7eff5b8...d6d6795
numpy.divide_scalar2_numpy.float32 ConsistentlyWorse(10) 1.2 2014.06.30 0.031 0.031 c7ad14f...fe0f6cc
numpy.divide_scalar2_inplace_numpy.float32 ConsistentlyWorse(10) 1.1 2014.06.02 0.031 0.031 eb61066...74b0836
numpy.add.reduce(axis=0) ConsistentlyWorse(10) 0.9 2014.11.11 57 58 eb61066...74b0836
numpy.nextafter(a,a)_7types ConsistentlyWorse(10) 0.8 2014.10.16 1 1 8cdc5f5...73d87a7
numpy.true_divide(a,a)_10types ConsistentlyWorse(10) 0.7 2011.03.26 2 2.1 99329f9...4e32035
numpy.random.poisson(10,size=(100,100)) ConsistentlyWorse(10) 0.6 2014.06.02 4.3 4.3 e73ee5d...eb61066
numpy.log(a)_10types ConsistentlyWorse(10) 0.5 2014.06.02 5.9 5.9 53a202b...c2d7845
numpy.divide_scalar2_inplace_numpy.float64 ConsistentlyWorse(10) 0.5 2014.06.17 0.066 0.067 eb61066...74b0836
cont_assign_float64 ConsistentlyWorse(10) 0.4 2014.07.16 0.015 0.015 8bcb756...fb037eb
numpy.divide_scalar2_numpy.float64 ConsistentlyWorse(10) 0.4 2014.07.03 0.066 0.067 eb61066...74b0836
numpy.absolute(a)_10types ConsistentlyWorse(10) 0.3 2014.01.15 1 1.1 fb037eb...31b94e8
strided_copy_int8 ConsistentlyWorse(10) -0.1 2014.06.02 0.018 0.018 5a78905...1246dbc