GHC vs. GCC on raw vector addition

Simon Marlow simonmar at microsoft.com
Thu Jan 19 06:14:33 EST 2006


John Meacham wrote:
> On Wed, Jan 18, 2006 at 06:18:29PM +0300, Bulat Ziganshin wrote:
>> :)  even C version performs only 20 millions of additions in one second
>> because this program is most limited by memory throughput - it access
>> to 24 memory bytes per each addition. GHC just can't produce simple
>> loops even for "imperative" code. JHC can be much better in that area,
>> i strongly recommend Sven to try it
> 
> Jhc doesn't have 'true' arrays yet, partially because I have not decided
> how points-to analysis should work for them. (I will probably just union
> all their points-to information since they most likely will be filled
> by the same routine). 
> 
> GHCs indirect calls are really killing its performance in tight loops. I
> think there is room for collaboration between the various compilers
> there, since we are all moving to a c-- back end (in theory) we could
> work on a common c-- -> C translator that searches out such uneeded
> indirections and zaps them before they get to gcc which doesn't handle
> them well at all.

A simple tail-recursive loop shouldn't contain any indirect jumps in 
GHC, we are careful to compile jumps to known locations into absolute 
jumps (though, of course we don't do points-to).

My impression is that it is the lack of real low-level loop optimisation 
in GHC that is really hurting with these examples, and we don't get to 
take advantage of GCC's loop optimiser because the C code we generate 
doesn't look enough like a loop - that's something we can improve on in 
some cases, perhaps, but when I looked at it I didn't find any quick 
hacks to improve things.

Cheers,
	Simon



More information about the Glasgow-haskell-users mailing list