我想知道为什么下面的代码在 r/fold 的情况下没有提供加速?我对减速器有什么误解吗?
我在一个相当慢的(尽管有 2 个核心)Ubuntu 12.04 开发盒上运行它,通过 emacs 和 lein 运行,每个都有相同的结果。
(require '[clojure.core.reducers :as r])
(.. Runtime getRuntime availableProcessors)
;; 2
(let
[n 80000000
vs #(range n)]
(time (reduce + (vs)))
(time (r/fold + (vs)))
“已用时间:26076.434324 毫秒”
“已用时间:25500.234034 毫秒”
Thanks.
您正在折叠一个 seq。目前,并行折叠仅发生在持久向量和地图上。
还有各种各样的原因导致这种性能测试不如使用类似的东西标准赛 https://github.com/hugoduncan/criterium,但这可能是一个单独的讨论。 (其中一些原因是垃圾收集、JVM 预热和内联、Emacs 和 lein 上时髦的默认 jvm 设置、盒装和检查数学等)
由于上述许多原因仍然是错误的,但比较更有用:
(require '[clojure.core.reducers :as r])
(def v (vec (range 800000)))
(dotimes [_ 100] (time (reduce + v)))
(dotimes [_ 100] (time (r/fold + v)))
观看最近 2 场比赛的最佳成绩。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)