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