[Haskell-cafe] First call to putStr takes far more time than subsequent calls
anselm.scholl at tu-harburg.de
Fri Jul 10 07:17:24 UTC 2015
If you look at the Fixed data type, it is implemented using the Integer
type, which is again implemented using libgmp on my system. The first
call to any function involving an Integer type thus needs to initialize
libgmp first. Using ltrace it seems like libgmp first has to determine
the processor it is running on and maybe set up other bookkeeping
It could also be the case that libgmp itself has to be loaded at this
point. Using strace it looks like it is mmapped into the memory, maybe
linux is lazy and only reads the file on the disk at the moment it is
accessed the first time (i.e. at the first call)? At least linux uses a
similar approach for requested memory by a program.
On 07/10/2015 01:45 AM, Roman Cheplyaka wrote:
> This is a nice puzzle. However, I don't think it's related to IO.
> So far I've traced this to Data.Fixed methods. If you add
> evaluate $ floor (2/1 :: Fixed E12)
> before the loop, you'll find that the delay decreases significantly
> (although doesn't vanish entirely).
> How is this related to forcing a time value? Well, UTCTime represents
> the time of day as Fixed E12, and when you're evaluating the result of
> getCurrentTime, you're calling those methods, (/) and floor.
> Using other methods of Fixed E12 before the loop, or replacing E12 with
> E9, kills or at least hurts the effect.
> There might be some thunks referenced directly or indirectly by those
> methods, possibly involving specialization, but I don't see it so far.
> I'll let someone else to take it from here.
> On 10/07/15 00:07, Ben Gunton wrote:
>> Here is the same thing with no console usage, just forcing the time
>> value. The first-iteration-delay seems to happen at the first IO-ish
>> thing being evaluated.
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 473 bytes
Desc: OpenPGP digital signature
More information about the Haskell-Cafe