是否可以有效地计算在GPU上任意插入的细胞自动机?

时间:2018-12-06 17:14:23

标签: cuda gpu gpgpu

细胞自动机

元胞自动机可以看作是位的数组,加上一个计算表,该表指示必须根据位的邻居不断更新位。例如,

111 -> 0
110 -> 0
101 -> 0
100 -> 1
011 -> 1
010 -> 1
001 -> 1
000 -> 0

该表规定,每当数组包含110序列时,中间位必须翻转。在全局范围内反复进行此操作,使阵列以有趣的方式演化。由于可以轻松地将切片预加载到流式多处理器的共享内存中,因此可以在GPU上高效地执行这种计算。

rule 34

具有插入和删除功能的细胞自动机

现在,假设我们有另一种自动机,其中数组大小可以动态更改,并且某些规则会导致插入新的位。例如:

111 -> 0
110 -> 00
101 -> 
100 -> 1
011 -> 00
010 -> 
001 -> 1
000 -> 0

这与以前的计算类似,不同之处在于,现在,只要数组上有110序列,不仅中间位必须翻转,而且新位0也必须翻转被插入到它旁边。而且,当我们有101序列时,必须删除中间位。

显然,使用相同的数据结构(数组)来实现此新问题将是令人望而却步的,因为在数组中间插入一点需要将所有后元素1的索引右移,这将非常昂贵。

问题

是否有任何聪明的数据结构或通用方法可以使此计算在GPU上有效执行?

1 个答案:

答案 0 :(得分:1)

首先想到的是一个链表,它只影响相邻的元素,而其他元素可以在那里保留引用