[Vm-dev] Integer comparition primitive failures on Cog
Eliot Miranda
eliot.miranda at gmail.com
Mon May 2 16:16:52 UTC 2011
Hi Henrik,
Eliot (phone)
On May 2, 2011, at 3:12 AM, Henrik Sperre Johansen <henrik.s.johansen at veloxit.no> wrote:
> As per my comment on the recent Morphic performance graphs,(http://blog.openinworld.com/2011/03/morphic-flavour-performance/#comment-59) on a Cog VM these primitives fail with a Float parameter, which leads to a huge performance hit when comparing Ints to Floats by doing silly things in the fallback code.
>
> Cog:
> [1 to: 2000000 do: [:i |
> i < 2354.234.
> i <= 2354.234.
> i >= 2354.234.
> i > 2354.234.]] timeToRun 26594
>
> Trunk:
> [1 to: 2000000 do: [:i |
> i < 2354.234.
> i <= 2354.234.
> i >= 2354.234.
> i > 2354.234.]] timeToRun 229
>
> Should this be changed in the VM,
I think so. When I first wrote the SmallInteger translated prims I hadn't yet written the JIT support for floats and so couldn't write int/float comparison. Now all the support is there and it should be straight-forward. Do you fancy trying to write this yourself? Would be a fun exercise. Let me know and I can hand-hold with using the simulator.
Best
Eliot (phone)
> or is the difference for pure int/int comparition large enough that we should instead change
> Float>>adaptToInteger: andCompare:
> to use the corresponding comparitions with Float as receiver, which does work?
> That's still slower than trunk in my image, but quite a bit better, above test takes about 1s.
>
> Cheers,
> Henry
More information about the Vm-dev
mailing list