./GP/bin/gp threading engine: pthread time make test-parallel default(nbthreads) default(threadsizemax,"1G") my(t=getwalltime());polmodular(101);getwalltime()-t ## ismersenne(x)=ispseudoprime(2^x-1); gw()=getwalltime(); default(timer,1); my(t=gw());apply(ismersenne,primes(400));gw()-t my(t=gw());parapply(ismersenne,primes(400));gw()-t my(t=gw());select(ismersenne,primes(400));gw()-t my(t=gw());parselect(ismersenne,primes(400));gw()-t ismersenne(x)=ispseudoprime(2^x-1); fun(V)=parvector(#V,i,ismersenne(V[i])); fun(primes(400)) ismersenne(x)=ispseudoprime(2^x-1); GP=true GP/bin/gp2c-run ismersenne.gp ls ismersenne.gp* ismersenne.gp ismersenne.gp.c ismersenne.gp.o ismersenne.gp.run ismersenne.gp.so \r ismersenne.gp.run fun(V)=parvector(#V,i,ismersenne(V[i])); fun(primes(400)) thuemorse(n)= my(V=binary(n)); (-1)^sum(i=1,#V,V[i]); GP=true GP/bin/gp2c-run thuemorse.gp \r thuemorse.gp.run ti(f)=my(t=getwalltime());f();getwalltime()-t default(timer,1); ti(()->sum(n=1,2*10^6, thuemorse(n)/n*1.)) ti(()->parsum(n=1,2*10^6, thuemorse(n)/n*1.)) ti(()->parsum(N=1,200, \ sum(n=1+(N-1)*10^4, N*10^4, thuemorse(n)/n*1.))) \r ismersenne.gp.run parforprime(p=1,999,ismersenne(p),c,if(c,print(p))) prodmersenne(N)= { my(R=1); parforprime(p=1,N, ismersenne(p), c, if(c, R*=p)); R; } prodmersenne(1000) \r ismersenne.gp.run findmersenne(a)= parforprime(p=a,,ismersenne(p),c,if(c,return(p))); findmersenne(4000) findmersenne(8) findmersenne(8) \r ismersenne.gp.run parfirst(fun,V)= parfor(i=1,#V,fun(V[i]),j,if(j,return([i,V[i]]))); parfirst(ismersenne,[4001..5000])