OK, I've got a new Clojure program for the n-body benchmark, and it is significantly faster than my previous one -- down from 138 x Java run time, to 37 x Java run time. Still room for improvement somewhere there, I'm sure, including perhaps using Java arrays instead of Clojure vectors.
http://github.com/jafingerhut/clojure-benchmarks/blob/2423c5ba7bcded349bc21cfa4204bb840fd75bfa/n-body/nbody.clj-6.clj The main changes from the slower version are: + make separate vectors for each "attribute" of a body in motion, i.e. a separate vector of positions, a vector of velocities, etc., instead of using maps. + Use loop/recur almost everywhere it makes sense. I still have a few map calls in the function 'energy' and the functions it calls, and maybe in the init code, but that is only done twice and once during the whole execution, versus advance which is called 50,000,000 times in the long version of the benchmark. + It uses the new transient/assoc!/conj!/persistent! functions for Clojure vectors, so you need a pretty new copy of Clojure if you want to run it yourself. Updates summary of results is here: http://github.com/jafingerhut/clojure-benchmarks/blob/14c5df3ee28d418a938de584f6675860043dd0f5/RESULTS And, as usual, improvements to the performance of these Clojure programs are welcome. Andy --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---