在包含 Doubles
的集合(为简单起见,称它们为列表)的数据结构上考虑此顺序过程。 .只要我愿意,请执行以下操作:
目标是最终实现收敛,因此“解决方案”与迭代次数呈线性关系。在 SO 问题 here 中可以看到此过程的实现。 ,这是一个直观的可视化:
似乎可以更好地执行此过程 - 也就是说,可以更快地实现收敛 - 通过使用多个在单独的操作系统线程上并发执行的工作程序,例如:
我想一个完美实现的实现应该能够在 O(n/P) 时间内实现解决方案,因为 P 是可用计算资源的数量。
阅读 Haskell 并发性让我头晕目眩,比如
MVar
, TVar
, TChan
, acid-state
等等。似乎很清楚的是,此过程的并发实现看起来与 the one I linked above 大不相同。 .但是,该过程本身似乎本质上是一个非常温和的算法,它本质上是一个内存数据库,我敢肯定有人以前遇到过这个问题。我猜我将不得不使用某种支持体面随机访问(即随机空闲元素)和修改的可变并发数据结构。当我试图将这可能需要的所有东西拼凑起来以提高性能时,我有点迷茫(例如,STM 似乎很可疑)。
如果目标是顺序实现的性能提升,哪些数据结构、并发概念等适合此类任务?
最佳答案
把事情简单化:
你可以稍后尝试更高级的东西。对于原始性能,首先要保持简单:保持锁定的数量(例如每个缓冲区一个);确保编译您的代码并使用线程运行时(
ghc -O2
),您应该有一个良好的开端。RWH 有一个介绍章节 cover the basics并发 Haskell。
关于haskell - 通过并发提高仿真性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10627980/