[发明专利]一种开发循环代码中潜在可向量化循环的方法有效
申请号: | 201911243343.X | 申请日: | 2019-12-06 |
公开(公告)号: | CN111124415B | 公开(公告)日: | 2022-02-01 |
发明(设计)人: | 刘松;伍卫国;屈彬;王倩;马洁 | 申请(专利权)人: | 西安交通大学 |
主分类号: | G06F8/41 | 分类号: | G06F8/41;G06F17/16 |
代理公司: | 西安通大专利代理有限责任公司 61200 | 代理人: | 李晓晓 |
地址: | 710049 *** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 开发 循环 代码 潜在 量化 方法 | ||
1.一种开发循环代码中潜在可向量化循环的方法,其特征在于,包括以下步骤:
步骤1)、检测数据依赖:根据伯恩斯坦条件扫描获取循环代码中的数据依赖,根据读写顺序判断数据依赖的初始类型;
步骤2)、数据依赖模型化:通过定位三元组分别表示数据依赖源语句的位置和数据依赖目标语句的位置,计算数据依赖源语句至数据依赖目标语句的距离向量,根据距离向量获取数据依赖的迭代类型,建立由数据依赖源语句、数据依赖目标语句、定位三元组、距离向量、数据依赖的初始类型及数据依赖的迭代类型构成的初始依赖表,由定位三元组(l,i,s)表示一条赋值语句,即表示数据依赖源语句和数据依赖目标语句,赋值语句具体形式为:写地址=表达式(读地址1、读地址2、…读地址n);
步骤3)、对初始依赖表进行数据缓冲:扫描初始依赖表,若初始依赖表存在自反依赖,且该自反依赖的源/目标语句之间不存在自正依赖,则将该自反依赖复制插入到该自反依赖的源/目标语句代码下方,同时通过缓冲数组分别替换自反依赖中的写数组以及复制的该自反依赖中的读数组,更新依赖表并重新执行步骤3)直至初始依赖表中不存在自反依赖;若不存在自反依赖,则进入步骤4);
步骤4)、对不存在自反依赖的依赖表进行语句重排:扫描不存在自反依赖的依赖表,若存在交叉依赖,则将交叉依赖中数据依赖源语句以及与交叉依赖数据依赖源语句交叉依赖的数据依赖目标语句从当前循环l移动到循环l+1中,若循环l+1不存在,则创建循环l+1,使交叉依赖转变为跨循环依赖。
2.根据权利要求1所述的一种开发循环代码中潜在可向量化循环的方法,其特征在于,所述读地址的序号n从语句表达式中最靠近赋值符的读地址依次递增,最靠近赋值符的读地址序号n=1。
3.根据权利要求1所述的一种开发循环代码中潜在可向量化循环的方法,其特征在于,定位三元组包括循环位置、迭代步数和语句相对位置。
4.根据权利要求1所述的一种开发循环代码中潜在可向量化循环的方法,其特征在于,数据依赖源语句至数据依赖目标语句的距离向量由数据依赖目标语句和数据依赖源语句相减得到。
5.根据权利要求1所述的一种开发循环代码中潜在可向量化循环的方法,其特征在于,根据距离向量划分的依赖类型包括自依赖、交叉依赖、同迭代依赖和跨循环依赖。
6.根据权利要求1所述的一种开发循环代码中潜在可向量化循环的方法,其特征在于,步骤1)中,根据伯恩斯坦条件判断任意两条语句是否存在数据依赖的条件,若任意两条语句同时满足:
a、该两条语句访问相同的地址;
b、至少一条语句包含写操作;
c、该两条语句被并行执行;
则该两条语句之间存在数据依赖。
7.根据权利要求1所述的一种开发循环代码中潜在可向量化循环的方法,其特征在于,根据读写顺序划分的依赖类型包括:目标语句在源语句写之后读,则数据依赖为正依赖;目标语句在源语句读之后写,则数据依赖为反依赖;目标语句在源语句写之后写,则数据依赖为输出依赖。
8.根据权利要求1所述的一种开发循环代码中潜在可向量化循环的方法,其特征在于,步骤4)中,交叉依赖包括直接交叉依赖和间接交叉依赖。
9.根据权利要求1所述的一种开发循环代码中潜在可向量化循环的方法,其特征在于,间接交叉依赖指S1作为目标语句直接交叉依赖于S2语句,S2作为目标语句又直接交叉依赖于S3语句,则S1作为目标语句间接交叉依赖于S3语句。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安交通大学,未经西安交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201911243343.X/1.html,转载请声明来源钻瓜专利网。