concurrency - Common Lisp 并行编程

标签 concurrency parallel-processing lisp common-lisp

我想在 Common Lisp 中并行实现我的粒子过滤算法。粒子过滤和采样可以并行化,我想为我的 4 核机器执行此操作。我的问题是并行编程在 CL 中是否可行,如果可行,是否有任何好的读物,关于在 CL 中开始并行计算的教程。

最佳答案

绝对可行!

Bordeaux Threads project为许多实现提供线程原语;我建议使用它而不是 SBCL 的特定于实现的原语(特别是如果您不在 SBCL 上!)。

bt 提供的线程原语非常原始。我用过并喜欢 Eager Future2它建立在 bt 之上,使用 futures 提供并发特性。您可以创建惰性计算、热切(立即)计算或推测性计算的 future 。投机 future 由一个线程池计算,线程池的大小可以定制。

我开始了a little project使用 EF2 提供 CL 函数的并行版本,但目前只有大约三个函数,因此对任何人都没有多大用处。我当然欢迎其他编码人员对其进行破解并提交拉取请求,我希望将来能为此做更多的工作。

还有很多其他图书馆listed on Cliki我还没有尝试过。

至于教程,我不知道有没有,但提供的并发功能在其他语言中也有,而且好的算法和实践通常不是特定于语言的。

如果您有兴趣阅读一本书,我推荐The Concurrent C Programming Language。作者描述了一种新的编程语言,它基于 C,并以并发作为语言特性。当然,由于 CL 的性质,很可能无需创建新的编译器即可实现这些功能。在我看来,这本书介绍了出色的并发概念,并解决了您在编写并发程序时可能遇到或未能考虑的许多问题。

关于concurrency - Common Lisp 并行编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9400410/

相关文章:

c++ - 用于 C++ 类变量的 OpenMP

c - 函数依赖 openMP

scheme - 如何反转 Scheme 中列表元素的顺序

java - 列出源依赖项

concurrency - F#中的并行处理

c++ - 何时在多线程中使用 volatile ?

java - 确保当一个线程更新 map 时,另一个线程将看到此更新的最简单方法是什么?

linux - 并行进程: appending outputs to an array in a zsh script

MySQL INSERT SELECT WHERE 竞争条件

functional-programming - 在方案中随机取元素组