当前位置: 首页 > 专利查询>上海大学专利>正文

一种前瞻多线程并行执行优化方法技术

技术编号:3947238 阅读:278 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种前瞻多线程并行执行优化方法,其步骤如下:(1)、将串行程序划分为一个个的线程;(2)、判断线程是否前瞻执行,对于前瞻执行的线程分析每一个线程和线程的直接前驱线程之间是否存在写后读数据依赖;(3)、以设定的生产者距离与消费者距离的比值选择线程是否前瞻执行;(4)、线程前瞻执行完后验证前瞻执行结果。该方法能减少线程并行执行时的数据依赖冲突和不必要的延迟等待;本发明专利技术综合考虑了串行程序中并行效率较高的循环部分和子函数部分,能够充分挖掘程序中的写后读数据依赖,充分利用线程级并行性,并通过量化线程间写后读数据依赖,有选择地前瞻执行,能提高串行程序在多核处理器上的执行速度和处理器利用率。

【技术实现步骤摘要】

本专利技术涉及计算机领域,具体地说是涉及。
技术介绍
随着计算机应用的不断深入,单片多核处理器(Chip Multi-Processors, CMP)技 术日益倍受关注。利用CMP技术提高系统性能的关键是充分发挥多个微处理器核心的并行 优势。串行程序虽易于设计和调试,却难以利用CMP技术的并行特性;并行程序虽然能更多 获益于CMP技术,但并行编程对程序员能力要求较高。对于复杂的并行编程语言,程序员更 愿意使用传统的串行程序,而且希望能尽可能地重用已开发出的软件。在这种情况下,串行 程序的并行化方法受到了广泛的重视。串行程序并行化是指在保证程序语义不变的条件下,将串行程序划分为若干 并行线程,利用并行线程来充分利用CMP技术并行的优点。前瞻多线程(Speculative Multithreading)是串行程序充分利用CMP技术的关键,当线程执行所需参数在编译阶段 不确定的情况下,通过数据预取、数据推测等方法消除线程间的依赖关系,创建出能够并行 执行的前瞻线程。通过线程前瞻执行和相应的前瞻失效处理机制可以去除线程间的假依 赖,发现并维护真依赖,降低线程之间的依赖程度,提高线程之间的并行度。线程间的写后读(Read After Write, RAW)数据依赖是指两个线程之间存在对某 个或某几个特定存储空间或变量的写后读依赖,即后面一个线程要读到前面一个线程所写 的数据。线程前瞻执行虽然能在某种程度上提高并行执行的效率,但是因为前瞻执行时, 带有写后读数据依赖的线程会导致线程重启,且重启的时间开销和资源开销很大,也就是 说,对于有的线程,顺序执行的效率会比在多个核上并行执行的效率更好。
技术实现思路
针对上述现有技术存在的不足,本专利技术的目的是提供一种前瞻多线程并行执行优 化方法。该方法能减少多线程执行时的写后读数据依赖性冲突和不必要的线程间延迟等 待,提高串行程序在多核处理器上的执行速度,提高处理器利用率。为达到上述目的,本专利技术的构思是利用生产者距离和消费者距离来量化两个有 依赖关系的线程之间的依赖程度,并根据依赖程度有选择性设计前瞻多线程并行执行模 式。根据上述构思,本专利技术采用下述技术方案,其具体步骤如下(1)、对串行程序中覆盖率较高和并行效率较高的循环部分和子函数部分,将循环 部分和子函数部分相应的串行程序部分划分为一个个的线程;(2)、判断线程是否前瞻执行,对于前瞻执行的线程分析每一个线程和线程的直接 后续线程之间是否存在写后读数据依赖;(3)、以设定的生产者距离R与消费者距离P的比值R/P判断并行线程之间的依赖 程度选择线程是否前瞻执行;(4)、线程前瞻执行完后验证前瞻执行结果。本专利技术的与已有技术相比较,具有如下面显而 易见的突出实质性特点和显著有点该方法能有效地减少线程并行执行时的数据依赖冲突 和不必要的延迟等待;综合考虑了串行程序中并行效率较高的循环部分和子函数部分,能 够充分挖掘程序中的写后读数据依赖,充分利用线程级并行性,并通过线程间写后读数据 依赖量化,有选择地前瞻执行,能提高单线程序在多核处理器上的执行速度和处理器利用 率。附图说明图1是本专利技术的的流程图;图2是图1中所述的步骤(1)的流程图;图3是图1中所述的步骤(2)的流程图;图4是图1中所述的步骤(3)的流程图;图5是图1中所述的步骤⑷的流程图。具体实施例方式本专利技术的一个优选实施例结合附图详述如下本实施例所述方案的应用环境是面向单片多核处理器的线程级并行执行环境,本 实施例不限定所述技术方案应用环境中多核处理器架构。下面结合说明书附图和具体实施方式对本专利技术作进一步详细的说明。在单片多核处理器平台上,对串行程序,利用并行线程执行中若出现数据依赖后 重启,只影响程序执行的效率,不影响程序执行的结果的原理,针对串行程序中易于并行的 循环部分和子函数部分,设计并行线程执行模型,利用生产者距离和消费者距离来量化两 个有依赖关系的线程之间的依赖程度,并根据依赖程度有选择性设计前瞻多线程并行执行 模式。写某一存储空间或变量的线程称为生产者线程,读某一存储空间或变量的线程称 为消费者线程。对某一个特定的写后读数据,只有生产者线程完成其写操作之后,消费者线 程才可以执行相应的读操作。前瞻多线程在CMP上是同时执行的,为了保证多线程之间更 好地并行执行,最小可能地发生数据依赖性冲突,利用生产者距离和消费者距离来量化依 赖线程之间的数据依赖程度,以此来判断何时需要前瞻并行,何时不需要前瞻并行,有针对 性地前瞻并行执行串行程序,减少线程重新执行的几率,从而提高处理器的效率。如图1所示,本专利技术的,其步骤如下(1)对串行程序中覆盖率较高和并行效率较高的循环部分和子函数部分,将循环 部分和子函数部分相应的串行程序部分划分为一个个的线程;(2)判断线程是否前瞻执行,对于前瞻执行的线程分析每一个线程和线程的直接 后续线程之间是否存在写后读数据依赖;(3)以设定的生产者距离R与消费者距离P的比值R/P量化线程和线程直接后续线程之间的数据依赖程度选择线程是否前瞻执行,依据不同的依赖程度采取不同执行模 式,以此尽可能减少线程并行执行带来的冲突和前瞻执行后重启;(4)线程前瞻执行完后验证前瞻执行结果。上述步骤(1)所述的针对串行程序中的循环部分和子函数设计并行执行模式,将 单线程程序划分为线程,如图2所示,其具体步骤如下(11)、设置前瞻缓冲区每相邻的两个处理器核之间设置一个前瞻缓冲区,用于缓 冲前瞻多线程执行时所需要的预取数据和有关前瞻多线程的执行状态和上下文语义的数 据,每个处理器核对应一个前瞻缓冲区,对于单片多核处理器,多个处理器核之间采用环状 相连;(12)、生成循环线程对串行程序中的循环部分,按照顺序语义将每一个循环部分 按照迭代步依次展开,其中每一个循环部分中的一次迭代步作为一个循环线程;(13)、生成子函数线程对串行程序中的子函数部分,按照顺序语义将每一个子函 数部分按照调用顺序依次,其中每一个子函数部分中的一个子函数调用作为一个子函数线 程;(14)、生成中间线程对串行程序中的非步骤202和步骤203所述的循环线程和子 函数线程的部分,按照顺序语义,每直接相邻的两个循环部分之间的部分或者每直接相邻 的两个子函数部分之间的部分或者直接相邻的循环部分与子函数部分之间的部分作为一 个中间线程。上述步骤(2)所述的判断线程是否前瞻执行,从串行程序的第二个线程开始到最 后一个线程为止,分析每一个线程的直接前驱线程和该线程之间是否存在写后读数据依 赖,如图3所示,其具体步骤如下(21)、对上述串行程序中的循环线程、子函数线程、中间线程按照顺序语义从一开 始逐一编号,记下最后一个线程的编号N,为每一个线程建立一个变量表,用于记录这个线 程中的每一个变量的读写情况,在变量表中设一个0-1系统变量Sys,初始值为0,表示该变 量表对应的线程和线程的直接后续线程之间不存在写后读数据依赖,从编号为二的线程开 始分析;(22)、判断所分析的线程的编号是否为N,若线程的编号为N,则转步骤3 ;否则转 步骤23 ;(23)、判断上述步骤(22)所述的线程是否属于前瞻执行,若上述步骤(22)所述的 线程不属于前瞻执行,则转步骤(26),若上述步骤(22)所述的线程属于前瞻执行,本文档来自技高网
...

【技术保护点】
一种前瞻多线程并行执行优化方法,其特征在于,利用生产者距离和消费者距离来量化两个有依赖关系的线程之间的依赖程度,并根据依赖程度有选择性设计前瞻多线程并行执行模式,其具体步骤如下:(1)、对串行程序中覆盖率较高和并行效率较高的循环部分和子函数部分,将循环部分和子函数部分相应的串行程序部分划分为一个个的线程;(2)、判断线程是否前瞻执行,对于前瞻执行的线程分析每一个线程和线程的直接前驱线程之间是否存在写后读数据依赖;(3)、以设定的生产者距离R与消费者距离P的比值R/P判断并行线程之间的依赖程度选择线程是否前瞻执行;(4)、线程前瞻执行完后验证前瞻执行结果。

【技术特征摘要】

【专利技术属性】
技术研发人员:吴悦徐磊刘清华杨洪斌
申请(专利权)人:上海大学
类型:发明
国别省市:31[中国|上海]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1