Отказ от ответственности: я любитель параллелизма.
Чанкинг, основанный на количестве ядер, кажется неправильным.Вместо этого, блок, основанный на том, сколько работы должно быть выполнено на одном ядре: достаточно значительный, чтобы ядро на самом деле его обрабатывало, но достаточно маленький, чтобы вся задача могла быть существенно распределена (более 1 блока).Поскольку работа одного блока значительно превышает затраты на переключение контекста и планирование, это не имеет значения, если у вас ровно 1 блок на ядро или 1000 блоков на ядро.Если вы хотите минимальные издержки параллелизм, тогда да, разбейте вашу проблему на куски таким образом, чтобы вы могли запланировать ровно 1 блок на ядро, чтобы выполнить задачу.Но если вы хотите динамический параллелизм , то вам нужно почувствовать стоимость планирования;будет немного больше накладных расходов на переключение и планирование, но с кусками соответствующего размера, накладные расходы не повредят сильно.Если задача разбита на меньшее количество кусков, чем есть ядра, то, возможно, задачу не нужно распараллеливать.