运行在多核处理器上的不同线程可同时访问共享内存,现有的基于目录的Cache一致性协议虽然能有效防止共享内存访问的不一致性,但是对访问顺序无法控制。因此,多核程序即使输入集相同,也可能产生不同的输出结果。这种多核处理器执行环境的不确定性给多核程序的编写、调试、测试和维护都带来了巨大挑战,也成为多核编程实现广泛应用的瓶颈。本项目拟从多层存储访问模型出发,提出一种新的确定性Cache一致性协议,消除多核程序执行的不确定性。通过分析不确定性给多核系统带来的影响,研究去除不确定性的方法,给出合适的硬件设计取舍,抽象出优化的状态模型;研究高效、快速的确定性重演机制,让确定性重演能够得到更广泛的应用;在这些基础上提出支持多种工作模式的确定性多核原型系统。可以预见,本项目的研究将对确定性多核处理器设计、多核程序可靠性以及多核编程的推广具有非常重要的意义。
chip multiprocessor;multi-core program;non-determinism;deterministic replay;memory race recording
共享内存的多核程序在片上多核处理器上执行时,执行结果存在着不确定性,给共享内存多线程程序的编写、调试和应用等都带来了很大挑战。本项目从存储层次和cache一致性协议出发,研究确定性的多核处理器执行环境,分析确定性对片上多核系统性能的影响;通过分析多核程序执行不确定性的来源以及其对多核系统性能的影响结果,研究消除不确定性的方法,在处理器级给出了消除多核不确定性的硬件解决方案;研究多核程序的静态数据竞争检测方法,通过分析程序中导致不确定性的主要原因——数据竞争,从应用程序级来解决多核程序的不确定性。通过研究高效、快速的确定性重演机制,给出了多种基于确定性重演的高效数据竞争记录算法、快速的重演算法及其硬件实现机制。本项目提出了一种更为高效的cache一致性协议,并提出一种优化的cache区域分布方法,通过对存储层次和cache一致性协议的深入研究,分析多核执行不确定性对多核系统性能的影响结果;利用多核程序的数据竞争检测和确定性重演技术,设计了一种基于Locksmith和PinPlay的多核程序编写和调试机制,在编程前期检测数据竞争有效避免了竞争的发生,大大降低了多核程序调试工作的难度;提出并设计了一种支持并发重演的分段式内存竞争记录机制,该机制带来的硬件消耗低,也减小了内存竞争日志,降低了带宽开销,并可以使程序按原始的执行路径重放,实现确定性重演;为了减少更改cache结构,给多核处理器的设计带来的挑战,提出并设计了一种基于签名的循环式内存竞争记录机制,在无需更改原有cache结构的前提下,硬件消耗、内存竞争日志和带宽开销都得到了很大改善;提出并设计了一种同步敏感的内存竞争记录机制,通过过滤掉无害的同步冲突,有效减小了内存竞争日志,也进一步降低了带宽开销;为了进一步提高并发重演的速度,提出了一种分离式内存竞争记录机制,在这种方式下,冲突先发生方所在处理器核能够在重演时积极主动的为冲突后发生方创建并发送唤醒消息,提高了重演的速度。该机制在重演速度、内存竞争日志及带宽开销方面均具有较高的性能。设计并实现了集三种模式于一体的确定性多核系统原型,并在多核仿真模拟平台上进行了模拟验证。本项目的研究成果不仅为确定性重放技术的研究提供了新的思路,有助于确定性重演能够得到更广泛的应用;同时也对消除多核并行程序执行不确定性,实现多核并行程序的编写、调试和应用,有着极其重要的意义。