Common Lisp(SBCL)是否具有高级并行功能?

Ana*_*Ana 3 parallel-processing sbcl common-lisp

在Haskell中,我能够使用以下方法启用列表的并行评估:

map expensiveFunction list `using` parList rdeepseq
Run Code Online (Sandbox Code Playgroud)

仅添加`using` parList rdeepseq能够实现纯并行计算,并且在我的四核处理器上运行速度提高了4倍.

使用SBCL有类似的功能吗?

Eli*_*son 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))
Run Code Online (Sandbox Code Playgroud)

这将并行执行各个求和,否则返回相同的结果,就像使用plain一样map.