Hello guys,

I was looking for a way to speed up some heavy computations
we are making @work so I have written small benchmark that:

1. reads 5000 sparse vectors from disk
2. computes inner product of the last 100 vectors
   with all the vectors before them

The representation that we are using for sparse vectors is
hash tables. I have written this small test case in
several languages, including PIR. In every program the load
time is under 2 seconds and the math is quite simple, so
what this is stress testing hash tables code.

Here are the results (some of them surprising)

        time    mem
clojure 32      449536
racket  70      168060
c++     40      75180       map<int,float>
c++     43      68960       unordered_map<int,float>
perl    33      117904
lua     26      108540
luajit  6       68072
haskell 23      1027504     Data.IntMap Float (compiled)
parrot  28      360992      Hash PMC_keys PMC_vals
parrot  15      263628      Hash int_keys PMC_vals

So, my small comment: we are not bad at all. Luajit comes
first but we are quite fast even without JIT.

The biggest disappointment for me are statically typed
compiled languages - they had all the time to optimize
the code, they had proper information in order to use
native, unboxed values but their performance is quite bad
C++ uses 7x the time of the first (luajit) and haskel
uses 10x times the memory.

Another observation: it looks like luajit infers key and
value datatypes and stores them unboxed.


I hope you find this interesting
Best regards

--
Luben Karavelov
_______________________________________________
http://lists.parrot.org/mailman/listinfo/parrot-dev

Reply via email to