论文部分内容阅读
在并行程序编写过程中,用锁来保护共享内存比无锁操作更直观。因此,并行程序通常采用锁来保护共享内存。在某些场景下,锁竞争问题导致工作线程阻塞,从而使并行程序无法充分利用多核平台充足的计算资源,严重影响系统的执行效率。因此,如何设计缓解锁竞争问题的运行时系统成为步入多核时代之后所面临的一大挑战。 多核/众核平台下,缓解锁竞争的运行时系统(LLCR),结合动态分析与运行时调度的方法,解决由大型临界区导致的锁竞争问题。首先,重封装Pthreads运行时库,以插桩检测的方式将原始锁操作重定向至自定义的锁结构以截获锁操作的运行时信息。然后,以锁操作的运行时信息为输入,提出结合多核处理器使用率的多项式级别的分析算法来指明大型临界区的位置并反馈给程序员。进而,在运行时支撑库中提供非阻塞的任务级粒度的锁(TLock)来保护大型临界区,并以任务锁为标注,利用运行时动态调度的方式缓解由大型临界区造成的锁竞争问题,提高多核平台计算资源的利用率。LLCR运行时系统中复杂调度逻辑对用户来说是透明的,只提供简单直观的接口供用户调用,降低了编程复杂度。 缓解锁竞争的LLCR运行时系统能解决多核/众核平台下大型临界区造成的锁竞争问题。相比于未优化的OpenMP及Function Flow并行编程框架,LLCR运行时系统使锁竞争激烈的基准程序的加速比有了显著提升。同时,LLCR运行时系统对基准程序加速比的提升与多核平台的核数正相关,这符合多核平台的发展趋势,证明LLCR运行时系统具有良好的可扩展性。