Hi Henrik,
Eliot (phone)
On May 2, 2011, at 3:12 AM, Henrik Sperre Johansen henrik.s.johansen@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