高度平行的deque

Highly parallel deque

本文关键字:deque 高度      更新时间:2023-10-16

是否有高度并行的deque的实现(boost或其他)?特别是,我希望能够说出这样的话(伪代码):

parallel.for(deque.erase, list<locations>);

换言之,并行地删除deque中位置列表中传递的所有项目。同时,我不希望此操作阻止与此删除/插入无关的其他删除或插入。

因此,例如,线程1可以(并行)删除位置1、3、7、9处的项目,线程2(并行)插入到deque中(并行插入可以是push_back,除非试图插入到旧的擦除位置,否则看起来很容易),线程3可以(平行)删除位置2、4、8[注意,不同的线程擦除永远不会与擦除位置相交]。试图擦除已擦除的位置(包含sentinel值)是一个错误。这可能意味着,在进行某种压缩之前,位置是有状态的(这需要一个锁。

展望未来,我意识到,由于push_backs不填充擦除的值(?),deque可能会变得碎片化和增长(内存泄漏),但某种压缩似乎最终是可能的。

paracell_deque还应该允许锁定,在移除锁定之前不允许插入或删除。例如,在打印deque的状态(内容)时。。。

deque可以有多种实现策略,有些策略可能比其他策略更适合这种并行性。

我也意识到这个问题可能过于模糊,在给出有趣的答案之前就会被否决。

听起来您确实想要一个基于节点的容器(它不会使迭代器无效),但具有连续存储。

我建议使用Boost Intrusive在连续存储的元素之上构建一个链表。

然而,在此之前,我会使用你能想到的最简单的数据结构,直到你知道你到底想要什么以及为什么。