[Haskell-cafe] slow code

Don Stewart dons at galois.com
Tue Jun 16 11:58:58 EDT 2009


briand:
> I have included a new and improved version.
>
> Just to make the comparison a little more reasonable I re-wrote the  
> program using ML and ran it with SMLNJ
>
> eal	0m3.175s
> user	0m0.935s
> sys	0m0.319s
>
> Here's the compiled haskell (ghc -O2 foo.hs -o foo):
>
> real	0m16.855s
> user	0m9.724s
> sys	0m0.495s
>
> OUCH.
>
> I verified to make sure they were both writing valid data files.
>
> I'm trying to learn how to fish, so I'm truly interested in finding out 
> _how_ to optimize using profiling and other such tools.
>
> Here's the header of the foo.prof file:
>
> 	total time  =        9.44 secs   (472 ticks @ 20 ms)
> 	total alloc = 2,171,923,916 bytes  (excludes profiling overheads)
>
> 2GB of allocation ??? with a base size of 131k.  that seems excessive,  
> which gets me back to the ,  I don't
> think I'm interpreting profiling stuff correctly.
>
> This line is a little more interesting:
>
> COST CENTRE              MODULE                                           
>     no.    entries  %time %alloc   %time %alloc
>  main                    Main                                             
>     178           1  98.7   99.1    98.7   99.1
>
> So even though getData should be doing all of the allocation, main's  
> using a lot of time and effort.  I figured it
> was the show's that were slowing things up (how do I get profiling to  
> show that detail ?), so I had it output just "\n".
> Well that finishes in no time at all.
>
> And yea, verily, the output of the .prof file.
>
> 	total time  =        0.14 secs   (7 ticks @ 20 ms)
> 	total alloc =  65,562,824 bytes  (excludes profiling overheads)
>
> So I guess it's the show's, but I can't seem to find more efficient  
> float output.
> FFI to sprintf ? yuch.

Is your SMLNJ using lazy lists? :)

Try hmatrix or uvector. 

-- Don


More information about the Haskell-Cafe mailing list