一种前瞻失效的线程识别方法

文档序号:6599730阅读:253来源:国知局
专利名称:一种前瞻失效的线程识别方法
技术领域
本发明涉及计算机领域,提出了一种前瞻失效的线程识别方法。
背景技术
在个人计算机中,随着单处理机性能开发面临高功耗和硬件设计异常困难等棘手问题,从而使得单片多核处理器(Chip Multi-Processors, CMP)技术成为主流。CMP在一 个芯片上集成多个微处理器核心,每个核心实质上都是一个相对简单的微处理器,多个核 心并行执行程序代码。具有较高线程级并行性的应用可以很好地利用这种结构来提高性 能。采用并行程序设计语言设计的应用程序虽从CMP技术获益颇多。然而,并行程序设计 和调试难度极大;串行程序虽易于设计和调试,却难以利用CMP技术的并行特性。在串行 程序资源丰富的情况下,串行程序的划分方法受到了广泛的重视,将串行程序划分为若干 线程,将这些线程放入CMP中并行执行,能提升整个串行程序的运行效率。但是划分后的许 多线程间存在数据相关,阻碍了线程的并行执行,为此,引入了线程级前瞻(Thread-Level Speculative, TLS)技术,来突破该瓶颈。TLS技术是在线程引入的参数还无法确定的情况 下,通过数据推测方法,推断参数值,提前执行线程,从而保证线程的并行执行。其中,被推 测的参数即为前瞻参数,引用前瞻参数的线程为前瞻线程。采用线程级前瞻技术能提高线程的执行效率,屏蔽长延时操作。但当某个线程中 引入的前瞻参数失效时,必须利用一个证实其失效的正确参数重启上述某个线程,以确保 整个程序结果正确。但是重启某一线程需要额外花费时间和资源,如果重启的线程较多,将 导致并行线程的执行效率非常低,甚至低于其在单片单核处理器执行效率。因此,通过识别 前瞻失效的线程,及时找出与之相关的线程并启动重启程序,在前瞻技术中显得尤为重要。

发明内容
为解决上述现有技术存在的技术问题,本发明的目的是提供一种前瞻失效的线程 识别方法,该识别方法在前瞻线程的重启判断中能够利用前瞻参数与失效线程的关系及时 找出与之相关的线程,并启动重启程序,提高并行线程的执行效率。为达到上述目的,本发明的构思是在前瞻线程的重启判断中,根据前瞻参数及其 在线程中的使用情况涉及一种用于及时认出前瞻失效的线程识别方法,及时找出与之相关 的线程,并启动重启程序。根据上述的发明构思,本发明采用下述技术方案—种前瞻失效的线程识别方法,其步骤包括如下(1)、构造识别结构;(2)、判断上述识别结构中前瞻部分所存储的前瞻参数值是否正确,查询上述识别 结构中实际执行部分中所存储的实际计算出该前瞻参数值的线程号是否已计算出该参数 值,若实际执行部分中所存储的线程号已计算出该参数的实际值,且该值与对应的识别结 构中的前瞻参数值相同,则表示前瞻有效,转步骤(3);若不相同,则表示前瞻失效,若前瞻失效,转步骤⑷;(3)、若前瞻有效,引用这个前瞻参数的线程结果有效;(4)、若前瞻失效,前瞻引用部分的若干线程号和上述线程列表标识位组中的η个二进制位进行一一对应,对于数值为“ 1 ”的二进制位对应的线程号所指的线程需要重启。上述步骤(1)所述的构造识别结构,其各组成部分如下(11),前瞻部分,用于存储前瞻参数值;(12),实际执行部分,用于存储实际计算出上述前瞻部分中的前瞻参数值的线程 号,该线程号所指线程通过计算得出参数值,并与上述前瞻参数值相比较,从其比较结果确 定前瞻成功或前瞻失效;(13),前瞻引用部分,用于存储引入上述前瞻部分中的前瞻参数值,作为线程参数 的若干个线程号;(14),上述线程列表标识位组,由η个二进制位组成,η代表上述前瞻引用部分中 存储的线程号的个数。本发明的一种前瞻失效的线程识别方法与现有的技术相比具有如下优点是该识 别方法应用于单片多核处理器平台,在引用了前瞻技术的多线程并行执行时,能及时跟踪 前瞻参数的正确性,对前瞻失效的参数及时找出与之相关的线程并判定该线程是否失效; 该方法在线程级前瞻的使用过程中,某一个线程可以派生出若干个前瞻线程,形成前瞻与 被前瞻的关系,使得所有线程间的关系交错复杂,该方法理清了前瞻参数与前瞻线程以及 前瞻线程互相之间的关系,该识别方法通过识别结构二进制位的运用,在前瞻线程的重启 判断中能够及时找出与之相关的线程,并启动重启程序,提高并行线程的执行效率。


