haskell array access

Manuel M T Chakravarty chak@cse.unsw.edu.au
Sun, 29 Jun 2003 18:34:38 +1000 (EST)


"Shawn P. Garbett" <Shawn@Garbett.org> wrote,

> I redid both programs to make them equivalent in action. The haskell program 
> was not actually summing the results, the C program was not checking array 
> bounds (Haskell does), the C program did not initialize the array and the C 
> program didn't print the result.
> 
> Times on my laptop (Crusoe 933):
> 
> 62.061s : Haskell (Array -O2)  Note: lot's 'o disk grinding!
> 18.231s : Haskell (UArray -O2)
> 18.108s : Haskell (UArray -O2 -fvia-c)
> 17.443s : Haskell (UArray -O2 -funfolding-update-in-place)
>  0.807s : C (-O3 without bound check)
>  1.127s : C (-O3 with bound check)
> 
> At best case for Haskell, 15.5 times slower. The thing about bounds checking, 
> in Haskell it's always there. In C, you might have it, you might not there is 
> no certainty by the language, only by design and implementation. So with C, 
> one is free to live dangerously.

The first two sections of

  http://www.cse.unsw.edu.au/~chak/papers/CK03.html

also contain an analysis of some of the overheads in Haskell
array codes compiled with GHC.

Cheers,
Manuel