元胞自动机可以看作是位的数组,加上一个计算表,该表指示必须根据位的邻居不断更新位。例如,
111 -> 0
110 -> 0
101 -> 0
100 -> 1
011 -> 1
010 -> 1
001 -> 1
000 -> 0
该表规定,每当数组包含110
序列时,中间位必须翻转。在全局范围内反复进行此操作,使阵列以有趣的方式演化。由于可以轻松地将切片预加载到流式多处理器的共享内存中,因此可以在GPU上高效地执行这种计算。
现在,假设我们有另一种自动机,其中数组大小可以动态更改,并且某些规则会导致插入新的位。例如:
111 -> 0
110 -> 00
101 ->
100 -> 1
011 -> 00
010 ->
001 -> 1
000 -> 0
这与以前的计算类似,不同之处在于,现在,只要数组上有110
序列,不仅中间位必须翻转,而且新位0
也必须翻转被插入到它旁边。而且,当我们有101
序列时,必须删除中间位。
显然,使用相同的数据结构(数组)来实现此新问题将是令人望而却步的,因为在数组中间插入一点需要将所有后元素1的索引右移,这将非常昂贵。
是否有任何聪明的数据结构或通用方法可以使此计算在GPU上有效执行?
答案 0 :(得分:1)
首先想到的是一个链表,它只影响相邻的元素,而其他元素可以在那里保留引用