Статус: Пока лучшая программа ответа выполняется в 33% времени оригинальной программы! Но, вероятно, есть и другие способы его оптимизации.
В настоящее время Lua является самым быстрым языком сценариев, однако Lua очень плохо оценивает несколько тестов по сравнению с C/С++.
Один из них - тест mandelbrot (создайте переносимый файл растрового файла Mandelbrot N = 16 000), где он набирает ужасные 1:109 (многоядерные) или 1:28 (одноядерные)
Поскольку Delta в скорости довольно велика, это хороший кандидат для оптимизации. Кроме того, я уверен, что некоторые из тех, кто знает, кто из Майка Палла, могут поверить, что это невозможно оптимизировать это дальше, но это вопиюще неправильно. Любой, кто сделал оптимизацию, знает, что всегда можно сделать лучше. Кроме того, мне удалось получить дополнительную производительность с несколькими настройками, поэтому я знаю, что это возможно:)
-- 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
Итак, как это можно было бы оптимизировать (конечно, как и при любой оптимизации, вам нужно будет измерить вашу реализацию, чтобы быть уверенным в ее быстроте). И вам не разрешено изменять C-core Lua для этого или использовать LuaJit, чтобы найти способы оптимизации одной из слабых слабых точек Lua.
Изменить: Помещение Bounty на этом, чтобы сделать вызов более увлекательным.