If the others are using BLAS they are going to be faster, because (I believe) BLAS is coded to exploit special machine instructions and multiprocessing capabilities of the underlying machine.
On Tue, May 7, 2013 at 6:17 AM, Elton Wang <[email protected]> wrote: > 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 > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
