getCPUTime implementation incorrect?

Simon Marlow marlowsd at gmail.com
Tue May 31 12:36:48 CEST 2011


On 31/05/2011 04:37, Evan Laforge wrote:
> I've just noticed that getCPUTime is returning erratic results for me:
>
> GHCi, version 7.0.3: http://www.haskell.org/ghc/  :? for help
> Loading package ghc-prim ... linking ... done.
> Loading package integer-gmp ... linking ... done.
> Loading package base ... linking ... done.
> Loading package ffi-1.0 ... linking ... done.
> Loading package filepath-1.2.0.0 ... linking ... done.
> Prelude>  :m System.CPUTime
> Prelude System.CPUTime>  getCPUTime
> 9696631700340362000000
> Prelude System.CPUTime>  getCPUTime
> 1333572622260398592000000
> Prelude System.CPUTime>  getCPUTime
> 21577331579851694000000
> Prelude System.CPUTime>  getCPUTime
> 21577331579861838000000
> Prelude System.CPUTime>  getCPUTime
> 1061231477620269514000000
> Prelude System.CPUTime>  getCPUTime
> 9965140170836829000000
>
> This is ghc 7.0.3, OS X 10.6.7, and it's the x86_64 version downloaded
> from http://www.haskell.org/ghc/download_ghc_7_0_3
>
> So, I looked at the CPUTime.hsc source in the base library, and it
> uses CTime to get tv_sec and tv_usec fields from the struct timeval.
> Unfortunately, and I never knew this, tv_usec is not time_t, but is
> suseconds_t.  On my OS X, these are different types: time_t is 64 bits
> but suseconds_t is 32 bits.  After writing my own getCPUTime that uses
> Int32 for tv_usec it's back to working again.
>
> But the proper way to do this is probably to introduce CSUSeconds (I'm
> guessing it stands for signed microseconds), which I guess means
> editing the autoconfig to put a new define in HsBaseConfig.h.  I dont
> know anything about autoconfig, but it's probably easy enough for
> someone is :)

See

   http://hackage.haskell.org/trac/ghc/ticket/4247

and

   http://hackage.haskell.org/trac/ghc/ticket/4970

We ought to fix this in 7.0.4, since getCPUTime is pretty broken on OSX 
64-bit right now, but the fix involves an API change (to 
Foreign.C.Types).  Ian - could we apply a fix that doesn't change APIs?

Cheers,
	Simon



More information about the Glasgow-haskell-users mailing list