что такое динамический параллелизм? - PullRequest
2 голосов
/ 09 февраля 2012

Я не уверен, что правильно понимаю разницу между статическим и динамическим параллелизмом в Haskell.

Предположим, у меня есть функция карты, которую я могу легко распараллелить, используя parMap rdeepseq f xs или map f xs `using` parList rdeepseq.Но это, конечно, создает слишком тонкую гранулярность.Поэтому я использую parListChunk s rdeepseq, чтобы улучшить детализацию.Таким образом, вместо создания искр для каждого элемента списка, я могу создать столько искр, сколько число ядер (определяется параметром -Nx) или в 2-3 раза, чтобы обеспечить гибкое распределение нагрузки.

Но этотот факт, что я адаптирую количество искр / потоков на основе #cores, является формой динамического параллелизма?Я склонен верить нет.

Как мне добиться динамического параллелизма?

1 Ответ

0 голосов
/ 10 февраля 2012

Отказ от ответственности: я любитель параллелизма.

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

...