标准(简单?)基准代码/测试?

时间:2011-06-11 22:47:42

标签: programming-languages benchmarking

是否有某种标准的基准测试系统或大纲或什么?我正在寻找go,llvm,d和其他语言,我想知道它们在执行时间,内存使用情况等方面的公平性。

我找到https://benchmarksgame-team.pages.debian.net/benchmarksgame/,但代码并不相同。一个例子是C ++源是< 100个线,而C源是> 650。我几乎称之为公平。在其源代码中的另一个测试有一个愚蠢的错误,即在其他语言将其置于外部时将锁定置于循环内。

所以我想知道一些测试,我可能会考虑查看/运行,也许不使用非标准甚至复杂的库。就像完全在单个源文件中实现一样。公平的东西。

2 个答案:

答案 0 :(得分:7)

多年来,基准游戏网站在帮助页面上显示了这一点 -

“不公平”是什么意思? (寓言)

他们向上,向下,向左,向左,向前,向后,向侧面和上下颠簸。

猎豹的朋友说“这不公平” - 每个人都知道猎豹是最快的生物,但是比赛太长了,猎豹累了!

猎鹰的朋友们说“这不公平” - 每个人都知道猎鹰是最快的生物,但猎鹰走得不是很好,他翱翔天空!

马的朋友说“这不公平” - 每个人都知道马是最快的生物,但这只是一岁鸽,你必须停止比赛,直到种马参加!

男人的朋友说“这不公平” - 每个人都知道,在“现实世界”中,男人会使用摩托车,你必须等到男人加油并加热发动机!

蜗牛的朋友说“这不公平” - 每个人都知道一个生物应该离开粘液痕迹,所有其他生物都在作弊!

达尔马提亚的尾巴正在敲打着地面。达尔马提亚气喘吁吁,呼吸之间说:“看看那座美丽的山峰,让我们一起比赛!”


当时“这不公平”评论大多是特别的恳求,旨在使编程语言X的优势在于编程语言Y的缺点。

但你问题提出的问题有点不同。

  1. 首先,查看基准游戏中的n-body programs 网站。即使是节目 用不同的语言写成 这里的差别很小 程序的编码方式。

    到目前为止,还没有人发现有效的 利用四核的方法 这个小的n体问题 - 所以那里 没有特别的多核计划。 程序不使用非标准 或复杂的图书馆。这些节目 完全在一个内部实现 单一来源文件。

  2. 我说的很少 n体的方式不同 程序是编码但是这样做 真的意味着节目是 相同?项目结束后不久 复活了,6或7年前我 记住一个Ada程序员 关于比较苹果的问题半开玩笑 橘子因为汇编语言 从阿达节目不是 与C中的汇编语言相同 程序 - 显然不喜欢 被比作喜欢: - )

    • otoh Ada源代码会有 用不同的方式写 比编写的C源代码, 使Ada编译器生成 与C编译器相同的汇编语言 产生

    • otoh 如果汇编语言由 两个编译器都是逐行的 同样,为什么会有一个 性能差异?

    当方式差异很小的时候 程序编码然后乍看之下 比较似乎公平,但强迫 不同语言的编码类似于语言X. 可能赞成语言X.

  3. 正如Yannick Versley所说,重点 使用不同的语言是为了 不同的方法 语言提供。换一种说法, 有不止一种方法可以做到这一点 同样的事情。

    查看mandelbrot programs 基准游戏网站 - 最简单的C程序只有一半大小 最快的C程序;该 最简单的C程序是顺序的 使用双打,最快的C程序 通过OMP和GCC使用所有4个核心 内部函数。

    • 其他语言采用不同的方法来使用所有4个核心 - 这是否意味着我们应该只比较顺序程序而忽略多核计算的现实?

    • 其他语言实现可能无法提供与GCC内在函数等效的东西 - 这是否意味着我们只应该比较使用双精度的程序?但是其他语言实现以表示双倍的方式采用不同的方法 - 这是否意味着我们应该忽略所有浮点程序?

  4. 问题在于编程语言(和编程语言实现)与苹果到橙子更加不同,但是我们仍然会问 - 如果我用X语言编写它会使我的程序更快吗? - 和仍然希望得到一个更简单的答案 - 这取决于你如何写它!

    基准游戏网站上的不同任务和不同程序显示,某些性能比较答案令人困惑和复杂 - 细节很重要。

答案 1 :(得分:5)

基准测试并不完全是公平的 - 它是关于为自己的工作量选择一些东西,在你的约束下。

如果你想使用alioth枪战网站,你仍然可以获得有趣的信息,如果你排除过于冗长或过慢的解决方案(确切的平衡取决于你想做什么 - 你编写运行的代码吗?五秒钟,或一个将占用十几台计算机五个月的人。查看一个特定问题的最简洁示例,以查看一般问题结构 - 然后查看人们为使代码运行更快而应用的典型优化。

使用相同代码的基准测试错过了重点,因为您需要不同的东西来帮助不同的语言; Java有GC,这意味着它在trees测试中表现良好,而你需要在C / C ++中进行自定义内存分配才能与之竞争(而且特定的基准测试结构使得标准的malloc确实很差),对于spectral-norm,您需要非盒装双数组...

如果你想提出自己的解决方案,那就去Project Euler - 有许多问题不依赖于复杂的库,但却很难进行优化。否则,尝试提出你认为足以过滤或排列枪战中现有贡献的评分标准(或者在其外部 - 例如,ShedSkin和Cython解决了一些问题,这些问题是“非官方的”,因为这些语言不包括在内。)