In short, J raw matrix multiplication is about 9x slower than others in the test, and it seems all of them use blas library for matrix multiplication. ( r was slower but I tried to replace rblas.dll with a faster gotoblas and it immediately pulled r' speed on this test on par with others.)
On May 7, 2013, at 8:36 AM, Ric Sherlock <[email protected]> wrote: > Duh! > Thanks. Must be time for bed!!! > > > On Wed, May 8, 2013 at 12:29 AM, Raul Miller <[email protected]> wrote: > >> multiplying milliseconds by 1000 would give microseconds. >> >> also, the original post says "in milsec" >> >> FYI, >> >> -- >> Raul >> >> On Tue, May 7, 2013 at 8:15 AM, Ric Sherlock <[email protected]> wrote: >>> Your timeit verb is defined as 1000 times the result of 6!:2 >>> >>> Could it be that you are expecting the result of 6!:2 to be milliseconds, >>> when it is actually already reporting seconds? >>> >>> On Tue, May 7, 2013 at 12:00 PM, elton wang <[email protected]> wrote: >>> >>>> Julia is a new number crunching language that claims to have near c >> speed. >>>> On their homepage there is a set of benchmark to compare Julia with >>>> matlab/python/R etc. I made a try to add J into the table.Please see >> table >>>> below for my results. All programs runs on a windows 64 bit machine. My >>>> script enclosed at the end of this message. Welcome to improve it >> since I >>>> dont have any practical experience on J other than toy exercises. >>>> >>>> Please see http://julialang.org/ for the offical Julia benchmarks, and >>>> links therein for source codes of other languages. (like >>>> https://github.com/JuliaLang/julia/blob/master/test/perf/perf.m for the >>>> matlab code.) >>>> >>>> >>>> >>>> note that in the random matrix multiply test, J lags behind all other >>>> peers. The code I use is >>>> >>>> rand_nn =. 0 ?@$~ 2 # ] >>>> mp =. +/ . * >>>> randmatmul =. rand_nn mp rand_nn >>>> 1000 * 6!:2 'randmatmul 1000' >>>> >>>> I suspect that other languages use some library like BLAS for matrix >>>> rather than raw calculation. Is there a way to speed up code above? >>>> >>>> results: >>>> in milsec Julia Matlab2013a R3.0.0 Python3.3+numpy(MKL) J801 >>>>> fib <1 123 60 4 11 >>>>> parse_int <1 163 10 5 7 >>>>> mandel <1 13 230 8 47 >>>>> quicksort <1 45 30 23 11 >>>>> pi_sum 30 48 810 1192 64 >>>>> rand_mat_stat 20 60 150 261 65 >>>>> rand_mat_mul 210 216 880 90 1768 >>>>> >>>>> >>>>> >>>>> benchmark code: >>>>> >>>>> timeit =. 1000 * 6!:2 >>>>> >>>>> NB. double recursive fib. >>>>> fib =. (-&2 +&$: -&1) ^: (1&<) >>>>> >>>>> timeit 'fib 20' >>>>> >>>>> NB. parse int >>>>> parsintPerf =. 3 : 0 >>>>> for. i.y do. >>>>> a =. ?<:2^32x >>>>> s =. ":a >>>>> b =. ".s >>>>> assert b = a >>>>> end. >>>>> ) >>>>> >>>>> timeit 'parsintPerf 1000' >>>>> >>>>> NB. mandel >>>>> mandel =. 3 : 0 >>>>> c =. y >>>>> m =. 0 >>>>> for_n. i.80 do. >>>>> if. 2 <|y do. m =.n break. end. >>>>> y =. c + *:y >>>>> m =. n >>>>> end. >>>>> ) >>>>> >>>>> assert 14628 = +/+/ mandel"0 (_2 + 0.1*i.26) j./ (_1 + 0.1*i.21) >>>>> timeit '+/+/ mandel"0 (_2 + 0.1*i.26) j./ (_1 + 0.1*i.21)' >>>>> >>>>> NB. quicksort >>>>> quicksort=: (($:@(<#[) , (=#[) , $:@(>#[)) ({~ ?@#)) ^: (1<#) >>>>> timeit 'quicksort ? 5000 $ 0' >>>>> >>>>> NB. pi sum >>>>> pisum =. 3 : 'for. i.500 do. +/ %*:>:i.y end.' >>>>> assert '1e_12 > | _1.644834071848065 + pisum 10000' >>>>> timeit 'pisum 10000' >>>>> >>>>> NB. random matrix multiply. >>>>> rand_nn =. 0 ?@$~ 2 # ] >>>>> mp =. +/ . * >>>>> randmatmul =. rand_nn mp rand_nn >>>>> timeit 'randmatmul 1000' >>>>> >>>>> NB. rand mat stats/ >>>>> load 'stats/base' >>>>> randn_nn =. [: normalrand 2 # ] >>>>> trace =. [: +/ (<0 1)&|: >>>>> randstats =. 3 : 0 >>>>> n =.5 >>>>> v =. 0 >>>>> w =. 0 >>>>> for. i.y do. >>>>> a =. randn_nn n >>>>> b =. randn_nn n >>>>> c =. randn_nn n >>>>> d =. randn_nn n >>>>> P =. a,.b,.c,.d >>>>> Q =. (a,.b),c,.d >>>>> PP =. P mp |:P >>>>> QQ =. Q mp |:Q >>>>> v =.v, trace PP mp PP mp PP mp PP >>>>> w =. w, trace QQ mp QQ mp QQ mp QQ >>>>> end. >>>>> ((stddev % mean) v), ((stddev % mean) w) >>>>> ) >>>>> >>>>> timeit 'randstats 1000' >>>> ---------------------------------------------------------------------- >>>> For information about J forums see http://www.jsoftware.com/forums.htm >>> ---------------------------------------------------------------------- >>> For information about J forums see http://www.jsoftware.com/forums.htm >> ---------------------------------------------------------------------- >> For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
