All of lore.kernel.org
 help / color / mirror / Atom feed
From: Akira Yokosawa <akiyks@gmail.com>
To: "Paul E. McKenney" <paulmck@kernel.org>
Cc: perfbook@vger.kernel.org, Akira Yokosawa <akiyks@gmail.com>
Subject: Re: [RFT PATCH -perfbook] Enable parallel runs of pdflatex
Date: Thu, 27 Jan 2022 15:07:17 +0900	[thread overview]
Message-ID: <4ba47042-bcfa-7635-956a-0168ad6fa827@gmail.com> (raw)
In-Reply-To: <20220127044530.GD4285@paulmck-ThinkPad-P17-Gen-1>

On Wed, 26 Jan 2022 20:45:30 -0800,
Paul E. McKenney wrote:
> On Thu, Jan 27, 2022 at 10:51:25AM +0900, Akira Yokosawa wrote:
>> Parallel build of PDF figures and .fcv snippets by "make -jN" worked
>> when a single PDF target was given to "make", such as
>> "make neatfreak; make -j4 eb".
>> On the other hand, "make -j3 2c 1c eb" ended up in various errors
>> during parallel runs of pdflatex.
>>
>> It turns out that the cause of the error is the \include{} commands
>> in appendix/appendix.tex and perfbook-lt.tex.
>> \include{} switches to its own .aux file, in this case,
>> appendix/questions.aux, appendix/toyrcu.aux, and so on.
>> As their names are common to different PDF targets, those .aux files
>> can be overwritten/corrupted by parallel runs of pdflatex.
>>
>> \include{} implies \cleardoublepage both in front of and next to it.
>> In perfbook, included LaTeX sources have \chapter{} commands and
>> the implied page breaks are redundant.
>>
>> By replacing \include{} with \input{}, parallel runs of pdflatex can
>> be enabled.
>>
>> There were a couple of minor issues in Makefile WRT parallel runs of
>> runfirstlatex.sh.
>>
>> When some of perfbook-xxx.tex files already existed, runfirstlatex.sh
>> for other main perfbook-yyy.tex could be invoked prematurely before
>> that .tex file was ready.
>>
>> Fix it by adding stricter dependencies of perfbook-xxx.aux on
>> perfbook-xxx.tex.
>> Also remove some redundant dependencies around here.
>>
>> Note: LATEXSOURCES contains perfbook-lt.tex
>>
>> Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
>> ---
>> Hi Paul,
>>
>> For quite a while, I was wondering why "make -j3 2c 1c eb"
>> didn't work as expected.
>>
>> I think I have managed to get it work.
>>
>> But changes in Makefile need extra testing.  Especially,
>> those involving parallelizing.
>>
>> So I'd like you to give this a fair amount of testing before
>> pushing it.
> 
> OK, I am applying it to an experimental repo.  Let's give it a go:
> 
> 	$ time make -j32 2c 1c eb a4 nq sf sfnq
> 	[ . . . ]
> 	'perfbook-sf.pdf' is ready.
> 	'perfbook-1c.pdf' is ready.
> 	'perfbook.pdf' is ready.
> 	'perfbook-sfnq.pdf' is ready.
> 	'perfbook-a4.pdf' is ready.
> 	'perfbook-eb.pdf' is ready.
> 	'perfbook-nq.pdf' is ready.
> 
> 	real    2m31.412s
> 	user    16m45.778s
> 	sys     1m48.385s
> 
> Not bad, actually!  Might be worth redoing my release scripts to take
> advantage of this.  ;-)

Nice!

> 
> I (very) quickly glanced at the PDFs, and they look OK.
> 
> I then did a "make clean" and:
> 
> 	$ time make
> 	[ . . . ]
> 	'perfbook.pdf' is ready.
> 	utilities/punctcheck.sh
> 	utilities/cleverefcheck.sh
> 
> 	real    1m47.823s
> 	user    1m45.715s
> 	sys     0m1.226s
> 
> Another "make clean" and:
> 
> 	$ time make -j32
> 	[ . . . ]
> 	'perfbook.pdf' is ready.
> 	utilities/punctcheck.sh
> 	utilities/cleverefcheck.sh
> 
> 	real    1m49.484s
> 	user    1m47.206s
> 	sys     0m1.437s
> 
> So, as one would expect, the sweet spot for -j is when rebuilding
> all the images from scratch or when building multiple PDFs.
> 
> Nice!
> 
> Huh.  It would be good to have a way of diff-ing PDF files.  Then
> a single-threaded-generated PDF could be automatically compared to
> its counterpart from a concurrent build.  But the search engines
> were not kind to me.
> 
> Thoughts?

How about comparing .log files of two builds?

In my trial, "diff -u perfbook-single.log perfbook-multi.log"
yields only a hunk of build time difference as shown below:

    --- perfbook-single.log	2022-01-27 14:30:01.659959433 +0900

    +++ perfbook-multi.log	2022-01-27 14:33:57.556196036 +0900

    @@ -1,4 +1,4 @@

    -This is pdfTeX, Version 3.141592653-2.6-1.40.23 (TeX Live 2021) (preloaded format=pdflatex 2022.1.24)  27 JAN 2022 14:28

    +This is pdfTeX, Version 3.141592653-2.6-1.40.23 (TeX Live 2021) (preloaded format=pdflatex 2022.1.24)  27 JAN 2022 14:32

     entering extended mode

      restricted \write18 enabled.

      %&-line parsing enabled.


Not a direct comparison, but the log has a summary near the
end:

    Here is how much of TeX's memory you used:
     74049 strings out of 479599
     1597759 string characters out of 5876039
     1950680 words of memory out of 5000000
     80683 multiletter control sequences out of 15000+600000
     692091 words of font info for 721 fonts, out of 8000000 for 9000
     1816 hyphenation exceptions out of 8191
     105i,19n,133p,1187b,1660s stack positions out of 5000i,500n,10000p,200000b,80000s

     [long list of referenced font files]

    Output written on perfbook.pdf (638 pages, 8031215 bytes).
    PDF statistics:
     25510 PDF objects out of 26593 (max. 8388607)
     24061 compressed objects within 241 object streams
     7119 named destinations out of 7423 (max. 500000)
     166134 words of extra memory for PDF output out of 184870 (max. 10000000)

I think any visible difference in two PDFs is likely to be
reflected in this summary.

Indirect hints they may be, at least they provide partial
assurance.

        Thanks, Akira

> 
> 							Thanx, Paul
> 
>>         Thanks, Akira
>> --
>>  Makefile              | 6 +++---
>>  appendix/appendix.tex | 8 ++++----
>>  perfbook-lt.tex       | 4 ++--
>>  3 files changed, 9 insertions(+), 9 deletions(-)
>>
[...]

      reply	other threads:[~2022-01-27  6:07 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-27  1:51 [RFT PATCH -perfbook] Enable parallel runs of pdflatex Akira Yokosawa
2022-01-27  4:45 ` Paul E. McKenney
2022-01-27  6:07   ` Akira Yokosawa [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4ba47042-bcfa-7635-956a-0168ad6fa827@gmail.com \
    --to=akiyks@gmail.com \
    --cc=paulmck@kernel.org \
    --cc=perfbook@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.