* Re: master 289000e: Merge branch 'feature/native-comp' into trunk [not found] ` <20210425182508.6CC7C2094D@vcs0.savannah.gnu.org> @ 2021-04-25 18:36 ` Andrea Corallo via Emacs development discussions. 2021-04-25 18:40 ` Eli Zaretskii ` (7 more replies) 0 siblings, 8 replies; 47+ messages in thread From: Andrea Corallo via Emacs development discussions. @ 2021-04-25 18:36 UTC (permalink / raw) To: emacs-devel Hi all, I guess you get what this mail is about from the subject :) I want to really thanks maintainers with a special mention to Eli for reviewing, Stefan for the many advice, Luchino and Nino for all the help and really all the users that tested the branch and gave a ton of feedback and bug reports :) But ultimately, what really made possible to keep it up and go through this journey was all the enthusiasm and support we got from the whole community! Thanks! Andrea ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-25 18:36 ` master 289000e: Merge branch 'feature/native-comp' into trunk Andrea Corallo via Emacs development discussions. @ 2021-04-25 18:40 ` Eli Zaretskii 2021-04-25 18:59 ` Andrea Corallo via Emacs development discussions. 2021-04-25 18:45 ` Óscar Fuentes ` (6 subsequent siblings) 7 siblings, 1 reply; 47+ messages in thread From: Eli Zaretskii @ 2021-04-25 18:40 UTC (permalink / raw) To: Andrea Corallo; +Cc: emacs-devel > Date: Sun, 25 Apr 2021 18:36:22 +0000 > From: Andrea Corallo via "Emacs development discussions." <emacs-devel@gnu.org> > > I want to really thanks maintainers with a special mention to Eli for > reviewing, Stefan for the many advice, Luchino and Nino for all the help > and really all the users that tested the branch and gave a ton of > feedback and bug reports :) > > But ultimately, what really made possible to keep it up and go through > this journey was all the enthusiasm and support we got from the whole > community! Thanks. Building the merged master _without_ native-compilation support produces this warning: In normal-top-level: startup.el:649:26: Warning: assignment to free variable `comp-eln-load-path' ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-25 18:40 ` Eli Zaretskii @ 2021-04-25 18:59 ` Andrea Corallo via Emacs development discussions. 2021-04-25 20:25 ` Eli Zaretskii 0 siblings, 1 reply; 47+ messages in thread From: Andrea Corallo via Emacs development discussions. @ 2021-04-25 18:59 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> Date: Sun, 25 Apr 2021 18:36:22 +0000 >> From: Andrea Corallo via "Emacs development discussions." <emacs-devel@gnu.org> >> >> I want to really thanks maintainers with a special mention to Eli for >> reviewing, Stefan for the many advice, Luchino and Nino for all the help >> and really all the users that tested the branch and gave a ton of >> feedback and bug reports :) >> >> But ultimately, what really made possible to keep it up and go through >> this journey was all the enthusiasm and support we got from the whole >> community! > > Thanks. > > Building the merged master _without_ native-compilation support > produces this warning: > > In normal-top-level: > startup.el:649:26: Warning: assignment to free variable `comp-eln-load-path' Fixed, thanks. Andrea ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-25 18:59 ` Andrea Corallo via Emacs development discussions. @ 2021-04-25 20:25 ` Eli Zaretskii 0 siblings, 0 replies; 47+ messages in thread From: Eli Zaretskii @ 2021-04-25 20:25 UTC (permalink / raw) To: Andrea Corallo; +Cc: emacs-devel > From: Andrea Corallo <akrl@sdf.org> > Cc: emacs-devel@gnu.org > Date: Sun, 25 Apr 2021 18:59:40 +0000 > > > In normal-top-level: > > startup.el:649:26: Warning: assignment to free variable `comp-eln-load-path' > > Fixed, thanks. Thanks, confirmed. One thing that I think we should improve is that comp.el and comp-cstr.el get native-compiled when COMPILE_FIRST files are recompiled, but not when comp.el or comp-cstr.el are modified. In the latter case, they are just byte-compiled, leaving stale *.eln files in native-lisp/. This requires to compile them manually each time, an annoyance. I guess some Make wizardry is in order. ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-25 18:36 ` master 289000e: Merge branch 'feature/native-comp' into trunk Andrea Corallo via Emacs development discussions. 2021-04-25 18:40 ` Eli Zaretskii @ 2021-04-25 18:45 ` Óscar Fuentes 2021-04-25 20:03 ` Alan Mackenzie ` (5 subsequent siblings) 7 siblings, 0 replies; 47+ messages in thread From: Óscar Fuentes @ 2021-04-25 18:45 UTC (permalink / raw) To: emacs-devel Thank you, Andrea, truly impressive work. Andrea Corallo via "Emacs development discussions." <emacs-devel@gnu.org> writes: > Hi all, > > I guess you get what this mail is about from the subject :) > > I want to really thanks maintainers with a special mention to Eli for > reviewing, Stefan for the many advice, Luchino and Nino for all the help > and really all the users that tested the branch and gave a ton of > feedback and bug reports :) > > But ultimately, what really made possible to keep it up and go through > this journey was all the enthusiasm and support we got from the whole > community! > > Thanks! > > Andrea ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-25 18:36 ` master 289000e: Merge branch 'feature/native-comp' into trunk Andrea Corallo via Emacs development discussions. 2021-04-25 18:40 ` Eli Zaretskii 2021-04-25 18:45 ` Óscar Fuentes @ 2021-04-25 20:03 ` Alan Mackenzie 2021-04-25 20:14 ` Eli Zaretskii 2021-04-25 21:48 ` Stefan Monnier ` (4 subsequent siblings) 7 siblings, 1 reply; 47+ messages in thread From: Alan Mackenzie @ 2021-04-25 20:03 UTC (permalink / raw) To: Andrea Corallo; +Cc: emacs-devel Hello, Andrea. On Sun, Apr 25, 2021 at 18:36:22 +0000, Andrea Corallo via Emacs development discussions. wrote: > Hi all, > I guess you get what this mail is about from the subject :) > I want to really thanks maintainers with a special mention to Eli for > reviewing, Stefan for the many advice, Luchino and Nino for all the help > and really all the users that tested the branch and gave a ton of > feedback and bug reports :) > But ultimately, what really made possible to keep it up and go through > this journey was all the enthusiasm and support we got from the whole > community! > Thanks! I'm sure this is going to be fantastic. But where are the instructions? I've just tried a ./configure (with --with-native-compilation), and got the error message: configure: error: elisp native compiler requested but libgccjit not found. Please try installing libgccjit or similar package. What is libgccjit, and where do I find it? (It is not in my OS's package manager (Gentoo GNU/Linux)). What else do I need to know, successfully to build and run the native compilation feature? Thanks! > Andrea -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-25 20:03 ` Alan Mackenzie @ 2021-04-25 20:14 ` Eli Zaretskii 2021-04-25 21:55 ` Alan Mackenzie 0 siblings, 1 reply; 47+ messages in thread From: Eli Zaretskii @ 2021-04-25 20:14 UTC (permalink / raw) To: Alan Mackenzie; +Cc: emacs-devel, akrl > Date: Sun, 25 Apr 2021 20:03:46 +0000 > From: Alan Mackenzie <acm@muc.de> > Cc: emacs-devel@gnu.org > > I've just tried a ./configure (with --with-native-compilation), and got > the error message: > > configure: error: elisp native compiler requested but libgccjit not found. > Please try installing libgccjit or similar package. > > What is libgccjit, and where do I find it? It's part of the GCC package, so I suggest to look among the GCC-related stuff that your distro offers. > What else do I need to know, successfully to build and run the > native compilation feature? Hopefully, nothing (just to build and run). ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-25 20:14 ` Eli Zaretskii @ 2021-04-25 21:55 ` Alan Mackenzie 2021-04-26 11:40 ` Eli Zaretskii 0 siblings, 1 reply; 47+ messages in thread From: Alan Mackenzie @ 2021-04-25 21:55 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel, akrl Hello, Eli. On Sun, Apr 25, 2021 at 23:14:42 +0300, Eli Zaretskii wrote: > > Date: Sun, 25 Apr 2021 20:03:46 +0000 > > From: Alan Mackenzie <acm@muc.de> > > Cc: emacs-devel@gnu.org > > I've just tried a ./configure (with --with-native-compilation), and got > > the error message: > > configure: error: elisp native compiler requested but libgccjit not found. > > Please try installing libgccjit or similar package. > > What is libgccjit, and where do I find it? > It's part of the GCC package, so I suggest to look among the > GCC-related stuff that your distro offers. Thanks, I found the Gentoo "use flag" to enable it, and rebuilt gcc. I was then able to build Emacs including native compilation. > > What else do I need to know, successfully to build and run the > > native compilation feature? > Hopefully, nothing (just to build and run). This is sadly far from true. You need to know basic things like native compile files are .eln. You need to know how to compile files. I guessed that $ emacs -Q -batch -f batch-native-compile lisp/progmodes/cc-*.el would natively compile CC Mode. Well, it took several minutes of processing in which it did something, but I don't know what. A find failed to find '*cc-*.eln'. On restarting Emacs, my favourite CC Mode benchmark was only marginally (~4%) faster. I don't know if I've actually natively compiled CC Mode, but if so, I don't know where the compiled files are, and I don't know how to load them into Emacs. I'm frustrated at the moment. I want to use this new feature, but don't know how to, and can't find any documentation. "native compilation" doesn't seem to appear in either the Emacs or the Elisp manual. -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-25 21:55 ` Alan Mackenzie @ 2021-04-26 11:40 ` Eli Zaretskii 2021-04-26 13:21 ` Alan Mackenzie 0 siblings, 1 reply; 47+ messages in thread From: Eli Zaretskii @ 2021-04-26 11:40 UTC (permalink / raw) To: Alan Mackenzie; +Cc: emacs-devel, akrl > Date: Sun, 25 Apr 2021 21:55:29 +0000 > Cc: akrl@sdf.org, emacs-devel@gnu.org > From: Alan Mackenzie <acm@muc.de> > > > > What else do I need to know, successfully to build and run the > > > native compilation feature? > > > Hopefully, nothing (just to build and run). > > This is sadly far from true. You need to know basic things like native > compile files are .eln. You need to know how to compile files. I > guessed that > > $ emacs -Q -batch -f batch-native-compile lisp/progmodes/cc-*.el > > would natively compile CC Mode. You originally said nothing about compiling any Lisp files, let alone measuring the performance of CC Mode as result of native-compilation. The answer I gave specifically said "just to build and run". Indeed, for your purpose, one needs to do more. > Well, it took several minutes of processing in which it did > something, but I don't know what. A find failed to find > '*cc-*.eln'. I believe they should be under your ~/.emacs.d/eln-cache/ directory. > On restarting Emacs, my favourite CC Mode benchmark was only > marginally (~4%) faster. I'm guessing that you didn't compile everything you need natively. It is quite hard to determine "by hand" which Lisp files will be needed, as CC Mode files use Lisp code from many other files, and they all need to be natively-compiled to see the full benefits. My suggestion is to load and run the code you want to benchmark, but after the benchmark finishes, leave Emacs running until 'ps' no longer shows inferior Emacs processes run in the background -- those are the subprocesses Emacs starts to natively-compile every .el file your program loads. Once all the native-compilation subprocesses exit, exit your interactive session, and then run the benchmark again; this time it should show the full speedup of native-compilation. > I'm frustrated at the moment. I want to use this new feature, but don't > know how to, and can't find any documentation. "native compilation" > doesn't seem to appear in either the Emacs or the Elisp manual. We have a lot to do in the documentation department for this feature. You can wait until we are done (which could take a while), or you could ask questions (but in the latter case please be more specific, so that the answers are useful for you). ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-26 11:40 ` Eli Zaretskii @ 2021-04-26 13:21 ` Alan Mackenzie 2021-04-26 13:45 ` Eli Zaretskii 0 siblings, 1 reply; 47+ messages in thread From: Alan Mackenzie @ 2021-04-26 13:21 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel, akrl Hello, Eli. On Mon, Apr 26, 2021 at 14:40:11 +0300, Eli Zaretskii wrote: > > Date: Sun, 25 Apr 2021 21:55:29 +0000 > > Cc: akrl@sdf.org, emacs-devel@gnu.org > > From: Alan Mackenzie <acm@muc.de> > > > > What else do I need to know, successfully to build and run the > > > > native compilation feature? > > > Hopefully, nothing (just to build and run). > > This is sadly far from true. You need to know basic things like native > > compile files are .eln. You need to know how to compile files. I > > guessed that > > $ emacs -Q -batch -f batch-native-compile lisp/progmodes/cc-*.el > > would natively compile CC Mode. > You originally said nothing about compiling any Lisp files, let alone > measuring the performance of CC Mode as result of native-compilation. > The answer I gave specifically said "just to build and run". OK, fair enough! ;-) > Indeed, for your purpose, one needs to do more. > > Well, it took several minutes of processing in which it did > > something, but I don't know what. A find failed to find > > '*cc-*.eln'. > I believe they should be under your ~/.emacs.d/eln-cache/ directory. They are indeed there, yes. Thanks. > > On restarting Emacs, my favourite CC Mode benchmark was only > > marginally (~4%) faster. > I'm guessing that you didn't compile everything you need natively. It > is quite hard to determine "by hand" which Lisp files will be needed, > as CC Mode files use Lisp code from many other files, and they all > need to be natively-compiled to see the full benefits. > My suggestion is to load and run the code you want to benchmark, but > after the benchmark finishes, leave Emacs running until 'ps' no longer > shows inferior Emacs processes run in the background -- those are the > subprocesses Emacs starts to natively-compile every .el file your > program loads. Once all the native-compilation subprocesses exit, > exit your interactive session, and then run the benchmark again; this > time it should show the full speedup of native-compilation. I've tried that, but I don't think the native compile versions of CC Mode got loaded. If they had been loaded, there would have been _some_ speed up. What I did was, in essence, M-: (load-file "~/emacs/emacs.git/master/lisp/progmodes/cc-defs.elc") (but from a Lisp script), repeated ~thirteen times for each CC Mode file. This didn't seem to load the corresponding cc-defs-....eln, etc. Should it? If not, what is the canonical way to load a set of .eln files? Do I have to give the exact .eln file names in the load-file calls? Or, am I forced to tweak load-path to load a specific natively compiled version of CC Mode? How do I know when a .eln file has been loaded? > > I'm frustrated at the moment. I want to use this new feature, but don't > > know how to, and can't find any documentation. "native compilation" > > doesn't seem to appear in either the Emacs or the Elisp manual. > We have a lot to do in the documentation department for this feature. > You can wait until we are done (which could take a while), or you > could ask questions (but in the latter case please be more specific, > so that the answers are useful for you). Sorry, I got the impression that, with the merge, the feature was almost ready for full time use in Emacs. Maybe I should be patient and wait a little longer. Thanks for the help! -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-26 13:21 ` Alan Mackenzie @ 2021-04-26 13:45 ` Eli Zaretskii 2021-04-26 14:54 ` Alan Mackenzie 0 siblings, 1 reply; 47+ messages in thread From: Eli Zaretskii @ 2021-04-26 13:45 UTC (permalink / raw) To: Alan Mackenzie; +Cc: emacs-devel, akrl > Date: Mon, 26 Apr 2021 13:21:25 +0000 > Cc: akrl@sdf.org, emacs-devel@gnu.org > From: Alan Mackenzie <acm@muc.de> > > > My suggestion is to load and run the code you want to benchmark, but > > after the benchmark finishes, leave Emacs running until 'ps' no longer > > shows inferior Emacs processes run in the background -- those are the > > subprocesses Emacs starts to natively-compile every .el file your > > program loads. Once all the native-compilation subprocesses exit, > > exit your interactive session, and then run the benchmark again; this > > time it should show the full speedup of native-compilation. > > I've tried that, but I don't think the native compile versions of CC Mode > got loaded. If they had been loaded, there would have been _some_ speed > up. What I did was, in essence, > > M-: (load-file "~/emacs/emacs.git/master/lisp/progmodes/cc-defs.elc") If you specify the .elc extension explicitly, Emacs won't load the .eln file instead. Use "M-x load-library RET cc-defs RET" instead. (And why do you need to load the CC mode files by hand? why not let Emacs load them as needed?) > > We have a lot to do in the documentation department for this feature. > > You can wait until we are done (which could take a while), or you > > could ask questions (but in the latter case please be more specific, > > so that the answers are useful for you). > > Sorry, I got the impression that, with the merge, the feature was almost > ready for full time use in Emacs. I think it's ready. There are people who use it for several months already. I just didn't feel it would be justified to delay the merge because of the documentation. ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-26 13:45 ` Eli Zaretskii @ 2021-04-26 14:54 ` Alan Mackenzie 2021-04-26 15:12 ` Eli Zaretskii ` (3 more replies) 0 siblings, 4 replies; 47+ messages in thread From: Alan Mackenzie @ 2021-04-26 14:54 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel, akrl Hello, Eli. On Mon, Apr 26, 2021 at 16:45:56 +0300, Eli Zaretskii wrote: > > Date: Mon, 26 Apr 2021 13:21:25 +0000 > > Cc: akrl@sdf.org, emacs-devel@gnu.org > > From: Alan Mackenzie <acm@muc.de> > > > My suggestion is to load and run the code you want to benchmark, but > > > after the benchmark finishes, leave Emacs running until 'ps' no longer > > > shows inferior Emacs processes run in the background -- those are the > > > subprocesses Emacs starts to natively-compile every .el file your > > > program loads. Once all the native-compilation subprocesses exit, > > > exit your interactive session, and then run the benchmark again; this > > > time it should show the full speedup of native-compilation. > > I've tried that, but I don't think the native compile versions of CC Mode > > got loaded. If they had been loaded, there would have been _some_ speed > > up. What I did was, in essence, > > M-: (load-file "~/emacs/emacs.git/master/lisp/progmodes/cc-defs.elc") > If you specify the .elc extension explicitly, Emacs won't load the > .eln file instead. Use "M-x load-library RET cc-defs RET" instead. OK, I've started emacs -Q, which should surely pick up the natively compiled files. But it doesn't seem to. load-history lists only .elc files, even for pre-loaded files. I'm seeing a speed-up of, perhaps 5% - 10%, but that's surely because of all the other natively compiled files, not the CC Mode ones. Surely there's a way to check that .eln files have actually been loaded? When I do M-x locate-library cc-mode, it lists the .el file inside the emacs-28 directory. OK, I've tried again with M-x load-library RET cc-mode RET, which gave me a message stating it was loading the native compiled file. I then did the same for cc-engine and cc-fonts. I still see only the 5% - 10% speed up. (CC Mode has already been converted to lexical binding.) > (And why do you need to load the CC mode files by hand? why not let > Emacs load them as needed?) My .emacs pushes several directories onto load-path, including my "normal" CC Mode directory. This would supersede the Emacs 28 version. I typically switch between CC Mode versions several times a session, sometimes many times. That's impractical with load-path. > > > We have a lot to do in the documentation department for this feature. > > > You can wait until we are done (which could take a while), or you > > > could ask questions (but in the latter case please be more specific, > > > so that the answers are useful for you). > > Sorry, I got the impression that, with the merge, the feature was almost > > ready for full time use in Emacs. > I think it's ready. There are people who use it for several months > already. I just didn't feel it would be justified to delay the merge > because of the documentation. I must be doing something differently from these people, but I can't identify what. Native compilation just doesn't seem to be working for me, yet. How much of a speed up should it give me? Surely more than 5% - 10%? -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-26 14:54 ` Alan Mackenzie @ 2021-04-26 15:12 ` Eli Zaretskii 2021-04-26 17:02 ` Alan Mackenzie 2021-04-26 15:33 ` Óscar Fuentes ` (2 subsequent siblings) 3 siblings, 1 reply; 47+ messages in thread From: Eli Zaretskii @ 2021-04-26 15:12 UTC (permalink / raw) To: Alan Mackenzie; +Cc: emacs-devel, akrl > Date: Mon, 26 Apr 2021 14:54:11 +0000 > Cc: akrl@sdf.org, emacs-devel@gnu.org > From: Alan Mackenzie <acm@muc.de> > > Native compilation just doesn't seem to be working for me, yet. How > much of a speed up should it give me? Surely more than 5% - 10%? I don't know. If you describe your benchmark, perhaps I could run it here and report. ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-26 15:12 ` Eli Zaretskii @ 2021-04-26 17:02 ` Alan Mackenzie 2021-04-26 17:13 ` Stefan Monnier 2021-04-26 17:25 ` Eli Zaretskii 0 siblings, 2 replies; 47+ messages in thread From: Alan Mackenzie @ 2021-04-26 17:02 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel, akrl Hello, Eli. On Mon, Apr 26, 2021 at 18:12:15 +0300, Eli Zaretskii wrote: > > Date: Mon, 26 Apr 2021 14:54:11 +0000 > > Cc: akrl@sdf.org, emacs-devel@gnu.org > > From: Alan Mackenzie <acm@muc.de> > > Native compilation just doesn't seem to be working for me, yet. How > > much of a speed up should it give me? Surely more than 5% - 10%? > I don't know. If you describe your benchmark, perhaps I could run it > here and report. I use this: (defmacro time-it (&rest forms) "Time the running of a sequence of forms using `float-time'. Call like this: \"M-: (time-it (foo ...) (bar ...) ...)\"." `(let ((start (float-time))) ,@forms (- (float-time) start))) (defun time-scroll (&optional arg) (interactive "P") (message "%s" (time-it (condition-case nil (while t (if arg (scroll-down) (scroll-up)) (sit-for 0)) (error nil))))) Put point at the start of xdisp.c (or any other large file), optionally type and delete a space (to clear font-lock text properties), and do M-: (time-scroll). This scrolls through the buffer one screenful at a time, displaying each screenful, then reports the total time. I've come to the conclusion in the last hour or so that CC Mode just isn't sped up much at all by native compilation. Using Andrea's tip of C-h f c-mode + look for "natively compiled", it is clear that the natively compiled files _are_ being used. -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-26 17:02 ` Alan Mackenzie @ 2021-04-26 17:13 ` Stefan Monnier 2021-04-26 17:25 ` Eli Zaretskii 1 sibling, 0 replies; 47+ messages in thread From: Stefan Monnier @ 2021-04-26 17:13 UTC (permalink / raw) To: Alan Mackenzie; +Cc: Eli Zaretskii, akrl, emacs-devel > I've come to the conclusion in the last hour or so that CC Mode just > isn't sped up much at all by native compilation. That would be my expectation, indeed: CC-mode's source code has been optimized fairly aggressively over the years, which should mean that it spends most of its time in functions implemented in C. Stefan ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-26 17:02 ` Alan Mackenzie 2021-04-26 17:13 ` Stefan Monnier @ 2021-04-26 17:25 ` Eli Zaretskii 2021-04-28 11:34 ` Alan Mackenzie 1 sibling, 1 reply; 47+ messages in thread From: Eli Zaretskii @ 2021-04-26 17:25 UTC (permalink / raw) To: Alan Mackenzie; +Cc: emacs-devel, akrl > Date: Mon, 26 Apr 2021 17:02:44 +0000 > Cc: akrl@sdf.org, emacs-devel@gnu.org > From: Alan Mackenzie <acm@muc.de> > > Put point at the start of xdisp.c (or any other large file), optionally > type and delete a space (to clear font-lock text properties), and do M-: > (time-scroll). This scrolls through the buffer one screenful at a time, > displaying each screenful, then reports the total time. > > > I've come to the conclusion in the last hour or so that CC Mode just > isn't sped up much at all by native compilation. Using Andrea's tip of > C-h f c-mode + look for "natively compiled", it is clear that the > natively compiled files _are_ being used. Yes, for this benchmark, I find the natively-compiled code somewhat (by about 5%) _slower_ than the byte-compiled code. But this benchmark only shows off the fontifications, so maybe it isn't surprising. CC Mode is much more than that. ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-26 17:25 ` Eli Zaretskii @ 2021-04-28 11:34 ` Alan Mackenzie 2021-04-28 12:26 ` Eli Zaretskii 0 siblings, 1 reply; 47+ messages in thread From: Alan Mackenzie @ 2021-04-28 11:34 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel, akrl Hello, Eli. On Mon, Apr 26, 2021 at 20:25:17 +0300, Eli Zaretskii wrote: > > Date: Mon, 26 Apr 2021 17:02:44 +0000 > > Cc: akrl@sdf.org, emacs-devel@gnu.org > > From: Alan Mackenzie <acm@muc.de> > > Put point at the start of xdisp.c (or any other large file), optionally > > type and delete a space (to clear font-lock text properties), and do M-: > > (time-scroll). This scrolls through the buffer one screenful at a time, > > displaying each screenful, then reports the total time. > > I've come to the conclusion in the last hour or so that CC Mode just > > isn't sped up much at all by native compilation. Using Andrea's tip of > > C-h f c-mode + look for "natively compiled", it is clear that the > > natively compiled files _are_ being used. > Yes, for this benchmark, I find the natively-compiled code somewhat > (by about 5%) _slower_ than the byte-compiled code. But this > benchmark only shows off the fontifications, so maybe it isn't > surprising. CC Mode is much more than that. I wrote another benchmark which removes all indentation, then reindents every line: (defmacro time-it (&rest forms) "Time the running of a sequence of forms using `float-time'. Call like this: \"M-: (time-it (foo ...) (bar ...) ...)\"." `(let ((start (float-time))) ,@forms (- (float-time) start))) (defun time-indent () (interactive) (save-excursion (goto-char (point-min)) (while (not (eobp)) (delete-horizontal-space) (beginning-of-line 2)) (goto-char (point-min)) (message "%s" (time-it (while (not (eobp)) (c-indent-line) (beginning-of-line 2)))))) Run with M-: (time-indent). The timings on src/minibuf.c were: (i) .elc files: 6.31s. (ii) .eln files: 5.44s. , which is around a 13% speed up. -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-28 11:34 ` Alan Mackenzie @ 2021-04-28 12:26 ` Eli Zaretskii 2021-04-28 12:32 ` Alan Mackenzie 0 siblings, 1 reply; 47+ messages in thread From: Eli Zaretskii @ 2021-04-28 12:26 UTC (permalink / raw) To: Alan Mackenzie; +Cc: emacs-devel, akrl > Date: Wed, 28 Apr 2021 11:34:13 +0000 > Cc: akrl@sdf.org, emacs-devel@gnu.org > From: Alan Mackenzie <acm@muc.de> > > The timings on src/minibuf.c were: > (i) .elc files: 6.31s. > (ii) .eln files: 5.44s. > > , which is around a 13% speed up. Was Emacs built with or without optimizations? ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-28 12:26 ` Eli Zaretskii @ 2021-04-28 12:32 ` Alan Mackenzie 2021-04-28 13:01 ` Eli Zaretskii 2021-04-28 19:09 ` Andrea Corallo via Emacs development discussions. 0 siblings, 2 replies; 47+ messages in thread From: Alan Mackenzie @ 2021-04-28 12:32 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel, akrl Hello, Eli. On Wed, Apr 28, 2021 at 15:26:47 +0300, Eli Zaretskii wrote: > > Date: Wed, 28 Apr 2021 11:34:13 +0000 > > Cc: akrl@sdf.org, emacs-devel@gnu.org > > From: Alan Mackenzie <acm@muc.de> > > The timings on src/minibuf.c were: > > (i) .elc files: 6.31s. > > (ii) .eln files: 5.44s. > > , which is around a 13% speed up. > Was Emacs built with or without optimizations? Optimised builds in both cases. -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-28 12:32 ` Alan Mackenzie @ 2021-04-28 13:01 ` Eli Zaretskii 2021-04-28 19:09 ` Andrea Corallo via Emacs development discussions. 1 sibling, 0 replies; 47+ messages in thread From: Eli Zaretskii @ 2021-04-28 13:01 UTC (permalink / raw) To: Alan Mackenzie; +Cc: emacs-devel, akrl > Date: Wed, 28 Apr 2021 12:32:34 +0000 > Cc: akrl@sdf.org, emacs-devel@gnu.org > From: Alan Mackenzie <acm@muc.de> > > > > The timings on src/minibuf.c were: > > > (i) .elc files: 6.31s. > > > (ii) .eln files: 5.44s. > > > > , which is around a 13% speed up. > > > Was Emacs built with or without optimizations? > > Optimised builds in both cases. Then I suggest to compare unoptimized times as well. ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-28 12:32 ` Alan Mackenzie 2021-04-28 13:01 ` Eli Zaretskii @ 2021-04-28 19:09 ` Andrea Corallo via Emacs development discussions. 1 sibling, 0 replies; 47+ messages in thread From: Andrea Corallo via Emacs development discussions. @ 2021-04-28 19:09 UTC (permalink / raw) To: Alan Mackenzie; +Cc: Eli Zaretskii, emacs-devel Alan Mackenzie <acm@muc.de> writes: > Hello, Eli. > > On Wed, Apr 28, 2021 at 15:26:47 +0300, Eli Zaretskii wrote: >> > Date: Wed, 28 Apr 2021 11:34:13 +0000 >> > Cc: akrl@sdf.org, emacs-devel@gnu.org >> > From: Alan Mackenzie <acm@muc.de> > >> > The timings on src/minibuf.c were: >> > (i) .elc files: 6.31s. >> > (ii) .eln files: 5.44s. > >> > , which is around a 13% speed up. > >> Was Emacs built with or without optimizations? > > Optimised builds in both cases. I think the only reliable way of knowing where in your test the time is spent is to run it under 'perf'. This should also explain the results measured so far. Can this test be run as batch? Thanks Andrea ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-26 14:54 ` Alan Mackenzie 2021-04-26 15:12 ` Eli Zaretskii @ 2021-04-26 15:33 ` Óscar Fuentes 2021-04-26 15:58 ` Eli Zaretskii 2021-04-26 17:11 ` Alan Mackenzie 2021-04-26 15:37 ` Stefan Monnier 2021-04-26 16:06 ` Andrea Corallo via Emacs development discussions. 3 siblings, 2 replies; 47+ messages in thread From: Óscar Fuentes @ 2021-04-26 15:33 UTC (permalink / raw) To: emacs-devel Alan Mackenzie <acm@muc.de> writes: > I must be doing something differently from these people, but I can't > identify what. Native compilation just doesn't seem to be working for > me, yet. How much of a speed up should it give me? Surely more than 5% > - 10%? native-comp speeds up Elisp, and even then there are lots of cases where the change is hardly noticeable. Let's say your code spends 90% on the C core and 10% on Elisp. If native-comp brings a 2x speed up, you'll only observe about 5% improvement. C code is opaque to native-comp and puts a hard limit on how much it can optimize Elisp. Thus I hope that in the future more and more code will be moved from C to Elisp. And other areas can benefit too: one thing which IMO has lots of potential is to native-compile regexps. ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-26 15:33 ` Óscar Fuentes @ 2021-04-26 15:58 ` Eli Zaretskii 2021-04-26 16:30 ` Óscar Fuentes 2021-04-26 17:11 ` Alan Mackenzie 1 sibling, 1 reply; 47+ messages in thread From: Eli Zaretskii @ 2021-04-26 15:58 UTC (permalink / raw) To: Óscar Fuentes; +Cc: emacs-devel > From: Óscar Fuentes <ofv@wanadoo.es> > Date: Mon, 26 Apr 2021 17:33:30 +0200 > > Let's say your code spends 90% on the C core and 10% on Elisp. IME, that's not the case with CC Mode. Most of the code there is Lisp, not C. ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-26 15:58 ` Eli Zaretskii @ 2021-04-26 16:30 ` Óscar Fuentes 0 siblings, 0 replies; 47+ messages in thread From: Óscar Fuentes @ 2021-04-26 16:30 UTC (permalink / raw) To: emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> From: Óscar Fuentes <ofv@wanadoo.es> >> Date: Mon, 26 Apr 2021 17:33:30 +0200 >> >> Let's say your code spends 90% on the C core and 10% on Elisp. > > IME, that's not the case with CC Mode. Most of the code there is > Lisp, not C. AFAIK CC Mode makes heavy use of regexps, plus lots of data reads & writes on several structures implemented in C, plus lots of movements and string reads on buffers. All that means two things: that a large part of the run time might correspond to C and that the native-comp opitimizer is severely limited by the omnipresence of those calls to C functions. ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-26 15:33 ` Óscar Fuentes 2021-04-26 15:58 ` Eli Zaretskii @ 2021-04-26 17:11 ` Alan Mackenzie 2021-04-26 20:02 ` Óscar Fuentes 1 sibling, 1 reply; 47+ messages in thread From: Alan Mackenzie @ 2021-04-26 17:11 UTC (permalink / raw) To: Óscar Fuentes; +Cc: emacs-devel Hello, Óscar. On Mon, Apr 26, 2021 at 17:33:30 +0200, Óscar Fuentes wrote: > Alan Mackenzie <acm@muc.de> writes: > > I must be doing something differently from these people, but I can't > > identify what. Native compilation just doesn't seem to be working for > > me, yet. How much of a speed up should it give me? Surely more than 5% > > - 10%? > native-comp speeds up Elisp, and even then there are lots of cases where > the change is hardly noticeable. > Let's say your code spends 90% on the C core and 10% on Elisp. If > native-comp brings a 2x speed up, you'll only observe about 5% > improvement. It seems something like that is indeed happening. > C code is opaque to native-comp and puts a hard limit on how much it can > optimize Elisp. Thus I hope that in the future more and more code will > be moved from C to Elisp. Does that make sense? To move time critical code from fast C to slow Lisp, and then optimise it back, partly? > And other areas can benefit too: one thing which IMO has lots of > potential is to native-compile regexps. Again, how would that work? Regexps are already handled in C. How could native compilation of Lisp add anything? -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-26 17:11 ` Alan Mackenzie @ 2021-04-26 20:02 ` Óscar Fuentes 2021-04-28 14:07 ` Alan Mackenzie 0 siblings, 1 reply; 47+ messages in thread From: Óscar Fuentes @ 2021-04-26 20:02 UTC (permalink / raw) To: emacs-devel Alan Mackenzie <acm@muc.de> writes: >> C code is opaque to native-comp and puts a hard limit on how much it can >> optimize Elisp. Thus I hope that in the future more and more code will >> be moved from C to Elisp. > > Does that make sense? To move time critical code from fast C to slow > Lisp, and then optimise it back, partly? Calling C is a bit slow, but that's not the worst problem it introduces. When a call to a C function is made, the native-comp optimizer must throw away information it learned about the Elisp code it was compiling, hence reducing optimization opportunities. Furthermore, the C function must know how to many cases while only one or a few of them make sense at any given call site. Consider this extreme example: (defun foo (x) (+ x 12)) (defun the-answer-p (x) (or (and (stringp x) (string= x "42")) (and (numberp x) (= x 42)) (and (bufferp x) ... etc))) (let ((a 30)) (if (the-answer-p (foo a)) (message "The answer is %d" (foo a)) (message "We remain ignorant"))) The optimizer knows that the argument passed to `foo' is `a', which holds the constant `30'. It also knows that the value returned by `foo' only depends on its argument, so it can simply replace those calls to `foo' with (+ 30 12), and then with its result: 42. Then, on the call to `the-answer-p', the optimizer knows that the argument is the numeric constant 42, hence the second condition is true, so it can replace `(the-answer-p (foo a))' with `true', and then colapse the `if' to just (message "The answer is %d" 42) If `foo' and `the-answer-p' were implemented on C, none of this optimizations could be possible, because the optimizer would know nothing about the inner workings of those functions. I'm no Elisp expert, so the above might not fully translate to what is achievable in practice by native-comp, but the general point holds. >> And other areas can benefit too: one thing which IMO has lots of >> potential is to native-compile regexps. > > Again, how would that work? Regexps are already handled in C. How > could native compilation of Lisp add anything? Not native compilation of Elisp, but native compilation of the regexps: a function is generated that implements the regexp. Instead of passing the regexp to the engine, the function is called. ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-26 20:02 ` Óscar Fuentes @ 2021-04-28 14:07 ` Alan Mackenzie 2021-04-28 15:10 ` Óscar Fuentes 0 siblings, 1 reply; 47+ messages in thread From: Alan Mackenzie @ 2021-04-28 14:07 UTC (permalink / raw) To: Óscar Fuentes; +Cc: emacs-devel Hello, Óscar. On Mon, Apr 26, 2021 at 22:02:49 +0200, Óscar Fuentes wrote: > Alan Mackenzie <acm@muc.de> writes: > >> C code is opaque to native-comp and puts a hard limit on how much it can > >> optimize Elisp. Thus I hope that in the future more and more code will > >> be moved from C to Elisp. > > Does that make sense? To move time critical code from fast C to slow > > Lisp, and then optimise it back, partly? > Calling C is a bit slow, but that's not the worst problem it introduces. > When a call to a C function is made, the native-comp optimizer must > throw away information it learned about the Elisp code it was compiling, > hence reducing optimization opportunities. Furthermore, the C function > must know how to many cases while only one or a few of them make sense > at any given call site. You're suggesting optimisation between Lisp functions. I'm sceptical about how much that could win. > Consider this extreme example: > (defun foo (x) > (+ x 12)) > (defun the-answer-p (x) > (or (and (stringp x) (string= x "42")) > (and (numberp x) (= x 42)) > (and (bufferp x) ... etc))) > (let ((a 30)) > (if (the-answer-p (foo a)) > (message "The answer is %d" (foo a)) > (message "We remain ignorant"))) > The optimizer knows that the argument passed to `foo' is `a', which > holds the constant `30'. It also knows that the value returned by `foo' > only depends on its argument, so it can simply replace those calls to > `foo' with (+ 30 12), and then with its result: 42. Then, on the call to > `the-answer-p', the optimizer knows that the argument is the numeric > constant 42, hence the second condition is true, so it can replace > `(the-answer-p (foo a))' with `true', and then colapse the `if' to just > (message "The answer is %d" 42) This sort of thing is surely untypical in Emacs. > If `foo' and `the-answer-p' were implemented on C, none of this > optimizations could be possible, because the optimizer would know > nothing about the inner workings of those functions. > I'm no Elisp expert, so the above might not fully translate to what is > achievable in practice by native-comp, but the general point holds. > >> And other areas can benefit too: one thing which IMO has lots of > >> potential is to native-compile regexps. > > Again, how would that work? Regexps are already handled in C. How > > could native compilation of Lisp add anything? > Not native compilation of Elisp, but native compilation of the regexps: > a function is generated that implements the regexp. Instead of passing > the regexp to the engine, the function is called. OK, I see what you mean, now. Currently, if I understand correctly, regexps are compiled into an interpreted language at runtime, and they are stored in a (fairly large) cache indexed by the regexp string. When would you compile the regexps into native code? For constant regexps this can be done at build time, but there are regexps constructed at run time in Emacs. This compilation of regexps at run time might negate the advantages in speed that the complation would otherwise bring. -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-28 14:07 ` Alan Mackenzie @ 2021-04-28 15:10 ` Óscar Fuentes 0 siblings, 0 replies; 47+ messages in thread From: Óscar Fuentes @ 2021-04-28 15:10 UTC (permalink / raw) To: emacs-devel Alan Mackenzie <acm@muc.de> writes: > OK, I see what you mean, now. Currently, if I understand correctly, > regexps are compiled into an interpreted language at runtime, and they > are stored in a (fairly large) cache indexed by the regexp string. > > When would you compile the regexps into native code? For constant > regexps this can be done at build time, but there are regexps > constructed at run time in Emacs. This compilation of regexps at run > time might negate the advantages in speed that the complation would > otherwise bring. On simple strategy is to compile the regexps by explicit request of the code author, he decides when a regexp is worth the extra work of turning it into native code. As per the regexps built at run time, an ordinary JIT compiler would have no problem with them at all, but Emacs JIT engine puts the code it generates into shared libraries. I don't know if it also supports generating and using code directly in memory. ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-26 14:54 ` Alan Mackenzie 2021-04-26 15:12 ` Eli Zaretskii 2021-04-26 15:33 ` Óscar Fuentes @ 2021-04-26 15:37 ` Stefan Monnier 2021-04-26 16:06 ` Andrea Corallo via Emacs development discussions. 3 siblings, 0 replies; 47+ messages in thread From: Stefan Monnier @ 2021-04-26 15:37 UTC (permalink / raw) To: Alan Mackenzie; +Cc: Eli Zaretskii, akrl, emacs-devel > How much of a speed up should it give me? Surely more than 5% - 10%? As you can imagine it's highly dependent on what the code does. Adding/removing text properties, searching for text properties, sexp-navigation, searching for regexps, etc... will see ~0% speed up because it's already all written in C. Stefan ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-26 14:54 ` Alan Mackenzie ` (2 preceding siblings ...) 2021-04-26 15:37 ` Stefan Monnier @ 2021-04-26 16:06 ` Andrea Corallo via Emacs development discussions. 2021-04-26 17:05 ` Alan Mackenzie 3 siblings, 1 reply; 47+ messages in thread From: Andrea Corallo via Emacs development discussions. @ 2021-04-26 16:06 UTC (permalink / raw) To: Alan Mackenzie; +Cc: Eli Zaretskii, emacs-devel Alan Mackenzie <acm@muc.de> writes: [...] > Surely there's a way to check that .eln files have actually been loaded? [...] Hi Alan, we could not change how `load-history' is filled as this would have introduced incompatibilities. One quick way is to C-h f a function defined in the file and if this is reported to be native compiled or not. Ex for c-mode I get: " c-mode is an interactive native compiled Lisp function in ‘cc-mode.el’. ..." Hope it helps, thanks Andrea ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-26 16:06 ` Andrea Corallo via Emacs development discussions. @ 2021-04-26 17:05 ` Alan Mackenzie 0 siblings, 0 replies; 47+ messages in thread From: Alan Mackenzie @ 2021-04-26 17:05 UTC (permalink / raw) To: Andrea Corallo; +Cc: Eli Zaretskii, emacs-devel Hello, Andrea. On Mon, Apr 26, 2021 at 16:06:08 +0000, Andrea Corallo via Emacs development discussions. wrote: > Alan Mackenzie <acm@muc.de> writes: > [...] > > Surely there's a way to check that .eln files have actually been loaded? > [...] > Hi Alan, > we could not change how `load-history' is filled as this would have > introduced incompatibilities. OK. > One quick way is to C-h f a function defined in the file and if this is > reported to be native compiled or not. > Ex for c-mode I get: > " > c-mode is an interactive native compiled Lisp function in ‘cc-mode.el’. > ..." > Hope it helps, thanks That's helped a lot! Thanks. > Andrea -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-25 18:36 ` master 289000e: Merge branch 'feature/native-comp' into trunk Andrea Corallo via Emacs development discussions. ` (2 preceding siblings ...) 2021-04-25 20:03 ` Alan Mackenzie @ 2021-04-25 21:48 ` Stefan Monnier 2021-04-25 22:41 ` Stefan Kangas ` (3 subsequent siblings) 7 siblings, 0 replies; 47+ messages in thread From: Stefan Monnier @ 2021-04-25 21:48 UTC (permalink / raw) To: Andrea Corallo via Emacs development discussions.; +Cc: Andrea Corallo Andrea Corallo via "Emacs development discussions." [2021-04-25 18:36:22] wrote: > I guess you get what this mail is about from the subject :) This is an important day for Emacs Lisp, yes, congratulations and thank you very much for your efforts and persistence. Stefan ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-25 18:36 ` master 289000e: Merge branch 'feature/native-comp' into trunk Andrea Corallo via Emacs development discussions. ` (3 preceding siblings ...) 2021-04-25 21:48 ` Stefan Monnier @ 2021-04-25 22:41 ` Stefan Kangas 2021-04-25 22:57 ` Clément Pit-Claudel ` (2 subsequent siblings) 7 siblings, 0 replies; 47+ messages in thread From: Stefan Kangas @ 2021-04-25 22:41 UTC (permalink / raw) To: Andrea Corallo, emacs-devel Andrea Corallo via "Emacs development discussions." <emacs-devel@gnu.org> writes: > I guess you get what this mail is about from the subject :) Fantastic news! Thank you again for this solid work. ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-25 18:36 ` master 289000e: Merge branch 'feature/native-comp' into trunk Andrea Corallo via Emacs development discussions. ` (4 preceding siblings ...) 2021-04-25 22:41 ` Stefan Kangas @ 2021-04-25 22:57 ` Clément Pit-Claudel 2021-04-26 16:16 ` Andrea Corallo via Emacs development discussions. 2021-04-26 13:03 ` wilde 2021-04-26 13:18 ` Minimal recommended version of gcc/libgccjit for native-comp (was: master 289000e: Merge branch 'feature/native-comp' into trunk) wilde 7 siblings, 1 reply; 47+ messages in thread From: Clément Pit-Claudel @ 2021-04-25 22:57 UTC (permalink / raw) To: emacs-devel On 4/25/21 2:36 PM, Andrea Corallo via Emacs development discussions. wrote: > I guess you get what this mail is about from the subject :) Congratulations! Is there a simple way to measure performance of native-compiled vs. byte-compiled code? Something like benchmark-run-compiled, but for native code, maybe? ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-25 22:57 ` Clément Pit-Claudel @ 2021-04-26 16:16 ` Andrea Corallo via Emacs development discussions. 0 siblings, 0 replies; 47+ messages in thread From: Andrea Corallo via Emacs development discussions. @ 2021-04-26 16:16 UTC (permalink / raw) To: Clément Pit-Claudel; +Cc: emacs-devel Clément Pit-Claudel <cpitclaudel@gmail.com> writes: > On 4/25/21 2:36 PM, Andrea Corallo via Emacs development discussions. wrote: >> I guess you get what this mail is about from the subject :) > > Congratulations! > > Is there a simple way to measure performance of native-compiled vs. byte-compiled code? Something like benchmark-run-compiled, but for native code, maybe? No we have no precooked way for that, but I'm wondering how much is it interesting to test one single function. The performance will most likely depend on the surrounding set of used libraries (read all Emacs) and if this is native compiled or not. Regards Andrea ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: master 289000e: Merge branch 'feature/native-comp' into trunk 2021-04-25 18:36 ` master 289000e: Merge branch 'feature/native-comp' into trunk Andrea Corallo via Emacs development discussions. ` (5 preceding siblings ...) 2021-04-25 22:57 ` Clément Pit-Claudel @ 2021-04-26 13:03 ` wilde 2021-04-26 13:18 ` Minimal recommended version of gcc/libgccjit for native-comp (was: master 289000e: Merge branch 'feature/native-comp' into trunk) wilde 7 siblings, 0 replies; 47+ messages in thread From: wilde @ 2021-04-26 13:03 UTC (permalink / raw) To: Andrea Corallo via Emacs development discussions.; +Cc: Andrea Corallo Hi Andrea, Andrea Corallo via "Emacs development discussions." <emacs-devel@gnu.org> wrote: > I guess you get what this mail is about from the subject :) This is fantastic news! Many Thanks again, to you and all the contributors who made this possible. cheers sascha ^ permalink raw reply [flat|nested] 47+ messages in thread
* Minimal recommended version of gcc/libgccjit for native-comp (was: master 289000e: Merge branch 'feature/native-comp' into trunk) 2021-04-25 18:36 ` master 289000e: Merge branch 'feature/native-comp' into trunk Andrea Corallo via Emacs development discussions. ` (6 preceding siblings ...) 2021-04-26 13:03 ` wilde @ 2021-04-26 13:18 ` wilde 2021-04-26 15:58 ` Minimal recommended version of gcc/libgccjit for native-comp Stefan Monnier 2021-04-26 16:12 ` Andrea Corallo via Emacs development discussions. 7 siblings, 2 replies; 47+ messages in thread From: wilde @ 2021-04-26 13:18 UTC (permalink / raw) To: Andrea Corallo via Emacs development discussions.; +Cc: Andrea Corallo Hello Andrea, As there are many distribution and systems out there supported by GNU Emacs which provide wide variety of gcc versions I wonder which versions are considered sufficient for the new native compilation feature. So far I have successfully tested the feature with gcc/gcclibjit 10 and 8 but I also have some systems where gcc is still at version 6. Even though libgccjit is available as a package (we are talking Debian Stretch here) I'm a little bit reluctant enabling nativ comp on the build. Any insights/assessments on this issue would be highly welcome... :) cheers sascha ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: Minimal recommended version of gcc/libgccjit for native-comp 2021-04-26 13:18 ` Minimal recommended version of gcc/libgccjit for native-comp (was: master 289000e: Merge branch 'feature/native-comp' into trunk) wilde @ 2021-04-26 15:58 ` Stefan Monnier 2021-04-26 16:16 ` Eli Zaretskii 2021-04-26 16:18 ` Andrea Corallo via Emacs development discussions. 2021-04-26 16:12 ` Andrea Corallo via Emacs development discussions. 1 sibling, 2 replies; 47+ messages in thread From: Stefan Monnier @ 2021-04-26 15:58 UTC (permalink / raw) To: wilde; +Cc: Andrea Corallo, Andrea Corallo via Emacs development discussions. > Any insights/assessments on this issue would be highly welcome... :) I'm sure Andrea will have more to say about that, but my experience has been that problems tend to affect the compilation itself rather than execution of the compiled code. So incompatibilities with libgccjit tend to result in annoying errors rather than catastrophic crashes. Stefan ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: Minimal recommended version of gcc/libgccjit for native-comp 2021-04-26 15:58 ` Minimal recommended version of gcc/libgccjit for native-comp Stefan Monnier @ 2021-04-26 16:16 ` Eli Zaretskii 2021-04-26 16:32 ` Andrea Corallo via Emacs development discussions. 2021-04-26 16:18 ` Andrea Corallo via Emacs development discussions. 1 sibling, 1 reply; 47+ messages in thread From: Eli Zaretskii @ 2021-04-26 16:16 UTC (permalink / raw) To: Stefan Monnier; +Cc: wilde, emacs-devel, akrl > From: Stefan Monnier <monnier@iro.umontreal.ca> > Date: Mon, 26 Apr 2021 11:58:10 -0400 > Cc: Andrea Corallo <akrl@sdf.org>, > "Andrea Corallo via Emacs development discussions." <emacs-devel@gnu.org> > > So incompatibilities with libgccjit tend to result in annoying errors > rather than catastrophic crashes. I've seen both, actually. ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: Minimal recommended version of gcc/libgccjit for native-comp 2021-04-26 16:16 ` Eli Zaretskii @ 2021-04-26 16:32 ` Andrea Corallo via Emacs development discussions. 2021-04-26 16:54 ` Eli Zaretskii 0 siblings, 1 reply; 47+ messages in thread From: Andrea Corallo via Emacs development discussions. @ 2021-04-26 16:32 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Stefan Monnier, wilde, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> From: Stefan Monnier <monnier@iro.umontreal.ca> >> Date: Mon, 26 Apr 2021 11:58:10 -0400 >> Cc: Andrea Corallo <akrl@sdf.org>, >> "Andrea Corallo via Emacs development discussions." <emacs-devel@gnu.org> >> >> So incompatibilities with libgccjit tend to result in annoying errors >> rather than catastrophic crashes. > > I've seen both, actually. I think Stefan referred to the fact that because we always run compilations in a subprocesses once bootstrap is done even if libgccjit crashe the main Emacs will just report some error. IOW it *should* not be dangerous. Andrea ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: Minimal recommended version of gcc/libgccjit for native-comp 2021-04-26 16:32 ` Andrea Corallo via Emacs development discussions. @ 2021-04-26 16:54 ` Eli Zaretskii 2021-04-26 20:53 ` Andrea Corallo via Emacs development discussions. 2021-04-27 3:52 ` Richard Stallman 0 siblings, 2 replies; 47+ messages in thread From: Eli Zaretskii @ 2021-04-26 16:54 UTC (permalink / raw) To: Andrea Corallo; +Cc: wilde, monnier, emacs-devel > From: Andrea Corallo <akrl@sdf.org> > Cc: Stefan Monnier <monnier@iro.umontreal.ca>, wilde@sha-bang.de, > emacs-devel@gnu.org > Date: Mon, 26 Apr 2021 16:32:07 +0000 > > >> So incompatibilities with libgccjit tend to result in annoying errors > >> rather than catastrophic crashes. > > > > I've seen both, actually. > > I think Stefan referred to the fact that because we always run > compilations in a subprocesses once bootstrap is done even if libgccjit > crashe the main Emacs will just report some error. IOW it *should* not > be dangerous. As you remember, we've seen crashes in the native code, until we disabled one of the passes in libgccjit. So it isn't unthinkable that some similar problem which we didn't yet see exists, especially in earlier versions of libgccjit. Btw, I'm somewhat disappointed by the (lack of) responsiveness from libgccjit developers: a bug I reported to Bugzilla a week ago (and which was actually known to them for a month before that, from our correspondence) didn't get even a single response yet. ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: Minimal recommended version of gcc/libgccjit for native-comp 2021-04-26 16:54 ` Eli Zaretskii @ 2021-04-26 20:53 ` Andrea Corallo via Emacs development discussions. 2021-04-27 3:52 ` Richard Stallman 1 sibling, 0 replies; 47+ messages in thread From: Andrea Corallo via Emacs development discussions. @ 2021-04-26 20:53 UTC (permalink / raw) To: Eli Zaretskii; +Cc: monnier, wilde, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> From: Andrea Corallo <akrl@sdf.org> >> Cc: Stefan Monnier <monnier@iro.umontreal.ca>, wilde@sha-bang.de, >> emacs-devel@gnu.org >> Date: Mon, 26 Apr 2021 16:32:07 +0000 >> >> >> So incompatibilities with libgccjit tend to result in annoying errors >> >> rather than catastrophic crashes. >> > >> > I've seen both, actually. >> >> I think Stefan referred to the fact that because we always run >> compilations in a subprocesses once bootstrap is done even if libgccjit >> crashe the main Emacs will just report some error. IOW it *should* not >> be dangerous. > > As you remember, we've seen crashes in the native code, until we > disabled one of the passes in libgccjit. So it isn't unthinkable that > some similar problem which we didn't yet see exists, especially in > earlier versions of libgccjit. I don't remanber exacly the scenario but wasn't that an ICE in libgccjit and so either crashing bootstrap or handled in a subprocess? Anyway I guess you are right we still have to gain more experience expecially with old libgccjit versions. > Btw, I'm somewhat disappointed by the (lack of) responsiveness from > libgccjit developers: a bug I reported to Bugzilla a week ago (and > which was actually known to them for a month before that, from our > correspondence) didn't get even a single response yet. I guess you are talking about jit/100151, sorry for that, if it's a Windows specific issue I fear we have no regular libgccjit contributors on this OS ATM :( Andrea ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: Minimal recommended version of gcc/libgccjit for native-comp 2021-04-26 16:54 ` Eli Zaretskii 2021-04-26 20:53 ` Andrea Corallo via Emacs development discussions. @ 2021-04-27 3:52 ` Richard Stallman 1 sibling, 0 replies; 47+ messages in thread From: Richard Stallman @ 2021-04-27 3:52 UTC (permalink / raw) To: Eli Zaretskii; +Cc: wilde, emacs-devel, monnier, akrl [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Btw, I'm somewhat disappointed by the (lack of) responsiveness from > libgccjit developers: a bug I reported to Bugzilla a week ago (and > which was actually known to them for a month before that, from our > correspondence) didn't get even a single response yet. I suggest waiting another week and asking again. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: Minimal recommended version of gcc/libgccjit for native-comp 2021-04-26 15:58 ` Minimal recommended version of gcc/libgccjit for native-comp Stefan Monnier 2021-04-26 16:16 ` Eli Zaretskii @ 2021-04-26 16:18 ` Andrea Corallo via Emacs development discussions. 1 sibling, 0 replies; 47+ messages in thread From: Andrea Corallo via Emacs development discussions. @ 2021-04-26 16:18 UTC (permalink / raw) To: Stefan Monnier; +Cc: wilde, Andrea Corallo via Emacs development discussions. Stefan Monnier <monnier@iro.umontreal.ca> writes: >> Any insights/assessments on this issue would be highly welcome... :) > > I'm sure Andrea will have more to say about that, but my experience has > been that problems tend to affect the compilation itself rather than > execution of the compiled code. > > So incompatibilities with libgccjit tend to result in annoying errors > rather than catastrophic crashes. Totally agree. Andrea ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: Minimal recommended version of gcc/libgccjit for native-comp 2021-04-26 13:18 ` Minimal recommended version of gcc/libgccjit for native-comp (was: master 289000e: Merge branch 'feature/native-comp' into trunk) wilde 2021-04-26 15:58 ` Minimal recommended version of gcc/libgccjit for native-comp Stefan Monnier @ 2021-04-26 16:12 ` Andrea Corallo via Emacs development discussions. 2021-04-27 14:21 ` wilde 1 sibling, 1 reply; 47+ messages in thread From: Andrea Corallo via Emacs development discussions. @ 2021-04-26 16:12 UTC (permalink / raw) To: wilde; +Cc: Andrea Corallo via Emacs development discussions. wilde@sha-bang.de writes: > Hello Andrea, > > As there are many distribution and systems out there supported by GNU > Emacs which provide wide variety of gcc versions I wonder which versions > are considered sufficient for the new native compilation feature. > > So far I have successfully tested the feature with gcc/gcclibjit 10 and > 8 but I also have some systems where gcc is still at version 6. Even > though libgccjit is available as a package (we are talking Debian > Stretch here) I'm a little bit reluctant enabling nativ comp on the > build. > > Any insights/assessments on this issue would be highly welcome... :) > > cheers > sascha Hi Sascha, AFAIR we don't depend on any specific entry point that was added in recent times into libgccjit, so in theory I *think* 6 should work. That said old libgccjit (read < 8) AFAIK have not been tested much if any with Emacs. You can maybe have a go an report :) Thanks Andrea ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: Minimal recommended version of gcc/libgccjit for native-comp 2021-04-26 16:12 ` Andrea Corallo via Emacs development discussions. @ 2021-04-27 14:21 ` wilde 2021-04-27 16:35 ` Andrea Corallo via Emacs development discussions. 0 siblings, 1 reply; 47+ messages in thread From: wilde @ 2021-04-27 14:21 UTC (permalink / raw) To: Andrea Corallo via Emacs development discussions.; +Cc: Andrea Corallo Hi Andrea, Andrea Corallo via "Emacs development discussions." <emacs-devel@gnu.org> wrote: > wilde@sha-bang.de writes: >> As there are many distribution and systems out there supported by GNU >> Emacs which provide wide variety of gcc versions I wonder which versions >> are considered sufficient for the new native compilation feature. > > AFAIR we don't depend on any specific entry point that was added in > recent times into libgccjit, so in theory I *think* 6 should work. That > said old libgccjit (read < 8) AFAIK have not been tested much if any > with Emacs. You can maybe have a go an report :) Thanks for your reply, also thanks to Stefan and Eli for the assessments. We are giving it a try (actually a colleague at work will be the primary tester). The build (with NATIVE_FULL_AOT) and first tests (e.g. using gnus) worked smoothly so far. I'll report any serious problems. In the hope I don't forget to do so I'll also report any positive experience after a few weeks of use... :) cheers sascha ^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: Minimal recommended version of gcc/libgccjit for native-comp 2021-04-27 14:21 ` wilde @ 2021-04-27 16:35 ` Andrea Corallo via Emacs development discussions. 0 siblings, 0 replies; 47+ messages in thread From: Andrea Corallo via Emacs development discussions. @ 2021-04-27 16:35 UTC (permalink / raw) To: wilde; +Cc: Andrea Corallo via Emacs development discussions. wilde@sha-bang.de writes: > Hi Andrea, > > Andrea Corallo via "Emacs development discussions." <emacs-devel@gnu.org> wrote: >> wilde@sha-bang.de writes: >>> As there are many distribution and systems out there supported by GNU >>> Emacs which provide wide variety of gcc versions I wonder which versions >>> are considered sufficient for the new native compilation feature. >> >> AFAIR we don't depend on any specific entry point that was added in >> recent times into libgccjit, so in theory I *think* 6 should work. That >> said old libgccjit (read < 8) AFAIK have not been tested much if any >> with Emacs. You can maybe have a go an report :) > > Thanks for your reply, also thanks to Stefan and Eli for the > assessments. We are giving it a try (actually a colleague at work will > be the primary tester). The build (with NATIVE_FULL_AOT) and first > tests (e.g. using gnus) worked smoothly so far. Nice > I'll report any serious problems. In the hope I don't forget to do so > I'll also report any positive experience after a few weeks of use... :) Thanks! Andrea ^ permalink raw reply [flat|nested] 47+ messages in thread
end of thread, other threads:[~2021-04-28 19:09 UTC | newest] Thread overview: 47+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <20210425182503.25223.81072@vcs0.savannah.gnu.org> [not found] ` <20210425182508.6CC7C2094D@vcs0.savannah.gnu.org> 2021-04-25 18:36 ` master 289000e: Merge branch 'feature/native-comp' into trunk Andrea Corallo via Emacs development discussions. 2021-04-25 18:40 ` Eli Zaretskii 2021-04-25 18:59 ` Andrea Corallo via Emacs development discussions. 2021-04-25 20:25 ` Eli Zaretskii 2021-04-25 18:45 ` Óscar Fuentes 2021-04-25 20:03 ` Alan Mackenzie 2021-04-25 20:14 ` Eli Zaretskii 2021-04-25 21:55 ` Alan Mackenzie 2021-04-26 11:40 ` Eli Zaretskii 2021-04-26 13:21 ` Alan Mackenzie 2021-04-26 13:45 ` Eli Zaretskii 2021-04-26 14:54 ` Alan Mackenzie 2021-04-26 15:12 ` Eli Zaretskii 2021-04-26 17:02 ` Alan Mackenzie 2021-04-26 17:13 ` Stefan Monnier 2021-04-26 17:25 ` Eli Zaretskii 2021-04-28 11:34 ` Alan Mackenzie 2021-04-28 12:26 ` Eli Zaretskii 2021-04-28 12:32 ` Alan Mackenzie 2021-04-28 13:01 ` Eli Zaretskii 2021-04-28 19:09 ` Andrea Corallo via Emacs development discussions. 2021-04-26 15:33 ` Óscar Fuentes 2021-04-26 15:58 ` Eli Zaretskii 2021-04-26 16:30 ` Óscar Fuentes 2021-04-26 17:11 ` Alan Mackenzie 2021-04-26 20:02 ` Óscar Fuentes 2021-04-28 14:07 ` Alan Mackenzie 2021-04-28 15:10 ` Óscar Fuentes 2021-04-26 15:37 ` Stefan Monnier 2021-04-26 16:06 ` Andrea Corallo via Emacs development discussions. 2021-04-26 17:05 ` Alan Mackenzie 2021-04-25 21:48 ` Stefan Monnier 2021-04-25 22:41 ` Stefan Kangas 2021-04-25 22:57 ` Clément Pit-Claudel 2021-04-26 16:16 ` Andrea Corallo via Emacs development discussions. 2021-04-26 13:03 ` wilde 2021-04-26 13:18 ` Minimal recommended version of gcc/libgccjit for native-comp (was: master 289000e: Merge branch 'feature/native-comp' into trunk) wilde 2021-04-26 15:58 ` Minimal recommended version of gcc/libgccjit for native-comp Stefan Monnier 2021-04-26 16:16 ` Eli Zaretskii 2021-04-26 16:32 ` Andrea Corallo via Emacs development discussions. 2021-04-26 16:54 ` Eli Zaretskii 2021-04-26 20:53 ` Andrea Corallo via Emacs development discussions. 2021-04-27 3:52 ` Richard Stallman 2021-04-26 16:18 ` Andrea Corallo via Emacs development discussions. 2021-04-26 16:12 ` Andrea Corallo via Emacs development discussions. 2021-04-27 14:21 ` wilde 2021-04-27 16:35 ` Andrea Corallo via Emacs development discussions.
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).