My initial impression, here, is BLAS is written in fortran, suggesting
that there's something wrong with the C language and/or compilers, for
generating efficient numerical code.

-- 
Raul

On Tue, May 7, 2013 at 9: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

Reply via email to