前瞻多线程划分方法

文档序号:6482597阅读:110来源:国知局
专利名称:前瞻多线程划分方法
技术领域
本发明涉及计算机领域,提出了一种前瞻多线程划分方法。
技术背景人类对计算能力无止境的需求促进了硬件技术和软件技术的飞速发展。当前单片多核处 理器(Chip Multi-Processors, CMP)技术成为倍受关注的新技术之一。单片多核技术通过在 一块芯片上集成多个相对简单的微处理器核心来并行执行程序,从而提高处理器性能。由于 简单的微处理器核心易于设计、功耗较低,所以CMP技术不但能提升系统性能,而且部分解 决了功耗和散热问题。利用CMP技术提高系统性能的关键是充分发挥多个微处理器核心的并行优势。串行程序 虽易于设计和调试,却难以利用CMP技术的并行特性;并行程序虽然能更多获益于CMP技术, 但并行编程对程序员能力要求较高。对于复杂的并行编程语言,用户更愿意使用传统的高级 语言,而且希望能尽可能地重用已开发出的软件。在这种情况下,串行程序的并行化方法受 到了广泛的重视。如果在保证程序语义不变的条件下,将串行程序划分为若干并行线程,那么就能够充分 利用CMP技术并行的优点。线程级前瞻(Thread Level Speculation, TLS)技术是线程执行所 需参数在编译阶段不确定的情况下,通过数据预取、数据推测等方法消除线程间的依赖关系, 创建出能够并行执行的前瞻线程。通过线程前瞻执行和相应的前瞻失效处理机制可以去除线 程间的假相关,发现并维护真相关,降低线程之间的依赖程度,提高线程之间的并行度。现有的线程划分方法存在如下不足第一,多数没有使用线程级前瞻技术,第二,考虑 了线程级前瞻技术的划分方法,如SpecDSWP等,仅只对应用程序中具有较高的覆盖率和很好 的并行性的循环进行了考虑,没有综合考虑循环外的其他部分。在本前瞻多线程划分方法中, 将循环作为研究对象,并综合考虑非循环部分。利用拓扑序列特有的前后制约关系指导前瞻 多线程的划分,通过控制相关图和数据相关图分别挖掘程序中的数据相关和控制相关,并利 用前瞻节点实现线程级前瞻技术。 发明内容本发明要解决的技术问题是提供一种前瞻多线程划分方法,在单片多核处理器平台上,针对单线程应用程序,通过前瞻执行,利用拓扑序列特有的顺序关系,将应用程序划分为一 个个多线程,能减少多线程执行时的相关性冲突和不必要的延迟等待,加速单线程应用程序 在多核处理器上的执行速度,提高处理器利用率。为达到上述目的,本发明采用下述技术方案上述前瞻多线程划分方法,该方法首先为 单线程应用程序中的每一个个循环语句基本块和每一个个非循环语句基本块构造相应的扩展 的程序相关图;其次为每一个个扩展的程序相关图设计相应的有向无环图;接着为每一个个 有向无环图设计前瞻节点,并从该有向无环图中去掉该节点;接着为每一个个有向无环图进 行拓扑排序;最后按照单线程应用程序中的顺序语义和得出的拓扑序列为单片多核处理器划 分前瞻多线程,其具体步骤包括-101、 构造扩展的程序相关图为单线程应用程序中的每一个个循环语句基本块和每一个 个非循环语句基本块构造扩展的程序相关图;102、 构造有向无环图根据扩展的程序相关图为基本块构造有向无环图;103构造整个单线程应用程序的程序流程图以有向无环图为单位,根据程序的流程顺 序,构造整个单线程应用程序的程序流程图;104、 构造每一个有向无环图的前瞻节点以有向无环图为单位,根据步骤103所述的整 个单线程应用程序的程序流程图构造每一个有向无环图的前瞻节点,并从该有向无环图中去 掉此前瞻节点和以此前瞻节点为入节点和出节点的所有有向边;105、 构造一个拓扑序列根据步骤104所述的每一个有向无环图构造一个拓扑序列;106、 为单片多核处理器划分前瞻多线程根据步骤104所述的前瞻节点和步骤105所述 的拓扑序列,为单片多核处理器划分为一个个前瞻线程。上述步骤101构造扩展的程序相关图,其具体步骤如下201、将单线程应用程序划分为一个个循环语句序列作为一个循环基本块和从第一个循环 开始,每相邻两个循环基本块之间的非循环语句序列作为一个非循环基本块;202、判断扩展的程序相关图的基本块是否为循环基本块,若是,执行步骤203;否则, 执行步骤207;203、将循环基本块中的每一条语句依次编号,并作为一个节点单位,构造循环基本块的 程序流程图;6定当前语句是否对某一存储单元进行了 写操作且此基本块中的其他语句有对同一存储单元进行的访问操作,若有,则当前语句与访 问语句之间存在一条有向边,逐步分析,构造循环基本块的数据相关图;206、 在步骤204所述的控制相关图中,逐一加入步骤205所述的每一条有向边,若此 有向边是由于一次迭代产生,则直接添加,否则,复制步骤204所述的控制相关图,并以不 同的循环迭代区分原控制相关图和复制的控制相关图中的相关节点,然后添加相应的有向边;207、 确定非循环基本块的每一个子块入口语句,该入口语句为三种语句基本块中的 第一条语句;由条件转移语句或无条件转移语句转移到的语句;紧跟在条件转移语句后面的 语句;208、 根据步骤207所述的子块入口语句,构造相应子块,子块为每一个入口语句到下 一个入口语句之间的语句序列,其中包括前一个入口语句,若后一个入口语句为转移语句或 者停语句,则包含在此子块中;否则,不包含在此子块中;209、 根据步骤207所述的子块,以子块为节点单位,并进行编号,作为扩展的程序相 关图的节点,构造非循环基本块的程序流程图;210、 根据程序流程关系,构造步骤209所述的所有节点,得到扩展的程序相关图。 上述步骤102中的构造有向无环图,其具体步骤如下301、 判断由步骤206或步骤210得到的扩展的程序相关图中是否存在环,若存在,则执 行步骤302;否则,执行步骤303;302、 将扩展的程序相关图中的强连通部分合并为一个节点;303、 直接得到扩展的程序相关图相对应的一个有向无环图。 上述步骤104中的构造前瞻节点的操作步骤如下401、 判断基本块是否为循环基本块,若是,则执行步骤402;否则,执行步骤403;402、 遍历循环语句基本块中的语句序列,在该有向无环图中将循环基本块中的循环控制 节点置为前瞻节点;403、 遍历非循环语句基本块的所有子块,判断是否存在以单一条件转移语句作为子块的节点,若存在,则执行步骤404;否则结束程序;404、将单独的条件转移语句子块置为前瞻节点。 上述步骤105中的构造拓扑序列具体步骤如下501、 采用邻接矩阵M表示此有向无环图,M[i, j] = l表示节点i先于j, a[i, j]=0, 表示节点i与j不存在先后关系;根据上述的邻接矩阵计算各个节点的入度,并定义一个一 维数组Array保存各个节点的入度;502、 判断数组Array中是否存在值为O的元素,若存在则执行步骤503;否则,直接结束;503、 依次遍历步骤501所述的一维数组Array,找到每一次所有入度为零的节点,若节 点个数不止一个,则将这些节点归为一个等价类,从有向无环图中删除这些节点,并在有向 无环图中逐一去掉以这类节点为入节点和出节点的所有有向边,每去掉一条有向边,就将这 条有向边所指向的节点的入度减1,并在数组Array中更新相应项,最后将数组Array中删 除节点相对应的项置为-l;504、 判断数组Array中是否所有元素均为-1,若是,则结束程序;否则,执行步骤502。 上述步骤402或步骤403确定的前瞻节点判断和处理流程如下601、 根据步骤402或步骤403确定的前瞻节点,在前瞻节点对应的语句序列后,添加 前瞻判断语句和相应的处理机制,判断前瞻节点执行是否正确,若正确,则结束此程序;否 则执行歩骤602;602、 回滚基本块的执行,从基本块的开始重新执行。 依照拓扑序列按照特定的处理器时钟周期分别映射和处理各个拓扑节点 本发明的前瞻多线程划分方法与已有技术相比较,具有如下面显而易见的突出实质性特点和显著优点该方法以循环语句和非循环语句前瞻多线程划分,能够充分挖掘程序中的控 制相关和数据相关,充分利用线程级并行性,并通过前瞻执行,减少不必要的延迟等待,加 速程序在多核处理器上的执行速度,提高处理器利用率。


