Mathematica's ParallelTable (or any Parallel function based on iterators, like ParallelDo) only parallize the computation for the top level iterator (even with `Method -> "FinestGrained"' set).
For example, with the following commands (on a system with at least 4 cores)
LaunchKernels[4];
ParallelTable[Pause[1], {i, 2}, {j, 2}, Method -> "FinestGrained"];// AbsoluteTiming
ParallelTable[Pause[1], {i, 1}, {j, 4}, Method -> "FinestGrained"]; // AbsoluteTiming
ParallelTable[Pause[1], {i, 4}, {j, 1}, Method -> "FinestGrained"]; // AbsoluteTiming
The first table will complete in about 2 seconds, the second in 4 and the last in 1. This behaviour has been discussed in previous questions for example:
- ParallelTable running on outermost index only
- Efficient way to utilise Parallel features to make use of many cores
One suggested work around is to work with a flattened table, which in many cases is appropriate. However sometimes this is not very appropriate. (Think for example about cases with dependent iterators producing non-rectangular arrays.) I want (to create) a version of ParallelTable that has the same syntax as Table, but parallelizes the computation at the finest possible (entry) level.
(My secret hope here is that there actually is an undocumented option of ParallelTable that actually does this.)