Я бы порекомендовал поискать разделителей . Управление потоками в Parallel l oop имеет некоторые накладные расходы, поэтому есть некоторые встроенные логи c, чтобы попытаться сохранить эти издержки небольшими, при этом все равно равномерно распределяя работу между всеми ядрами. Это можно сделать, разделив список на куски и отрегулировав размер фрагмента так, чтобы он достиг некоторой привлекательности.
Я бы предположил, что упорядочение задач с наименьшим первым будет работать против балансировки разделителей. Я бы попробовал сначала заказать самую большую работу, если целью является балансировка. Еще я бы попробовал разделить рабочие элементы на некоторый постоянный размер куска и посмотреть, поможет ли это. Или, возможно, даже написать свой собственный разделитель.
Я не уверен, что это хорошая идея, чтобы попытаться навязать некоторый порядок выполнения. Поскольку вы не управляете планировщиком ОС, не может быть никакого гарантированного заказа. И даже если вы можете сделать его более упорядоченным, это, вероятно, будет стоить пропускной способности.
Кроме того, если вы тратите много времени на оптимизацию распараллеливания, уверены ли вы, что остальная часть кода оптимизирована?