[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