performance - Clojure数字处理性能

标签 performance clojure benchmarking

我不确定这是属于StackOverflow还是属于Clojure Google组。但是小组似乎忙于讨论numeric improvements for Clojure 1.2,因此我将在这里尝试:

http://shootout.alioth.debian.org/具有许多针对各种语言的性能基准。

我注意到Clojure丢失了,所以我制作了n-body problem的Clojure版本。

我能够生成的最快的代码可以是found here,并且对它进行基准测试似乎表明,对数字进行处理Clojure是

  • 比Python / Ruby / Perl快10倍
  • 因数比C / Java / Scala / Ada慢约4
  • 与OCaml,Erlang和Go
  • 大致相当

    我对这种性能水平感到非常满意。

    我对Clojure大师的问题是
  • 在速度,代码简洁性或可读性(不牺牲速度)方面,我是否错过了明显的改进?
  • 您认为这一方面可以代表Clojure性能,另一方面可以代表Python / Ruby / Perl和Java / C?

  • 更新

    更多点胶here的Clojure 1.1基准程序,包括n体问题。

    最佳答案

    这里不是大量的答复:),但显然有一些兴趣,所以我将尝试用过去几天学到的知识来回答自己的问题:

  • 使用1.1优化方法(Java原语和可变数组)比优化Java慢约4倍,这与它的速度差不多。
  • 1.2构造definterfacedeftype的两倍多,是Java的约1.7倍(+ 70%),与1.1相比,代码更短,更简单,更干净。

  • 这里是实现:
  • Clojure 1.1 approach
  • Clojure 1.2 approach

  • More details包括“经验教训”,JVM版本和概要分析屏幕快照。

    从主观上来说,与优化1.1相比,优化1.2代码是一件轻而易举的事情,因此对于Clojure数字运算来说这是个好消息。 (实际上接近惊人:)

    1.2测试使用了当前的master分支,我没有尝试任何新的数字分支。从我可以收集到的当前正在讨论的新想法
  • 可以使非优化数字更快
  • 可能会加速本基准
  • 的1.1版本
  • 可能不会加快1.2版本的速度,它已经尽可能接近“接近金属”了。

  • 免责声明:
  • Clojure 1.2尚未发布,因此1.2基准测试结果是初步的。
  • 这是有关物理计算的一个特定基准。它与浮点数运算有关,但与字符串解析,并发或Web请求处理等 Realm 的性能无关。
  • 关于performance - Clojure数字处理性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3124344/

    相关文章:

    for-loop - Clojure:如何返回在函数的 for 循环内计算的值

    asp.net - 是否可以优化ASP.NET WebForms以使其执行速度与ASP.NET MVC一样快?

    performance - 对于产品属性的索引,更多的短文本字段与更少的字段以及更多的单词

    clojure - 包含数据依赖项时,lein 环 headless 服务器失败

    recursion - clojure递归宏定义

    Windows 上 Spectre 和 Meltdown 缓解措施的 R 基准测试

    python - 使用 scikit-learn 和 pandas 编写对中断具有鲁棒性的结果表

    java - 单个对象映射或单独的(大尺寸)

    performance - 求解递归公式的高效算法

    r - 有效转换为R中的向量