Parallel processing 通用Lisp的OpenMP编译器(附加模块?)?

Parallel processing 通用Lisp的OpenMP编译器(附加模块?)?,parallel-processing,common-lisp,openmp,Parallel Processing,Common Lisp,Openmp,在Lisp land中是否有处理并行性的项目?我现在正在阅读OpenMP的白皮书,我相信这(或类似的东西)一定是任何多用途编程语言的未来 我在网上搜索了与OpenMP相关的CommonLisp,但没有找到多少。那么,您知道有哪个项目会在数据和任务并行性方面使用CommonLisp吗 为了举例说明一个功能,我认为这样的库可以提供: (defprocess some-process (<list of processes to inherit transactions from>)

在Lisp land中是否有处理并行性的项目?我现在正在阅读OpenMP的白皮书,我相信这(或类似的东西)一定是任何多用途编程语言的未来

我在网上搜索了与OpenMP相关的CommonLisp,但没有找到多少。那么,您知道有哪个项目会在数据和任务并行性方面使用CommonLisp吗


为了举例说明一个功能,我认为这样的库可以提供:

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

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

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


请参见Thank@uselpa-yup,据我所知,OpenMP类似于该答案中提到的并发C。但是OpenMP的思想不仅仅是提供一些并行方法,而且还修改现有的语言结构以并行工作。因此,例如,除了
loop
宏之外,还有某种
openmp:loop
宏可以扩展为并行代码。嗯,这或多或少就是这个想法。乍一看,两者都很有趣。你介意扩展你的答案,包括更多关于两者区别的信息吗?我都没有用过。OpenMP和OpenMPI是非常不同的东西