Re: [Emacs-diffs] master 81a1088: Tweak builtin symbol order for speed

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: [Emacs-diffs] master 81a1088: Tweak builtin symbol order for speed

Pip Cet
On Fri, Jul 12, 2019 at 6:07 AM Paul Eggert <[hidden email]> wrote:

> branch: master
> commit 81a1088ee8b833cd30a3363782195d6c4d575672
> Author: Paul Eggert <[hidden email]>
> Commit: Paul Eggert <[hidden email]>
>
>     Tweak builtin symbol order for speed
>
>     * lib-src/make-docfile.c (compare_globals):
>     Make symbols 1 through 4 be t, unbound, error, lambda.
>     This is in addition to symbol 0 being nil.
>     This change improved ‘make compile-always’ performance by 0.6%
>     on my platform.

Hmm. I don't understand why this would improve performance this
significantly (maybe because it allows 8-bit offsets to be used rather
than 32-bit ones?). It will make debugging a tad easier, though.
XIL(0x30) for Qt is easy to remember.

Maybe it would be a good idea to make Vdead a symbol (or a tagged NULL
pointer) and treat it similarly, if this actually improves
performance.

> --->  lib-src/make-docfile.c | 21 ++++++++++++++++-----
>  1 file changed, 16 insertions(+), 5 deletions(-)
>
> diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c
> index 4d25b0a..368150b 100644
> --- a/lib-src/make-docfile.c
> +++ b/lib-src/make-docfile.c
> @@ -641,13 +641,24 @@ compare_globals (const void *a, const void *b)
>      return ga->type - gb->type;
>
>    /* Consider "nil" to be the least, so that iQnil is zero.  That
> -     way, Qnil's internal representation is zero, which is a bit faster.  */
> +     way , Qnil's internal representation is zero, which is a bit faster.
> +     Similarly, consideer "t" to be the second-least, and so forth.  */

"consider"

>    if (ga->type == SYMBOL)
>      {
> -      bool a_nil = strcmp (ga->name, "Qnil") == 0;
> -      bool b_nil = strcmp (gb->name, "Qnil") == 0;
> -      if (a_nil | b_nil)
> -       return b_nil - a_nil;
> +      /* Common symbols in decreasing popularity order.  */
> +      static char const commonsym[][8]

I'm curious, why isn't this simply "static char *commonsym[]"?

Reply | Threaded
Open this post in threaded view
|

[Emacs-diffs] master 81a1088: Tweak builtin symbol order for speed

Paul Eggert
On 7/12/19 12:12 AM, Pip Cet wrote:

> I don't understand why this would improve performance this
> significantly (maybe because it allows 8-bit offsets to be used rather
> than 32-bit ones?).

Yes, that's my guess too. For the record, my benchmark platform was my old work
desktop (AMD Phenom II X4 910e, circa 2010) running Fedora 30 x86-64, with plain
'make compile-always' (no -j). I really should get that upgraded.

> Maybe it would be a good idea to make Vdead a symbol (or a tagged NULL
> pointer) and treat it similarly, if this actually improves
> performance.

It does speed up GC a bit. I installed the attached. Thanks for the suggestion.

>> +      static char const commonsym[][8]
>
> I'm curious, why isn't this simply "static char *commonsym[]"?

Old performance habits that don't matter here. Besides, that alternative should
be 'static char const *const commonsym[]" which is not obviously simpler....

0001-Replace-Vdead-with-tagged-pointer.patch (7K) Download Attachment