Я создаю большой ParallelTable
и хотел бы иметь некоторое представление о том, как происходит вычисление. Для непараллельной таблицы следующий код выполняет отличную работу:
counter = 1;
Timing[
Monitor[
Table[
counter++
, {n, 10^6}];
, ProgressIndicator[counter, {0, 10^6}]
]
]
с результатом {0.943512, Null}
. Однако для параллельного случая необходимо, чтобы counter
делился между ядрами:
counter = 1;
SetSharedVariable[counter];
Timing[
Monitor[
ParallelTable[
counter++
, {n, 10^4}];
, ProgressIndicator[counter, {0, 10^4}]
]
]
с результатом {6.33388, Null}
. Поскольку значение counter
должно передаваться между ядрами при каждом обновлении, удар производительности не является серьезным. Любые идеи о том, как получить представление о том, как происходит вычисление? Возможно, чтобы каждое ядро имело собственное значение для counter
и суммировало их с интервалами? Возможно, какой-то способ определить, какие элементы таблицы уже обработаны ядрами?