[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] Re: Bignum performance (was: Shrinking the C core)
|
From: |
Ihor Radchenko |
|
Subject: |
Re: [PATCH] Re: Bignum performance (was: Shrinking the C core) |
|
Date: |
Fri, 11 Aug 2023 19:41:22 +0000 |
Emanuel Berg <incal@dataswamp.org> writes:
>> And... is has been already done, actually.
>> allocate_vectorlike calls allocate_vector_from_block, which
>> re-uses pre-allocated objects.
>>
>> And looking into the call graph, this exact branch calling
>> allocate_vector_from_block is indeed called for the bignums [...]
>
> Are we talking a list of Emacs C functions executing with the
> corresponding times they have been in execution in a tree data
> structure? :O
That's what GNU perf does - it is a sampling profiler in GNU/Linux.
The Elisp equivalent is profiler.el, but it does not reveal underlying C
functions.
> E.g. where do we find allocate_vectorlike ?
I have listed the commands I used (from terminal):
1. perf record ~/Git/emacs/src/emacs -Q -batch -l /tmp/fib.eln
<records CPU stats while running emacs>
2. perf report
<displays the stats>
You need Emacs compiled with debug symbols the get meaningful output.
See more at https://www.brendangregg.com/perf.html
> See if you can do my original test, which was 1-3 Elisp,
> byte-compiled Elisp, and natively compiled Elisp, and the
> Common Lisp execution (on your computer), if you'd like.
As you wish:
$ ~/Git/emacs/src/emacs -Q -batch -l /tmp/fib.el [5.783 s]
$ ~/Git/emacs/src/emacs -Q -batch -l /tmp/fib.elc [1.961 s]
$ ~/Git/emacs/src/emacs -Q -batch -l /tmp/fib.eln [1.901 s]
$ SBCL_HOME=/usr/lib64/sbcl sbcl --load /tmp/fib.cl [0.007 s]
without the patch (on my system)
$ ~/Git/emacs/src/emacs -Q -batch -l /tmp/fib.el [6.546 s]
$ ~/Git/emacs/src/emacs -Q -batch -l /tmp/fib.elc [2.498 s]
$ ~/Git/emacs/src/emacs -Q -batch -l /tmp/fib.eln [2.518 s]
Also, the patch gives improvements for more than just bignums.
I ran elisp-benchmarks
(https://elpa.gnu.org/packages/elisp-benchmarks.html) and got
(before the patch)
| test | non-gc avg (s) | gc avg (s) | gcs avg | tot avg (s) |
tot avg err (s) |
|--------------------+----------------+------------+---------+-------------+-----------------|
| bubble | 0.70 | 0.06 | 1 | 0.76 |
0.07 |
| bubble-no-cons | 1.17 | 0.00 | 0 | 1.17 |
0.02 |
| bytecomp | 1.74 | 0.29 | 13 | 2.03 |
0.12 |
| dhrystone | 2.30 | 0.00 | 0 | 2.30 |
0.07 |
| eieio | 1.25 | 0.13 | 7 | 1.38 |
0.03 |
| fibn | 0.00 | 0.00 | 0 | 0.00 |
0.00 |
| fibn-named-let | 1.53 | 0.00 | 0 | 1.53 |
0.03 |
| fibn-rec | 0.00 | 0.00 | 0 | 0.00 |
0.00 |
| fibn-tc | 0.00 | 0.00 | 0 | 0.00 |
0.00 |
| flet | 1.48 | 0.00 | 0 | 1.48 |
0.04 |
| inclist | 1.07 | 0.00 | 0 | 1.07 |
0.02 |
| inclist-type-hints | 1.00 | 0.00 | 0 | 1.00 |
0.07 |
| listlen-tc | 0.13 | 0.00 | 0 | 0.13 |
0.03 |
| map-closure | 5.26 | 0.00 | 0 | 5.26 |
0.09 |
| nbody | 1.61 | 0.17 | 1 | 1.78 |
0.06 |
| pack-unpack | 0.31 | 0.02 | 1 | 0.33 |
0.00 |
| pack-unpack-old | 0.50 | 0.05 | 3 | 0.55 |
0.02 |
| pcase | 1.85 | 0.00 | 0 | 1.85 |
0.05 |
| pidigits | 4.41 | 0.96 | 17 | 5.37 |
0.13 |
| scroll | 0.64 | 0.00 | 0 | 0.64 |
0.01 |
| smie | 1.59 | 0.04 | 2 | 1.63 |
0.03 |
|--------------------+----------------+------------+---------+-------------+-----------------|
| total | 28.54 | 1.72 | 45 | 30.26 |
0.26 |
(after the patch)
| test | non-gc avg (s) | gc avg (s) | gcs avg | tot avg (s) |
tot avg err (s) |
|--------------------+----------------+------------+---------+-------------+-----------------|
| bubble | 0.68 | 0.05 | 1 | 0.73 |
0.04 |
| bubble-no-cons | 1.00 | 0.00 | 0 | 1.00 |
0.04 |
| bytecomp | 1.60 | 0.23 | 13 | 1.82 |
0.16 |
| dhrystone | 2.03 | 0.00 | 0 | 2.03 |
0.05 |
| eieio | 1.08 | 0.12 | 7 | 1.20 |
0.07 |
| fibn | 0.00 | 0.00 | 0 | 0.00 |
0.00 |
| fibn-named-let | 1.44 | 0.00 | 0 | 1.44 |
0.12 |
| fibn-rec | 0.00 | 0.00 | 0 | 0.00 |
0.00 |
| fibn-tc | 0.00 | 0.00 | 0 | 0.00 |
0.00 |
| flet | 1.36 | 0.00 | 0 | 1.36 |
0.09 |
| inclist | 1.00 | 0.00 | 0 | 1.00 |
0.00 |
| inclist-type-hints | 1.00 | 0.00 | 0 | 1.00 |
0.07 |
| listlen-tc | 0.11 | 0.00 | 0 | 0.11 |
0.02 |
| map-closure | 4.91 | 0.00 | 0 | 4.91 |
0.12 |
| nbody | 1.47 | 0.17 | 1 | 1.64 |
0.08 |
| pack-unpack | 0.29 | 0.02 | 1 | 0.31 |
0.01 |
| pack-unpack-old | 0.43 | 0.05 | 3 | 0.48 |
0.01 |
| pcase | 1.84 | 0.00 | 0 | 1.84 |
0.07 |
| pidigits | 3.16 | 0.94 | 17 | 4.11 |
0.10 |
| scroll | 0.58 | 0.00 | 0 | 0.58 |
0.00 |
| smie | 1.40 | 0.04 | 2 | 1.44 |
0.06 |
|--------------------+----------------+------------+---------+-------------+-----------------|
| total | 25.38 | 1.62 | 45 | 27.00 |
0.32 |
About ~10% improvement, with each individual benchmark being faster.
Note how fibn test takes 0.00 seconds. It is limited to fixnum range.
> Actually it is a bit of a bummer to the community since Emacs
> is like THE portal into Lisp. We should have the best Lisp in
> the business, and I don't see why not? Emacs + SBCL + CL +
> Elisp anyone?
This is a balancing act. Elisp is tailored for Emacs as an editor. So,
trade-offs are inevitable. I am skeptical about Elisp overperforming CL.
But it does not mean that we should not try to improve things.
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
- Re: Shrinking the C core, (continued)
- Re: Shrinking the C core, Emanuel Berg, 2023/08/11
- Bignum performance (was: Shrinking the C core), Ihor Radchenko, 2023/08/11
- Re: Bignum performance (was: Shrinking the C core), Emanuel Berg, 2023/08/11
- Re: Bignum performance (was: Shrinking the C core), Ihor Radchenko, 2023/08/11
- Re: Bignum performance (was: Shrinking the C core), Emanuel Berg, 2023/08/11
- [PATCH] Re: Bignum performance (was: Shrinking the C core), Ihor Radchenko, 2023/08/11
- Re: [PATCH] Re: Bignum performance (was: Shrinking the C core), Emanuel Berg, 2023/08/11
- Re: [PATCH] Re: Bignum performance (was: Shrinking the C core),
Ihor Radchenko <=
- Re: [PATCH] Re: Bignum performance (was: Shrinking the C core), Emanuel Berg, 2023/08/12
- Re: [PATCH] Re: Bignum performance (was: Shrinking the C core), Ihor Radchenko, 2023/08/12
- Re: [PATCH] Re: Bignum performance (was: Shrinking the C core), Emanuel Berg, 2023/08/12
- Re: [PATCH] Re: Bignum performance (was: Shrinking the C core), Ihor Radchenko, 2023/08/13
- Re: [PATCH] Re: Bignum performance (was: Shrinking the C core), Emanuel Berg, 2023/08/13
- Re: [PATCH] Re: Bignum performance (was: Shrinking the C core), Ihor Radchenko, 2023/08/13
- Re: [PATCH] Re: Bignum performance (was: Shrinking the C core), Emanuel Berg, 2023/08/13
- Re: [PATCH] Re: Bignum performance, Po Lu, 2023/08/13
- Re: [PATCH] Re: Bignum performance, Ihor Radchenko, 2023/08/14
- Re: [PATCH] Re: Bignum performance, Po Lu, 2023/08/14