<div dir="ltr">Hi, thanks for looking into it!<div><br></div><div>Feel free to use it as a benchmark. I'll also look into the problems you mentioned to see if I can make future versions of Krakatau faster.</div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Thu, Jan 16, 2014 at 8:51 AM, Maciej Fijalkowski <span dir="ltr"><<a href="mailto:fijall@gmail.com" target="_blank">fijall@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Robert.<br>
<br>
This is going to be a long mail, so bear with me :)<br>
<br>
The first take away is that pypy warmup is atrocious (that's<br>
unimpressive, but you might be delighted to hear I'm working on it<br>
right now, except I'm writing this mail). It's quite a bit of work, so<br>
it might or might not make it to the next pypy release. We also don't<br>
know how well it'll work.<br>
<br>
The runs that I have now, when running 3 times in the same process<br>
look like this (this includes other improvements mentioned later):<br>
<br>
46s 32s 29s (cpython takes always 29s)<br>
<br>
Now, this is far from ideal and we're working on making it better (in<br>
fact it's a very useful benchmark), but I can pinpoint some stuff that<br>
we will fix and some stuff we won't fix in the near future. One thing<br>
that I've already fixed today is loops over tuple when doing x in<br>
tuple (so tuple.__contains__).<br>
<br>
One of the problems with this code is that I don't think it's very<br>
efficient. While that's not a good reason to be slower than cpython,<br>
it gives you an upper bound on what can be optimized away. Example<br>
(from java/structuring.py):<br>
<br>
new = new if old is None else tuple(x for x in old if x in new)<br>
<br>
now note that this has a complexity of O(n^2), because you're<br>
iterating for all of the one tuple and then for each over all of the<br>
elements of the other tuple.<br>
<br>
Another example:<br>
<br>
return [x for x in zip(*map(self._doms.get, nodes)) if len(set(x))==1][-1][0]<br>
<br>
this creates quite a few lists, while all it wants to do is to grab<br>
the last one.<br>
<br>
Those tiny loops are found a bit everywhere. I think more consistent<br>
data structures will make it a lot faster on both CPython and PyPy.<br>
<br>
>From our side, we'll improve generator iterators today and warmup some<br>
time in the not-so-near future.<br>
<br>
Speaking of which - memory consumptions is absolutely atrocious. It's<br>
a combination of JIT using too much memory, generator iterators not<br>
being cleaned correctly *and* some bug that prevents JIT loops from<br>
being freed. we'll deal with all of it, give us some time (that said,<br>
the memory consumption *will* be bigger than cpython, but hopefully by<br>
not that much).<br>
<br>
I'm sorry I can't help you as much as I wanted<br>
<br>
Cheers,<br>
fijal<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
On Thu, Jan 16, 2014 at 10:50 AM, Maciej Fijalkowski <<a href="mailto:fijall@gmail.com">fijall@gmail.com</a>> wrote:<br>
> On Wed, Jan 15, 2014 at 7:20 PM, Robert Grosse <<a href="mailto:n210241048576@gmail.com">n210241048576@gmail.com</a>> wrote:<br>
>> Oh sorry, I forgot about that.<br>
>><br>
>> You need to find the rt.jar from your Java installation and pass the path on<br>
>> the command line. For example, if it's located in C:\Program<br>
>> Files\Java\jre7\lib, you could do<br>
>> python -i Krakatau\decompile.py -out temp asm-debug-all-4.1.jar -path<br>
>> "C:\Program Files\Java\jre7\lib\rt.jar"<br>
>> Obviously on Linux it will be somewhere else. It shouldn't really matter<br>
>> which version of Java you have since the standard library is pretty stable..<br>
><br>
> Thanks, I'm looking into it. Would you mind if we add Krakatau as a<br>
> benchmark for our nightlies?<br>
</div></div></blockquote></div><br></div>