Hi,

I have finished a first shot at parallel (i.e. multicore) GNU APL: SVN 480.

This version computes all scalar functions in parallel if the ravel length of the result exceeds 100.
This can make the computation of small (but still > 100) vectors slower than if they were computed sequentially.
Therefore parallel execution is not yet the default. To enable it:

    ./configure
    make parallel
    make
    sudo make install


The current version uses some linux-specific features, which will be ported to other platforms later on (if possible).
./configure is supposed to detect this.

Some simple benchmarks are promising:

      X←1000000⍴2J2   ⍝ 1 Mio complex numbers
     
      ⎕SYL[26;2]←1   ⍝ 1 core
      T←⎕TS ◊ ⊣X⋆X ◊ 1 1 1 24 60 60 1000⊥⎕TS - T
246
     
      ⎕SYL[26;2]←2   ⍝ 2 cores
      T←⎕TS ◊ ⊣X⋆X ◊ 1 1 1 24 60 60 1000⊥⎕TS - T
136
     
      ⎕SYL[26;2]←3   ⍝ 3 cores
      T←⎕TS ◊ ⊣X⋆X ◊ 1 1 1 24 60 60 1000⊥⎕TS - T
102
     
      ⎕SYL[26;2]←4   ⍝ 4 cores
      T←⎕TS ◊ ⊣X⋆X ◊ 1 1 1 24 60 60 1000⊥⎕TS - T

91

The next step will be to find the break-even points of all scalar functions, so that parallel execution is
only done when it promises some speedup.

Elias, the PointerCell constructor has got one more argument . I have updated emacs-mode and sql accordingly.
- you may want to sync back.

/// Jürgen



Reply via email to