- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
状态:到目前为止,最佳答案的程序执行时间是原始程序的 33%!但可能还有其他方法可以优化它。
<小时/>Lua 是目前最快的脚本语言,但是 Lua 在一些针对 C/C++ 的基准测试中得分非常糟糕。
其中之一是 mandelbrot 测试(生成 Mandelbrot 设置可移植位图文件 N=16,000),其得分为可怕的 1:109(多核)或 1:28(单核)
由于速度增量相当大,因此这是一个很好的优化候选者。另外,我确信那些知道 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 的一个弱点。
编辑:为此设置赏金以使挑战更有趣。
最佳答案
通过 2,(在我的机器上)比之前的好大约 30%。主要的节省来自展开内部循环以分摊开销。
还包括(已注释掉)的是当您卡在中央心形线时,通过提前退出(并将像素设置为黑色)来节省时间的中止尝试。它可以工作,但无论我如何调整它,它都会变慢。
我得走了,但我会留下一个分手建议。通过对结果进行游程编码可能会进行一些优化(因此,您可以保存一个列表(白点的数量、黑点的数量、白点的数量等),而不是保存一堆位扭曲的字符。 )。这将:
不知道它是否可以编码得足够紧密以便能够飞行,但如果我有更多时间,这就是我下一步会尝试的地方。
-- The Computer Language Shootout
-- http://shootout.alioth.debian.org/
-- contributed by Mike Pall
-- with optimizations by Markus J. Q. (MarkusQ) Roberts
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
local h2 = math.floor(height/2)
local hm = height - h2*2
local top_half = {}
for y=0,h2+hm do
local Ci = 2*y / height - 1
local line = {""}
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
local Zri = Zr*Zi
for i=1,m/5 do
Zr = Zrq - Ziq + Cr
Zi = Zri + Zri + Ci
Zri = Zr*Zi
Zr = Zr*Zr - Zi*Zi + Cr
Zi = 2*Zri + Ci
Zri = Zr*Zi
Zr = Zr*Zr - Zi*Zi + Cr
Zi = 2*Zri + Ci
Zri = Zr*Zi
Zr = Zr*Zr - Zi*Zi + Cr
Zi = 2*Zri + Ci
Zri = Zr*Zi
Zr = Zr*Zr - Zi*Zi + Cr
Zi = 2*Zri + Ci
Zri = Zr*Zi
Zrq = Zr*Zr
Ziq = Zi*Zi
Zri = Zr*Zi
if Zrq + Ziq > limit2 then
bits = bits + 1
break
end
-- if i == 1 then
-- local ar,ai = 1-4*Zr,-4*Zi
-- local a_r = math.sqrt(ar*ar+ai*ai)
-- local k = math.sqrt(2)/2
-- local br,bi2 = math.sqrt(a_r+ar)*k,(a_r-ar)/2
-- if (br+1)*(br+1) + bi2 < 1 then
-- break
-- end
-- end
end
end
for x=width,xbb do
bits = bits + bits + 1
end
table.insert(line,char(255-bits))
end
line = table.concat(line)
table.insert(top_half,line)
end
write("P4\n", width, " ", height, "\n")
for y=1,h2+hm do
write(top_half[y])
end
for y=h2,1,-1 do
write(top_half[y])
end
关于optimization - Lua挑战: Can you improve the mandelbrot implementation’s performance?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/570297/
我正在使用 Keras 2.0 包为 Python 训练一个批处理的神经网络。以下是有关数据和训练参数的一些信息: #samples in train: 414934 #features: 59009
我一直在使用 CSS 和 jQuery(简单的 CSS 样式更改,请参阅 here)使事物发光,现在我想知道如何使这些动画变得更好。 目前,我只是在无框阴影和有框阴影之间进行过渡,这看起来不错。但我试
我正在计算几台服务器上的 CPU 使用率。但是计算速度非常非常慢。 这是迄今为止我的代码: While it <= 5 Dim myOptions As New ConnectionOptio
Improved pngnq源归档文件不带有makefile(解压缩时要小心,没有顶层目录)。 如何在openSUSE 11.4上进行编译?安装了libpng/zlib header 和常用的C工具链
我在 MySQL 数据库中有两个表: Book(title, publisher, year) title is primary key Author(name, title) title is fo
public class EntityUtils { private static final Map> searchMap = new HashMap<>(); private st
我们有元素,内置 Extjs 和 scss。我们想提高 scss 的性能。我们使用了 grunt scss-lint,得到以下结果 NestingDepth: Nesting should be no
我有一个包含五个值的数组: "-360°" "0 x" "1r" "0,01 m/s" "0,01 m/s²" 我想提取所有与单位相关的字符串。 我有这个正则表
我创建了一个算法来解决以下问题陈述:问题陈述是: 我们说两个整数 x 和 y 至少有 K 的变化,如果 |x − y| ≥ K(它们差的绝对值至少为K)。给定一个N个整数a1,a2,...,aN和K的
想做个算法,在leetcode上发现了这个问题 Given an array of integers, find two numbers such that they add up to a spec
有什么方法可以增加我的 EditText 的滚动吗?我想让它像在 Web 浏览器上那样滚动,流畅且快速。这可能吗? 谢谢,亚历克斯。 最佳答案 Webview 使用平滑滚动。 ScrollView 也
我的网站有搜索功能。 无论如何,我的网站上有这样的文字:“čurti”“čuožžut”等等...... 问题是,当用户搜索单词“curti”而不是“čurti”时,它应该找到该页面。 一些有助于理解
描述 ifelse() 函数允许通过一系列测试过滤向量中的值,如果结果为正,每个测试都会产生不同的 Action 。例如,让 xx 是一个 data.frame,如下: xx <- data.fram
智能舍入一直是 knitr 的一大特色,可以避免很多 sprintf/round/paste0 走弯路。 在一位客户提示我给出了错误的小数点后,我注意到忘记 $$ 对于可能以科学计数法打印的数字是非常
我想要一个具有快速连接和编辑操作的字符串表示。我已阅读论文 "Ropes: an Alternative to Strings" ,但自 1995 年以来,这方面是否有任何重大改进? 编辑:我之前考虑
我一直在使用 LibGDX 制作一个简单的游戏,现在我尝试在我的游戏中添加一个健康栏。我已经成功在游戏中添加了生命条,目前运行良好。 然而,问题是如何像专业人士一样进一步修改这段代码。我仍在学习过程中
我有一个任务要做。问题是这样的。你给出一个数字,比如x。该程序计算从 1 开始的数字的平方,并且仅当它是回文时才打印它。程序将继续打印这些数字,直到达到您提供的数字 x。 我已经解决了这个问题。它在
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 5 年前。 Improve this ques
这个字符集 [^\/:] // all characters except / or : 弱于 jslint b.c.我应该指定可以使用的字符,而不是根据此 SO Post 不能使用的字符. 这是一个
我正在尝试使用另一个表 (B) 中包含的地址数据对一个表 (A) 中的数据进行地理编码。由于街道名称的书写方式可能不同,我想首先浏览 A 中的数据,并为每个元组在给定的邮政编码区内找到 B 中最接近
我是一名优秀的程序员,十分优秀!