【发布时间】:2010-06-26 15:11:47
【问题描述】:
我不确定这属于 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 体问题。
【问题讨论】:
-
我不得不想象 JVM 将在这里发挥重要作用。你用的是什么JVM?你用的是和枪战一样的吗?
-
Java 1.6.0,OS X 10.6 附带的标准 java。它大约是相同的 JVM(我:1.6.0_20,枪战:1.6.0_18),但与枪战不同的计算机。我在本地运行 Clojure 和枪战 Java 实现。我通过使用 Java 作为基准并相应地缩放枪战结果来估计相对性能。
-
您的代码看起来不错。随着 1.2 中的原始改进,我希望您能够非常接近 Java 时代。您是否尝试过通过探查器运行它?我的怀疑是某处增加了对您造成伤害的装箱或函数调用开销。
-
啊,这是一个很酷的项目,对你提到的当前激烈的辩论做出了巨大贡献。我将等待更深入的答案...我还想知道您的代码在新分支上骑行时会如何运行。可能会试一试——或者你会吗?顺便说一句,所有这些对 ggroup 来说都是绝对感兴趣的,尤其是现在;也许您可以将其发布到我在下面提到的线程中?
-
@mikera:根据分析器,intCast(Object) 大约有 4% 的 CPU,我还无法追踪到。另一个 5% 到 doubleCast(double),它可能会被消除。所以可能会提高约 10%。除此之外,分析器没有显示任何容易获得的成果。
标签: performance clojure benchmarking