6 benchmarking programming-languages
是否有某种标准的基准测试系统或大纲或什么?我正在寻找go,llvm,d和其他语言,我想知道它们在执行时间,内存使用情况等方面的公平性.
我找到了https://benchmarksgame-team.pages.debian.net/benchmarksgame/,但代码并不相同.一个例子是C++源是<100行,而C源是> 650.我几乎称之为公平.在其源代码中的另一个测试有一个愚蠢的错误,即在其他语言将其置于外部时将锁定置于循环中.
所以我想知道一些测试,我可能会考虑查看/运行,也许不使用非标准甚至复杂的库.就像完全在单个源文件中实现一样.公平的.
几年来,基准游戏网站在帮助页面上展示了这一点 -
他们向上,向下,向左,向左,向上,向前,向后,侧身和颠倒.
猎豹的朋友说"这不公平" - 每个人都知道猎豹是最快的生物,但种族太长,猎豹累了!
猎鹰的朋友们说"这不公平" - 每个人都知道猎鹰是最快的生物,但猎鹰走得不是很好,他翱翔天空!
马的朋友说"这不公平" - 每个人都知道马是最快的生物,但这只是一岁鸽,你必须停止比赛,直到种马参加!
男人的朋友说"这不公平" - 每个人都知道,在"现实世界"中,男人会使用摩托车,你必须等到男人加油并加热发动机!
蜗牛的朋友说"这不公平" - 每个人都知道一个生物应该离开粘液痕迹,所有其他生物都在作弊!
达尔马提亚的尾巴正在敲打着地面.达尔马提亚气喘吁吁,呼吸之间说:"看看那座美丽的山峰吧,让我们争先恐后!"
那时"它不公平"的评论大多是特别的恳求,旨在使编程语言X的优势在于编程语言Y的缺点.
但是你的问题提出的问题有点不同.
首先,看一下基准游戏网站上的n-body程序.尽管程序是用不同的语言编写的,但程序编码的方式差别很小.
到目前为止,没有人找到一种有效的方法来利用四核来解决这个小的n体问题 - 因此没有特殊的多核程序.程序不使用非标准或复杂的库.程序完全在单个源文件中实现.
我说n体编程的编码方式差别很小,但是这真的意味着程序是一样的吗?项目恢复后不久,6或7年前,我记得一位Ada程序员半开玩笑地将苹果与橙子进行比较,因为Ada程序的汇编语言与C程序的汇编语言不同 - 很明显喜欢没有比较像:-)
otoh Ada源代码必须以与编写C源代码不同的方式编写,以使Ada编译器生成与C编译器生成的汇编语言相同的汇编语言.
otoh如果两个编译器生成的汇编语言真的是逐行相同的,为什么会有性能差异呢?
当程序编码的方式差别很小时,乍看之下,比较似乎是公平的,但强制不同的语言编码,如语言X可能有利于语言X.
正如Yannick Versley所指出的,使用不同语言的关键在于语言提供的不同方法.换句话说,做同样事情的方法不止一种.
看看基准游戏网站上的mandelbrot程序 - 最简单的C程序是最快的C程序的一半; 最简单的C程序是顺序的并且使用双精度,最快的C程序通过OMP和GCC内在函数使用所有4个核心.
其他语言采用不同的方法来使用所有4个核心 - 这是否意味着我们应该只比较顺序程序而忽略多核计算的现实?
其他语言实现可能无法提供与GCC内在函数等效的东西 - 这是否意味着我们应该只比较使用双精度的程序?但是其他语言实现在它们代表双精度的方式中采用不同的方法 - 这是否意味着我们应该忽略所有浮点程序?
问题是编程语言(和编程语言实现)与苹果到橙子更加不同,但我们仍然会问 - 如果用X语言编写,我的程序会更快吗?- 并且仍然希望得到一个更简单的答案 - 这取决于你如何写它!
基准游戏网站上的不同任务和不同程序表明,一些性能比较答案令人困惑和复杂 - 细节很重要.
小智 5
基准测试并不完全是公平的 - 它是关于在你的限制内为自己的工作量选择一些东西.
如果你想使用alioth shootout网站,你仍然可以获得有趣的信息,如果你排除过于冗长或过慢的解决方案(确切的平衡取决于你想做什么 - 你编写运行五秒钟的代码,或者将占用十几台计算机五个月的人.查看一个特定问题的最简洁示例,以查看一般问题结构 - 然后查看人们为使代码运行更快而应用的典型优化.
拥有相同代码的基准测试错过了重点,因为您需要不同的东西来帮助不同的语言; Java有GC,这意味着它在trees测试中表现良好,而你需要在C/C++中进行自定义内存分配才能与之竞争(而且特定的基准测试结构使得标准的malloc确实很差),对于那个spectral-norm,你需要非盒装双阵列......
如果你想提出自己的解决方案,那就去Project Euler吧 - 有很多问题不依赖于复杂的库,但却很难进行优化.否则,尝试提出你认为足以过滤或排列枪战中现有贡献的评分标准(或者在其外部 - 例如,ShedSkin和Cython解决了一些问题,这些问题是"非官方的",因为这些语言不包括在内).