It seems to be a problem with 1.2. I have 28ms in 1.1 and 4000ms in 1.2.
On Thu, Jul 8, 2010 at 5:12 PM, Rubén Béjar <[email protected]> wrote: > Hi all, > > I have found again some time for Clojure, so I am back trying > to solve my problems with the perfomance of my toy cellular > automata. I have been trying to use Java arrays and type hints, > with a small success, but I have found that > amap for arrays seems terribly slower than map for vectors, > and that is troubling me a little. > > For instance, if I try this simple code: > > > ------------------------------------------------------------------------------ > (def an-array (int-array 25000 (int 0))) > (time (amap an-array idx ret (+ (int 1) (aget an-array idx)))) > > (def a-vec (vec (int-array 25000 (int 0)))) > (time (dorun (map #(+ % (int 1)) a-vec))) > > ------------------------------------------------------------------------------ > > A typical result is: > > > ------------------------------------------------------------------------------ > Clojure 1.2.0-master-SNAPSHOT > "Elapsed time: 2226.685713 msecs" > "Elapsed time: 16.006892 msecs" > > ------------------------------------------------------------------------------ > > As far as I understand what I am doing, they do the same; > in the first case with a Java array of ints, and in the > second case with a Clojure vector of ints. The dorun in the > second case would prevent me from making the > mistake of measuring the performance of a lazy > operation. > > Nevertheless, map seems hundreds of times faster. > Is this normal? Am I doing something wrong? I expected > that amap was faster than map, or at least not that > slower... > > > Thanks, > > Rubén > > > P.S. David, thanks for your code. It looks good and performs > very well too. I will study it in more detail when I start learning about > protocols. For now, I am styill trying to replicate its performance my > way :-) > > David Nolen wrote: > > Because I like sitting around optimizing Clojure code I looked into this > some more: > > http://gist.github.com/420036 > > With the really great changes in the 1.2, you can see there's a lovely > lack of manual type hinting here. No macros required either. On my machine > this averages around ~30ms for 500x500. Not too shabby. 2000x2000 takes > ~480ms or so. > > David > > > Rubén BÉJAR HERNÁNDEZ > Dpto. de Informática e Ingeniería de Sistemas - Universidad de > Zaragoza(Computing and Systems Engineering Department - Universidad de > Zaragoza)c/ María de Luna 1, 50018 Zaragoza, Spain > Tel: (+34) 976 76 2332 (Fax: 1914) [email protected]http://iaaa.cps.unizar.es > > Follow me on Twitter <http://twitter.com/Ruben_Bejar> > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to [email protected] > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > [email protected]<clojure%[email protected]> > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/clojure?hl=en
<<twitter.png>>
