请问如何对Dynamic Snode 并行进行去重

self.pair = ti.types.struct(a=ti.types.vector(4, ti.i32), b=float)
self.cid = self.pair.field()
self.cnts = ti.root.dynamic(ti.i, MAX_C, chunk_size=128)
self.cnts.place(self.cid)

如上面的代码,我正在做碰撞检测,使用了一个Dynamic Snode存储检测到的Edge-Edge碰撞对的信息。现在想对其进行去重,但是Snode只可以使用append, kernel中也不能使用list。所以现在就只好新建一个Dynamic Snode, 然后再写循环,发现这样的耗时很大,而且无法进行并行。所以请问有没有什么办法可以在gpu下快速地进行去重?
另一个思路是直接创建一个大的稀疏矩阵进行存储,这样就不会出现重复的情况,如下,但是这时候的显存占用特别大。

self.pair = ti.types.struct(a=ti.types.vector(4, ti.i32), b=float)
self.cid_block = ti.root.pointer(ti.ij, (self.n_boundary_edges, self.n_boundary_edges))
self.cid_block.place(self.cid)

请问有什么比较好的解决方法吗?