Clojure数字运算性能

时间:2010-06-26 15:11:47

标签: 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倍
  • 系数~4比C / Java / Scala / Ada慢
  • 与OCaml,Erlang和Go
  • 大致相同

我对这种水平的表现非常满意。

我对Clojure大师的问题是

  • 在速度,代码简洁性或可读性(不牺牲速度)方面,我是否有明显的改进?
  • 您是否认为这是Clojure性能与Python / Ruby / Perl以及另一方面Java / C的代表?

更新

更多针对枪战的Clojure 1.1基准程序here,包括n体问题。

3 个答案:

答案 0 :(得分:11)

这里没有大量的回复:)但显然有些兴趣,所以我会尝试回答过去几天我所学到的问题:

  • 使用1.1优化方法(Java原语和可变数组)比优化Java慢4倍,速度和它一样快。
  • 1.2构造definterfacedeftype速度超过两倍,在Java的~1.7x(+ 70%)范围内,代码更短,更简单,更清晰比1.1。

以下是实施:

More details包括“经验教训”,JVM版本和剖析截图。

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

1.2测试使用了当前的主分支,我没有尝试任何新的数字分支。从我可以收集到目前正在讨论的新想法

  • 可能会更快地使非优化数字
  • 可能会加速此基准测试的1.1版本
  • 可能不会加速1.2版本,它已经像它可能获得的那样“接近金属”。

<强>免责声明:

  • Clojure 1.2尚未发布,因此1.2基准测试结果尚属初步。
  • 这是物理计算的一个特定基准。它与浮点数运算相关,但与字符串解析,并发或Web请求处理等领域的性能无关。

答案 1 :(得分:4)

我想知道Cantor是否对您有用 - 它是Clojure的高性能数学库。另请参阅Google小组上的this thread,该小组是关于新原始算术内容的类似项目。

答案 2 :(得分:4)

这是一个稍微陈旧的问题,现有的答案有点过时了,所以我想在2013年中期为那些对Clojure中的“数字运算”感兴趣的人添加更新

Clojure数值计算领域发生了很多事情:

  • Clojure 1.5现已推出,它对数值运算有很多改进的支持。在大多数情况下,现在可以非常接近纯Java速度
  • 专门的新闻组 - Numerical Clojure
  • core.matrix现在为矩阵数学/数值计算提供了一个惯用的API,支持多个后端实现(包括原生BLAS库)

免责声明:我是上述几个人的维护者/贡献者。