论文部分内容阅读
随着多核众核体系结构的普及,多线程程序的需求越来越大。由于多线程程序的非确定性特征,导致程序的测试、调试复杂化,即多线程编写过程产生大量并发性错误,如死锁、数据竞争。现有的解决方案或基于先前生成的日志文件再现程序调度过程实现,需要高昂的存储开销及性能开销;或基于修改源代码的确定性系统实现,不具有通用性和可扩展性。 基于内存隔离的确定性多线程系统(libthread),采用内存隔离与内存提交技术来保证源码的确定性执行,并且具有高效性、通用性和可扩展性等特点。Libthread系统通过将共享内存映射到每个线程中,隔离线程的并发执行过程,避免数据竞争,消除了假共享;使用标准的虚拟内存保护机制跟踪每个线程的读写操作,在同步原语处采用串行执行,按照确定的顺序提交私有内存到共享内存,保证多线程程序执行的确定性。Libthread系统使用性能计数器跟踪每个线程执行进度来建立确定性逻辑时间,利用确定性逻辑时间建立内存提交的顺序,保证共享内存数据访问的准确性,同时提供良好的均衡性。Libthread系统利用封装的同步原语作为并行阶段和串行阶段的边界,即使程序调试过程中加入调试语句也不改变并串行边界,从而降低了调试难度。 通过并行程序测试集PARSEC BenchmarkSuite进行模拟实验,将基于libthread的编译策略与基于pthread的编译策略进行比较,实验结果表明,libthread系统解决了多线程程序非确定性问题,保证同一程序每次执行的结果是相同的;libthread系统执行效率和pthread相当,平均执行时间增加在20%以内。实验进一步表明,libthread系统在不同核数的执行环境中拥有良好的可扩展性。