<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Mon, 1 Feb 2016 at 09:08 Yury Selivanov <<a href="mailto:yselivanov.ml@gmail.com">yselivanov.ml@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
<br>
On 2016-01-29 11:28 PM, Steven D'Aprano wrote:<br>
> On Wed, Jan 27, 2016 at 01:25:27PM -0500, Yury Selivanov wrote:<br>
>> Hi,<br>
>><br>
>><br>
>> tl;dr The summary is that I have a patch that improves CPython<br>
>> performance up to 5-10% on macro benchmarks.  Benchmarks results on<br>
>> Macbook Pro/Mac OS X, desktop CPU/Linux, server CPU/Linux are available<br>
>> at [1].  There are no slowdowns that I could reproduce consistently.<br>
> Have you looked at Cesare Di Mauro's wpython? As far as I know, it's now<br>
> unmaintained, and the project repo on Google Code appears to be dead (I<br>
> get a 404), but I understand that it was significantly faster than<br>
> CPython back in the 2.6 days.<br>
><br>
> <a href="https://wpython.googlecode.com/files/Beyond%20Bytecode%20-%20A%20Wordcode-based%20Python.pdf" rel="noreferrer" target="_blank">https://wpython.googlecode.com/files/Beyond%20Bytecode%20-%20A%20Wordcode-based%20Python.pdf</a><br>
><br>
><br>
<br>
Thanks for bringing this up!<br>
<br>
IIRC wpython was about using "fat" bytecodes, i.e. using 64bits per<br>
bytecode instead of 8.  That allows to minimize the number of bytecodes,<br>
thus having some performance increase.  TBH, I don't think it was<br>
"significantly faster".<br>
<br>
If I were to do some big refactoring of the ceval loop, I'd probably<br>
consider implementing a register VM.  While register VMs are a bit<br>
faster than stack VMs (up to 20-30%), they would also allow us to apply<br>
more optimizations, and even bolt on a simple JIT compiler.<br></blockquote><div><br></div><div>If you did tackle the register VM approach that would also settle a long-standing question of whether a certain optimization works for Python.</div><div><br></div><div>As for bolting on a JIT, the whole point of Pyjion is to see if that's worth it for CPython, so that's already being taken care of (and is actually easier with a stack-based VM since the JIT engine we're using is stack-based itself). </div></div></div>