guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: "AIscm" array JIT


From: Jan Wedekind
Subject: Re: "AIscm" array JIT
Date: Fri, 10 Jun 2016 17:03:22 +0100 (BST)
User-agent: Alpine 2.11 (DEB 23 2013-08-11)

On Fri, 10 Jun 2016, Ludovic Courtès wrote:

Jan Wedekind <address@hidden> skribis:

  Here is an example adding an integer to each element of a 2D array
and returning the result:

    scheme@(guile-user)> (use-modules (oop goops) (aiscm jit) (aiscm int)
                                      (aiscm pointer) (aiscm sequence))
    scheme@(guile-user)> (+ (arr (2 3 5) (7 11 13)) 3)
    $1 = #<sequence<sequence<int<8,unsigned>>>>:
    ((5 6 8)
     (10 14 16))

  The fallback method for the GOOPS generic "+" adds a JIT compiled
plus operation for the specific array types to the generic and then
calls "+" again.

Woow, exciting stuff!  It can surely make a different for number
crunching applications.

Ludo’.

Yes, here are some examples with empty arrays and arrays with 250,000 elements. I hope that the upcoming Guile version 2.2 will help increase performance as well.

    $ make bench
    Making bench in bench
    make[1]: Entering directory '/home/jan/test/aiscm/bench'
    LD_LIBRARY_PATH=./.libs:/usr/local/lib GC_INITIAL_HEAP_SIZE=1G 
GC_USE_ENTIRE_HEAP=Y /usr/bin/guile bench.scm
                                           user     system      total        
real
    Guile GOOPS method dispatch        0.000040   0.000000   0.000040 (  
0.000040)
    Guile make empty sequence          0.000150   0.000000   0.000150 (  
0.000140)
    Guile allocate memory              0.000190   0.000000   0.000190 (  
0.000200)
    Guile negate empty sequence        0.001580   0.000110   0.001690 (  
0.001690)
    Guile make sequence                0.000230   0.000010   0.000240 (  
0.000240)
    Guile negate sequence              0.002400   0.000930   0.003330 (  
0.003350)
    C allocate memory                  0.000060   0.000000   0.000060 (  
0.000060)
    C negate empty sequence            0.000030   0.000000   0.000030 (  
0.000030)
    C negate sequence                  0.000730   0.000000   0.000730 (  
0.000720)
    make[1]: Leaving directory '/home/jan/test/aiscm/bench'

Regards
Jan


reply via email to

[Prev in Thread] Current Thread [Next in Thread]