Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lyluatex runs slowly on mac #303

Closed
xhhdd opened this issue Feb 28, 2023 · 8 comments
Closed

lyluatex runs slowly on mac #303

xhhdd opened this issue Feb 28, 2023 · 8 comments

Comments

@xhhdd
Copy link

xhhdd commented Feb 28, 2023

Hi author, I've been using lyluatex to get lilypond to work perfectly with latex, but I recently switched to an Apple silicon computer and have some new problems.

Background

Computer: apple m2 max 32g
Lilypond: 2.24.1
lyluatex and mactex versions are the latest
Tests have been performed at the command line as well as under various editors
Do a comparison of windows computers: cpu-AMD 5700G

Specific questions

First, my latex minimal code case is:

\documentclass{ctexart}
\usepackage{lyluatex}

\begin{document}

\begin{enumerate}
    \item \lilypond{\clef bass \key c \major \time 2/2 c1}
    \item %When officially run, there will be 1000 lines of the same kind of code here
    \item .....
    \item .....
\end{enumerate}

\end{document} 

Generate results
It works fine on Apple computers, but it takes about 16 minutes to run. But on windows it only takes almost half the time. This was very surprising to me because the Apple computer was just bought and I had very high expectations for its performance, while the windows hardware was already 2 years old.

In fact, in other cases, the performance of the Apple computer does far exceed that of my windows.

lilypond-book

So next I tested using lilypond-book to test if lilypond is not very suitable for use on Apple computers.
I have made a small change to the code example I just used, in order to make the lilypond-book better recognizable.

\documentclass{ctexart}

\begin{document}

