发明名称 |
编译器支持下的推测多线程内存数据同步执行方法及装置 |
摘要 |
本发明公开了一种编译器支持下的推测多线程内存数据同步执行方法及其装置,能在程序运行时对选定的读写内存指令进行同步,降低读后写数据依赖违规发生的次数,提高多线程同步操作的整体加速比。在获取候选读/写指令对之后,在读指令前添加一条stall指令,并将读指令替换为同步读指令synload,在写指令后添加一条或多条forward指令,在写指令所在线程的线程发起指令spawn后添加一条synset指令;最后经汇编链接生成可执行文件加载后在模拟器上运行;多线程程序以同步的方式推测执行,得到运行结果,并获得较高的加速比。 |
申请公布号 |
CN101833440A |
申请公布日期 |
2010.09.15 |
申请号 |
CN201010160536.1 |
申请日期 |
2010.04.30 |
申请人 |
西安交通大学 |
发明人 |
赵银亮;王旭昊;韦远科;宋少龙 |
分类号 |
G06F9/38(2006.01)I |
主分类号 |
G06F9/38(2006.01)I |
代理机构 |
西安通大专利代理有限责任公司 61200 |
代理人 |
陆万寿 |
主权项 |
一种编译器支持下的推测多线程内存数据同步执行方法,其特征在于,多线程程序实现内存数据同步包括以下步骤:1)程序由硬件线程划分器划分生成多线程汇编程序后,作为硬件程序剖析器的输入,并在其上运行;2)硬件程序剖析器在运行程序时统计内存数据依赖违规情况,并将统计结果信息反馈给同步编译模块;3)同步编译模块读取统计结果信息,通过计算同步代价获取进行多线程同步操作的候选读/写指令对;然后通过数据流分析之后,在读指令前添加一条stall指令,并将读指令替换为同步读指令synload,在写指令后添加一条或多条forward指令;在写指令所在线程的线程发起指令spawn后添加一条synset指令;最后经汇编链接生成可执行文件加载后在模拟器上运行;当同步子线程执行到stall指令时,停止执行后续指令,等待一段时间;直至对应的同步父线程执行完相应的写指令和forward指令,收到同步父线程发送的含有内存地址和写入数据的同步消息,再根据接收到的同步信息和此前同步子线程对同一内存地址的写入情况,对Sbuffer中的use_flag进行置位或复位,根据该标志位决定是否使用同步父线程发送来的数据,而后停止等待,继续执行后续指令;同步子线程在接收同步消息后的操作由synload指令的执行完成,同步父线程在写入数据后发送同步消息的操作由forward指令完成;4)多线程程序以同步的方式推测执行,模拟器输出程序运行的结果。 |
地址 |
710049 陕西省西安市咸宁路28号 |