[发明专利]编译器支持下的推测多线程内存数据同步执行方法及装置无效
申请号: | 201010160536.1 | 申请日: | 2010-04-30 |
公开(公告)号: | CN101833440A | 公开(公告)日: | 2010-09-15 |
发明(设计)人: | 赵银亮;王旭昊;韦远科;宋少龙 | 申请(专利权)人: | 西安交通大学 |
主分类号: | G06F9/38 | 分类号: | G06F9/38 |
代理公司: | 西安通大专利代理有限责任公司 61200 | 代理人: | 陆万寿 |
地址: | 710049*** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 编译器 支持 推测 多线程 内存 数据 同步 执行 方法 装置 | ||
技术领域
本发明属于计算机领域,涉及线程级并行与推测多线程技术,特别涉及编译器支持下对内存数据进行同步的推测多线内存数据同步执行方法及装置。
背景技术
当前线程级并行已成为并行处理和并行计算的发展趋势。一方面,多核处理器已经得到了普遍的应用。另一方面,片上多处理器因为其核之间更大的带宽和更低的通信延迟,为线程级并行技术提供了巨大的应用平台。但是,处理器核的利用效率往往受到各种因素的制约,而一些并行程序设计方法又给用户和编程人员带来了额外的负担。推测多线程技术(SpMT,SpeculativeMultithreading)就是在这样的背景下被提出的。
对于推测多线程技术,编译器采用激进的策略,自动将高级语言编写的串行程序划分为多线程程序,并允许线程间存在一定的数据依赖。当多个线程并行执行时,由硬件动态检测线程间的数据依赖违规,缓存推测数据并实现数据一致性的维护,通过线程的提交、撤销、验证等机制,保证程序并行执行的正确性。
线程间的数据依赖程度,是影响推测多线程执行效率的关键因素之一。线程间的数据依赖主要包括寄存器数据依赖和内存数据依赖;这两种数据依赖在运行时都会发生读后写(RAW,Read After Write)内存数据依赖违规。在运行时发生的读后写内存数据依赖违规,将直接导致线程的重启,并且读取了错误数据的线程的所有后继子线程将会被直接撤销。这就造成了处理器资源的浪费,制约了程序并行执行加速比的提高。
解决数据依赖的方法主要有两种:值预测技术和数据同步技术。对于寄存器数据依赖,可通过传统的编译数据流分析技术,如到达定值分析,活跃变量分析等技术结合值预测技术等予以解决。而对于内存数据依赖,往往不能通过静态的数据流分析技术得到精确的依赖结果。这使得值预测技术和数据同步技术不能有效地解决线程间的内存数据依赖。
发明内容
本发明解决的问题在于提供一种编译器支持下的推测多线程内存数据同步执行方法及装置,能在程序运行时对选定的读写内存指令进行同步,降低读后写数据依赖违规发生的次数,提高多线程程序并行运行的加速比。
本发明是采取以下的技术方案来实现:
一种编译器支持下的推测多线程内存数据同步执行方法,包括以下步骤:
1)程序由硬件线程划分器划分生成多线程汇编程序后,作为硬件程序剖析器的输入,并在其上运行;
2)硬件程序剖析器在运行程序时统计内存数据依赖违规情况,并将统计结果信息反馈给同步编译模块;
3)同步编译模块读取统计结果信息,通过计算同步代价获取进行多线程同步操作的候选读/写指令对;然后通过数据流分析之后,在读指令前添加一条stall指令,并将读指令替换为同步读指令synload,在写指令后添加一条或多条forward指令;在写指令所在线程的线程发起指令spawn后添加一条synset指令;最后经汇编链接生成可执行文件加载后在模拟器上运行;
当同步子线程执行到stall指令时,停止执行后续指令,等待一段时间;直至对应的同步父线程执行完相应的写指令和forward指令,收到同步父线程发送的含有内存地址和写入数据的同步消息,再根据接收到的同步信息和此前同步子线程对同一内存地址的写入情况,对Sbuffer中的use_flag进行置位或复位,根据该标志位决定是否使用同步父线程发送来的数据,而后停止等待,继续执行后续指令;
同步子线程在接收同步消息后的操作由synload指令的执行完成,同步父线程在写入数据后发送同步消息的操作由forward指令完成;
4)多线程程序以同步的方式推测执行,模拟器输出程序运行的结果。
所述的统计内存数据依赖违规情况包括:读/写指令被执行的次数及其PC值,读/写指令发生读后写内存数据依赖违规的次数,发生读后写内存数据依赖违规的读/写指令执行的间隔时间;统计结果信息被写入到一个文件中,反馈给同步编译模块。
所述的计算同步代价,是计算多线程的读/写指令对进行同步操作后带来加速比提高的潜力,获取加速比提高潜力大的候选读/写指令对。
所述的加速比提高潜力通过内存读/写指令对发生数据依赖的频率,线程体入口到读指令的代码距离以及读指令到写指令之间的代码距离来判定。
所述的数据流分析是在程序的控制流图上进行,以找到stall指令和forward指令的插入位置;其中,stall指令插入到需要同步的读指令前,forward指令插入到需要同步的写指令和和线程出口之间的每一条路径上。
所述的同步父线程发送同步消息的操作步骤为:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安交通大学,未经西安交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010160536.1/2.html,转载请声明来源钻瓜专利网。