Regarding the speed optimizations, execution time for a given model was reduced from 2735 seconds to 70 seconds, over several versions by doing several optimizations.
The same calculation implemented in C# takes 12 seconds using the same computer and OS. Maybe the Clojure code can still be improved, but for the time being I'm happy with the Clojure version being six times slower, since the new software has many advantages. For these tests the model was the circle with radius 1 using the "diffmr1" tracker, the simulation was run using 10000 particles and 10000 total random walk steps. These modifications in the critical parts of the code accounted for most of the improvement: - Avoid reflection by using type hints. - Use Java arrays. - In some cases call Java arithmetic functions directly instead of Clojure ones. - Avoid using partial functions in the critical parts of the code. Avoiding lazyness did not help much. Regarding the use of Java arrays, there are many small functions performing typical vector operations on arrays, such as the following example: Using Clojure types: (defn dot-prod "Returns the dot product of two vectors" [v1 v2] (reduce + (map * v1 v2))) Using Java arrays: (defn dot-prod-j "Returns the dot product of two arrays of doubles" [^doubles v1 ^doubles v2] (areduce v1 i ret 0.0 (+ ret (* (aget v1 i) (aget v2 i))))) This gives a general idea of which optimizations helped the most. These changes are not in the public repository, since previous commits have been omitted because the code code was not ready for publication (different license disclaimer, contained email addresses, etc.). If anyone is interested in the diffs and the execution times over several optimizations, please contact me. Kind regards, Jose. On Sunday, December 21, 2014 3:38:35 AM UTC-5, Jose M. Perez Sanchez wrote: > > > Hi everyone: > > Sorry that it has taken so long. I've just released the software in > GitHub under the EPL. It can be found at: > > https://github.com/iosephus/gema > > > Kind regards, > > Jose. > > -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.