[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Chicken-users] Need help to figure out where this strange performan
Re: [Chicken-users] Need help to figure out where this strange performance impact is coming from
Wed, 13 Jan 2016 09:32:49 -0800
IIRC, there's been ongoing efforts to remove SRFI-1 from core; which may
explain your observations regarding Master.
Perhaps you should consider asking Chicken Hackers?
Sent from my BlackBerry 10 smartphone.
From: Jörg F. Wittenberger
Sent: Wednesday, January 13, 2016 3:38 AM
Subject: [Chicken-users] Need help to figure out where this strange performance
impact is coming from
yesterday I found that simply having a (use mailbox) in some code had a
huge impact (more than a factor of 3) at the performance of the
resulting executable. Without using the mailbox stuff at all.
Meanwhile I figured out that this has nothing at all to do with the
mailbox egg. But _all_ with the use of srfi-1.
But how is this possible?
Attached some test code. As I ran into it from mailbox I prepared a
stripped down version of it to play with. Towards the end of the file
there is a (use srfi-1) which makes all the difference.
So far I found (compiling the code with -O5 but similar things happen
with less aggressive optimization):
a) Using chicken 4.9.1 there is absolutely no difference. Using srfi-1
or not I get roughly 100 messages passed per ms on my machine. (But I
have to include the forced gc; see comment in the code.)
b) A slightly different version which avoids allocations in the queue
runs without the forced gc and yields about 160 ms^-1 on chicken 4.9.1
Again no difference whether or not I (use srfi-1) anywhere.
Now the interesting bits:
c) On master (built almost two weeks ago) I get - when (use srfi-1) is
included - about 180 ms^-1. Those ~5% faster sound about right to me.
d) Comment out the (use srfi-1) at line 163 and it goes down to about
_50_ per millisecond!
e) The same happens for the alternative, allocation free version (not
attached), which uses vectors instead of pairs.
Speculating: The code I wrote has nothing to do with the difference.
But I'm confused. Neither scheduler.scm nor srfi-18 seem to have any
dependency on srfi-1. Also srfi-1 seems not to overwrite any global
Should we simply always (use srfi-1) if we also (use srfi-18). Looks
like a workaround, but not like the right thing to do.
How could I boil this down to the real reason?