是否有任何涉及Lisp土地并行性的项目?我现在正在阅读OpenMP的白皮书,我确信这(或类似的东西)必须是任何多用途编程语言的未来。
我在网上搜索了与OpenMP相关的Common Lisp,但没有找到太多内容。那么,你知道任何将Common Lisp用于数据和任务并行的项目吗?
只是给出一些我想象的功能的图解:
(defprocess some-process
(<list of processes to inherit transactions from>)
(<list of transaction defs>)
(<process creation arguments>)
"<docstring>"
(accept
(some-transaction (<transaction arglist>) ...)
(some-other-transaction (...) ...))
...
(select ...))
即。它将是一个管理流程的框架,它建立在多线程之上。
我研究了Lars Brinkhoff提到的两个库,这里有非常快速的概述:
lparallel
是一个基于另一个Lisp线程库bordeaux-threads
的库。它还实现了一些基于线程(并行缩减,映射等)以及几个宏(并行let)的常用函数。它也有很少的新构造,例如并行树(管理并行执行的构造+承诺层次结构的障碍 - 并行语义的基本构建块)。正如我所看到的那样好处:
mpi
绑定。 mpi
本身就是一个非常低级的库。它建立在C和Fortran语言的语义和限制之上,使得很难适应Lisp。但是,它可能表现更好(我还没有运行任何测试),它更低级,它附带了在计算机的集群/网络上执行代码的框架。使用这个库传递Lisp对象会非常困难。甚至整数也会带来一个重大的挑战,因为图书馆非常难以处理,而是处理机器字而不是数字。运行和调试程序也存在问题,因为mpi
会启动Lisp的几个实例相互竞争输入和输出...... 我将尝试在我的两台机器上建立一个本地网络,看看我是否可以为这种并行计算提供合理的设置。在那之前,看起来使用lparallel
是迄今为止在Lisp中进行并行编程的最简单方法。