hask...@kudling.de writes:

> Profiling says that the majority of the time is spend in "main". But i have 
> no idea where.
> Can someone give me a hint?

Yes.  Lots of them, but somehow, I suspect nobody tried your code.

> COST CENTRE              MODULE                                               
> no.    entries  %time %alloc   %time %alloc
>
> MAIN                     MAIN                                                 
>   1           0   0.0    0.0   100.0  100.0
>  main                    Main                                                 
> 254           1  88.1   90.8   100.0  100.0
>   monteCarloPi           Main                                                 
> 255           1   0.6    1.1    11.9    9.2
>    pairs                 Main                                                 
> 257    10000000   0.7    1.4     0.7    1.4
>    countHits             Main                                                 
> 256    10000001   4.2    2.9    10.6    6.7
>     accumulateHit        Main                                                 
> 258    27852236   3.0    2.3     6.4    3.8
>      isInCircle          Main                                                 
> 259    30000000   3.3    1.5     3.3    1.5
>  CAF:lit_r1A7            Main                                                 
> 248           1   0.0    0.0     0.0    0.0
>   isInCircle             Main                                                 
> 260           0   0.0    0.0     0.0    0.0

Thomas van Noort:

> First thing I noticed, how about removing the sqrt in isInCircle:

I did this.  The result was the same - the sqrt doesn't matter, and
perhaps it even gets optimized away?

> The first thing I would do is replace your
> isInCircle :: (Floating a, Ord a)  => (a,a) -> Bool
> with
> isInCircle :: (Double, Double) -> Bool

Then I did that.  The result was still the same - I bet GHC is smart
enought to specialize this on its own.

The intresting thing about your profile is that all the time is spent
in 'main'.  Now, why would that be?  I refactored a bit, and in
partiuclar wrote this function:

  mkRandoms :: IO [Double]
  mkRandoms = do
        randomNumberGenerator <- getStdGen
        return $ randoms randomNumberGenerator

Here's the new profile (10^6 iterations):

  COST CENTRE                    MODULE               %time %alloc

  mkRandoms                      Main                  96.1   96.0
  accumulateHit                  Main                   1.6    1.7
  pairs                          Main                   1.2    1.3
  monteCarloPi                   Main                   0.2    1.0

So it seems we're just tremendously lousy at generating random
Doubles.  Eliminating this bottleneck, the remaining 3.9% would put it
at about 2x the C++ performance.

-k
-- 
If I haven't seen further, it is by standing in the footprints of giants
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to