27

UPDATE 2020: The 2015 version of this post (reporting a factor 6 speed disadvantage) was outdated. This is an updated version to 2020.

I know similar questions have been asked about lua*tex speed in years past. But now it's 2020, and according to wikipedia, lua*tex is the designated successor for pdf*tex. my hopes for lua*tex is that it becomes the one tex to rule them all. A modest speed penalty for more capabilities is expected.

My documents don't really gain from the use of lua. They are just for finding out what the switch penalty is. Font-wise,

\documentclass{article}

\usepackage[T1]{fontenc} \usepackage{textcomp} \usepackage{charter} \usepackage[mdbch,ttscaled=true]{mathdesign} \usepackage{microtype}

\usepackage{lipsum}

\begin{document}

\lipsum \lipsum \lipsum

\lipsum \lipsum \lipsum

\end{document}

The timing on a macbook pro 13 (2020) is

lualatex test  1.27s user 0.10s system 98% cpu 1.378 total
pdflatex test  0.68s user 0.05s system 98% cpu 0.734 total

It still seem too heavy to suggest that lua*tex will be the one-size-fits-all solution. do I misunderstand the goal of lua*tex as a universal successor to pdf*tex? is the speed disadvantage likely to diminish dramatically or will it stay this way?

PS: Per comment, the penalty seems to be mostly a fixed cost at startup. Once initialized, the two programs seem to run similarly fast. it also suggests that more aggressive startup caching could potentially speed up lualatex in order to pave the way for replacing pdflatex permanently as the least common denominator.

