2

在 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. 它还实现了一些基于线程(parallel reduce、map 等)以及几个宏(parallel let)的常用功能。它也有一些新的构造,例如并行树(一种管理并行执行的构造+承诺层次结构的障碍-并行语义的基本构建块)。在我看来,好处是:
    • 更容易使用,
    • 更便携,
    • 对于想要利用典型的 Lisp 长数学以及特定于 Lisp 的编码原语(例如错误处理)的程序员,不会受到任何惩罚。
  • mpi绑定。mpi本身就是一个非常低级的库。它建立在 C 和 Fortran 语言的语义和限制之上,因此很难适应 Lisp。但是,它可能性能更好(我还没有运行任何测试),它更底层,并且它带有用于在计算机集群/网络上执行代码的框架。使用这个库传递 Lisp 对象会非常困难。即使是整数也会带来重大挑战,因为该库非常简单,并且处理机器字而不是数字。运行和调试程序也存在问题,因为mpi会启动多个 Lisp 实例,相互竞争输入和输出......

我将尝试在我的两台机器上建立一个本地网络,看看我是否能为这种并行计算提出一个合理的设置。在那之前,看起来 usinglparallel是迄今为止在 Lisp 中进行并行编程的最简单方法。

4

1 回答 1

1

不是 OpenMP,而是另外两个库:

http://lparallel.org/

http://code.google.com/p/cl-mpi/

于 2013-11-07T12:05:21.900 回答