Common Lisp的OpenMP编译器(附加组件?)?

时间:2013-11-06 14:35:03

标签: parallel-processing common-lisp openmp

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

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

1 个答案:

答案 0 :(得分:1)

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

http://lparallel.org/

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