状态:到目前为止,最佳答案的程序执行时间是原始程序的 33%!但可能还有其他方法可以优化它。
Lua 目前是最快的脚本语言,但是 Lua 在一些针对 C/C++ 的基准测试中得分非常低。
其中之一是 mandelbrot 测试(生成 Mandelbrot 设置便携式位图文件 N=16,000),它的得分是可怕的 1:109(多核)或 1:28(单核)
由于速度的 Delta 非常大,因此这是一个很好的优化候选者。另外我敢肯定,那些知道 Mike Pall 是谁的人可能会认为不可能进一步优化这个,但这是明显错误的。任何做过优化的人都知道,总是有可能做得更好。此外,我确实设法通过一些调整获得了一些额外的性能,所以我知道它是可能的 :)
-- The Computer Language Shootout
-- http://shootout.alioth.debian.org/
-- contributed by Mike Pall
local width = tonumber(arg and arg[1]) or 100
local height, wscale = width, 2/width
local m, limit2 = 50, 4.0
local write, char = io.write, string.char
write("P4\n", width, " ", height, "\n")
for y=0,height-1 do
local Ci = 2*y / height - 1
for xb=0,width-1,8 do
local bits = 0
local xbb = xb+7
for x=xb,xbb < width and xbb or width-1 do
bits = bits + bits
local Zr, Zi, Zrq, Ziq = 0.0, 0.0, 0.0, 0.0
local Cr = x * wscale - 1.5
for i=1,m do
local Zri = Zr*Zi
Zr = Zrq - Ziq + Cr
Zi = Zri + Zri + Ci
Zrq = Zr*Zr
Ziq = Zi*Zi
if Zrq + Ziq > limit2 then
bits = bits + 1
break
end
end
end
if xbb >= width then
for x=width,xbb do bits = bits + bits + 1 end
end
write(char(255-bits))
end
end
那么如何优化它(当然,与任何优化一样,您必须测量您的实现以确保它更快)。并且你不能为此改变 Lua 的 C 核心,或者使用 LuaJit,它是关于寻找优化 Lua 弱点之一的方法。
编辑:为此设置赏金以使挑战更有趣。