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 代码,这会耗费时间。
因此,我的部分答案是“如果你利用pgfplots
,lualatex
能在 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