[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [MIT-Scheme-devel] bookkeeping memory allocated per primitive
From: |
Taylor R Campbell |
Subject: |
Re: [MIT-Scheme-devel] bookkeeping memory allocated per primitive |
Date: |
Sun, 26 Jun 2011 22:25:22 +0000 |
User-agent: |
IMAIL/1.21; Edwin/3.116; MIT-Scheme/9.1 |
Date: Sun, 26 Jun 2011 14:50:07 -0700
From: "Arthur A. Gleckler" <address@hidden>
> Rather than wait longer for any objections, I've just committed this
> together with a change to the i386 and x86-64 back ends to improve
> overall system performance by 20%, using the same unscientific tests.
> (Do a two-stage build to get the effect.)
20%?! That's a lot. What do you attribute that to? Is it the branch
direction change, or the SYMBOL-NAME change, or something else?
The branch direction change. Before, on pretty much every entry to a
non-leaf procedure, the CPU would see a backward branch and predict it
taken by default, if there were no dynamic profile data to inform the
branch predictor. But almost all of the time, that branch -- to
handle interrupts -- would not be taken.
So basically every non-leaf procedure call would cause a branch
misprediction.
We have a similar issue with branch target prediction: we don't pair
CALL and RET. Fixing that would be considerably trickier, and doing
it really effectively may require ABI changes.