unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
From: Nala Ginrut <nalaginrut@gmail.com>
To: Jan Wedekind <jan@wedesoft.de>, guile-user@gnu.org
Subject: Re: "AIscm" array JIT
Date: Sat, 11 Jun 2016 01:38:46 +0800	[thread overview]
Message-ID: <1465580326.4741.8.camel@gmail.com> (raw)
In-Reply-To: <alpine.DEB.2.11.1606082145020.10565@wedemob>

I've installed from debian repo and tried all the example code, very
cool and impressive! Thanks for the work!
Last months I tried matrix operations in Guile and ChezScheme, it's too
slow. I expect to do some machine learning things to control robot car
with the camera. And I found AIscm has the basic things what I want.
Please continue the work, it's useful. ;-)


On Wed, 2016-06-08 at 22:16 +0100, Jan Wedekind wrote:
> Hi,
>    I am working on a compact library [1] for JIT compilation of
> array 
> operations. It only runs on AMD64 processors. Currently it supports
> array 
> operations using booleans, integers, and integer RGB and integer
> complex 
> numbers.
>    There are still important things missing: floating point numbers, 
> compiling calls to C methods (e.g. sin, cos, ...), tensor
> operations, 
> convolutions, ... I would like to eventually do numerical processing 
> similar to Python's NumPy (but more generic), Theano (but more
> compact 
> syntax as facilitated by macros), and OpenCV.
>    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.
>    The corresponding machine code to produce the unsigned byte array
> is 
> shown below:
> 
>       0:   4c 89 64 24 f0          mov    QWORD PTR [rsp-0x10],r12
>       5:   48 89 6c 24 e8          mov    QWORD PTR [rsp-0x18],rbp
>       a:   4c 89 7c 24 e0          mov    QWORD PTR [rsp-0x20],r15
>       f:   4c 89 74 24 d8          mov    QWORD PTR [rsp-0x28],r14
>      14:   4c 89 6c 24 d0          mov    QWORD PTR [rsp-0x30],r13
>      19:   48 89 5c 24 c8          mov    QWORD PTR [rsp-0x38],rbx
>      1e:   48 89 7c 24 f8          mov    QWORD PTR [rsp-0x8],rdi
>      23:   4c 8b 64 24 08          mov    r12,QWORD PTR [rsp+0x8]
>      28:   48 8b 7c 24 18          mov    rdi,QWORD PTR [rsp+0x18]
>      2d:   48 8b 6c 24 20          mov    rbp,QWORD PTR [rsp+0x20]
>      32:   8a 44 24 28             mov    al,BYTE PTR [rsp+0x28]
>      36:   48 6b de 01             imul   rbx,rsi,0x1
>      3a:   49 8b f0                mov    rsi,r8
>      3d:   4d 6b cc 01             imul   r9,r12,0x1
>      41:   4c 8b fd                mov    r15,rbp
>      44:   49 be 00 00 00 00 00    movabs r14,0x0
>      4b:   00 00 00
>      4e:   4c 8b 44 24 f8          mov    r8,QWORD PTR [rsp-0x8]
>      53:   4d 3b f0                cmp    r14,r8
>      56:   74 3e                   je     0x96
>      58:   49 ff c6                inc    r14
>      5b:   4c 6b d9 01             imul   r11,rcx,0x1
>      5f:   4c 8b ee                mov    r13,rsi
>      62:   4c 6b d7 01             imul   r10,rdi,0x1
>      66:   4d 8b e7                mov    r12,r15
>      69:   48 bd 00 00 00 00 00    movabs rbp,0x0
>      70:   00 00 00
>      73:   48 3b ea                cmp    rbp,rdx
>      76:   74 16                   je     0x8e
>      78:   48 ff c5                inc    rbp
>      7b:   45 8a 04 24             mov    r8b,BYTE PTR [r12]
>      7f:   44 02 c0                add    r8b,al
>      82:   45 88 45 00             mov    BYTE PTR [r13+0x0],r8b
>      86:   4d 03 eb                add    r13,r11
>      89:   4d 03 e2                add    r12,r10
>      8c:   eb e5                   jmp    0x73
>      8e:   48 03 f3                add    rsi,rbx
>      91:   4d 03 f9                add    r15,r9
>      94:   eb b8                   jmp    0x4e
>      96:   4c 8b 64 24 f0          mov    r12,QWORD PTR [rsp-0x10]
>      9b:   48 8b 6c 24 e8          mov    rbp,QWORD PTR [rsp-0x18]
>      a0:   4c 8b 7c 24 e0          mov    r15,QWORD PTR [rsp-0x20]
>      a5:   4c 8b 74 24 d8          mov    r14,QWORD PTR [rsp-0x28]
>      aa:   4c 8b 6c 24 d0          mov    r13,QWORD PTR [rsp-0x30]
>      af:   48 8b 5c 24 c8          mov    rbx,QWORD PTR [rsp-0x38]
>      b4:   c3                      ret
> 
> 
> 
>    Any comments,suggestions, and feedback are welcome!
> 
> Regards
> Jan
> 
> [1] https://github.com/wedesoft/aiscm
> 




  parent reply	other threads:[~2016-06-10 17:38 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-08 21:16 "AIscm" array JIT Jan Wedekind
2016-06-09  9:02 ` tomas
2016-06-09 11:48   ` Jan Wedekind
2016-06-10 13:33 ` Ludovic Courtès
2016-06-10 16:03   ` Jan Wedekind
2016-06-10 21:48     ` Arne Babenhauserheide
2016-06-11  7:32       ` Jan Wedekind
2016-06-10 17:38 ` Nala Ginrut [this message]
2016-06-11  1:42 ` Basa Centro
2016-06-11 12:22   ` Jan Wedekind

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1465580326.4741.8.camel@gmail.com \
    --to=nalaginrut@gmail.com \
    --cc=guile-user@gnu.org \
    --cc=jan@wedesoft.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).