4
$\begingroup$

I'm developing a package that contains a function that requires evaluation of an expensive Table, so I use ParallelTable instead. It works correctly, but always gives an error message, repeatedly, for each kernel, like this:

Table::iterb: Iterator {mypackage`Private`m,1,mypackage`Private`nsrc$663} does not have appropriate bounds

How can I avoid this error? Do I need to distribute variables explicitly?

$\endgroup$
11
$\begingroup$

The iterator variable in the package lives in the context that your package sets (in this case, mypackage`Private`), but the call to ParallelTable from inside your package does not distribute the definitions in your package, because the parallel functions only distribute contexts that are listed in $DistributedContexts. This is by default set to $Context, which will most probably be Global` if you're running the package in a notebook. So the definitions in your package are unknown to the worker kernels, which is the cause of the error.

Instead, change the function call to

ParallelTable[..., {m, nsrc}, DistributedContexts -> {"mypackage`Private`"}]

Distribute contexts that other symbols might depend on (you don't need to distribute System` and the current context).

$\endgroup$
  • $\begingroup$ Thanks... I'm new to writing Packages and this is a great help! $\endgroup$ – Tom Dickens Aug 21 '13 at 11:18
  • $\begingroup$ This really works! Tks. +1 $\endgroup$ – Murta Aug 13 '15 at 14:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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