6
$\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$
0

1 Answer 1

16
$\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$
2
  • $\begingroup$ Thanks... I'm new to writing Packages and this is a great help! $\endgroup$ Commented Aug 21, 2013 at 11:18
  • $\begingroup$ This really works! Tks. +1 $\endgroup$ Commented Aug 13, 2015 at 14:55

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.