【发布时间】:2012-04-17 22:21:41
【问题描述】:
阅读了几篇关于该主题的博文后,我发现在 Clojure 中对数组进行变异是这样的:
(defn m [xs ys]
(dotimes [i (count xs)]
(aset #^ints ys (int i)
(int (* (int 3) (int (aget #^ints xs (int i))))))))
(def xs (into-array Integer/TYPE (range 1000000))) 和 (def ys (into-array Integer/TYPE (range 1000000))) 的位置
根据 Criterium 平均需要 14 毫秒,而 Java 也是如此,
public static int[] m(int[] x, int[] y)
{
for(int i=0; i<x.length; i++)
y[i] = 3*x[i];
return y;
}
平均需要 800us。 **
我是否正在尽我所能让事情进展得更快?还有什么我可以沿着优化路径走下去的吗?
** 我使用 Criterium 和 (report-result (bench (m xs ys )) :verbose) 和 (report-result (bench (. Test m xs ys)) :verbose) 对这些进行计时
【问题讨论】:
-
如果您正在做很多此类事情,您可能应该查看
core.matrix和/或vectorz-clj,而不是在数组上手动编码数学运算。 -
是的,现在它们确实存在
标签: arrays optimization clojure