图1是本发明中的前瞻多线程划分方法的流程图; 图2是本发明中的扩展的程序相关图的构造流程图;图3是本发明中的有向无环图的构造流程图; 图4是本发明中的前瞻节点构造流程图; 图5是本发明中的拓扑序列构造流程图; 图6是本发明中的前瞻判断和处理流程图。
具体实施例方式
本发明的一个优选实施例结合附图详述如下本实施例所述方案的应用环境是面向单片 多核处理器的线程级并行执行环境,本实施例不限定所述技术方案应用环境中多核处理器架 构,线程调度方式和前瞻失效优化处理。
下面结合说明书附图和具体实施方式
对本发明作进一步详细的说明。
参照图l,上述前瞻多线程划分方法,该方法步骤包括
101、 为单线程应用程序中的每一个循环语句基本块和每一个非循环语句基本块构造扩展 的程序相关102、 根据扩展的程序相关图为基本块构造有向无环103、 以有向无环图为单位,根据程序的流程顺序,构造整个单线程应用程序的程序流程
104、 以有向无环图为单位,根据步骤103所述的整个单线程应用程序的程序流程图构造 每一个有向无环图的前瞻节点,并从该有向无环图中去掉此前瞻节点和以此前瞻节点为入节 点和出节点的所有有向边;
105、 根据步骤104所述的每一个有向无环图构造一个拓扑序列;
106、 根据步骤104所述的前瞻节点和步骤105所述的拓扑序列,为单片多核处理器划分 为一个个前瞻线程。
参照图2,上述步骤101构造扩展的程序相关图,其具体步骤如下
201、 将单线程应用程序划分为一个个循环基本块和非循环基本块;
202、 判断当前需要构造扩展的程序相关图的基本块是否为循环基本块,若是,执行步骤 203;否则,执行步骤207;
203、 将循环基本块中的每一条语句依次编号,并作为一个节点单位,构造循环基本块的 程序流程9204、循环控制语句到循环被控语句序列的每一条语句节点,都存在一条有向边,参照步 骤203所述的循环流程图,以此构造循环基本块的控制相关205、 逐个分析循环基本块中的每一条语句,确定当前语句是否对某一存储单元进行了 写操作且此基本块中的其他语句有对同一存储单元进行的访问操作,若有,则当前语句与访 问语句之间存在一条有向边。逐步分析,构造循环基本块的数据相关206、 在步骤204所述的控制相关图中,逐一加入步骤205所述的每一条有向边,若此有 向边是由于一次迭代产生,则直接添加,否则,复制骤204所述的控制相关图,并以不同的 循环迭代区分原控制相关图和复制的控制相关图中的相关节点,然后添加相应的有向边;
207、 确定非循环基本块的每一个子块入口语句为以下三种语句该入口语句基本块中的 第一条语句;由条件转移语句或无条件转移语句转移到的语句;紧跟在条件转移语句后面的 语句;
208、 根据步骤207所述的子块入口语句,构造相应子块,子块为每一个入口语句到下 一个入口语句之间的语句序列,其中包括前一个入口语句,若后一个入口语句为转移语句或 者停语句,则包含在此子块中;否则,不包含在此子块中;
209、 根据步骤207所述的子块,以子块为单位,并进行编号,作为扩展的程序相关图 的节点,构造非循环基本块的程序流程210、 根据程序流程关系,构造步骤209所述的所有节点,得到扩展的程序相关图。 参照图3,上述步骤102中构造有向无环图,其具体步骤如下
301、 判断由步骤206或步骤210得到的扩展的程序相关图中是否存在环,若存在,则执 行步骤302;否则,执行步骤303;
302、 将扩展的程序相关图中的强连通部分合并为一个节点;
303、 直接得到扩展的程序相关图相对应的一个有向无环图。 参照图4,上述步骤104中构造前瞻节点的操作步骤如下
401、 判断基本块是否为循环基本块,若是,则执行步骤402;否则,执行步骤403;
402、 遍历循环语句基本块中的语句序列,在该有向无环图中将循环基本块中的循环控制 节点置为前瞻节点;
403、 遍历非循环语句基本块的所有子块,判断是否存在以单一条件转移语句作为子块的节点,若存在,则执行步骤404;否则结束程序;
404、将单独的条件转移语句子块置为前瞻节点。
参照图5,上述步骤105中构造拓扑序列具体步骤如下
501、 采用邻接矩阵M表示此有向无环图,M[i, j] 二l表示节点i先于j, a[i, j]=0, 表示节点i与j不存在先后关系;根据上述的邻接矩阵计算各个节点的入度,并定义一个一 维数组Array保存各个节点的入度;
502、 判断数组Array中是否存在值为O的元素,若存在则执行步骤503;否则,直接结
束;
503、 依次遍历步骤501所述的一维数组Array,找到每一次所有入度为零的节点,若节 点个数不止一个,则将这些节点归为一个等价类,从有向无环图中删除这些节点,并在有向 无环图中逐一去掉以这类节点为入节点和出节点的所有有向边,每去掉一条有向边,就将这 条有向边所指向的节点的入度减1,并在数组Array中更新相应项,最后将数组Array中删 除节点相对应的项置为-l;
504、 判断数组Array中是否所有元素均为-1,若是,则结束程序;否则,执行步骤502。 参照图6,上述步骤402或步骤403确定的前瞻节点判断和处理流程如下-
601、 根据步骤402或步骤403确定的前瞻节点,在前瞻节点对应的语句序列后,添加 前瞻判断语句和相应的处理机制,判断前瞻节点执行是否正确,若正确,则结束此程序;否 则执行步骤602;
602、 回滚基本块的执行,从基本块的开始重新执行。
以上对本基于拓扑序列的前瞻多线程划分方法,进行了详细的介绍。本文结合说明书附 图和具体实施例进行阐述只是用于帮助理解本发明的方法和核心思想;同时,对于本领域的 一般技术人员,依据本发明的方法和思想,在具体实施方式
和应用范围上均会有改变之处, 综上所述,本说明书内容不应理解为对本发明的限制。
1权利要求
1、一种前瞻多线程划分方法,其特征在于,该方法首先为单线程应用程序中的每一个个循环语句基本块和每一个个非循环语句基本块构造相应的扩展的程序相关图;其次为每一个个扩展的程序相关图设计相应的有向无环图;接着为每一个个有向无环图设计前瞻节点,并从该有向无环图中去掉该节点;接着为每一个个有向无环图进行拓扑排序;最后按照单线程应用程序中的顺序语义和得出的拓扑序列为单片多核处理器划分前瞻多线程,其具体步骤包括101、构造扩展的程序相关图为单线程应用程序中的每一个个循环基本块和每一个个非循环基本块构造扩展的程序相关图;102、构造有向无环图根据扩展的程序相关图为基本块构造有向无环图;103、构造整个单线程应用程序的程序流程图以有向无环图为单位,根据程序的流程顺序,构造整个单线程应用程序的程序流程图;104、构造每一个有向无环图的前瞻节点以有向无环图为单位,根据步骤103所述的整个单线程应用程序的程序流程图构造每一个有向无环图的前瞻节点,并从该有向无环图中去掉此前瞻节点和以此前瞻节点为入节点和出节点的所有有向边;105、构造一个拓扑序列根据步骤104所述的每一个有向无环图构造一个拓扑序列;106、为单片多核处理器划分前瞻多线程根据步骤104所述的前瞻节点和步骤105所述的拓扑序列,为单片多核处理器划分为一个个前瞻线程。
2、 根据权利要求1所述的前瞻多线程划分方法,其特征在于,上述步骤101构造扩展的程序 相关图,其具体步骤如下(201、 将单线程应用程序划分为一个个以循环语句序列作为一个循环基本块和从第一个循 环开始,每相邻两个循环基本块之间的非循环语句序列作为一个非循环基本块;(202、 判断扩展的程序相关图的基本块是否为循环基本块,若是,执行步骤203;否则, 执行步骤207;(203、 将循环基本块中的每一条语句依次编号,并作为一个节点单位,构造循环基本块的 程序流程图;(204、 循环控制语句到循环被控语句序列的每一条语句节点,都存在一条有向边,参照步 骤203所述的循环流程图,以此构造循环基本块的控制相关图;(205、 逐个分析循环基本块中的每一条语句,确定当前语句是否对某一存储单元进行了 写操作且此基本块中的其他语句有对同一存储单元进行的访问操作,若有,则当前语句与访 问语句之间存在一条有向边,逐步分析,构造循环基本块的数据相关图;·206、 在步骤204所述的控制相关图中,逐一加入步骤205所述的每一条有向边,若此 有向边是由于一次迭代产生,则直接添加,否则,复制步骤204所述的控制相关图,并以不 同的循环迭代区分原控制相关图和复制的控制相关图中的相关节点,然后添加相应的有向边;·207、 确定非循环基本块的每一个子块入UJ语句,该入口语句为三种语句基本块中的 第一条语句;由条件转移语句或无条件转移语句转移到的语句;紧跟在条件转移语句后面的 语句;·208、 根据步骤207所述的子块入口语句,构造相应子块,子块为每一个入口语句到下 一个入口语句之间的语句序列,其中包括前一个入口语句,若后一个入口语句为转移语句或 者停语句,则包含在此子块中;否则,不包含在此子块中;·209、 根据步骤207所述的子块,以子块为节点单位,并进行编号,作为扩展的程序相 关图的节点,构造非循环基本块的程序流程图;·210、 根据程序流程关系,构造步骤209所述的所有节点,得到扩展的程序相关图。
3、 根据权利要求2所述的前瞻多线程划分方法,其特征在于,上述步骤102中构造有向无环 图,其具体步骤如下-·301、 判断由步骤206或步骤210得到的扩展的程序相关图中是否存在环,若存在,则执 行步骤302;否则,执行步骤303;·302、 将扩展的程序相关图中的强连通部分合并为一个节点;·303、 直接得到扩展的程序相关图相对应的一个有向无环图。
4、 根据权利要求4所述的前瞻多线程划分方法,其特征在于,上述步骤104中构造前瞻节点 的操作步骤如下·401、 判断基本块是否为循环基本块,若是,则执行步骤402;否则,执行步骤403;·402、 遍历循环语句基本块中的语句序列,在该有向无环图中将循环基本块中的循环控制 节点置为前瞻节点;·403、 遍历非循环语句基本块的所有子块,判断是否存在以单一条件转移语句作为子块的 节点,若存在,则执行步骤404;否则结束程序;·404、 将单独的条件转移语句子块置为前瞻节点。
5、 根据权利要求4所述的前瞻多线程划分方法,其特征在于,上述步骤105中构造拓扑序列 具体步骤如下·501、采用邻接矩阵M表示此有向无环图,M[i, j] = l表示节点i先于j, a[i, j]=0, 表示节点i与j不存在先后关系;根据上述的邻接矩阵计算各个节点的入度,并定义一个一维数组Array保存各个节点的入度;,502、 判断数组Array中是否存在值为0的元素,若存在则执行步骤503;否则,直接结束;,503、 依次遍历步骤501所述的一维数组Array,找到每一次所有入度为零的节点,若节 点个数不止一个,则将这些节点归为一个等价类,从有向无环图中删除这些节点,并在有向 无环图中逐一去掉以这类节点为入节点和出节点的所有有向边,每去掉一条有向边,就将这 条有向边所指向的节点的入度减1,并在数组Array中更新相应项,最后将数组Array中删 除节点相对应的项置为-l;,504、 判断数组Array中是否所有元素均为-1,若是,则结束程序;否则,执行步骤502。
6、根据权利要求4或5所述的前瞻多线程划分方法,其特征在于,上述步骤402或步骤403确定的前瞻节点判断和处理流程如下,601、 根据步骤402或步骤403确定的前瞻节点,在前瞻节点对应的语句序列后,添加 前瞻判断语句和相应的处理机制,判断前瞻节点执行是否正确,若正确,则结束此程序;否 则执行步骤602;,602、 回滚基本块的执行,从基本块的开始重新执行。
全文摘要
本发明公开了一种前瞻多线程划分方法,该方法首先为单线程应用程序中的每一个个循环语句基本块和每一个个非循环语句基本块构造相应的扩展的程序相关图;其次为每一个个扩展的程序相关图设计相应的有向无环图;接着为每一个个有向无环图设计前瞻节点,并从该有向无环图中去掉该节点;接着为每一个个有向无环图进行拓扑排序;最后按照单线程应用程序中的顺序语义和得出的拓扑序列为单片多核处理器划分前瞻多线程。该方法以循环语句和非循环语句前瞻多线程划分,能够充分挖掘程序中的控制相关和数据相关,充分利用线程级并行性,并通过前瞻执行,减少不必要的延迟等待,加速程序在多核处理器上的执行速度,提高处理器利用率。
文档编号G06F9/38GK101655783SQ20091005088
公开日2010年2月24日 申请日期2009年5月8日 优先权日2009年5月8日
发明者悦 吴, 唐立三, 皓 张, 磊 徐, 杨洪斌, 雷超付 申请人:上海大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1