论文部分内容阅读
随着处理器架构从单核架构转向了多核架构,给整个计算机领域带来了一系列根本性的变革。其中,首当其冲的问题就是如何保证在多核处理器下未来软件的性能能够持续增长,而这就需要程序员显式地利用线程级并行的方式来编写应用程序去挖掘程序中的并行度。但是,这种变化大大地增加程序员编程的负担,会极大地降低程序员的编程效率,尤其在软件规模越来越大的今天,提高程序员编程效率被视作现代软件开发的核心技术。事务内存将数据库中事务的概念引入到并行编程模型中,一方面采用事务的接口提高了系统的抽象层次,尤其是提供了可重组的性质,降低了程序员管理并发线程对共享数据相互竞争的负担;另一方面,对可能产生共享数据竞争的程序段赋予了事务的语义,可以乐观地并发执行这些程序段,即只有在实际中检测到事务冲突后才对其做出相应的处理,提高了程序的线程并行度。因此,事务内存被视作未来多核平台下并行编程的一个有效的工具,受到了工业界和学术界广泛的关注,成为当前的一个研究热点。通过分析和评估现有的硬件事务内存系统,发现系统随着并发执行事务数目的增加,特别是在具有粗粒度和高冲突特征的事务应用负载下,由于受到事务冲突的制约,导致其并发性能急剧下降,影响整个应用的性能。本文从优化事务内存系统中并发事务执行的并行度入手,提出了三种改进现有的事务内存系统并发度的关键技术。由于事务内存现有的版本管理方法在系统运行过程中都存在额外的数据移动的问题。额外的数据移动不仅会延长事务执行的时间,同时还会影响周围并发事务对该事务中共享数据的访问,带来额外的事务冲突。特别是在粗粒度和高冲突的事务应用环境下,有可能会导致系统出现更多的冲突,阻塞事务的并发执行,进而带来更多的数据移动操作,行成一个恶性的循环,降低系统的并发度,影响并行应用的性能。针对这个问题,本文提出了一种减少数据移动的单次数据更新版本管理方法,设计了一个全相联的硬件重定向表格并将其集成到处理器的流水线中用于管理事务执行过程中的新旧版本数据,同时分析事务应用的特点设计了两层重定向表格,在挖掘并发性能的同时降低硬件的开销。这种方法通过减少版本管理中额外的数据移动操作,除了可以缩短事务本身的执行时间以外,还可以降低该事务对周围并发事务的影响,提高整个系统的并发度。事务接口具备的可重组的特点使得程序员很容易地将并行事务应用程序写成粗粒度和高冲突的长事务应用程序。然而,粗粒度的长事务在执行过程中,因为其执行时间过长,导致与其发生事务冲突的概率大大的增强,很容易阻塞周围并发执行的事务,极大地影响并发执行事务的并行度。为了解决这个问题,本文提出了粗粒度长事务的并发推测执行技术,将线程级推测执行技术集成到硬件事务内存系统中来,修改硬件事务内存系统的结构使之可以支持程序顺序一致性检测,并提出在函数调用和循环程序结构中采取推测执行技术加速应用的执行。本方法从粗粒度的长事务中提取可以并发执行的程序段,利用多个线程并发地执行粗粒度的长事务,加速该长事务的执行,同时也降低了该事务同周围并发事务之间发生事务冲突的概率,提高整个系统的并发性。由于事务应用程序中事务的长短、包含读写集合的大小各不相同,事务之间的相互影响的行为也多种多样,使得简单地利用基于历史信息的硬件选择器不能准确地选择事务恰当的运行模式。错误的选择会带来额外的开销,同时还会影响周围事务的并发度。为了解决这一问题,本文提出基于事务行为分析的并行优化技术,设计了一个基于软件辅助的事务调度管理模块,该模块动态地收集和统计事务执行的信息,利用得到的统计信息挖掘并发事务的行为特征,并以此作为调度事务执行和解决事务冲突的重要参考因素,以此辅助硬件事务内存系统中的冲突管理模块挖掘并发执行事务的并发度。本方法相对于传统的基于硬件预测的事务内存系统可以提供更好的预测性能,并通过对行为特征的提取优化并发事务的执行,提高了事务内存系统的性能。本文提出的单次数据更新版本管理技术和粗粒度长事务的并发推测执行技术通过减少事务内部的数据移动和并行地执行粗粒度长事务挖掘了事务内的并行度,提高了事务内存系统的性能。同时,本文提出的基于事务行为分析的并行优化技术则进一步通过收集并发事务的行为特征,调度优化并发事务的执行,挖掘事务间的并行度。这三种并行优化方法可以结合使用,同时挖掘事务内和事务间的并行度,提高事务内存系统的性能。