ivo Welch
  • 3,766
  • 6
    Remove microtype. It is really slow on lualatex for some reason. You can add it again at the final stages of compiling you doc – daleif Aug 15 '15 at 06:52
  • 3
    For the sake of making comparisons, it may be useful to use the fontspec approach to loading text and math fonts when compiling under LuaLaTeX. – Mico Aug 15 '15 at 07:59
  • 1
    On a 255 page, fairly complex, document: pdflatex 11.6 real (of which 6.2 user), 31.5 lualatex with microtype, 22.2 lualatex without microtype (next to no difference between real and user). – JPi Aug 15 '15 at 14:29
  • Look at Ulrike's great tip here for further speed-up for LuaTeX why-is-lualatex-so-slow-and-is-there-anything-i-can-do-about-it – percusse Aug 15 '15 at 14:34
  • 1
    I looked at ulrike's nice comment, but it did not apply in my situation. however, deleif was right on the money---my own document slowdown was all due to microtype. removing it makes lualatex roughly equally fast. alas, I thought that microtype (introduced for pdftex) was highly recommended for nicer-looking documents and in very wide use. is speeding up microtype on luatex's fix list? (I wonder where JPi is bitten on still seeing a factor 2 slowdown after after removing microtype.) – ivo Welch Aug 15 '15 at 15:27
  • Without some sensible test document it will be difficult to analyze what happens, who is responsable and if something (and what) could be done about it. – Ulrike Fischer Aug 15 '15 at 16:27
  • We had play with it yesterday in chat with yo's thesis. Same observation. Took 3 times as long with microtype and lualatex. We even tested with just the introduction which should not be a complicated text. Same result. – daleif Aug 15 '15 at 17:13
  • @daleif: I don't doubt that you did see the speed differences. But a discussion in chat about a private thesis doesn't help to solve the problem. One needs a public document that everyone interested in the problem can use to test around. Perhaps is it a bug like the microtype/xfrac problem some years ago. – Ulrike Fischer Aug 15 '15 at 17:41
  • I'll have a closer look at parts of yo's doc on Monday to see if we can make a sensible mwe from it. – daleif Aug 15 '15 at 17:42
  • The speed differences don't ever disappear for me: see the example answer below. – JPi Aug 16 '15 at 02:45
  • I think it is somewhat premature to announce the coronation. LuaTeX is currently in the development phase. It is not considered mature or production-ready, even though it is successfully used in production. There are known bugs, some quite nasty. (I consider its handling of file streams in the 'nasty' category as it would exhaust the system's resources were it not for the OS stepping in to limit it.) Yes, it has many nice features. But they are bought at a cost and LuaTeX is not a panacea for all its appeal. – cfr Aug 16 '15 at 03:12
  • 11
    microtype is indeed slower with luatex than with pdftex. This is mostly because of certain operations that have to be applied to all glyphs in the font (and Opentype fonts can be huge!), These loops are carried out in tex while it would be much faster using luatex techniques. This will be fixed in the next version of microtype (due October), which should at least resolve the microtype bottleneck. – Robert Aug 16 '15 at 03:31
  • @Robert: Why does microtype loops over 1114111 in \MT@do@font when used with lualatex but not with xelatex? Both are using open type fonts, so the font type can't be the only reason. – Ulrike Fischer Sep 02 '15 at 14:19
  • I don't see the factor of 1.5x with Latex 2020. It's still more like 5 or 6 for me, and as high as 11x in a test I just ran (37.8s Lualatex, 3.385s Pdflatex) (34 pages of output, all text, lots of superscripts). I switched to lualatex a couple of years ago, so I I'm willing to tolerate it, but it's still quite slow compared to pdflatex. – dedded Oct 27 '20 at 22:53
  • @dedded: Do you have an example document that illustrates the 11x issue? Seems interesting – ShreevatsaR Oct 28 '20 at 01:29
  • @ShreevatsaR, well, yes I do. But it's non-trivial. The text itself is the first 24 chapters of Genesis. There's quite a bit of formatting in the verse numbers (I try to detect if the next character is 'A' and kern more closely if so, also behaves differently at the start of a paragraph. It uses microtype, but removing that didn't speed up lualatex much. – dedded Oct 28 '20 at 02:31
  • I'm also likely asking lualatex to do more with fonts (main reason I switched to lualatex in the first place). So it's not entirely apples-to-apples. – dedded Oct 28 '20 at 02:35
  • To the OP: Try your \lipsum \lipsum \lipsum test with a lot more of them: with a few hundreds, I get numbers like 18.38s with pdflatex versus 19.03s with lualatex, which is only a 4% difference. And if I comment out \usepackage{microtype}, then lualatex actually runs faster than pdflatex. Of course, any package can choose to do different things for different engines, so it could go either way. – ShreevatsaR Oct 29 '20 at 07:55

5 Answers5

14

I believe the question "which is slower" depends on more than just the preamble. As you noted, it may make sense to postpone speed penalties until they are actually used.

This answer is just a partial answer within my scope and interest, so you may need further input regarding the "factor 6 speed penalty" for your example preamble.

In the following example, luatex is three times faster. It is the answer of @percusse posted at pgfplots: Color a 3D surf plot based on y-value (the only modification is that I added a missing round brace in the math expression):

\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}

\pgfplotsset{compat=1.12, colormap/viridis/.style={ colormap={viridis}{ rgb=(0.26700401, 0.00487433, 0.32941519) rgb=(0.26851048, 0.00960483, 0.33542652) rgb=(0.26994384, 0.01462494, 0.34137895) rgb=(0.27130489, 0.01994186, 0.34726862) rgb=(0.27259384, 0.02556309, 0.35309303) rgb=(0.27380934, 0.03149748, 0.35885256) rgb=(0.27495242, 0.03775181, 0.36454323) rgb=(0.27602238, 0.04416723, 0.37016418) rgb=(0.2770184 , 0.05034437, 0.37571452) rgb=(0.27794143, 0.05632444, 0.38119074) rgb=(0.27879067, 0.06214536, 0.38659204) rgb=(0.2795655 , 0.06783587, 0.39191723) rgb=(0.28026658, 0.07341724, 0.39716349) rgb=(0.28089358, 0.07890703, 0.40232944) rgb=(0.28144581, 0.0843197 , 0.40741404) rgb=(0.28192358, 0.08966622, 0.41241521) rgb=(0.28232739, 0.09495545, 0.41733086) rgb=(0.28265633, 0.10019576, 0.42216032) rgb=(0.28291049, 0.10539345, 0.42690202) rgb=(0.28309095, 0.11055307, 0.43155375) rgb=(0.28319704, 0.11567966, 0.43611482) rgb=(0.28322882, 0.12077701, 0.44058404) rgb=(0.28318684, 0.12584799, 0.44496 ) rgb=(0.283072 , 0.13089477, 0.44924127) rgb=(0.28288389, 0.13592005, 0.45342734) rgb=(0.28262297, 0.14092556, 0.45751726) rgb=(0.28229037, 0.14591233, 0.46150995) rgb=(0.28188676, 0.15088147, 0.46540474) rgb=(0.28141228, 0.15583425, 0.46920128) rgb=(0.28086773, 0.16077132, 0.47289909) rgb=(0.28025468, 0.16569272, 0.47649762) rgb=(0.27957399, 0.17059884, 0.47999675) rgb=(0.27882618, 0.1754902 , 0.48339654) rgb=(0.27801236, 0.18036684, 0.48669702) rgb=(0.27713437, 0.18522836, 0.48989831) rgb=(0.27619376, 0.19007447, 0.49300074) rgb=(0.27519116, 0.1949054 , 0.49600488) rgb=(0.27412802, 0.19972086, 0.49891131) rgb=(0.27300596, 0.20452049, 0.50172076) rgb=(0.27182812, 0.20930306, 0.50443413) rgb=(0.27059473, 0.21406899, 0.50705243) rgb=(0.26930756, 0.21881782, 0.50957678) rgb=(0.26796846, 0.22354911, 0.5120084 ) rgb=(0.26657984, 0.2282621 , 0.5143487 ) rgb=(0.2651445 , 0.23295593, 0.5165993 ) rgb=(0.2636632 , 0.23763078, 0.51876163) rgb=(0.26213801, 0.24228619, 0.52083736) rgb=(0.26057103, 0.2469217 , 0.52282822) rgb=(0.25896451, 0.25153685, 0.52473609) rgb=(0.25732244, 0.2561304 , 0.52656332) rgb=(0.25564519, 0.26070284, 0.52831152) rgb=(0.25393498, 0.26525384, 0.52998273) rgb=(0.25219404, 0.26978306, 0.53157905) rgb=(0.25042462, 0.27429024, 0.53310261) rgb=(0.24862899, 0.27877509, 0.53455561) rgb=(0.2468114 , 0.28323662, 0.53594093) rgb=(0.24497208, 0.28767547, 0.53726018) rgb=(0.24311324, 0.29209154, 0.53851561) rgb=(0.24123708, 0.29648471, 0.53970946) rgb=(0.23934575, 0.30085494, 0.54084398) rgb=(0.23744138, 0.30520222, 0.5419214 ) rgb=(0.23552606, 0.30952657, 0.54294396) rgb=(0.23360277, 0.31382773, 0.54391424) rgb=(0.2316735 , 0.3181058 , 0.54483444) rgb=(0.22973926, 0.32236127, 0.54570633) rgb=(0.22780192, 0.32659432, 0.546532 ) rgb=(0.2258633 , 0.33080515, 0.54731353) rgb=(0.22392515, 0.334994 , 0.54805291) rgb=(0.22198915, 0.33916114, 0.54875211) rgb=(0.22005691, 0.34330688, 0.54941304) rgb=(0.21812995, 0.34743154, 0.55003755) rgb=(0.21620971, 0.35153548, 0.55062743) rgb=(0.21429757, 0.35561907, 0.5511844 ) rgb=(0.21239477, 0.35968273, 0.55171011) rgb=(0.2105031 , 0.36372671, 0.55220646) rgb=(0.20862342, 0.36775151, 0.55267486) rgb=(0.20675628, 0.37175775, 0.55311653) rgb=(0.20490257, 0.37574589, 0.55353282) rgb=(0.20306309, 0.37971644, 0.55392505) rgb=(0.20123854, 0.38366989, 0.55429441) rgb=(0.1994295 , 0.38760678, 0.55464205) rgb=(0.1976365 , 0.39152762, 0.55496905) rgb=(0.19585993, 0.39543297, 0.55527637) rgb=(0.19410009, 0.39932336, 0.55556494) rgb=(0.19235719, 0.40319934, 0.55583559) rgb=(0.19063135, 0.40706148, 0.55608907) rgb=(0.18892259, 0.41091033, 0.55632606) rgb=(0.18723083, 0.41474645, 0.55654717) rgb=(0.18555593, 0.4185704 , 0.55675292) rgb=(0.18389763, 0.42238275, 0.55694377) rgb=(0.18225561, 0.42618405, 0.5571201 ) rgb=(0.18062949, 0.42997486, 0.55728221) rgb=(0.17901879, 0.43375572, 0.55743035) rgb=(0.17742298, 0.4375272 , 0.55756466) rgb=(0.17584148, 0.44128981, 0.55768526) rgb=(0.17427363, 0.4450441 , 0.55779216) rgb=(0.17271876, 0.4487906 , 0.55788532) rgb=(0.17117615, 0.4525298 , 0.55796464) rgb=(0.16964573, 0.45626209, 0.55803034) rgb=(0.16812641, 0.45998802, 0.55808199) rgb=(0.1666171 , 0.46370813, 0.55811913) rgb=(0.16511703, 0.4674229 , 0.55814141) rgb=(0.16362543, 0.47113278, 0.55814842) rgb=(0.16214155, 0.47483821, 0.55813967) rgb=(0.16066467, 0.47853961, 0.55811466) rgb=(0.15919413, 0.4822374 , 0.5580728 ) rgb=(0.15772933, 0.48593197, 0.55801347) rgb=(0.15626973, 0.4896237 , 0.557936 ) rgb=(0.15481488, 0.49331293, 0.55783967) rgb=(0.15336445, 0.49700003, 0.55772371) rgb=(0.1519182 , 0.50068529, 0.55758733) rgb=(0.15047605, 0.50436904, 0.55742968) rgb=(0.14903918, 0.50805136, 0.5572505 ) rgb=(0.14760731, 0.51173263, 0.55704861) rgb=(0.14618026, 0.51541316, 0.55682271) rgb=(0.14475863, 0.51909319, 0.55657181) rgb=(0.14334327, 0.52277292, 0.55629491) rgb=(0.14193527, 0.52645254, 0.55599097) rgb=(0.14053599, 0.53013219, 0.55565893) rgb=(0.13914708, 0.53381201, 0.55529773) rgb=(0.13777048, 0.53749213, 0.55490625) rgb=(0.1364085 , 0.54117264, 0.55448339) rgb=(0.13506561, 0.54485335, 0.55402906) rgb=(0.13374299, 0.54853458, 0.55354108) rgb=(0.13244401, 0.55221637, 0.55301828) rgb=(0.13117249, 0.55589872, 0.55245948) rgb=(0.1299327 , 0.55958162, 0.55186354) rgb=(0.12872938, 0.56326503, 0.55122927) rgb=(0.12756771, 0.56694891, 0.55055551) rgb=(0.12645338, 0.57063316, 0.5498411 ) rgb=(0.12539383, 0.57431754, 0.54908564) rgb=(0.12439474, 0.57800205, 0.5482874 ) rgb=(0.12346281, 0.58168661, 0.54744498) rgb=(0.12260562, 0.58537105, 0.54655722) rgb=(0.12183122, 0.58905521, 0.54562298) rgb=(0.12114807, 0.59273889, 0.54464114) rgb=(0.12056501, 0.59642187, 0.54361058) rgb=(0.12009154, 0.60010387, 0.54253043) rgb=(0.11973756, 0.60378459, 0.54139999) rgb=(0.11951163, 0.60746388, 0.54021751) rgb=(0.11942341, 0.61114146, 0.53898192) rgb=(0.11948255, 0.61481702, 0.53769219) rgb=(0.11969858, 0.61849025, 0.53634733) rgb=(0.12008079, 0.62216081, 0.53494633) rgb=(0.12063824, 0.62582833, 0.53348834) rgb=(0.12137972, 0.62949242, 0.53197275) rgb=(0.12231244, 0.63315277, 0.53039808) rgb=(0.12344358, 0.63680899, 0.52876343) rgb=(0.12477953, 0.64046069, 0.52706792) rgb=(0.12632581, 0.64410744, 0.52531069) rgb=(0.12808703, 0.64774881, 0.52349092) rgb=(0.13006688, 0.65138436, 0.52160791) rgb=(0.13226797, 0.65501363, 0.51966086) rgb=(0.13469183, 0.65863619, 0.5176488 ) rgb=(0.13733921, 0.66225157, 0.51557101) rgb=(0.14020991, 0.66585927, 0.5134268 ) rgb=(0.14330291, 0.66945881, 0.51121549) rgb=(0.1466164 , 0.67304968, 0.50893644) rgb=(0.15014782, 0.67663139, 0.5065889 ) rgb=(0.15389405, 0.68020343, 0.50417217) rgb=(0.15785146, 0.68376525, 0.50168574) rgb=(0.16201598, 0.68731632, 0.49912906) rgb=(0.1663832 , 0.69085611, 0.49650163) rgb=(0.1709484 , 0.69438405, 0.49380294) rgb=(0.17570671, 0.6978996 , 0.49103252) rgb=(0.18065314, 0.70140222, 0.48818938) rgb=(0.18578266, 0.70489133, 0.48527326) rgb=(0.19109018, 0.70836635, 0.48228395) rgb=(0.19657063, 0.71182668, 0.47922108) rgb=(0.20221902, 0.71527175, 0.47608431) rgb=(0.20803045, 0.71870095, 0.4728733 ) rgb=(0.21400015, 0.72211371, 0.46958774) rgb=(0.22012381, 0.72550945, 0.46622638) rgb=(0.2263969 , 0.72888753, 0.46278934) rgb=(0.23281498, 0.73224735, 0.45927675) rgb=(0.2393739 , 0.73558828, 0.45568838) rgb=(0.24606968, 0.73890972, 0.45202405) rgb=(0.25289851, 0.74221104, 0.44828355) rgb=(0.25985676, 0.74549162, 0.44446673) rgb=(0.26694127, 0.74875084, 0.44057284) rgb=(0.27414922, 0.75198807, 0.4366009 ) rgb=(0.28147681, 0.75520266, 0.43255207) rgb=(0.28892102, 0.75839399, 0.42842626) rgb=(0.29647899, 0.76156142, 0.42422341) rgb=(0.30414796, 0.76470433, 0.41994346) rgb=(0.31192534, 0.76782207, 0.41558638) rgb=(0.3198086 , 0.77091403, 0.41115215) rgb=(0.3277958 , 0.77397953, 0.40664011) rgb=(0.33588539, 0.7770179 , 0.40204917) rgb=(0.34407411, 0.78002855, 0.39738103) rgb=(0.35235985, 0.78301086, 0.39263579) rgb=(0.36074053, 0.78596419, 0.38781353) rgb=(0.3692142 , 0.78888793, 0.38291438) rgb=(0.37777892, 0.79178146, 0.3779385 ) rgb=(0.38643282, 0.79464415, 0.37288606) rgb=(0.39517408, 0.79747541, 0.36775726) rgb=(0.40400101, 0.80027461, 0.36255223) rgb=(0.4129135 , 0.80304099, 0.35726893) rgb=(0.42190813, 0.80577412, 0.35191009) rgb=(0.43098317, 0.80847343, 0.34647607) rgb=(0.44013691, 0.81113836, 0.3409673 ) rgb=(0.44936763, 0.81376835, 0.33538426) rgb=(0.45867362, 0.81636288, 0.32972749) rgb=(0.46805314, 0.81892143, 0.32399761) rgb=(0.47750446, 0.82144351, 0.31819529) rgb=(0.4870258 , 0.82392862, 0.31232133) rgb=(0.49661536, 0.82637633, 0.30637661) rgb=(0.5062713 , 0.82878621, 0.30036211) rgb=(0.51599182, 0.83115784, 0.29427888) rgb=(0.52577622, 0.83349064, 0.2881265 ) rgb=(0.5356211 , 0.83578452, 0.28190832) rgb=(0.5455244 , 0.83803918, 0.27562602) rgb=(0.55548397, 0.84025437, 0.26928147) rgb=(0.5654976 , 0.8424299 , 0.26287683) rgb=(0.57556297, 0.84456561, 0.25641457) rgb=(0.58567772, 0.84666139, 0.24989748) rgb=(0.59583934, 0.84871722, 0.24332878) rgb=(0.60604528, 0.8507331 , 0.23671214) rgb=(0.61629283, 0.85270912, 0.23005179) rgb=(0.62657923, 0.85464543, 0.22335258) rgb=(0.63690157, 0.85654226, 0.21662012) rgb=(0.64725685, 0.85839991, 0.20986086) rgb=(0.65764197, 0.86021878, 0.20308229) rgb=(0.66805369, 0.86199932, 0.19629307) rgb=(0.67848868, 0.86374211, 0.18950326) rgb=(0.68894351, 0.86544779, 0.18272455) rgb=(0.69941463, 0.86711711, 0.17597055) rgb=(0.70989842, 0.86875092, 0.16925712) rgb=(0.72039115, 0.87035015, 0.16260273) rgb=(0.73088902, 0.87191584, 0.15602894) rgb=(0.74138803, 0.87344918, 0.14956101) rgb=(0.75188414, 0.87495143, 0.14322828) rgb=(0.76237342, 0.87642392, 0.13706449) rgb=(0.77285183, 0.87786808, 0.13110864) rgb=(0.78331535, 0.87928545, 0.12540538) rgb=(0.79375994, 0.88067763, 0.12000532) rgb=(0.80418159, 0.88204632, 0.11496505) rgb=(0.81457634, 0.88339329, 0.11034678) rgb=(0.82494028, 0.88472036, 0.10621724) rgb=(0.83526959, 0.88602943, 0.1026459 ) rgb=(0.84556056, 0.88732243, 0.09970219) rgb=(0.8558096 , 0.88860134, 0.09745186) rgb=(0.86601325, 0.88986815, 0.09595277) rgb=(0.87616824, 0.89112487, 0.09525046) rgb=(0.88627146, 0.89237353, 0.09537439) rgb=(0.89632002, 0.89361614, 0.09633538) rgb=(0.90631121, 0.89485467, 0.09812496) rgb=(0.91624212, 0.89609127, 0.1007168 ) rgb=(0.92610579, 0.89732977, 0.10407067) rgb=(0.93590444, 0.8985704 , 0.10813094) rgb=(0.94563626, 0.899815 , 0.11283773) rgb=(0.95529972, 0.90106534, 0.11812832) rgb=(0.96489353, 0.90232311, 0.12394051) rgb=(0.97441665, 0.90358991, 0.13021494) rgb=(0.98386829, 0.90486726, 0.13689671) rgb=(0.99324789, 0.90615657, 0.1439362 ) } } } \begin{document} \begin{tikzpicture} \begin{axis}[domain=0:pi,samples=81,samples y=81,colormap/viridis,view={20}{55},hide axis] \addplot3 [surf, point meta=y] {exp(-0.5xy)4cos(deg(5x)) sin(deg(12y)) + 10cos(deg(0.5xy))}; \end{axis} \end{tikzpicture} \end{document}

enter image description here

The outcome is the same for both pdftex and luatex, but (on my ancient system), pdftex requires 65 seconds to compile the picture whereas luatex requires 21 seconds (a factor of 3).

More optimizations of that sort are likely to follow. If some parts of the PGF backend engine where ported to luatex, the example's runtime would be considerably faster - the remaining part of the luatex runtime is due to plain old TeX code which takes its time.

So, my partial answer is "If you make use of pgfplots, lualatex can provide much more speed in texlive 2015".


Some details for those who want to benefit from the improvements: the example benefits from lua because compat=1.12 (or newer) enables a special lua backend; a partial reimplementation of many expensive sub-operations in lua.

The lua backend is a partial implementation. If it is unavailable for some input option, the file's .log file will always indicate that it fell back to the TeX implementation (and why).


Something else occurs to me: there are packages which are plain unavailable for pdftex: I am thinking of the excellent graph drawing library of PGF. This is not quite related to the question (which is more about speed), but still: luatex has left its "message" when it comes to advantages for end users.

  • 2
    I can confirm the dramatic difference in compilation speeds for my system and TeX distribution (early-2014 MacBookPro, 2.8GHz core i7, 8GByte RAM; MacOSX 10.10.4 "Yosemite", MacTeX2015): 28-29 seconds under pdfLaTeX, 8-9 seconds under LuaLaTeX. The factor-3 difference persists on this faster machine... – Mico Aug 15 '15 at 07:38
  • 1
    This may be a nice advantage, but remember that plots are compiled only a few times to then be included in the main document as a seperate graphic file. For the actual workflow, LuaTeX still seems rather inhibiting. – 1010011010 Aug 15 '15 at 08:42
  • 2
    Agreed. However, even if plots turn out to be "special", it still makes sense to choose luatex for such applications. – Christian Feuersänger Aug 15 '15 at 12:28
  • I think this answer is off-topic. The question was about luatex being slow on simple documents; the answer is about luatex being faster for complex tasks (that are perhaps better done outside of TeX). – jch Oct 25 '20 at 18:19
11

For comparison, in ConTeXt the penalty is similar.

Test file (13 pages)

\starttext
\dorecurse{50}{\input knuth \par}
\stoptext

System details

Macbook Pro with ConTeXt standalone.

LuaTeX

time context --noconsole --runs=1 test.tex
0.96s user 0.08s system 97% cpu 1.069 total

LuaTeXJIT

context --jit --noconsole --runs=1 test.tex
1.09s user 0.10s system 93% cpu 1.281 total

Pdftex

time texexec --noconsole --runs=1 test
0.40s user 0.13s system 83% cpu 0.640 total

Stress testing

If I change the number of copies to 5000, i.e.,

\starttext
\dorecurse{5000}{\input knuth \par}
\stoptext

gives 1250 pages and the timings are:

pdftex: 5.30s user 0.19s system 99% cpu 5.530 total
luatex: 26.75s user 0.60s system 99% cpu 27.518 total
luatexjit: 17.95s user 0.35s system 99% cpu 18.370 total

Note that this is not an apples to apples comparison because ConTeXt MkII (pdftex) uses Type 1 Latin Modern as default font and ConTeXt MkIV (luatex) uses OpenType Latin Modern.

Summary of processing time

  • pdftex: 4.5ms/page
  • luatex: 20ms/page (a factor of 5 slowdown)
  • luatexjit: 14.5 ms/page (a factor of 3 slowdown)

Note that, for small files, the startup time dominates the runtime.

Aditya
  • 62,301
6

In my case, the speed difference was entirely attributable to the microtype package.

documentclass{article}
\usepackage{lipsum}
\usepackage{charter}
\usepackage{microtype}
\begin{document}
  \lipsum
\end{document}

shows a factor 3 speed difference. some other features of my document (probably tabulars) managed to worsen this by a further factor 2 for a total slowdown of factor 6.

thanks, daleif.

ivo Welch
  • 3,766
  • 1
    microtype package hacks into the paragraph building mechanism both in PDFTeX and LuaTeX. I cannot see yet any easy way to bound it in terms of big-O notation, however, we can imagine that the more micro typographical properties it is validating the slower the compilation would get. So that is simply due to the increased complexity. From microtype manual Use settings that match your font. There is more to microtypography than just including the package. You can maybe test with turning of the tracking and so on – percusse Aug 16 '15 at 00:10
  • in this simple test case, I think both lua*tex and pdf*tex are using the same exact font without tuning and presumably are outputting the same thing (?!). it is simply that lua takes three times as long to create the same output. – ivo Welch Aug 16 '15 at 05:19
  • 1
    @percusse: microtype together with lualatex. maps over all unicode values for some setups and so does loops of the length of 1114111. The documentation says "there ought to be a better way!". Try out \makeatletter \def\MT@max@slot {1000 }\makeatother directly after loading microtype and you will see that it is much faster. – Ulrike Fischer Sep 02 '15 at 14:16
  • @UlrikeFischer: Could you please explain a bit more what happens if that value gets changed? Why is the standard value 1114111?

    I would consider using your code in my document but I also would like to understand a bit more of it. I tried it with the following results: microtype (std) : 1m29s - 327pages --- microtype (MT@max@slot - 1000) : 1m7s - 327pages --- no microtype : 1m5s - 328pages

    – aronadaal May 13 '16 at 08:15
  • 1
    @aronadaal: 1114111 is (imho) the maximum number of unicode slots. microtype simply loops over everything. If you want to change this you should use a value that includes "your" glyphs, my choice of 1000 was arbitrary for the test. There has been a microtype update some days ago and I did not check if it changed something in this page of the code. – Ulrike Fischer May 13 '16 at 08:22
  • @UlrikeFischer: Thanks for explanation. How did you determine that 1000 was arbitrary? Can microtype give you some hints about that value? So if my understanding is correct, only the 'scanned' glyphs (inside the value range) will be recognized for the rearrangement. All other glyphs will be treated as usual. – aronadaal May 13 '16 at 09:21
  • @aronadaal What do you mean by "how did you determine"? I simply choose a smaller value to test if it changes the speed. It could also have been 43 or 618. – Ulrike Fischer May 13 '16 at 09:26
  • @UlrikeFischer: Well I'm still not sure, if I completely understood the purpose of that value. You said the value contains my glyphs that are used. So, what happens if I set the value size too small? Will microtype still work as proposed? Setting it too large or to standard value means that the compilation run takes 20% more time. You choose 1000 and got a much better performance. But is the generated document still the same like it was before? So that's why I'm asking how to choose the correct value size ;) – aronadaal May 13 '16 at 10:15
  • @aronadaal: Find it out. Make tests with various glyphs/texts and change the value. I only tried to find the bottleneck. – Ulrike Fischer May 13 '16 at 11:14
  • @aronadaal \MT@max@slot is an internal constant that should not be changed when typesetting a real document. Ulrike only suggested to change it for testing purposes. Anyway, the current version (2.6a) should be much faster as it uses lua to loop over the glyphs (and changing \MT@max@slot shouldn't make any difference here). – Robert May 18 '16 at 18:33
  • @Robert Thanks for your reply and the hint to your current version. I'll give it a try once texlive 2016 is available. – aronadaal May 20 '16 at 07:42
  • @UlrikeFischer Can the results of such loops be cached by precompiling the preamble? – Blaisorblade Jul 26 '17 at 23:41
  • @Blaisorblade: As Robert wrote microtype has changed its code and so this loop is no longer a bottleneck. – Ulrike Fischer Jul 27 '17 at 06:51
3

The LaTeX file generated by this program runs in 4.3 seconds in pdflatex and 13.1 seconds in lualatex.

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main()
 {
  FILE *fl=fopen("try.tex","w");
  long x,y;

  fprintf(fl,"\\documentclass{amsart}\n\\usepackage{mathpazo}\n\\usepackage{bm}\n\\usepackage{lipsum}\n\\newcommand{\\bld}[1]{\\boldsymbol{#1}}\n\\begin{document}\n");
  for(x=0; x<10000; x++)
   {
    fprintf(fl,"\\lipsum[%ld]\n",x % 150);
    fprintf(fl,"\\begin{gather}\n");
    fprintf(fl,"\\bld y = ");
    fprintf(fl,"\\sqrt{\\log z}\n");
    fprintf(fl,"\\end{gather}\n");
   }
  fprintf(fl,"\\end{document}\n");
  fclose(fl);
 }

which produces

\documentclass{article}
\usepackage{lipsum}
\newcommand{\bld}[1]{#1}
\begin{document}
\lipsum[0]
\begin{equation}
\bld y = \sqrt{\log z}
\end{equation}
\lipsum[1]
\begin{equation}
\bld y = \sqrt{\log z}
\end{equation}
\lipsum[2]
\begin{equation}
\bld y = \sqrt{\log z}
\end{equation}
\lipsum[3]
\begin{equation}
\bld y = \sqrt{\log z}
\end{equation}
\lipsum[4]
\begin{equation}
\bld y = \sqrt{\log z}
\end{equation}
\lipsum[5]
\begin{equation}
\bld y = \sqrt{\log z}
\end{equation}
\lipsum[6]
\begin{equation}
\bld y = \sqrt{\log z}
\end{equation}
\lipsum[7]
\begin{equation}
\bld y = \sqrt{\log z}
\end{equation}
\lipsum[8]
\begin{equation}
\bld y = \sqrt{\log z}
\end{equation}
\lipsum[9]
\begin{equation}
\bld y = \sqrt{\log z}
\end{equation}
\lipsum[10]
\begin{equation}
\bld y = \sqrt{\log z}
\end{equation}
%(many repetitions)
\end{document}
JPi
  • 13,595
  • 1
    The differences persist if all the font stuff and math is removed and the article class is changed to article. Hmmm. – JPi Aug 16 '15 at 02:19
  • Would you mind (re)posting the code as LaTeX-direct, for the benefit of those who don't have a C compiler installed on their system? – Mico Aug 17 '15 at 20:00
  • It's hundreds of pages...... – JPi Aug 17 '15 at 20:03
  • Never mind, then. – Mico Aug 17 '15 at 20:05
  • just added a shortened version – JPi Aug 17 '15 at 20:08
  • @JPi you can do that mwe in pure latex using a simple loop. See for example the pgffor package, just wrap it around what ever you need repeated. Also add amssymb which makes loading microtype even worse. – daleif Aug 17 '15 at 21:27
  • true, but I wrote the C program because I thought I'd have to do something complicated to get lualatex to be slow. Unfortunately, that wasn't the case. – JPi Sep 02 '15 at 13:45
3

I just ran my textbook (700 pages, think everything under the sun; memoir class) on both pdflatex (3.14159265-2.6-1.40.17 TL 2016) and lualatex (0.95.0; TL 2016). To lualatex's (huge) credit, the speed difference is much smaller now:

pdflatex, TL2016: 11 seconds
lualatex, TL2016: 16 seconds

TL2017 improves both times by about 0.5 seconds:
pdflatex = 3.14159265-2.6-1.40.18
lualatex = 1.0.4

this difference seems quite acceptable. not yet where we should discontinue pdflatex, but well on the way to a universal replacement for pdflatex. thanks everybody.

regards, /iaw

ivo Welch
  • 3,766