Автоматический параллелизм не так прост, как может показаться. Проблема заключается в том, что, если разбиение выполняется автоматически, существует риск перераспределения (слишком много разделов), что может привести к чрезмерным накладным расходам или неполному разделению, что не приведет к надлежащему продвижению всех ядер в ваших процессорах.
Статическое вычисление этого (т. Е. Во время компиляции) довольно сложно, поэтому разработчик обычно оставляет аннотацию , где , чтобы распараллелить.
Примеры:
Haskell имеет комбинатор par
, который служит аннотацией для создания spark , вычисления, которое превращается в поток, когда становится доступным ядро ЦП.
Data Parallel Haskell : определяет тип данных параллельного массива, чтобы обеспечить более неявный стиль распараллеливания, но, похоже, это обходится некоторыми ограничениями и все еще является экспериментальным кодом.
( отказ от ответственности: я не разработчик на Haskell )
Параллельная библиотека задач в .NET :
Вы можете выполнить автоматическое распараллеливание данных или создать собственный Partitioner .
Вам все еще нужно знать, как работает распараллеливание, иначе вы получите с чрезмерным или недостаточным разделением .
У Рида Корпси есть большая серия статей о TPL и PLINQ .
DryadLINQ основывается на PLINQ и добавляет автоматические распределенные вычисления.
Ни один из них на самом деле не является родным для языка, но они тесно интегрированы. Есть даже модуль интеграции PLINQ для F # .