Mathematica Simple Parallelization with Mathematica

  • Thread starter Thread starter eleteroboltz
  • Start date Start date
  • Tags Tags
    Mathematica
AI Thread Summary
The discussion revolves around running a Mathematica program in parallel, specifically using the ParallelDo function to handle multiple independent cases by varying parameters. The initial issue was that values were not being passed correctly to the function f. A key point highlighted is the need to ensure that functions used in parallel computations are recognized by the parallel kernels. The user initially attempted to use DistributeDefinitions[] without success. However, the solution was found by using SetSharedFunction[] to define f as a shared function, which resolved the issue. There is also a suggestion to consider rewriting the code to avoid the need for shared functions, as using them may lead to slower performance in some cases. Performance measurement with and without shared functions is recommended for optimization.
eleteroboltz
Messages
7
Reaction score
0
I have a program with Mathematica and I would like to run it in parallel.
The essential of the code is actually run a lot of cases, changing some parameters.
In other words, it means that each case is totally independent of the other.
But I'm not quite sure about how to do it.

To exemplify this situation, let's see the sample code bellow.

Code:
fcalc[i_, j_] := NIntegrate[i Cos[j x], {x, 0, 1}]

ParallelDo[
 f[i, j] = fcalc[i, j]
 , {i, 1, 10}
 , {j, 1, 10}]

The problem is that the values are not passing to f.

Any suggestions?

Thank you
 
Physics news on Phys.org
In
http://reference.wolfram.com/mathematica/ref/ParallelDo.html
under "Possible Issues" it says
"A function used that is not known on the parallel kernels has no effect:"
and then it describes using DistributeDefinitions[].

Perhaps reading every tiny detail of the documentation of ParallelDo may turn up other things you need to know.
 
Bill Simpson said:
In
http://reference.wolfram.com/mathematica/ref/ParallelDo.html
under "Possible Issues" it says
"A function used that is not known on the parallel kernels has no effect:"
and then it describes using DistributeDefinitions[].

Perhaps reading every tiny detail of the documentation of ParallelDo may turn up other things you need to know.


Thank you for the answer, Bill.
I tried to use DistributeDefinitions[] but it's still not working for me.

Code:
fcalc[i_, j_] := NIntegrate[i Cos[j x], {x, 0, 1}]

DistributeDefinitions[f]

ParallelDo[
 f[i, j] = fcalc[i, j]
 , {i, 1, 10}
 , {j, 1, 10}]
 
I found the solution for this problem.
The correct code is shown bellow:

Code:
fcalc[i_, j_] := NIntegrate[i Cos[j x], {x, 0, 1}]

SetSharedFunction[f]

ParallelDo[
 f[i, j] = fcalc[i, j]
 , {i, 1, 10}
 , {j, 1, 10}]
 
I'm glad that reading the documentation allowed you to get the code working.

I understand that the way you have written the code may require shared functions, but perhaps you can find a way to rewrite the code so that is not needed, just for a test.

If performance is important then you might see if you can get a stopwatch and find a way to measure the performance with and without the SetSharedFuction[].

It may or may not apply with shared functions, but someone reported using shared variables with parallel resulted in an order of magnitude slower performance.
 

Similar threads

Replies
1
Views
2K
Replies
13
Views
2K
Replies
7
Views
2K
Replies
1
Views
2K
Replies
4
Views
2K
Replies
2
Views
2K
Replies
34
Views
4K
Replies
4
Views
3K
Back
Top