\begin{enumerate}
\item 
        \begin{lilypond}
            {\clef alto \key ees \major \time 2/2 deses'1}
        \end{lilypond}

\item ....
\end{enumerate}

\end{document} 

Then I changed the file suffix to lytex and started lilypond-book to convert the file.
Finally run the resulting tex file.
The process is very, very fast, taking only about 1 minute in total.
Generate results
However, as you can see from the image above the generated results are indeed far inferior to lylatex and the typography is very confusing.

Finally

So I would like to ask for help on.

  • Why is the speed of mac far less than windows when using lylatex.
  • Is the amazing speed on lilypond-book a feedback that lilypond can fully call mac performance?
  • Can the speed of lyluatex use on mac be optimized?

ps: My English is not good, so a lot of the help of translation software, I hope I described the problem clearly.

@jperon
Copy link
Owner

jperon commented Feb 28, 2023

Thank you for the report; and about you English, don’t worry: mine isn’t really good either!

Unfortunately, I don’t have a m2 at hand to test… But it should be feasible to test some points. First of all, when using lilypond-book, do you compile with lualatex or pdflatex or xelatex? Just to know whether the suboptimal performance comes from the lua interpreter included in lualatex. If it isn’t the case, I’ll have to add "benchmarking points" to lyluatex code to be able to know where the slowness comes from.

Another question: is the second compilation so slow? Normally, the "pre-compiled" scores in tmp-ly should make it far faster. If it isn’t the case, it would confirm the doubt about the lua interpreter.

@xhhdd
Copy link
Author

xhhdd commented Feb 28, 2023

Thank you very much for your reply!

You got to the crux of the matter at once!

lualatex

I tried as you suggested, and after I generated the tex file from lytex using lilypond, then compiled it using lalatex or pdflatex or xelatex respectively.
It is really the slowest when choosing lualatex!!!

When using pdflatex or xelatex, the information on the console is too fast to see.

But when using lualatex, the information appears very slowly one by one.
When I use lyluatex the situation is very consistent, it all comes up slowly one after the other.

(./bb/lily-90fa39dc-systems.tex) (./08/lily-f266e3b4-systems.tex)
(./8d/lily-01c711a4-systems.tex) (./22/lily-50867d21-systems.tex)
(./58/lily-de0375e5-systems.tex) (./1c/lily-78b34f80-systems.tex)
(./0b/lily-42ac6df0-systems.tex) (./2d/lily-02209b84-systems.tex)
(./08/lily-20fb2485-systems.tex) (./d5/lily-73607df5-systems.tex)
(./50/lily-595e2b43-systems.tex) (./a4/lily-1a9763db-systems.tex)
.......

The above is part of the information I chose, and the rest is pretty much the same.

About "Another question"

I may not have understood too well which time you mean by the ''second compilation''.

If you are referring to the use of lilypond-book, after the test above, it is fast as long as you don't use lualatex.

If you are referring to the case of using lyluatex, the overall speed is slow.
Because using lyluatex creates a tmp-ly folder, and when I observe this folder during compilation, it is indeed slower in generating files.
Other, I also added the option --draftmode according to the readme,There is no change in speed either, the files in tmp-ly will only be generated slowly.

Finally

  • So is this due to lua? Is it incompatible on mac? Does it only behave better on windows?
  • Lilypond-book is fast, but I don't think it's a good alternative, because lyluatex renders very neat and nice, and lilypond-book's effect is relatively rough.
  • If it's a lua or other problem, then I won't bother you, it actually works fine, you just need to wait a little longer.

PS:Finally, thanks again for your reply!

@jperon
Copy link
Owner

jperon commented Feb 28, 2023

What I mean by "second compilation" is when using lyluatex: the first time you run it on a new document, it has to compile each score to pdf; but it keeps the result in the tmp-ly folder, with a hashed name, so it doesn’t need to re-compile scores each time (as soon as they don’t get modified).

According to what you say, it seems the problem is specific to lualatex. To ensure it doesn’t come from lyluatex itself, may you please try unzipping the attached archive, and compare compilation of test.tex with xelatex and lualatex? I’m just guessing, but I have the impression the slowness comes from \includegraphics.

test.zip

@jperon
Copy link
Owner

jperon commented Feb 28, 2023

If it is indeed slow, I think it really comes from the lua interpreter. Not that it is slow in itself (lua is known as one of fastest interpreted languages), but I think MacTeX binaries are universal binaries, not optimized ones for M1 / M2. It could explain why it gets so slow. If your experiments confirm what I think, it should be possible to get support on one of luatex's mailing lists.

@xhhdd
Copy link
Author

xhhdd commented Feb 28, 2023

about test.zip

I unpacked the files and tested them. Since there is only one \includegraphics command in it, using xelatex or lualatex is instant.
Then I copied the command 1000 times and ran it again, and I could observe that it took 3.1 seconds with lualatex and 3.4 seconds with xelatex.

about tmp-ly

I did observe that with lyluatex, the file is generated and placed in tmp-ly on the first run.
I can also observe that every time a small score is generated, tmp-ly creates 4 file:

  • 0c7f25ff014a8e4cc5a4a697382c044c-1-eps-converted-to.pdf
  • 0c7f25ff014a8e4cc5a4a697382c044c-1.bbox
  • 0c7f25ff014a8e4cc5a4a697382c044c-1.eps
  • 0c7f25ff014a8e4cc5a4a697382c044c.pdf

But this generation process takes a very long time.
Here is the feedback from the console during generation:

(lyluatex)	Compiling score tmp-ly/594a594461ba80bf81f764b4af8e3b81 with LilyPond executable 'lilypond'.
Module lyluatex Warning: gs couldn't be launched; there could be rounding error
s. on input line 81

(lyluatex)	Compiling score tmp-ly/692bc7e81478c56e28afedf8517fe775 with LilyPond executable 'lilypond'.
Module lyluatex Warning: gs couldn't be launched; there could be rounding error
s. on input line 82

(lyluatex)	Compiling score tmp-ly/3908364aeb84f4e43af52999be911f82 with LilyPond executable 'lilypond'.
Module lyluatex Warning: gs couldn't be launched; there could be rounding error
s. on input line 83

(lyluatex)	Compiling score tmp-ly/77c389e6d4ef31c354cc36ca529294dd with LilyPond executable 'lilypond'.
Module lyluatex Warning: gs couldn't be launched; there could be rounding error
s. on input line 84

(lyluatex)	Compiling score tmp-ly/008ef284c228eac89bdedf8b7d076411 with LilyPond executable 'lilypond'.
Module lyluatex Warning: gs couldn't be launched; there could be rounding error
s. on input line 85

The "gs couldn't be launched", which I seem to have seen before under other issues, was said to have no effect on the generated results, so I didn't pay special attention to it.

The whole process of the above took about 12 minutes.

Next I did a second compilation, as expected, lyluatex doesn't need to re-compile scores, and finally it took a little over 2 minutes to finish.

Summary

  • Compared to lilypond-book, it takes longer to compile either the first time or the second time when using lyluatex.
  • When using lyluatex, the second compilation was a significant speedup, but it did seem quite slow compared to the 3 seconds it took at the beginning with \includegraphics.
  • Maybe it's a problem with my lilypond command? Because I put the lilypond command in LaTeX's enumerate environment, maybe this increases the burden on lyluatex? For example, crop size,
  • If you can help test it, this is the tex file I used.tex_file

Finally, thank you for your reply, it helped me a lot.

@jperon
Copy link
Owner

jperon commented Feb 28, 2023

I hadn’t thought about it, but the gs errors could be a part of the explanation: thanks to @uliska's work, lyluatex is quite fussy about scores' width, and without gs, it sometimes launches useless re-compilations (on first pass). But it doesn’t explain the fact it is slow on 2nd pass. Using lilypond command / environment in "complicated" contexts (like enumerate) shouldn’t have significant impact on performances (if any).

@jperon
Copy link
Owner

jperon commented Feb 28, 2023

Still compiling your .tex… but the time spent evidently comes from lilypond processing. Just guessing, but I wonder whether lilypond-book would be multi-threaded: it could be, given the way it works, while lyluatex (getting its context directly from lualatex, which explains why it can get superior results) can’t. It wouldn’t explain the difference on 2nd pass, though.

About possible optimizations, "if I were you" (which is always easy to say), I’d ensure that the binaries (from MacTeX and from LilyPond) are compiled natively for m2, not "universal" binaries. Otherwise, the only thing I see is avoiding to many changes on scores, so that the tmp-ly cache shows its benefits…

@xhhdd
Copy link
Author

xhhdd commented Mar 1, 2023

Thank you so much for your patience, I think I've got a good idea and figured out a lot of things ~!

By the way, lylatex is really a very good program for music majors who are using latex!

@xhhdd xhhdd closed this as completed Mar 1, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants