Re: [RFT PATCH -perfbook] Enable parallel runs of pdflatex

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxx>
> ---
> 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.  ;-)

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?

							Thanx, Paul

>         Thanks, Akira
> --
>  Makefile              | 6 +++---
>  appendix/appendix.tex | 8 ++++----
>  perfbook-lt.tex       | 4 ++--
>  3 files changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index 6ee849fd..9946be3a 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -222,14 +222,14 @@ $(PDFTARGETS): %.pdf: %.tex %.bbl
>  $(PDFTARGETS:.pdf=.bbl): %.bbl: %.aux $(BIBSOURCES)
>  	bibtex $(basename $@)
>  
> -$(PDFTARGETS:.pdf=.aux): $(LATEXGENERATED) $(LATEXSOURCES) $(LST_SOURCES)
> +$(PDFTARGETS:.pdf=.aux): %.aux: %.tex $(LATEXGENERATED) $(LST_SOURCES)
>  ifeq ($(NEWTXTEXT),)
>  	$(error Font package 'newtx' not found. See #9 in FAQ-BUILD.txt)
>  endif
>  	sh utilities/runfirstlatex.sh $(basename $@)
>  
> -autodate.tex: perfbook-lt.tex $(LATEXSOURCES) $(BIBSOURCES) \
> -    $(PDFTARGETS_OF_EPS) $(PDFTARGETS_OF_SVG) $(FCVSNIPPETS) $(FCVSNIPPETS_VIA_LTMS) \
> +autodate.tex: $(LATEXSOURCES) $(BIBSOURCES) $(PDFTARGETS_OF_EPS) \
> +    $(PDFTARGETS_OF_SVG) $(FCVSNIPPETS) $(FCVSNIPPETS_VIA_LTMS) \
>      $(GITREFSTAGS) utilities/autodate.sh
>  	sh utilities/autodate.sh
>  
> diff --git a/appendix/appendix.tex b/appendix/appendix.tex
> index f2640157..edcfe7ef 100644
> --- a/appendix/appendix.tex
> +++ b/appendix/appendix.tex
> @@ -2,9 +2,9 @@
>  % mainfile: ../perfbook.tex
>  % SPDX-License-Identifier: CC-BY-SA-3.0
>  
> -\include{appendix/questions/questions}
> -\include{appendix/toyrcu/toyrcu}
> -\include{appendix/whymb/whymemorybarriers}
> -\include{appendix/styleguide/styleguide}
> +\input{appendix/questions/questions}
> +\input{appendix/toyrcu/toyrcu}
> +\input{appendix/whymb/whymemorybarriers}
> +\input{appendix/styleguide/styleguide}
>  \renewcommand{\bottomtitlespace}{.08\textheight}
>  \QuickQuizAnswers
> diff --git a/perfbook-lt.tex b/perfbook-lt.tex
> index 085ce55d..d70dde66 100644
> --- a/perfbook-lt.tex
> +++ b/perfbook-lt.tex
> @@ -667,12 +667,12 @@
>  
>  % Credits
>  \setcounter{secnumdepth}{-1} % surpress section numbering in backmatter
> -\include{ack}
> +\input{ack}
>  
>  % Index if enabled
>  \IfIndexOn{
>  \IfIndexHier{
> -\include{indexsee}
> +\input{indexsee}
>  }{}
>  \phantomsection
>  \IfEbookSize{
> 
> base-commit: f24ccfbd345eab8a70d6c08e71c84f18df46a3a1
> -- 
> 2.17.1
> 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux