4
$\begingroup$

The Mathematica manual states

TimeConstrained takes account only of CPU time spent inside the main Mathematica kernel process; it does not include additional threads or processes.

However, my computation involves a parallel computation. As an example, consider the code

count = 0;
SetSharedVariable[count];
ProgressIndicator[Dynamic[count], {0, 500}]

f = Total[ParallelTable[count++; i^2, {i, 1, 500}]];

TimeConstrained[f, .1, "fail"]

(* 41791750 *)

How can I achieve that "fail" is returned. I can imagine that it could be complicated to compute the total CPU time of all sub-processes, but for my application it would be sufficient to consider the absolute amount of real-time that has passed as AbsoluteTiming[] does.

Any suggestions?

$\endgroup$

1 Answer 1

1
$\begingroup$

You should change

f = Total[ParallelTable[count++; i^2, {i, 1, 500}]];

into

f := (count = 0; Total[ParallelTable[count++; i^2, {i, 1, 500}]]);

Then, at least in Mathematica v.9, it works.

The fact is that f must be calculated only inside TimeConstrained and not before. The counter must be zeroed before any parallel evaluation

$\endgroup$
0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.