
On Dec 14, 2007 12:12 PM, Andrew Coppin
Today, with a few import statements and compiler switches, the exact same code takes 0.05 seconds. Tomorrow, who knows? Maybe I'm being overly optimistic, but... ;-)
There have been some great improvements in array handling recently. I decided to have a look at the assembly language generated by some simple array manipulation code and understand why C is at least twice as fast as ghc 6.8.1. One the one hand it was disappointing to see that the Haskell register allocator seems a bit inept and was loading data into registers that should never have been spilled out of registers in the first place. On the other hand, the code wasn't fundamentally doing anything weird (eg. it wasn't doing graph reductions or anything like that, it looked like the sort of loop you might get from a C compiler). It was a few seconds of fairly mindless work to fix up the assembly language and make it much faster. And if I can do it, it means that the next generation of Haskell compiler should be able to do it too, after all, good freely available methods to allocate registers do exist. So I'm looking forward to the next version of GHC matching C's performance for inner loops of array manipulation code :-) -- Dan