我有一组可以被描述为异步元胞自动机的计算模型。这些模型类似于 Ising 模型,但稍微复杂一些。似乎这些模型将受益于在 GPU 而不是 CPU 上运行。不幸的是,并行化这样一个模型并不是很简单,而且我也不清楚如何去做。我知道有关于这个主题的文献,但这似乎都是针对对算法复杂性的细节感兴趣的核心计算机科学家,而不是像我这样只想描述我可以实现的东西的人,并且因此,我觉得它相当难以理解。
为清楚起见,我并不是在寻找一种最佳算法,而是在寻找一种可以在 CUDA 中快速实现的算法,这种算法可能会显着加快我的 CPU 实现速度。在这个项目中,程序员时间比计算机时间更多地是一个限制因素。
我还应该澄清一下,异步元胞自动机与同步元胞自动机是完全不同的东西,用于并行化同步 CA 的技术(例如 Conway 的生命)不容易适应这个问题。不同之处在于,同步 CA 在每个时间步同时更新每个单元,而异步 CA 在每个时间步更新随机选择的本地区域,如下所述。
我希望并行化的模型是在由约 100000 个单元组成的格子(通常是六边形)上实现的(尽管我想使用更多),运行它们的非并行算法如下所示:
随机选择一对相邻的单元格
计算“能量”函数基于这些细胞周围的当地社区
概率取决于(和一个参数),要么交换两个单元的状态,要么什么都不做。
无限期地重复上述步骤。
边界条件也有一些复杂性,但我想这些不会对并行化造成太大困难。
值得一提的是,我对这些系统的瞬态动力学感兴趣,而不仅仅是平衡状态,所以我需要与上述具有等效动力学的东西,而不仅仅是接近相同平衡分布的东西。(所以棋盘算法的变体不是我想要的。)
并行化上述算法的主要困难是冲突。因为所有的计算只依赖于晶格的局部区域,所以许多晶格站点可以并行更新,只要它们的邻域不重叠。问题是如何避免这种重叠。我可以想到几种方法,但我不知道哪种方法最好。这些如下:
使用 CPU 生成随机网格站点列表并检查冲突。当网格点的数量等于 GPU 处理器的数量时,或者如果检测到碰撞,则将每组坐标发送到 GPU 单元以更新相应的网格点。这将很容易实现,但可能不会加快速度,因为检查 CPU 上的冲突可能不会比在 CPU 上进行整个更新便宜得多。
将晶格划分为多个区域(每个 GPU 单元一个),并有一个 GPU 单元负责随机选择和更新其区域内的网格单元。但是这个想法有很多我不知道如何解决的问题,最明显的是当一个单位选择一个与其区域边缘重叠的邻域时应该发生什么。
近似系统如下:让时间以离散的步骤进行。把格子分成不同的根据一些预定义的方案在每个时间步上设置一组区域,并让每个 GPU 单元随机选择和更新一对邻域不与区域边界重叠的网格单元。由于边界在每个时间步都发生变化,因此只要区域相对较大,此约束可能不会对动态产生太大影响。这似乎很容易实现并且可能很快,但我不知道它将如何近似动态,或者在每个时间步上选择区域边界的最佳方案是什么。我发现了一些对“块同步元胞自动机”的引用,这可能与这个想法相同,也可能不同。(我不知道,因为该方法的所有描述似乎都是俄语或我无法访问的来源。)
我的具体问题如下:
上述任何算法是否是处理异步 CA 模型的 GPU 并行化的明智方法?
有没有更好的办法?
是否有针对此类问题的现有库代码?
我在哪里可以找到“块同步”方法的清晰英文描述?
进步
我相信我已经想出了一种方法来并行化可能合适的异步 CA。下面概述的算法适用于一次只更新一个单元格的普通异步 CA,而不是像我的那样更新相邻的一对单元格。将其推广到我的具体案例存在一些问题,但我想我知道如何解决它们。但是,由于下面讨论的原因,我不确定它会带来多少速度优势。
这个想法是用行为等效的随机同步 CA (SCA) 替换异步 CA(以下简称 ACA)。为此,我们首先假设 ACA 是一个泊松过程。也就是说,时间连续进行,并且每个单元作为每单位时间执行其更新功能的恒定概率,独立于其他单元。
我们构建了一个 SCA,它的每个单元都存储两个东西:状态 单元格(即在顺序实现中将存储在每个单元格中的数据)和一个浮点数表示下一次更新的(连续)时间。该连续时间与 SCA 的更新步骤不对应。我将后者称为“逻辑时间”。时间值根据指数分布随机初始化:. (在哪里是一个参数,其值可以任意选择。)
在每个逻辑时间步,SCA 的单元更新如下:
如果,对于任何在附近, 时间, 没做什么。
否则,(1)更新状态根据各州相邻小区,使用与原始 ACA 相同的规则;(2) 生成一个随机值并更新到.
我相信这可以保证单元格将按照可以“解码”以对应于原始 ACA 的顺序进行更新,同时避免冲突并允许并行更新某些单元格。但是,由于上面的第一个要点,这意味着大多数 GPU 处理器在 SCA 的每个时间步上大部分都处于空闲状态,这并不理想。
我需要多思考一下这个算法的性能是否可以提高,以及如何扩展这个算法来处理ACA中多个cell同时更新的情况。然而,它看起来很有希望,所以我想我会在这里描述它,以防任何人 (a) 知道文献中的任何类似内容,或者 (b) 可以提供对这些剩余问题的任何见解。