Bill Allombert on Sun, 27 Oct 2013 23:10:12 +0100


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

Branch bill-mt for parallel pari updated again


Dear PARI developers,

I have updated the GIT branch bill-mt for parallel pari again.
This branch support
- POSIX threads: do
- MPI (for clusters)

The documentation is available at
<http://pari.math.u-bordeaux.fr/~bill/parallel.pdf>

The following parallel GP functions are available:
parapply, pareval, parsum, parvector
and two new experimental parallel function:
parfor and parfirst:

I might decide to remove parfirst and parsum because parfor is more general.

parfor(i = a,b,expr1,j,expr2):

   The  sequence  expr2   (dependent on i and j)  is evaluated for i between a
and b,  in random order, with j being substitued for the value of expr1
(dependent on i), computed in parallel. It is allowed fo expr2 to exit the loop
using break/next/return,  however in that case,  expr2 will still be evaluated
for all remaining value of i less than the current one. 

Actually, parfor cal be used to emulate all the others.

For performance, it is better to move most code from expr2 to expr1, since only expr1
is evauated in parallel.

An example

findc(p)=
{ 
  parfor(i=0,p-1,
    my(E=ellinit([1,i]));ellcard(E,p)
   ,card
   ,if(isprime(card),return([i,card])))
}

find an elliptic curve of prime order over F_p, in parallel, stopping at the
first curve found. ("i" will always be the smallest possible).

Assuming the call to isprime take a significant CPU time, it can be moved to expr1 as follow:

findc(p)=
{
  parfor(i=0,p-1,
    my(c=ellcard(ellinit([1,i]),p));
    [c,isprime(c)],
   ,j
   ,if(j[2],return([i,j[1]])))
}

Cheers,
Bill.