Author: Carl Friedrich Bolz <[email protected]>
Branch:
Changeset: r329:743b6eafd02d
Date: 2015-06-09 16:57 +0200
http://bitbucket.org/pypy/benchmarks/changeset/743b6eafd02d/
Log: add a synthetic sqlite benchmark, mostly to stress CFFI
diff --git a/benchmarks.py b/benchmarks.py
--- a/benchmarks.py
+++ b/benchmarks.py
@@ -83,7 +83,7 @@
'raytrace-simple', 'crypto_pyaes', 'bm_mako', 'bm_chameleon',
'json_bench', 'pidigits', 'hexiom2', 'eparse', 'deltablue',
'bm_dulwich_log', 'bm_krakatau', 'bm_mdp', 'pypy_interp',
- 'bm_icbd']:
+ 'sqlitesynth]:
_register_new_bm(name, name, globals(), **opts.get(name, {}))
for name in ['names', 'iteration', 'tcp', 'pb', ]:#'web']:#, 'accepts']:
diff --git a/own/sqlitesynth.py b/own/sqlitesynth.py
new file mode 100644
--- /dev/null
+++ b/own/sqlitesynth.py
@@ -0,0 +1,58 @@
+import sqlite3
+import math
+
+# the goal of the benchmark is to test CFFI performance and going back and
+# forth between SQLite and Python a lot. Therefore the queries themselves are
+# really simple
+
+class AvgLength(object):
+ def __init__(self):
+ self.sum = 0
+ self.count = 0
+
+ def step(self, x):
+ if x is not None:
+ self.count += 1
+ self.sum += len(x)
+
+ def finalize(self):
+ return self.sum / float(self.count)
+
+def _main():
+ conn = sqlite3.connect(":memory:")
+ conn.execute('create table cos (x, y, z);')
+ for i in range(300000):
+ conn.execute('insert into cos values (?, ?, ?)', [i, math.cos(i),
str(i)])
+ conn.create_function("cos", 1, math.cos)
+ for x, cosx1, cosx2 in conn.execute("select x, cos(x), y from cos"):
+ assert math.cos(x) == cosx1 == cosx2
+
+ conn.create_aggregate("avglength", 1, AvgLength)
+ avglen, = conn.execute("select avglength(z) from cos;").next()
+ conn.execute("delete from cos;")
+ conn.close()
+
+
+
+def main(n):
+ import time
+ times = []
+ for i in range(6):
+ _main() # warmup
+ for i in range(n):
+ t1 = time.time()
+ _main()
+ t2 = time.time()
+ times.append(t2 - t1)
+ return times
+
+if __name__ == "__main__":
+ import util, optparse
+ parser = optparse.OptionParser(
+ usage="%prog [options]",
+ description="Test the performance of the SqliteSynth benchmark")
+ util.add_standard_options_to(parser)
+ options, args = parser.parse_args()
+
+ util.run_benchmark(options, options.num_runs, main)
+
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit