A Pragmatic Non-Blocking Concurrent Directed Acyclic Graph
在本文中,我们已经开发了两个算法,保持无环并发有向图。第一个算法是基于无等待的可达性查询,第二个是基于部分快照的无障碍可达性查询。有趣的是,我们能够在动态设置中实现非循环属性,而不需要其他线程帮助使用描述符或干净的双重收集机制。我们提出了一个证明,表明图保持无环在任何时候都在并发设置。我们还证明了非循环图数据结构操作是可线性化的。我们在C++中实现了这两个算法,并通过一些微基准测试。我们的实验结果表明,平均7倍的顺序和全局锁实现的改善。
2019-05-12 cs.DC
A Simple and Practical Concurrent Non-blocking Unbounded Graph with Reachability Queries
应用于许多应用(包括社交网络、通信网络、VLSI设计、图形和若干其它应用)中的图形算法需要动态修改--在图形中添加和移除顶点和/或边。本文提出了一种新的并发无阻塞算法,用于在共享内存机器上实现动态无界有向图。顶点和边的添加和删除操作是无锁的。对于有限大小的图,查找操作是无等待的。该算法的最重要的组成部分是并发图中的可达性查询。在我们的算法中的可达性查询是无障碍的,从而施加最小的额外同步成本超过其他操作。我们证明了每个数据结构操作都是可线性化的。我们广泛评估的样本C/C++实现的算法,通过一些微基准。实验结果表明,该算法的规模以及线程的数量,平均提供了5至7倍的性能提高并发图实现使用粗粒度锁定。
2019-01-14 cs.DC
Are Lock-Free Concurrent Algorithms Practically Wait-Free?
无锁并发算法保证某些并发操作总是在有限的步骤中进行。然而,程序员更喜欢将并发代码视为无等待的代码,以保证所有操作总是进行。不幸的是,设计无等待算法通常是一项非常复杂的任务,并且由此产生的算法并不总是有效的。虽然获得有效的无等待算法一直是理论界的长期目标,但大多数非阻塞商业代码只是无锁的。本文提出了一个简单的解决这个问题的方法。我们表明,对于一个大类的无锁算法,在调度条件下,在商业硬件架构中发现的近似,无锁算法的行为,如果他们是等待自由。换句话说,程序员可以继续设计简单的无锁算法,而不是复杂的无等待算法,在实践中,他们将获得无等待的进展。我们的主要贡献是一种新的方式分析下的随机调度一般类的无锁算法。我们的分析涉及到一个复杂的每进程链和一个简单的系统进程链之间的马尔可夫链提升的整体性能的进程。我们表明,无锁算法不仅等待免费的概率为1,但事实上,一个一般的子集的无锁算法可以密切限制的平均步骤数,直到操作完成。据我们所知,这是第一次尝试分析进展情况,通常是在一个最坏的情况下的对手,在一个随机模型捕捉他们的预期渐近行为。
2013-11-15 cs.DC
Unexpected Scaling in Path Copying Trees
尽管已经提出了各种各样的手工制作的并发数据结构,但是对于用于构建并发数据结构的通用方法(此后称为通用构造或UC)存在相当大的兴趣。这些方法(半)自动地将顺序数据结构转换为并发数据结构。最简单的方法是使用锁来保护顺序数据结构,并且一次只允许一个进程访问它。产生的数据结构使用锁,因此是阻塞的。相反,大多数关于UC的工作都集中在获得非阻塞的进度保证上,比如阻塞自由、锁自由或等待自由。出现了许多非阻塞UC。关键的例子包括Herlihy的开创性的无等待UC,Yi等人的NUMA感知UC,和Fatourou等人提出的一种针对大型对象的高效UC。我们借鉴了持久化数据结构和多版本并发控制(MVCC)的思想,特别是路径复制,并使用它们来实现顺序持久化数据结构的并发版本。尽管我们期望我们的数据结构不会在写繁重的工作负载下扩展,但它们在实践中扩展。我们确认这种缩放分析在我们的模型与私人每进程缓存。
2022-12-02 cs.DC cs.DS
On the Relevance of Wait-free Coordination Algorithms in Shared-Memory HPC:The Global Virtual Time Case
共享存储器/多核架构上的高性能计算可能由于协调算法而遭受不可忽略的性能瓶颈,然而协调算法对于确保总体正确性和/或支持内务操作的执行(例如,恢复计算资源(例如,内存)。虽然在设计/开发上更加复杂,但是从经典协调算法到无等待算法的范式切换可以显著提高HPC应用程序的性能。在本文中,我们探讨了这种模式的转变在共享内存架构的相关性,通过集中在并行离散事件仿真的背景下,其中的全球虚拟时间(GVT)代表一个基本的协调算法。它允许计算参与并行/分布式计算的所有实体通过的逻辑时间值的下限。因此,它可以用来区分哪些事件属于计算的过去历史-从而被认为是提交的-并允许内存恢复(例如,为了支持状态可恢复性而采取的过时日志)和不可撤销的操作(例如I/O)。我们比较的参考(阻塞)算法共享内存,一个由藤本和Hybinette \cite{Fuj97},提出了一个创新的无等待的实现,强调什么设计选择必须执行这种范式转变,以及什么是协调算法中删除关键部分的性能影响。
2020-04-21 cs.DC
Accelerating Parallel Stochastic Gradient Descent via Non-blocking Mini-batches
New York University(纽约大学);IBM Research(IBM研究院)
SOTA分散式SGD算法可以通过使用Ring All-Reduce等通信集体进行同步来克服参数服务器处的带宽瓶颈。虽然分布式SGD中的参数更新可能异步发生,但仍然存在同步障碍,以确保每个学习器的本地训练时期在学习器可以前进到下一个时期之前完成。等待最慢的学习者(掉队者)的延迟仍然是这些最先进的去中心化框架的同步步骤中的一个问题。在本文中,我们提出了(去)集中式非阻塞SGD(非阻塞SGD),它可以解决异构环境中的落伍问题。非阻塞SGD的主要思想是将原始批次分割成小批次,然后累积梯度并基于完成的小批次更新模型。非阻塞思想可以使用分散算法来实现,包括Ring All-reduce,D-PSGD和MATCHA来解决掉队者问题。此外,使用梯度累积来更新模型还保证了收敛性并避免了梯度失效。随机离散延迟和计算效率/设备吞吐量的运行时分析也显示了非阻塞SGD的优势。在一组数据集和深度学习网络上的实验验证了理论分析,并证明了非阻塞SGD加快了训练速度并改善了收敛性。与最先进的分散式异步算法(如D-PSGD和MACHA)相比,非阻塞SGD在异构环境中达到相同的训练损失所需的时间减少了2倍。
2022-11-09 cs.DC cs.LG
Fixing Non-blocking Data Structures for Better Compatibility with Memory Reclamation Schemes
The Pennsylvania State University(宾夕法尼亚州立大学)
SCOT通过改进内存回收方案与非阻塞数据结构的兼容性,实现了性能优化和更高的吞吐量。
2026-03-09 cs.DC
Fast Nonblocking Persistence for Concurrent Data Structures
我们提出了一个完全无锁的变体,最近的蒙太奇系统的持久性数据结构。我们的变体nbMontage为几乎所有非阻塞并发结构添加了持久性,而不会引入任何类型的显著开销或阻塞。像它的前身一样,nbMontage是缓冲持久线性化的:它保证在崩溃后恢复的状态将代表崩溃前执行的一致前缀。与其前身不同,nbMontage确保持久性边界的无等待进展,从而限制可能在崩溃时丢失的最近更新的数量,并允许线程强制更新边界(即,以执行同步操作)而没有阻塞的风险。作为一个额外的好处,我们的无等待同步所采用的帮助机制大大减少了它的延迟。非阻塞队列、跳表、树和哈希表的性能结果可与文献中的自定义数据结构相媲美--比以前的通用系统快得多,并且通常在DRAM中放置的等效非持久性结构的50%以内。
2021-08-09 cs.DC cs.DS cs.PF
A Dynamic Elimination-Combining Stack Algorithm
构造可扩展并发数据结构的两个关键同步范例是软件合并和消除。基于消除的并发数据结构允许具有反向语义的操作(诸如压栈和弹出栈操作)“碰撞”和交换值,而不必访问中心位置。另一方面,当冲突操作具有相同的语义时,软件组合是有效的:当执行具有相同语义的操作的一对线程冲突时,执行组合的操作集合的任务被委托给线程之一,并且另一个线程等待其操作被执行。迭代应用此机制可以减少内存争用并提高吞吐量。最高可扩展性的现有并发堆栈算法是消除退避堆栈。消除回退堆栈为对称工作负载提供了高并行性,其中推操作和弹出操作的数量大致相等,但当工作负载不对称时,其性能会恶化。我们提出了DECS,一种新的动态消除组合堆栈算法,以及所有的工作负载类型的规模。在保持消除bakcoff堆栈的简单性和低开销的同时,DECS设法从相同和反向语义操作的冲突中受益。我们的经验评估表明,DECS规模显着优于阻塞和非阻塞最佳先验堆栈算法。
2011-06-30 cs.DC
Practically-Self-Stabilizing Vector Clocks in the Absence of Execution Fairness
矢量时钟算法是基本的无等待构建块,有助于事件的因果排序。作为无等待算法,它们保证在有限数量的步骤内完成操作。稳定算法允许系统在发生瞬时故障后恢复,例如软错误和任意违反系统设计行为所依据的假设。我们提出了第一个,据我们所知,稳定的矢量时钟算法的异步容易崩溃的消息传递系统,可以恢复在一个无等待的方式发生瞬时故障后。在这些设置中,证明从(通信和崩溃故障以及)瞬时故障中的有限且无等待的恢复,限制消息和存储大小,处理所有陈旧信息的移除而不阻塞,以及处理计数器溢出事件(在不同网络节点同时发生)是具有挑战性的。我们提出了一个算法,从来没有违反安全的情况下,瞬态故障,并提供有限的时间恢复公平执行,遵循最后的瞬态故障。新颖之处在于,在没有执行公平性的情况下,该算法保证了系统可能违反安全性的次数的界限(而现有算法可能由于瞬时故障和崩溃故障的存在而永远阻塞)。由于矢量时钟促进了一些基本的同步构建块(不需要远程副本同步)在异步系统中,我们相信,我们的分析见解是有用的其他系统的设计,不能保证执行的公平性。
2017-12-21 cs.DC cs.DS
Recoverable and Detectable Self-Implementations of Swap
本文提出 SWAP 操作的两种可恢复自实现,分别适用于系统级故障和独立故障模型,并证明恢复代码的阻塞性在独立故障模型中不可避免。
2023-08-07 cs.DC
DeltaTree: A Practical Locality-aware Concurrent Search Tree
作为节能计算中的其他基本编程抽象,搜索树被期望同时支持高并行性和数据局部性。然而,现有的高度并发的搜索树,如红黑树和AVL树不考虑数据的局部性,而现有的局部感知的搜索树,如那些基于van Emde Boas布局(vEB为基础的树),不支持并发(更新)操作。本文介绍了DeltaTree,一个实用的本地感知并发搜索树,结合了本地优化技术从基于vEB的树和并发优化技术从非阻塞高度并发搜索树。DeltaTree是DeltaNode的$k$ -ary面向叶子的树,其中每个DeltaNode是具有van Emde Boas布局的大小固定的树容器。DeltaTree的搜索、插入和删除操作的预期内存传输成本为$O(\log_B N)$,其中$N, B$分别是理想缓存模型中的树大小和未知内存块大小。DeltaTree的搜索操作是无等待的,为搜索操作提供优先通道,搜索操作是搜索树中的主要操作。它的插入和{ \em删除}操作对其他搜索、插入和删除操作是非阻塞的,但它们可能偶尔会被维护操作阻塞,这些维护操作有时会被触发以保持DeltaTree处于良好状态。我们的实验评估使用最新实现的AVL,红-黑,投机友好的树从Synchrobench基准测试表明,DeltaTree是5倍以上的搜索操作,更新操作时,更新竞争不是太高的速度比所有三个并发搜索树快1.6倍。
2013-12-09 cs.DC
Reduced I/O Latency with Futures
任务并行性的研究传统上集中在优化计算密集型应用程序。由于商品并行处理器的扩散,最近已经有兴趣支持交互式应用程序。这样的交互式应用程序经常依赖于I/O操作,这可能导致显著的延迟。为了提高性能,当特定的控制线程在I/O操作上被阻塞时,理想情况下,我们希望通过使用处理资源来执行其他就绪工作来隐藏此延迟,而不是阻塞或旋转等待此I/O。有有限的先前工作隐藏此延迟,只有一个结果,提供了一个理论界的交互式应用程序,使用I/O。在这项工作中,我们提出了一种方法,通过使用期货抽象隐藏延迟的I/O操作。我们提供了一个理论分析,我们的算法,表明我们的算法提供了更好的执行时间保证比以前的工作。我们还实现了一个实际有效的原型库,运行在Cilk-F运行时,运行时系统,支持期货的上下文中的Cilk Plus语言,并进行实验,证明我们的实现效率的算法。
2019-06-19 cs.DC
Fast and Scalable Channels in Kotlin Coroutines
在过去的十年中,异步编程已经变得非常流行:许多流行的语言都可以通过库和本地语言实现来支持这种编程模式,通常是以协程或Awatch/await结构的形式。与通过共享内存编程不同,这个概念假定通过消息传递进行隐式同步。实现这种通信的关键数据结构是会合信道。粗略地说,会合通道是一个大小为零的阻塞队列,所以send(e)和receive()操作都在等待对方,当它们相遇时执行会合。为了优化消息传递模式,通道通常配备有固定大小的缓冲区,因此send(e)-s不会挂起并将元素放入缓冲区,直到其容量被超过。这种原语称为缓冲通道。本文提出了一种快速和可扩展的算法,交会和缓冲通道。与现代队列类似,我们的解决方案基于一个无限数组,其中有两个用于send(e)和receive()操作的位置计数器,利用无条件Fetch-And-Add指令来更新它们。然而,该算法需要对这个经典模式进行重要的修改,以便支持完整的通道语义,例如缓冲和取消等待请求。我们将我们的解决方案的性能与Kotlin实现的性能以及其他学术建议进行了比较,显示出高达9.8倍的加速。为了展示其表现力和性能,我们还将所提出的算法集成到标准Kotlin Coroutines库中,取代了之前的通道实现。
2022-11-09 cs.DC cs.DS
Speeding Up Distributed Gradient Descent by Utilizing Non-persistent Stragglers
Imperial College London(伦敦帝国学院);University of Maryland, College Park(马里兰大学帕克分校)
分布式梯度下降(DGD)是一种实现梯度下降(GD)的有效方法,特别是对于大型数据集,它通过将计算任务划分为较小的子任务并分配给不同的计算服务器(CS)并行执行。在标准并行执行中,每次迭代的等待时间受到离散服务器的执行时间的限制。编码DGD技术是近年来出现的一种新技术,它通过向CS分配冗余计算任务来容忍离散服务器。在大多数现有的DGD方案中,无论是编码计算还是编码通信,非离散CS在完成所有分配给它们的计算任务后,每次迭代发送一条消息。然而,尽管分散的服务器不能完成所有分配给它们的任务,但它们通常能够完成其中的某一部分。在本文中,我们允许多个传输从每个CS在每次迭代,以确保完成计算的最大数量可以报告给聚合服务器(AS),包括离散服务器。我们的数值计算表明,每次迭代的平均完成时间可以显着减少稍微增加每个服务器的通信负载。
2018-10-02 cs.DC cs.IT cs.LG
Do MPI Derived Datatypes Actually Help? A Single-Node Cross-Implementation Study on Shared-Memory Communication
School of Mathematics;Statistics University of Edinburgh
本文针对MPI派生数据类型(DDT)的实际性能争议,在单节点上跨四种主流MPI实现、三类二维应用开展基准测试,发现DDT无跨场景性能优势,建议同时剖析两种通信方案。
2025-11-17 cs.DC