Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2013

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: how to write ParallelSubmit in a Do loop? trying to use up all CPU

  • To: undisclosed-recipients:;
  • Subject: [mg131455] Re: how to write ParallelSubmit in a Do loop? trying to use up all CPU
  • From: Sseziwa Mukasa <mukasa at gmail.com>
  • Date: Tue, 9 Jul 2013 06:50:09 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • Delivered-to: l-mathgroup@wolfram.com
  • Delivered-to: mathgroup-outx@smc.vnet.net
  • Delivered-to: mathgroup-newsendx@smc.vnet.net
  • References: <20130708032047.1772769BF@smc.vnet.net>

First of all, Do always returns Null, but the assignment still happened, evaluate job[0] to check.

However for your computation to work you need to distribute the definition of step and enclose the local value of i in ParallelSubmit:

t = AbsoluteTime[];
initial = 1
final = 20000000
step = (final - initial + 1)/8
Clear["job"]
Clear["i"]

DistributeDefinitions[step]
Do[job[i]=ParallelSubmit[{i},Table[Prime[k], {k, step*i + 1, step*(i + 1)}]]
, {i, 0, 7}]

Clear["a"]
Table[a[jj], {jj, 1, 8}] = WaitAll[Table[job[j], {j, 0, 7}]]

time2 = AbsoluteTime[] - t

Regards,
Sseziwa

On Jul 7, 2013, at 11:20 PM, alex <0899607 at gmail.com> wrote:

> when it comes a heavily calculation, it takes time, but not fully cpu usage
> i found a scrip using ParallelSubmit, which is quite powerful and really shorten the time in calculating
>
> =
http://mathematica.stackexchange.com/questions/10969/parallelization-problem-in-linearsolve-and-minimize
>
>
> t = AbsoluteTime[];
> job1 = ParallelSubmit[Table[Prime[k], {k, 1, 2500000}]];
> job2 = ParallelSubmit[Table[Prime[k], {k, 2500001, 5000000}]];
> job3 = ParallelSubmit[Table[Prime[k], {k, 5000001, 7500000}]];
> job4 = ParallelSubmit[Table[Prime[k], {k, 7500001, 10000000}]];
> job5 = ParallelSubmit[Table[Prime[k], {k, 10000001, 12500000}]];
> job6 = ParallelSubmit[Table[Prime[k], {k, 12500001, 15000000}]];
> job7 = ParallelSubmit[Table[Prime[k], {k, 15000001, 17500000}]];
> job8 = ParallelSubmit[Table[Prime[k], {k, 17500001, 20000000}]];
> {a1, a2, a3, a4, a5, a6, a7, a8} =
> WaitAll[{job1, job2, job3, job4, job5, job6, job7, job8}];
> time2 = AbsoluteTime[] - t
>
> t = AbsoluteTime[];
>
>
>
>
>
> then i try to rewrite the script by using Do loop, so i can just setup the initial and final value then it can be separated into 8 parts automatically , but i failed.
>
>
> t = AbsoluteTime[];
> initial = 1
> final = 20000000
> step = (final - initial + 1)/8
> Clear["job"]
> Clear["i"]
>
> Do[job[i]=ParallelSubmit[Table[Prime[k], {k, step*i + 1, step*(i + 1)}]]
> , {i, 0, 7}]
>
> Clear["a"]
> Table[a[jj], {jj, 1, 8}] = WaitAll[Table[job[j], {j, 0, 7}]]
>
> time2 = AbsoluteTime[] - t
>
>
>
> it keeps showing Null, it seems that it cant replace the variable in Do loop exactly, it is still a variable.
>
> how do i rewrite the scrip? to make it be separated into 8 parts automatically?
> thank you for your help ^^
>




  • Prev by Date: Omega tau podcasts on Wolfram|Alpha and Methematica
  • Next by Date: Re: color surface according to absolut value of the gradient
  • Previous by thread: how to write ParallelSubmit in a Do loop? trying to use up all CPU
  • Next by thread: Unwanted parentheses appearing in a notebook that is opened by a