<div dir="ltr">the C allocation functions (malloc etc) spend significantly more time in the first invocation. That may be related with this behaviour in libgmp, IO etc</div><div class="gmail_extra"><br><div class="gmail_quote">2015-07-10 9:31 GMT+02:00 Roman Cheplyaka <span dir="ltr"><<a href="mailto:roma@ro-che.info" target="_blank">roma@ro-che.info</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I considered that, but it doesn't seem to hold up. If you replace<br>
calling the Fixed functions with some operations on Integers, you won't<br>
reproduce the effect.<br>
<div class="HOEnZb"><div class="h5"><br>
On 10/07/15 10:17, Jonas Scholl wrote:<br>
> If you look at the Fixed data type, it is implemented using the Integer<br>
> type, which is again implemented using libgmp on my system. The first<br>
> call to any function involving an Integer type thus needs to initialize<br>
> libgmp first. Using ltrace it seems like libgmp first has to determine<br>
> the processor it is running on and maybe set up other bookkeeping<br>
> information.<br>
><br>
> It could also be the case that libgmp itself has to be loaded at this<br>
> point. Using strace it looks like it is mmapped into the memory, maybe<br>
> linux is lazy and only reads the file on the disk at the moment it is<br>
> accessed the first time (i.e. at the first call)? At least linux uses a<br>
> similar approach for requested memory by a program.<br>
><br>
> On 07/10/2015 01:45 AM, Roman Cheplyaka wrote:<br>
>> This is a nice puzzle. However, I don't think it's related to IO.<br>
>><br>
>> So far I've traced this to Data.Fixed methods. If you add<br>
>><br>
>>   evaluate $ floor (2/1 :: Fixed E12)<br>
>><br>
>> before the loop, you'll find that the delay decreases significantly<br>
>> (although doesn't vanish entirely).<br>
>><br>
>> How is this related to forcing a time value? Well, UTCTime represents<br>
>> the time of day as Fixed E12, and when you're evaluating the result of<br>
>> getCurrentTime, you're calling those methods, (/) and floor.<br>
>><br>
>> Using other methods of Fixed E12 before the loop, or replacing E12 with<br>
>> E9, kills or at least hurts the effect.<br>
>><br>
>> There might be some thunks referenced directly or indirectly by those<br>
>> methods, possibly involving specialization, but I don't see it so far.<br>
>><br>
>> I'll let someone else to take it from here.<br>
>><br>
>><br>
>> On 10/07/15 00:07, Ben Gunton wrote:<br>
>>> Here is the same thing with no console usage, just forcing the time<br>
>>> value. The first-iteration-delay seems to happen at the first IO-ish<br>
>>> thing being evaluated.<br>
>>><br>
>>> <a href="http://lpaste.net/136254" rel="noreferrer" target="_blank">http://lpaste.net/136254</a><br>
>><br>
>><br>
>><br>
>><br>
>> _______________________________________________<br>
>> Haskell-Cafe mailing list<br>
>> <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
>> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
>><br>
><br>
><br>
><br>
><br>
> _______________________________________________<br>
> Haskell-Cafe mailing list<br>
> <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
><br>
<br>
<br>
</div></div><br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Alberto.</div>
</div>