Управление параллельным выполнением

Haskell предоставляет комбинатор par, который ставит в очередь «искру» для возможного вычисления параллельно с текущим потоком. Он также предоставляет комбинатор pseq, который заставляет вычисление чистого кода выполняться в определенном порядке.

То, что Haskell не , по-видимому, не предоставляет, — это способ генерировать несколько искр, а затем ждать их завершения.Это довольно тривиально для достижения явного параллелизма, но кажется невозможным с чистыми искрами.

Отчасти это, возможно, связано с предполагаемым -случаем использования искр. Похоже, они предназначены для спекулятивной оценки. То есть выполнение работы, которая может быть необходимой, а может и не быть. Следовательно, искры работают только на ядрах, которые в противном случае простаивают.

Однако это не мой вариант использования -. У меня есть куча результатов, которые, как я знаю , на самом деле скоро понадобятся. И если я начну пытаться обработать результаты до того, как вспыхнут искры, я просто снова закончу однопотоковым -кучей сгоревших искр.

Конечно, изparждал завершения искр, параллелизма не будет! Но было бы очень полезно, если бы был какой-нибудь способ произвести несколько искр, а затем дождаться, пока они закончатся. Я не могу найти способ сделать это, хотя.

У кого-нибудь есть полезные предложения? (Очевидно, кроме "использовать явный параллелизм".)

12
задан MathematicalOrchid 6 August 2012 в 12:50
поделиться