论文部分内容阅读
随着处理器朝多核和众核的方向发展,利用单片共享存储的并发编程也越来越普遍。顺序一致性是并发编程中最直观自然的存储一致性模型,然而按照顺序一致性假设编写成的并发程序在弱一致性模型的平台上执行时,由于处理器可以对访存指令进行乱序等优化,可能会得到违反顺序一致性的结果,最终导致程序出错。向程序代码中插入fence指令,或者用锁来同步并发访问,可以消除这种潜在违反顺序一致性的错误。但是,针对大型的实际并发应用,特别是C/C++程序,已有的一些方法和工具都存在各自的缺陷。
本论文提出一种动态检测和消除并发程序中的潜在违反顺序一致性错误的方法。该方法基于数据竞争检测技术,结合了冲突图和延迟集理论。在并发程序的动态执行过程中,先构造竞争图,包含不同线程的竞争访问节点(未同步的冲突访问)、线程内的程序序边、线程间的竞争边。竞争图中由竞争访问、程序序边以及竞争边构成的圈称为竞争圈。由于竞争圈可能导致非顺序一致的执行与结果,称其为潜在违反顺序一致性错误(Potential Violation of Sequential Consistency,简称PVSC)。然后,根据所有竞争圈计算出延迟集,并最终建议程序员向源程序插入fence指令,以消除PVSC错误。进一步,将竞争图转换为PC竞争图,把圈识别和延迟集计算的复杂度降低到O(n2),其中n表示程序中竞争访问的静态指令数目。
对于本文提出的方法,采用SPLASH-2并发测试集、两个实际大型并发应用MySQL和Apache、以及一些Cilk并发程序进行评估。实验结果表明,该方法能有效检测出实际应用并发程序中的潜在违反顺序一致性的错误,同时将由fence指令引入的性能下降控制在很小的范围,平均6.3%,最后该方法相对于数据竞争检测工具的额外开销很小,平均3.3%。