我想在 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/