有可能用某种算法或类似的东西来加速细胞自动机吗?我使用的是XNA中的Conway‘s Game of Life实现,它运行得很好,但问题是,当我使用大于128x128单元格的网格时,速度会变得非常慢。
我不认为这与代码或XNA如何处理纹理和绘图有关,但事实上,更新这么多单元(即评估每个单元的邻居,并在此基础上获得其新状态)是一个大量的计算。
当然,一个理想的元胞自动机应该是无限大的,但实际上这是不可能的。但在我看来,128x128太小了,无法真正看到系统的行为。
如有任何帮助,我们将不胜感激!
Hashlife算法使用四叉树、哈希和记忆来压缩CA的时间和空间,以大幅提高性能。查看Golly的示例实现。
我仍在努力自己弄清楚,并寻找好的图书馆。
这里有很好的解释(带有示例代码):http://www.drdobbs.com/jvm/an-algorithm-for-compressing-space-and-t/184406478.
如果您尝试几次,您就会看到时间的流逝。
人们不应该猜测,但我的猜测是,基本上所有的时间都在渲染中。对邻居的评估可能看起来像很多代码,但可能非常简单。如果有一种方法可以避免重新渲染未更改的单元格,这可能会节省很多钱。
我建议使用OpenGL和GLSL。通过这种方式,您可以消除从cpu到gpu的数据传输,并获得10倍或更多的良好加速。