Today Google Summer of Code finally ends. NDArray is pretty stable now and 
will be the default implementation used by core.matrix in the upcoming 
release. It was an epic journey through bugs, unexpected slowness and weird 
macros, but now I can proudly state that in some cases NDArray can be 
faster than NumPy by a factor of two: [1]. 

Well, not always. It's hard to consistently beat highly optimized and 
vectorized native code on JVM :) But we have a secrete sauce here in 
Clojure: macros. You can find the code I've benchmarked here: [2]. What's 
going on? The thing here is that using macros we can fully eliminate the 
cost of intermediate matrix allocation (or function call machinery in case 
of map-like functions) doing element-wise operations. Thanks to macros, the 
code will be expanded to a highly optimized loop right inside user's code, 
hiding messy details of NDArray and Clojure's type hinting from user, but 
exposing necessary information to JVM. Moreover, this will work on a bunch 
of NDArrays, too: [3]. More details can be found in NDArray's documentation 
(by the courtesy of Marginalia): [4].

Overall, this project was very interesting experience to me. Hope others 
will find it useful :) 

Cheers! 
Dmitry

[1]: http://i.imgur.com/6qdUF7f.png
[2]: https://gist.github.com/si14/6676599
[3]: 
https://github.com/mikera/matrix-api/blob/develop/src/test/clojure/clojure/core/matrix/test_ndarray_implementation.clj#L16
[4]: http://mikera.github.io/matrix-api/ndarray.html

-- 
-- 
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/groups/opt_out.

Reply via email to