texlive 2019 中 lua(la)tex 与 pdf(la)tex 速度对比

texlive 2019 中 lua(la)tex 与 pdf(la)tex 速度对比

2020 年更新:这篇文章的 2015 年版本(报告了 6 倍的速度劣势)已经过时了。这是 2020 年的更新版本。

我知道过去几年也有人问过类似的关于 lua*tex 速度的问题。但现在是 2020 年,根据维基百科,lua*tex 是 pdf*tex 的指定继任者。我希望 lua*tex 能成为统治所有 tex 的唯一选择。预计在提供更多功能的同时会略微降低速度。

我的文档并没有真正从使用 lua 中获益。它们只是为了找出切换惩罚是什么。从字体方面来说,

\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}

MacBook Pro 13(2020)的计时是

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

认为 lua*tex 是万能的解决方案似乎还太过分。我是否误解了 lua*tex 作为 pdf*tex 通用后继者的目标?速度劣势是否会大幅减少,还是会保持这种状态?

PS:根据评论,惩罚似乎主要是启动时的固定成本。初始化后,这两个程序似乎运行速度相似。这也表明,更积极的启动缓存可能会加快 lualatex 的速度,从而为永久取代 pdflatex 成为最小公分母铺平道路。

答案1

我认为“哪个更慢”这个问题不仅仅取决于序言。正如您所说,将速度惩罚推迟到实际使用时才实施可能是有意义的。

这个答案只是一个部分答案在我的范围和兴趣之内,因此您可能需要进一步输入有关示例序言中的“因素 6 速度惩罚”。

在以下示例中,luatex 的速度提高了三倍。这是 @percusse 的回答,发布于pgfplots:根据 y 值为 3D 冲浪图着色(唯一的修改是我在数学表达式中添加了一个缺失的圆括号):

\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.5*x*y)*4*cos(deg(5*x)) * sin(deg(12*y)) + 10*cos(deg(0.5*x*y))};
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

pdftex 和 luatex 的结果相同,但(在我的旧系统上),pdftex 需要 65 秒来编译图片,而 luatex 需要 21 秒(3 倍)。

类似这样的优化可能会陆续推出。如果将 PGF 后端引擎的某些部分移植到luatex,示例的运行时间会大大加快 - luatex 运行时间的其余部分则归因于普通的旧 TeX 代码,这会耗费时间。

因此,我的部分答案是“如果你利用pgfplotslualatex 在 texlive 2015 中提供更快的速度”。


对于那些希望从改进中受益的人来说,有一些细节:该示例受益于 lua,因为compat=1.12(或更新版本)启用了特殊的lua backend;部分重新实现了许多昂贵的子操作lua

lua backend是一个部分的实现。如果某些输入选项不可用,则文件的.log文件将始终指示它已恢复到 TeX 实现(以及原因)。


我还想到了其他一些事情:有些软件包对于 pdftex 来说根本就不可用:我想到了 PGF 这个出色的图形绘制库。这与问题(更关心速度)没有太大关系,但仍然:luatex 在为最终用户带来好处方面留下了它的“信息”。

答案2

为了进行比较,在 ConTeXt 中惩罚是类似的。

测试文件(13页)

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

系统详细信息

带有独立 ConTeXt 的 Macbook Pro。

LuaTeX

时间上下文--noconsole--runs = 1 test.tex
0.96s 用户 0.08s 系统 97% CPU 1.069 总计

LuaTeXJIT

上下文 --jit --noconsole --runs=1 test.tex
1.09s 用户 0.10s 系统 93% CPU 1.281 总计

編輯

时间 texexec --noconsole --runs=1 测试
0.40s 用户 0.13s 系统 83% CPU 0.640 总计

压力测试

如果我将副本数改为 5000,即

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

共有 1250 页,时间如下:

pdftex:5.30s 用户 0.19s 系统 99% cpu 5.530 总计
luatex:26.75s 用户 0.60s 系统 99% cpu 27.518 总计
luatexjit:17.95s 用户 0.35s 系统 99% cpu 18.370 总计

请注意,这不是苹果与苹果的比较,因为 ConTeXt MkII(pdftex)使用 Type 1 Latin Modern 作为默认字体,而 ConTeXt MkIV(luatex)使用 OpenType Latin Modern。

处理时间摘要

  • pdftex:4.5毫秒/页
  • luatex:20ms/页(速度减慢 5 倍)
  • luatexjit:14.5 毫秒/页(速度减慢 3 倍)

请注意,对于小文件,启动时间决定了运行时间。

答案3

就我而言,速度差异完全归因于微型包。

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

显示速度差异为 3 倍。我的文档(可能是表格)的某些其他功能又使速度恶化了 2 倍,总共减慢了 6 倍。

谢谢,daleif。

答案4

我刚刚在 pdflatex (3.14159265-2.6-1.40.17 TL 2016) 和 lualatex (0.95.0; TL 2016) 上运行了我的教科书 (700 页,思考世间万物;回忆录类)。lualatex 的 (巨大) 功劳在于,现在速度差异小了很多:

pdflatex,TL2016:11秒
lualatex,TL2016:16秒

TL2017 两次都提高了约 0.5 秒:
pdflatex = 3.14159265-2.6-1.40.18
lualatex = 1.0.4

这种差异似乎是可以接受的。我们还没有到停止使用 pdflatex 的地步,但是我们已经在寻找 pdflatex 的通用替代品了。谢谢大家。

问候,/iaw

相关内容