2015-10-08 4 views
3

В Haskell, я могу включить параллельную оценку списков с помощью:Имеет ли Common Lisp (SBCL) функции параллелизма на высоком уровне?

map expensiveFunction list `using` parList rdeepseq 

Добавление только `using` parList rdeepseq позволяет чистое параллельное вычисление и работает в 4 раза быстрее, на мой четырёхъядерный процессор.

Есть ли аналогичная возможность с использованием SBCL?

ответ

8

Common Lisp не имеет стандартного объекта, чтобы сделать это, но есть библиотека, предназначенная сделать именно это, хорошо поддерживается в большинстве реализаций CL: Lparallel

С lparallel вы можете сделать следующее:

(let ((number-sets '((1 2 3) (4 5 6) (10 11 12 13 14) (100 200 300)))) 
    (lparallel:pmap 'list (lambda (v) (apply #'+ v)) number-sets)) 

Это будет выполнять отдельные суммы параллельно, но в противном случае возвращает тот же результат, как если бы один использовал обычную map.

+0

Спасибо! Не знал об этой библиотеке. – Ana

Смежные вопросы