我不知道如今的图形卡中提供的大规模并行计算单元(例如在OpenCL中可编程的一种)是否足以有效地模拟1D细胞自动机(或2D细胞自动机?)。
如果我们选择适合芯片内存的有限网格,是否可以期望在(恒定)恒定时间内计算出在此网格上定义的元胞自动机的一次跃迁?
我认为2D细胞自动机比1D自动机需要更多的带宽来进行芯片不同部分之间的通信。
对于FPGA编程或定制芯片,我也会对同一问题感兴趣。
我不知道如今的图形卡中提供的大规模并行计算单元(例如在OpenCL中可编程的一种)是否足以有效地模拟1D细胞自动机(或2D细胞自动机?)。
如果我们选择适合芯片内存的有限网格,是否可以期望在(恒定)恒定时间内计算出在此网格上定义的元胞自动机的一次跃迁?
我认为2D细胞自动机比1D自动机需要更多的带宽来进行芯片不同部分之间的通信。
对于FPGA编程或定制芯片,我也会对同一问题感兴趣。
Answers:
很好的问题。我相信答案是肯定的。
演化细胞自动机本质上等同于执行模版计算。在某些1D,2D或3D网格上,将根据点的邻域的最后一个值来计算点(或像元)的连续值。在简单的一维CA中,该邻域可能是该单元以及左右两个单元。在GPU上进行模版计算的例子有很多。例如,ORNL针对OpenCL / CUDA的SHOC基准套件包含一个2D模板示例。
基本思想是让每个线程获得邻域的几个点的本地副本,然后计算该邻域确定的点的下一个值。通过适当地使用例如CUDA(寄存器,共享,常量,纹理和全局存储器)中的存储器层次结构和SIMT处理模型(例如,通过适当地计算过渡函数而不会引入过多的翘曲散度),可以实现良好的性能。
如果我举个例子,这个答案会好很多,但是我现在正忙于编写任何代码……但是,从理论上讲,我认为通过在模板后对它们进行建模来在GPU上有效地模拟CA是可行的。计算。但是,为GPU编写良好的模板计算需要考虑很多因素。
无论您做什么,计算元胞自动机的下一个状态所需的计算量都比自动机中的单元数要多。因此,为了获得恒定的时间,您需要与单元一样多的计算核心。
目前,GPU中的这些数量最多为数千个,而下一状态的计算非常简单,以至于我希望结果受IO限制,即,您可以通过考虑以下因素获得所需时间的很好的近似值:需要进行数据移动(如果不是一个很好的近似值,则说明实现效率低下或体系结构不合适,但这将非常令人惊讶)。
对于FPGA,这个问题更加棘手,可能取决于内存和可用计算单元的混合。如果我不太远,那么您将没有足够的内存来保持所有设备的繁忙,并且如果您依赖外部内存,那么您将与GPU处于同一位置,内存带宽将成为限制因素,而我不会如果得出的结论是没有优于GPU的优势,我们将感到惊讶。(请注意,虽然我使用FPGA是几年前的事,但现在可能存在混合正确的FPGA模型)。
ASIC提供了更大的灵活性。您可以轻松地实现类似收缩压的实现(但是对于双向数据流,某些收缩压通常仅限于单向数据流),每个物理单元都是一个逻辑单元:内存位和计算其下一个状态所需的逻辑,并进行了布局因此它是物理邻居,这是合乎逻辑的 您显然处于恒定时间领域。取决于您拥有的硬宏,最好不那么明显一些,并具有将几个逻辑单元重组的物理单元。目标是最大程度地提高一块芯片的性能,换句话说,一旦您的通信需求与单元数成正比,就将与芯片外部的通信减至最少,从而使带宽受到限制。是的,这意味着如果您需要查看每一步的所有单元格,您可能不会比使用GPU更好。(完全定制只能提供更好的集成,即每个芯片更多的单元)。
简介:-如果您要查看所有中间状态,GPU是最有效的方法-如果您不这样做,则需要足够的数量来证明ASIC具有更好的性能,FPGA可能无法提供足够的优势有什么。