[发明专利]一种前瞻多线程并行执行优化方法无效
申请号: | 201010126624.X | 申请日: | 2010-03-17 |
公开(公告)号: | CN101807144A | 公开(公告)日: | 2010-08-18 |
发明(设计)人: | 吴悦;徐磊;刘清华;杨洪斌 | 申请(专利权)人: | 上海大学 |
主分类号: | G06F9/38 | 分类号: | G06F9/38 |
代理公司: | 上海上大专利事务所(普通合伙) 31205 | 代理人: | 陆聪明 |
地址: | 200444*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 前瞻 多线程 并行 执行 优化 方法 | ||
1.一种前瞻多线程并行执行优化方法,其特征在于,利用生产者距离和消费者距离来量化两个有依赖关系的线程之间的依赖程度,并根据依赖程度有选择性设计前瞻多线程并行执行模式,其具体步骤如下:
(1)、对串行程序中覆盖率较高和并行效率较高的循环部分和子函数部分,将循环部分和子函数部分相应的串行程序部分划分为一个个的线程,其具体步骤如下:
(11)、设置前瞻缓冲区:每相邻的两个处理器核之间设置一个前瞻缓冲区,用于缓冲前瞻多线程执行时所需要的预取数据和有关前瞻多线程的执行状态和上下文语义的数据,每个处理器核对应一个前瞻缓冲区,对于单片多核处理器,多个处理器核之间采用环状相连;
(12)、生成循环线程:对串行程序中的循环部分,按照顺序语义将每一个循环部分按照迭代步依次展开,其中每一个循环部分中的一次迭代步作为一个循环线程;
(13)、生成子函数线程:对串行程序中的子函数部分,按照顺序语义将每一个子函数部分按照调用顺序依次展开,其中每一个子函数部分中的一个子函数调用作为一个子函数线程;
(14)、生成中间线程:对串行程序中的非步骤(22)和步骤(23)所述的循环线程和子函数线程的部分,按照顺序语义,每相邻的两个循环部分之间的部分或者每相邻的两个子函数部分之间的部分或者相邻的循环部分与子函数部分之间的部分作为一个中间线程;
(2)、判断线程是否前瞻执行,对于前瞻执行的线程分析每一个线程和线程的直接前驱线程之间是否存在写后读数据依赖,其具体步骤如下:
(21)、对上述串行程序中的循环线程、子函数线程、中间线程按照顺序语义从一开始逐一编号,记下最后一个线程的编号N,为每一个线程建立一个变量表,用于记录这个线程中的每一个变量的读写情况,在变量表中设一个0-1系统变量Sys,初始值为0,表示该变量表对应的线程和线程的直接后续线程之间不存在写后读数据依赖,从编号为二的线程开始分析;
(22)、判断所分析的线程的编号是否为N,若线程的编号为N,则转步骤(3);否则转步骤(23);
(23)、判断上述步骤(22)所述的线程是否属于前瞻执行,若上述步骤(22)所述的线程不属于前瞻执行,则转步骤(26),若上述步骤(22)所述的线程属于前瞻执行,则转步骤(24);
(24)、将上述步骤(23)所述的线程前瞻执行所用到的预取数据和记录执行状态和上下文语义的数据存放在处理这个线程的处理器核所对应的前瞻缓冲区中;
(25)、分析上述步骤(23)所述的线程对应的直接前驱线程和该线程之间是否存在对同一变量的写后读依赖,若该线程的变量表中有对一个变量M进行了读操作,且该线程的直接前驱线程对同一个变量M进行了写操作,则确定线程和直接前驱线程之间有依赖关系,并将该线程的变量表中的Sys设为1;
(26)、分析上述步骤(23)所述的线程的直接后续线程;
(3)、以设定的生产者距离R与消费者距离P的比值R / P判断并行线程之间的依赖程度选择线程是否前瞻执行,其具体步骤如下:
(31)、判断即将运行的线程的编号是否为N,若即将运行的线程的编号为N,则转步骤(4);否则转步骤(32);
(32)、判断上述步骤(31)所述的线程的变量表中Sys的值是否为1,若上述步骤(31)所述的线程的变量表中Sys的值为1,则转步骤(33);否则转步骤(36);
(33)、计算该线程的第一条语句到第一次读变量M的语句之间的语句数量,该语句数量称为消费者距离,记为P;
(34)、计算该线程的直接前驱线程的第一条语句到最后一次写变量M的语句之间的语句数量,该语句数量称为生产者距离,记为R;
(35)、以设定的生产者距离R与消费者距离P的比值R / P选择线程是否前瞻执行,若R / P≤ 1时,则转步骤(36);若R / P ≥ 2时,则转步骤(37);若1 < R / P<2时,则转步骤(38);
(36)、该线程和该线程的直接前驱线程之间不会发生数据依赖冲突,该线程前瞻执行,与直接前驱线程同时执行;
(37)、该线程和该线程的直接前驱线程之间会发生数据依赖冲突,该线程等待该线程的直接前驱线程执行完成之后再执行;
(38)、该线程和该线程的直接前驱线程之间有可能会发生数据依赖冲突,该线程随机性选择前瞻执行;
(4)、线程前瞻执行完后验证前瞻执行结果。
2.根据权利要求1所述的一种前瞻多线程并行执行优化方法,其特征在于,上述步骤(4) 所述的线程前瞻执行完后验证前瞻执行结果,其具体步骤如下:
(41)、线程前瞻执行所需的真实数据是指线程正确执行时所需的数据,真实数据是由顺序语义中位于线程前面的前驱线程计算出的供线程使用的数据,判断线程的真实数据是否已经被计算出来,若线程的真实数据已经被计算出来,则转步骤(42),否则转步骤(43);
(42)、判断真实数据与预取数据是否一致:直接将前瞻执行线程所需要的真实数据与前瞻执行时的预取数据作比较,判断真实数据与预取数据是否一致,若真实数据与预取数据不一致,则转步骤(44),否则转步骤(45);
(43)、将上述步骤(41)所述的线程置于等待状态,直至真实数据计算完成,转步骤(42);
(44)、利用真实的数据重新执行上述步骤(42)所述的线程,再转步骤(45);
(45)、线程最终执行完毕。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海大学,未经上海大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010126624.X/1.html,转载请声明来源钻瓜专利网。