System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于计算机软件开发,具体涉及一种基于循环依赖分析的avx指令模拟执行优化方法。
技术介绍
1、avx(advanced vector extensions)是intel公司在其处理器中引入的一种simd(单指令多数据)指令集,旨在提高浮点运算和整数运算的性能。avx指令集允许处理器一次处理更多的数据,从而提高处理过程的并行性和吞吐量。avx指令集的关键特点包括:采用了更大的寄存器,avx可使用256位宽甚至512位宽的ymm寄存器,较sse指令集使用的128位宽的xmm寄存器来说avx一次能够处理更多的数据;操作数融合,avx指令能够同时操作两个128位的操作数,并将结果存储在一个256位的寄存器中,有效减少了需要的指令数量和潜在的延迟;混合精度,avx支持混合精度操作,即允许在同一指令中处理单精度(32位)和双精度(64位)浮点数等。arm64架构的simd指令集,通常被称为neon,也被称为高级simd,是armv7架构及以后版本中引入的一种指令集扩展,用于加速多媒体和信号处理等需要大量数据处理的应用,为高性能计算提供了支持。
2、实际中,当在arm64平台上高效执行x86架构的工业计算软件时,就需要使用arm64的simd指令高效模拟执行avx指令。由于avx指令支持256位或512位的数据向量而neon指令主要支持128位的数据向量,因此当使用neon指令模拟执行avx指令处理avx数据向量时,就需要将其分割重组后才能处理。现有的处理方法主要是从内存直接将数据按需读取到neon寄存器后再执行相应的操
技术实现思路
1、有鉴于此,本专利技术提供了一种基于循环依赖分析的avx指令模拟执行优化方法,通过对数据读取指令的循环依赖分析确定了数据读取指令之前预取指令的添加方式,以此实现了avx指令的高效模拟执行。
2、本专利技术提供的一种基于循环依赖分析的avx指令模拟执行优化方法,具体包括以下步骤:
3、步骤1、若可执行文件存在与其对应的预取指令插入策略列表,则根据预取指令插入策略列表完成该可执行文件的执行,结束本流程;否则通过动态指令转换加载执行该可执行文件;
4、步骤2、若当前待转换avx指令不是数据读取指令,则将其转换为neon指令后执行步骤9;否则,将当前待转换avx指令记为第一avx指令,将第一avx指令的地址记为第一avx指令地址;获取第一avx指令向前设定数量的指令形成第一指令集合,对第一指令集合中的指令执行预先转换得到指令的语法和语义;
5、步骤3、根据得到的语法和语义,查找距第一avx指令地址最近的跳转指令,若存在则执行步骤4,否则将第一avx指令动态转换为neon指令后执行步骤9;
6、步骤4、将跳转指令记为第一跳转指令,将其地址记为第一跳转指令地址,将其设定的目标地址记为第一目标地址,若第一目标地址小于第一avx指令地址则执行步骤5;若第一目标地址大于第一avx指令地址,则将第一跳转指令从第一指令集合中删除后执行步骤8;
7、步骤5、由从第一跳转指令地址到第一avx指令地址之间的指令形成第二指令集合,若第二指令集合中存在以寄存器内数据为操作数的比较及自增或自减指令,则第一跳转指令为循环跳转指令执行步骤6;否则将第一avx指令动态转换为neon指令后执行步骤9;
8、步骤6、将第一avx指令地址对应的寄存器内数据记为第一数据地址,由从第一目标地址到第一跳转指令地址之间的指令形成第三指令集合,在第三指令集合中若存在采用立即数修改第一数据地址的指令则将距第一avx指令地址最近的指令中的立即数记为数据读取步长,将该指令的地址记为修改指令地址,执行步骤7;否则将第一avx指令动态转换为neon指令后执行步骤9;
9、步骤7、将增加的预取指令名称、地址及操作数与第一avx指令地址之间的对应关系加入预取指令插入策略列表中,再执行步骤9;
10、步骤8、若第一指令集合中存在跳转指令,则执行步骤3;否则将第一avx指令动态转换为neon指令后执行步骤9;
11、步骤9、若可执行文件未完成执行则选取下一个指令执行步骤2;否则完成可执行文件的执行,结束本流程。
12、进一步地,所述设定数量为结束指令与第一avx指令之间存在的指令数量,所述结束指令由逆向分析确定。
13、进一步地,所述设定数量为结束指令与第一avx指令之间存在的指令数量和经验值中的较小值。
14、进一步地,所述经验值为200。
15、进一步地,所述步骤6中所述将距第一avx指令地址最近的指令中的立即数记为数据读取步长,将该指令的地址记为修改指令地址之后,执行:
16、步骤6.1、由第一跳转指令地址向前设定数量的指令形成第四指令集合,若第四指令集合中不存在循环跳转指令,则执行步骤7;否则执行步骤6.2;
17、步骤6.2、在第一数据地址指向的内存区域中,从第一个内存页开始遍历内存页,将属性为可读的内存页修改为不可读,由第一avx指令地址与第一数据地址间的对应关系形成指令内存区域映射表;将第一avx指令转换为neon指令并顺序执行可执行文件,当产生内存访问异常时,对于存在于指令内存区域映射表中的异常地址,记录该异常地址,清除异常后恢复可执行文件的执行;若同一第一avx指令地址对应的多个异常地址为等差数列,则将异常地址之前作为预取指令的地址,以异常地址对应的内存页为预取指令的操作数,执行步骤7。
18、进一步地,所述步骤7所述将增加的预取指令名称、地址及操作数与第一avx指令地址之间的对应关系加入预取指令插入策略列表中的方式为:
19、若修改指令地址小于第一avx指令地址,则在第一avx指令地址与第一跳转指令地址之间添加预取指令,预取指令的操作数为第一数据地址与数据读取步长之和;若修改指令地址大于第一avx指令地址,则在修改指令地址与第一跳转指令地址之间添加预取指令,预取指令的操作数为当前的第一数据地址。
20、进一步地,所述步骤2中所述数据读取指令为vmovaps、vmovups、vmovapd、vmovupd、vbroadcastss或vbroadcastsd。
21、有益效果
22、本专利技术在以动态指令转换方式首次执行可执行文件时,通过对指令的语义分析确定与数据读取指令接近的跳转指令、比较指令及自增指令,根据对数据读取指令与这些指令间指令地址及操作数的关系确定数据读取指令所在的单层循环体确定预取指令的添加方式,再通过在动态指令转换过程中引入执行异常获取处于多层循环体中的数据读取指令的预取指令添加方式,由预取指令添加方式及数据读取指令的地址形成预取指令插入策略列表,后续可根据预取指令插入策略列表完成该可本文档来自技高网...
【技术保护点】
1.一种基于循环依赖分析的AVX指令模拟执行优化方法,其特征在于,具体包括以下步骤:
2.根据权利要求1所述的AVX指令模拟执行优化方法,其特征在于,所述设定数量为结束指令与第一AVX指令之间存在的指令数量,所述结束指令由逆向分析确定。
3.根据权利要求2所述的AVX指令模拟执行优化方法,其特征在于,所述设定数量为结束指令与第一AVX指令之间存在的指令数量和经验值中的较小值。
4.根据权利要求3所述的AVX指令模拟执行优化方法,其特征在于,所述经验值为200。
5.根据权利要求1所述的AVX指令模拟执行优化方法,其特征在于,所述步骤6中所述将距第一AVX指令地址最近的指令中的立即数记为数据读取步长,将该指令的地址记为修改指令地址之后,执行:
6.根据权利要求1所述的AVX指令模拟执行优化方法,其特征在于,所述步骤7所述将增加的预取指令名称、地址及操作数与第一AVX指令地址之间的对应关系加入预取指令插入策略列表中的方式为:
7.根据权利要求1所述的AVX指令模拟执行优化方法,其特征在于,所述步骤2中所述数据读取
...【技术特征摘要】
1.一种基于循环依赖分析的avx指令模拟执行优化方法,其特征在于,具体包括以下步骤:
2.根据权利要求1所述的avx指令模拟执行优化方法,其特征在于,所述设定数量为结束指令与第一avx指令之间存在的指令数量,所述结束指令由逆向分析确定。
3.根据权利要求2所述的avx指令模拟执行优化方法,其特征在于,所述设定数量为结束指令与第一avx指令之间存在的指令数量和经验值中的较小值。
4.根据权利要求3所述的avx指令模拟执行优化方法,其特征在于,所述经验值为200。
5.根据权利要求1所述的avx指令模拟执行优...
【专利技术属性】
技术研发人员:温研,
申请(专利权)人:北京麟卓信息科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。