0

如何估计 Scala 程序可以处理的演员数量?

对于上下文,我正在考虑本质上是一个神经网络,它将以高速率创建和忘记细胞。我正在考虑让每个细胞都成为演员,但会有数百万个。我正在尝试确定这种设计是否值得追求,但无法估计演员数量的限制。我的意图是它应该完全在一个系统上运行,因此不适用分布式限制。

就此而言,如果有更好的选择,我还没有确定 Scala,但单元确实有状态,例如,它们与其他单元的连接、连接的权重等。虽然这可以完成作为“每个单元格都是最终的。更改意味着用具有相同 id# 的新单元格替换当前单元格。”

PS:我不知道斯卡拉。我正在考虑拿起它来做这个项目。我还在考虑许多其他替代方案,包括 Java、Object Pascal 和 Ada。但是与线程池相比,actor似乎更适合我所追求的东西(并且 Java 无法处理足够的线程来使线程/单元设计可行。

PS:在任何时候,大多数演员都是静止的,但需要有一种方法可以循环浏览他们的整个集合。如果语言中没有内置,则可以通过每个单元格中的第一个/下一个链接进行管理。(需要两个链接,以允许提取中间的单元格以进行释放。)

4

1 回答 1

2

对于神经网络模拟,真正的问题是有多少计算工作将花费在通信上,以及计算单元内的某些内容将花费多少?如果大部分工作是在通信上,那么 Actor 可能是正确性的好选择,但对于效率来说根本不是一个好的选择(即使使用 Akka,它的性能相当不错;不过 AsyncFP可能会成功)。数以百万计的神经元听起来很慢——效率可能是一个重要的问题。如果神经元有一些非常繁重的计算要自己完成,那么通信开销就没什么大不了的。

如果通信是瓶颈,并且您有很多微小的消息,那么您应该设计一个自定义数据结构来保存网络,以及自定义线程处理,这将利用您拥有的所有处理器并最小化锁定的数量你必须这样做。例如,如果您有空间,则每个神经元都可以保存来自与其链接的那些神经元的输入值数组,并且它会在计算其输出时直接读取该数组而无需锁定,输入神经元只会更新值无锁定他们去的时候。然后,您可以将所有神经元转储到一个大池中,并让一个主人将它们分成几块,我不知道,一次可能有一万个,每个到它自己的线程。Scala 可以很好地处理这类事情,但希望自己做很多低级工作,或者等待很长时间才能完成模拟。

于 2012-12-24T19:03:22.760 回答