Я думаю, что документ, который вы цитируете, имеет довольно хорошее описание того, что считается статическим распределением работы: каждому работнику "назначается фиксированный диапазон итераций".Для 4 работников это будет означать, что первому присваивается iter
1: 250, второму iter
251: 500, ... или 1: 4: 100 для первого, 2: 4: 1000 для второго ии т. д.
Вы не сказали точно, что вы наблюдаете, но то, что вы описываете, хорошо согласуется с динамическим распределением рабочей нагрузки: во-первых, четыре (пример) работника работают по одному iter
каждый, первый из которыхзаконченные работы над пятым, следующее, которое сделано (что вполне может быть тем же, если три из первых четырех займут несколько больше времени) работает над шестым и так далее.Теперь, если ваши выбросы имеют номера 20, 850 и 900 в том порядке, который MATLAB выбирает для обработки итераций цикла, и каждая занимает в 100 раз больше времени, это означает только то, что 21-я и 320-я итерации будут решаться тремя из четырех рабочих, а один -заняты 20-м (на 320 это будет сделано, теперь предполагается примерно равномерное распределение времени расчета не-выбросов).Рабочий, которому назначена 850-я итерация, тем не менее будет продолжать работать даже после того, как другой решит # 1000, и то же самое для # 900.На самом деле, если бы было около 1100 итераций, то ту, которая работала на # 900, нужно было бы закончить примерно в то время, когда остальные выполняются.назначьте итерации цикла parfor в порядке от 1 до 1000, что не следует предполагать]
Короче говоря, если вы не найдете способ сначала обработать свои выбросы (что, конечно, требует, чтобы вы зналиаприори, какие из них являются выбросами, и чтобы найти способ заставить MATLAB запустить обработку цикла parfor с помощью этих данных), одно только динамическое распределение рабочей нагрузки не может избежать эффекта, который вы наблюдаете.
Добавление: я думаю, однако, что вашенаблюдение, что «поскольку цикл приближается к завершению, рабочий * s *, который оценивал выбросы, продолжает работать», по-видимому, подразумевает, по крайней мере, один из следующих
- выбросы каким-то образомсреди последних итераций MATLAB начинает обрабатывать
- У вас много рабочих, в порядке величины нюколичество итераций
- Ваша оценка количества выбросов (2-3) или оценка их штрафа за время вычислений (коэффициент 100) слишком мала