图1是本发明的一种前瞻失效的线程识别方法的流程图;图2是图1中构造的的识别结构示意具体实施例方式下面结合说明书附图和具体实施方式
对本发明作进一步详细的说明。本实施例所述方案的应用环境是面向多核处理器的线程级并行执行环境如图1、2 所示,一种前瞻失效的线程识别方法,其步骤包括如下(1)、构造识别结构,其各组成部分如下(11),前瞻部分,用于存储前瞻参数值,该前瞻参数值是根据待划分的串行程序代 码的附带信息、串行程序上下文关系等进行参数推测,得出的还没出计算结果的推测值;(12),实际执行部分,用于存储实际计算出上述前瞻部分中的前瞻参数值的线程 号,该线程号所指线程通过计算得出参数值,并与上述前瞻参数值相比较,从其比较结果确 定前瞻成功或前瞻失效;(13),前瞻引用部分,用于存储引入上述前瞻部分中的前瞻参数值,作为线程参数 的若干个线程号;(14),上述线程列表标识位组,由η个二进制位组成,η代表上述前瞻引用部分中 存储的线程号的个数,每个二进制位分别对应于前瞻引用部分的其中一个线程号所指向的线程,二进制值描述了需要重启的线程范围,标识位组中的η个二进制位初始化全部为O。(2)、判断上述识别结构中前瞻部分所存储的前瞻参数值是否正确。查询上述识别结构中实际执行部分中所存储的实际计算出该前瞻参数值的线程号是否已计算出该参数 值,若实际执行部分中所存储的线程号已计算出该参数的实际值,且该值与对应的识别结 构中的前瞻参数值相同,则表示前瞻有效,转步骤(3),若不相同,则表示前瞻失效;若前瞻 失效,转步骤⑷;(3)、若前瞻有效,引用这个前瞻参数的线程结果有效;(4)、若前瞻失效,前瞻引用部分的若干线程号和上述线程列表标识位组中的η个 二进制位进行一一对应,对于数值为“1”的二进制位对应的线程号所指的线程需要重启。前 瞻线程受其所引入的前瞻参数的影响,若该参数失效,参数所对应的前瞻线程也会失效。在 线程的执行过程中,存在对内存块、寄存器的值的修改,若前瞻参数失效,可能引起其他线 程也失效,上述这种影响被称为前瞻值的扩散。η个二进制位分别对应的η个线程在执行 过程中,若某线程的前瞻值扩散至其他线程,则将该线程所对应的二进制位置1。在前瞻失 效的情况下,将前瞻引用部分中的若干线程号和线程列表标识位组中的η个二进制位进行 一一对应。若某二进制位为0,表示该位所对应的线程须重启;若某二进制位为1,表示该位 所对应的线程的前瞻值已扩散至其他线程,该二进制位所对应的线程和受前瞻值扩散影响 的其他线程都须重启。以上对本发明的一种前瞻失效的线程识别方法进行了详细说明,本发明的具体实 施例的阐述只是用于帮助理解本发明的方法;对于本领域的一般技术人员,依据本发明的 方法,在具体实施方式
和应用范围上均会有改变之处,因此,本发明的实施例不应理解为对 本发明的限制。
权利要求
一种前瞻失效的线程识别方法,其特征在于该方法步骤包括如下(1)、构造识别结构;(2)、判断上述识别结构中前瞻部分所存储的前瞻参数值是否正确。查询上述识别结构中实际执行部分中所存储的实际计算出该前瞻参数值的线程号是否已计算出该参数值,若实际执行部分中所存储的线程号已计算出该参数的实际值,且该值与对应的识别结构中的前瞻参数值相同,则表示前瞻有效,转步骤(3),若不相同,则表示前瞻失效;若前瞻失效,转步骤(4);(3)、若前瞻有效,引用这个前瞻参数的线程结果有效;(4)、若前瞻失效,前瞻引用部分的若干线程号和上述线程列表标识位组中的n个二进制位进行一一对应,对于数值为“1”的二进制位对应的线程号所指的线程需要重启。
2.根据权利要求1所述的一种前瞻失效的线程识别方法,其特征在于,上述步骤(1)所 述的构造识别结构,其各组成部分如下(11),前瞻部分,用于存储前瞻参数值;(12),实际执行部分,用于存储实际计算出上述前瞻部分中的前瞻参数值的线程号,该 线程号所指线程通过计算得出参数值,并与上述前瞻参数值相比较,从其比较结果确定前 瞻成功或前瞻失效;(13),前瞻引用部分,用于存储引入上述前瞻部分中的前瞻参数值,作为线程参数的若 干个线程号;(14),上述线程列表标识位组,由η个二进制位组成,η代表上述前瞻引用部分中存储 的线程号的个数。
全文摘要
本发明公开了一种前瞻失效的线程识别方法,其步骤(1)构造识别结构;(2)判断上述识别结构中前瞻部分所存储的前瞻参数值是否正确,若实际执行部分中所存储的线程号已计算出该参数的实际值,且该值与对应的识别结构中的前瞻参数值相同,则表示前瞻有效,转步骤(3);若不相同,则表示前瞻失效,若前瞻失效,转步骤(4);(3)若前瞻有效,引用这个前瞻参数的线程结果有效;(4)若线程失效,前瞻引用部分的若干线程号和线程列表标识位组中的n个二进制位进行一一对应,对于数值为“1”的二进制位对应的线程号所指的线程需要重启。该方法在前瞻线程的重启判断中能够及时找出与之相关的线程,并启动重启程序,提高并行线程的执行效率。
文档编号G06F9/445GK101814019SQ20101013200
公开日2010年8月25日 申请日期2010年3月25日 优先权日2010年3月25日
发明者吴悦, 杨洪斌, 黎琛 申请人:上海大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1