## Can I set limit on number of cores Maple uses ?...

As I understand it, Maple will detect and use the available cores in a system, if the calculation is suitable for multi-core use.

As I am installing Maple on a multi-user cluster, using a scheduler to run maple scripts, I want to ensure the maple jobs only use the number of cores allocated to the job.

Is it possible to set the number of cores used ?

If I have misunderstood how Maple works (I am new to it), or if there is a section in the documentation which explains this, please point me in the right direction.  I haven't found this info so far.

## Parallel curves on surfaces

by: Maple 15

Parallel curves on surfaces. The distance between the points of the curves is measured along the curves of intersection of the surface and perpendicular planes.
(According to tradition, it also does not make sense.)

equidistant_curve_surface_MP.mw

## Geometric Proof...

I attempted to show that two lines are parallel.  I started with a problem in Geometry for which I do not have the solution.

I tried several ways with Maple to show this to be true.  Most of the time, I ended when maple could not determine if a-b = c-d, etc.

brg_proof.txt contains a statement of the problem and my latest maple code.

Question: How should I approach the proof, by the compass and straight edge method?  Is this possible in maple?

## A problem in using Grid[Launch]...

Hi all,

I start working with the Grid package.
To familiarize myself with it I ran the "primeChecker" example, which of course has worked perfectly well.

Next I did this (a priori harmless) simple modifications :

1. within the primeChecker procedure :
replace  myVal := userData[thisNode+1] :
by         myVal := userData[thisNode+1, 1] :
2. before launching the procedure with Grid[Launch] :
replace  userData := [ .... ] :  #which is a list
by         userData := [ .... ] :  # the same thing
userData := convert(userData, matrix):

I get the following error message :
error, (in unknown) Matrix index out of range

What does it mean and how can I fix this ?

I am (again) trying to get Maple to do some parallel work; using the Threads package.

My actual problem involves a vector function with 6 elements, acting on 6-vectors. Each element of the output vector is calculated as a high-order polynomial of all 6 input elements. The whole thing is a map that I want to iterate. I plan to evaluate each of the 6 functions in a separate thread (the input vector of course is the same for all six) and then put the results together in a Vector, to be used as input for the next iteration.

Facing difficulty I finally wrote myself a little toy program to check out the basic mechanism. Here it is:

restart;
f:=x -> 1+x^2;
2
f := x -> 1 + x
x:=0:
tt:=time[real]():

for i from 1 to 10 do
id:=Create(f(x),y):
Wait(id):
x:=y:
y:='y':
end do:

time[real]()-tt;
0.018
i;
11
So far so good; even the output (not shown) makes sense. BUT: as I increase the number of iterations in the for...do loop, the memory allocation goes up fast, and I hit a point at about 40 iterations where the whole process locks up and the program never ends, cannot even be stopped (at least for 100 iterations), forcing me to abort the whole thing. I have evidence that Maple allocates vast amounts of memory which finally chokes the whole thing (on a 16 GB-RAM machine).

Anyone have any idea what I am doing wrong? I realize the above example does not provide benefits; in the real example there will be 6 Creates and the loop will Wait for all of these to finish.

I'd really like to get this to work as each function can take quite some time and I do expect at least some speed-up from parallelizing this (even after overhead).

This is on Maple 2015 on Mac OS X 10.10.5 with 16 GB of RAM. I should mention that I set UseHardwareFlots:=true in my .mapleinit file.

Thanks,

M.D.

Hi!I am running some grid computations and I found that I could speed up my computations if my nodes could share some partial results. It seems that Grid:-Send and Grid:-Receive is almost perfect. The problem is that Grid:-Receive blocks the computations where I cannot ensure that a message will ever be send. I've tried to run Grid:-Receive on a thread in an possible infinite loop but it still blocks.

Some pieces of code below:

SignatureReciever:=proc(SigContainer::uneval,stopValue::uneval)
while eval(stopValue) do
end do;
end proc:

SendMessage:=proc(message::string, id::integer)
Threads[Seq](proc(i) if i <> id then Grid:-Send(i,message) end if end proc,i=0..Grid:-NumNodes()-1);
end proc:

In the main procedure run on a node I have

....

....

SendMessage(signature,id);

....

....

stopValue := false;

Do you have any suggestions how to solve my problem?

## How to make a command based on symbols?...

I a working with circuits, and was wondering whether or not it might be possible to shorten the proces of calculating parallel resistors. My idea is that using some symbol, such as || would find the equivalent resistor.

My idea is based on the fact that CrossProduct can also be done using &x command. Like so.

CrossProduct(a,b) = a &x b

So for resistors it would look something like:

Parallel(a,b) = a || b

For those interested the function for parallel resistors would be:

Parallel := (a,b) -> 1/(1/a+1/b);

## GPU programming for solving computational problems...

hi,

I have bought maple18 student edition. I want to learn GPU programming through Maple. Please suggest how to do this. I have a notebook with i7 processor and NVIDIA geforce 750m graphics. I want to solve system of algebraic equations, integral equations etc in parallel using GPUs.

thanks

## Error in task programming model...

Hello, Maple wizards.

I have a problem with Tasks for parallel computations. In each task my programm should execute this command:

>B:=SignalProcessing:-DFT(A)

"A" and "B" are Arrays (1..m). "m" is integer. I have 8 tasks. Each task is a loop ("for i from 1 to n do..." n is integer), where my command is executing. "A" and "B" are local for each task. In this case each task should execute my command n times.

So, I obtain this:

"Error, (in SignalProcessing:-Engine:-DFT) attempting to assign to `FwdDFT` which is protected"

What is it? In Maple Help I read that ">SignalProcessing:-DFT" is Thread-Safe Function.

## Parallel executing in Statistics:-NonLinearfit...

I have a Maple program that fits a nonlinear function with 9 parameters to a dataset that contains multiple records; each record gets fitted separately. The records are ordered by a certain experimental variable (an angle of a target). The initial parameters for each fit are the solutions of the previous fit; in this case I get relatively good initial estimates and not too much trouble fitting. I use Statistics:-NonLinearFit to do the actual fitting.

Since this is a bit time consuming and I need to do this a fair amount of times, I'd like to see if I can't speed his up by employing parallel programming.

One way to speed up a fit is to compute the sum of residuals in parallel; is there a way to do this in Maple?

Another way would be to run several fits at the same time. The problem I have with that in this case is that I use the results of the previous fit as starting values for the next fit. I might be able to increase the stride of this scheme; i.e. for 4 processes, use the result of fit 1 as starting point for fit 5; fit 2 for fit 6 etc. But before I embark on this non-trivial change; can Statistics:-NonLinearFit even be used in this way (i.e. is it thread safe)?? My fitting function is an actual function (as opposed to a procedure with local variables) so I don't think the function itself would cause trouble.

I could also contemplate the Grid package; except that I am concerned about the overhead moving the data over to each node (although it would all sit on one machine with 4 processors).

I realize that I may have to do some experimentation by myself, but if there is any experience out there I'd like to know about it...

Mac Dude

## visualization of the lattice...

Dear all;

I need a help in this question.

u(x,y,t) my solution of PDE. x,y space, and t=time.

In the case without t. .i.e. u(x,y). Here is a visualization of the lattice u(x_i,y_j). i=1..3, anf j=1..3.  Please try this example, it's working.

my question, if i would like to add a third variable t, i.e.  and get u(x_i,y_j,t_k)  on each points. I would like to show the lattice in (x,y) plan for each t_k. I Think I will get many parallel lattice.

Please can some one, modify this code to get the parallel lattice. Thanks.

with(LinearAlgebra):
with(plots):
with(PDEtools):
interface(rtablesize=20):

Here,

L := 'L':
N := 'N':
g := 'g':
Z := i -> -L+2*L/(N+1)*i;
x[0] = Z(0),x[N+1] = Z(N+1),y[0] = Z(0),y[N+1] = Z(N+1);

N := 4;
L := 1;
r := L/(N+1)/4;
ngon := (n,x,y,r,phi) -> [seq([x+r*cos(2*Pi*i/n+phi), y+r*sin(2*Pi*i/n+phi)], i = 1 .. n)]:
p[1] := display([seq(polygonplot(ngon(4,Z(0),Z(j),r,Pi/2),color=magenta),j=0..N+1),

seq(polygonplot(ngon(4,Z(N+1),Z(j),r,Pi/2),color=magenta),j=0..N+1),

seq(polygonplot(ngon(4,Z(i),Z(0),r,0),color=magenta),i=1..N),

seq(polygonplot(ngon(4,Z(i),Z(N+1),r,0),color=magenta),i=1..N),

seq(seq(polygonplot(ngon(20,Z(i),Z(j),r,0),color=white),i=1..N),j=1..N),

textplot([seq(seq([Z(i+0.1),Z(j),typeset(u[i,j])],i=0..N+1),j=0..N+1)],align={above,right})],view=[Z(-1)..Z(N+2),Z(-1)..Z(N+2)],tickmarks=[[seq(Z(i)=typeset(x[i]=evalf[2](Z(i))),i=0..N+1)],[seq(Z(i)=typeset(y[i]=evalf[2](Z(i))),i=0..N+1)]],

axes=boxed,scaling=constrained,labels=[``,``]):
p[1];

## Parallel Add cause kernel connection lost...

If i use expression with function add() it runs normaly, but if I use expression with Threads:-Add (parallel implementation) it causes error "Error, continuation task already created for the current task" or "Kernel connection has been lost"

Expression:

Array(1 .. N,1 .. 1/2*N-NR-1,(i, m) -> evalf(Add(cosArr2[modp(k*i,N)]/kl[k],k = 1 .. NR+m-1)+Add(cosArr2[modp(k*i,N)]*alpha[k],k = NR+m .. 1/2*N)))

What am I doing wrong? Can I use two Add in one evalf?

## Parallel Programming Contents Page

by: Maple

This post is an index page for reading the Parallel Programming blog posts.

Hello, everyone. I have some problem with multithreaded calculation. I just need calculate eigenvalues of matrix m at various parameters (and then export to a file) using advantages of the parallelizing. The following code works but in serial way

restart: with(LinearAlgebra):

m:=ImportMatrix(cat(currentdir(),"m.txt")): # here is matrix m.txt

step:=1:

prc:=proc(k1,k2)

local u,i,j,nmc:

u:=Matrix(ceil(1+(k2-k1)/step),5):

u[1,1]:=k1:

for i from 2 to op([1,1],u) do

u[i,1]:=u[i-1,1]+step:

end do:

for i from 1 to op([1,1],u) do

nmc:=sort(Eigenvalues(m*u[i,1], output='list')):

for j from 2 to op([1,2],u) do

u[i,j]:=nmc[j-1]:

end do:

writedata[APPEND](cat(currentdir(),"u_",convert(k2,string),".txt"), [convert(Re(u[i]),list)]):

print(u[i,1]);

end do:

return finished:

end proc: