在Haskell中,我可以使用以下方法启用列表的并行评估:
map expensiveFunction list `using` parList rdeepseq
仅添加`using` parList rdeepseq
可实现纯并行计算,并在我的四核处理器上运行速度提高4倍。
使用SBCL是否有类似功能?
答案 0 :(得分: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
一样。