【问题标题】:Speeding up a Cellular Automata加速元胞自动机
【发布时间】:2012-01-11 17:35:49
【问题描述】:

是否有可能通过某种算法或类似的东西来加速元胞自动机?我正在使用a Conway's Game of Life implementation made in XNA,它运行良好,但问题是当我使用大于 128x128 单元格的网格时,它变得非常慢。

我不认为这与代码或 XNA 如何处理纹理和绘图有关,但更新这么多单元(即评估每个单元的邻居并基于获得其新状态)的事实是大量计算。

当然,理想的元胞自动机应该是无限大的,但实际上这是不可能的。但在我看来,128x128 太小了,无法真正看到系统的行为。

任何帮助将不胜感激!

【问题讨论】:

    标签: xna conways-game-of-life cellular-automata


    【解决方案1】:

    Hashlife 算法使用四叉树、散列和记忆来压缩 CA 的时间和空间,从而大幅提高性能。查看Golly 以获取示例实现。

    我仍在尝试自己弄清楚,并寻找好的库。

    这里有很好的解释(带有示例代码):http://www.drdobbs.com/jvm/an-algorithm-for-compressing-space-and-t/184406478

    【讨论】:

      【解决方案2】:

      如果您try this 几次,您就会知道时间都花在了哪里。

      人们不应该猜测,但我的猜测基本上是所有时间都用于渲染。 邻居的评估可能看起来像很多代码,但很可能它非常简单。 如果您有办法避免重新渲染未更改的单元格,那可能会节省很多。

      【讨论】:

        【解决方案3】:

        我会推荐使用 OpenGL 和 GLSL。通过这种方式,您可以消除从 cpu 到 gpu 的数据传输,并获得 10 倍或更多的良好加速。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多