Issue 4714: print opcode stats at the end of pybench runs (original) (raw)
On 2008-12-21 22:37, Antoine Pitrou wrote:
New submission from Antoine Pitrou <pitrou@free.fr>:
This patch prints opcode statistics at the end of a pybench run if DYNAMIC_EXECUTION_PROFILE has been enabled when compiling the interpreter.
Is it ok? Is it better to add it to the Benchmark class?
I don't think it's worth doing this for low-level and highly artificial benchmarks like the ones run by pybench.
Opcode statistics are much better taken in real life applications, e.g. let Django, Zope, etc. run for a day or two and then look at the opcode statistics.
If at all, then opcode statistics should be an optional feature enabled by a command line switch. I'd then create new methods bench.start_opcode_stats(), bench.stop_opcode_stats() and bench.get_opcode_stats().
Also note that this line will result in wrong results:
if opstats:
opstats = [new - old
for new, old in zip(sys.getdxp(), opstats)]
It should be:
start_opstats = sys.getdxp() ... stop_opstats = sys.getdxp() opstats = [new_value - old_value for new_value, old_value in zip(stop_opstats, start_opstats]
I don't think it's worth doing this for low-level and highly artificial benchmarks like the ones run by pybench.
Well, it can help to know which opcodes are executed when running a particular bunch of sub-tests :)
If at all, then opcode statistics should be an optional feature enabled by a command line switch. I'd then create new methods bench.start_opcode_stats(), bench.stop_opcode_stats() and bench.get_opcode_stats().
Also note that this line will result in wrong results:
if opstats:
opstats = [new - old
for new, old in zip(sys.getdxp(), opstats)]
You are right, my assumption was simply that the error would be in the noise.