aver letto un paio di post di blog sul tema, ho trovato che mutando una matrice in Clojure come questo:Ottimizzazione serie mutazione in Clojure
(defn m [xs ys]
(dotimes [i (count xs)]
(aset #^ints ys (int i)
(int (* (int 3) (int (aget #^ints xs (int i))))))))
dove (def xs (into-array Integer/TYPE (range 1000000)))
e (def ys (into-array Integer/TYPE (range 1000000)))
ha preso una media di 14ms secondo Criterium, mentre Java per fare lo stesso,
public static int[] m(int[] x, int[] y)
{
for(int i=0; i<x.length; i++)
y[i] = 3*x[i];
return y;
}
richiede una media di 800us. **
Sto facendo tutto il possibile per rendere le cose andare veloce e c'è altro posso andare giù per il percorso di ottimizzazione?
** ho cronometrato questi utilizzando Criterium con (report-result (bench (m xs ys)) :verbose)
e (report-result (bench (. Test m xs ys)) :verbose)
se si sta facendo un sacco di questo tipo di cose, si dovrebbe probabilmente essere guardando 'core.matrix' e/o' vectorz-clj' piuttosto che mano -codifica delle operazioni matematiche sugli array. – mikera
yeh, ora che esistono sicuramente – Hendekagon