System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及计算机编译,特别涉及一种面向双simd部件的代码循环展开处理方法及系统。
技术介绍
1、simd部件指的是一套专用的多媒体扩展指令集。该指令集采用单指令多数据(single instruction multipledata,简称simd)扩展技术,可同时对多个数据进行相同的操作,称为simd扩展部件。simd扩展部件能够对多媒体程序中的数据进行并行处理,提升了多媒体程序的运行速度。双simd部件在国产申威处理器上的实现借鉴了cpu设计时的流水线(pipeline)技术。流水线技术是指程序在执行时候多条指令重叠进行操作的一种准并行处理实现技术。即将一个时序过程,分解成若干个子过程,每个过程都能有效的与其他子过程同时执行。在国产申威处理器上有两套simd扩展部件,并且可以以流水线的方式执行。
2、自动向量化是一种重要的编译优化方法,它利用simd扩展部件提供的数据并行处理能力,有效提升程序性能,在数字信号处理、大数据、人工智能、高性能计算等众多应用场景中发挥着重要的作用。现在主流编译器如gcc、llvm、icc等都支持自动向量化优化。循环展开是一种常见的程序优化技术。它是一种牺牲程序的尺寸来加快程序的执行速度的优化方法。该技术可以由应用程序编写人员完成,也可由编译器自动优化完成。循环展开通过将循环体内的代码复制多次的操作,减少循环分支指令执行的次数,增大处理器指令调度的空间,最终获得更多的指令级并行。合理地使用循环展开技术可以增加寄存器的重用。然而,循环展开的次数并不是越大越好,在展开时需要按照目标平台的特
3、目前循环展开技术主要有以下三种:(1)手工展开。应用程序编写人员将循环体手工展开想要的次数。该方法效率低且容易出错。(2)添加指示语句。在应用程序中的指定循环体上添加指示语句以表示该循环体需要展开、需要展开几次。该方案也需要修改源程序,在源程序中添加适当的指导语句。(3)编译时添加编译选项,自动循环展开。该方式是最高效的循环展开方式,但是这样会将所有的循环体都展开相同的次数。现有循环展开技术不能满足高效使用双simd部件。
技术实现思路
1、为此,本专利技术提供一种面向双simd部件的代码循环展开处理方法及系统,利用编译器优化遍自动识别含有向量语句的循环体并将该指定循环体循环展开特定次数,能够满足目标平台上高效利用双simd部件的目的,提升程序代码性能。
2、按照本专利技术所提供的设计方案,一方面,提供一种面向双simd部件的代码循环展开处理方法,用于目标程序代码的编译优化,包含:
3、利用编译器对目标程序自动向量化并生成向量语句;
4、针对双simd部件自动向量化优化需求,识别并标记向量语句中含有simd语句的循环体;
5、在遍历标记的循环体时,若目标平台支持双simd部件的流水执行,则在目标平台上对循环体执行指定次数的循环展开。
6、作为本专利技术面向双simd部件的代码循环展开处理方法,进一步地,利用编译器对目标程序自动向量化并生成向量语句,包含:
7、利用编译器生成目标程序的中间表示,遍历目标程序的各循环体,并对每个循环体中的所有基本块进行遍历,获取基本块中含有使用向量指令的语句并对当前循环体进行标记。
8、作为本专利技术面向双simd部件的代码循环展开处理方法,进一步地,识别并标记向量语句中含有simd语句的循环体,包含:
9、判断向量语句中是否使用指定语句,若使用该指定语句,则认定向量语句中含有simd语句,并对该向量语句对应的循环体进行标记,所述指定语句为insn语句,若为使用该指定语句,则跳过当前循环体。
10、作为本专利技术面向双simd部件的代码循环展开处理方法,进一步地,判断向量语句中是否使用指定语句,还包含:
11、遍历向量语句中所有的最内层循环体,以识别并标记使用指定语句的最内层循环体,直至向量语句中所有最内层循环体遍历结束。
12、作为本专利技术面向双simd部件的代码循环展开处理方法,进一步地,在目标平台上对循环体执行指定次数的循环展开,包含:
13、根据循环迭代次数将循环展开进行分类;
14、依据循环展开分类结果,调用编译器中对应函数对循环体执行对应指定次数的循环展开。
15、作为本专利技术面向双simd部件的代码循环展开处理方法,进一步地,根据循环迭代次数将循环展开进行分类,包含:
16、若循环迭代次数为常数,则将对应的循环展开归类为第一类,若循环迭代次数运行时通过计算得到,则将对应的循环展开归类为第二类,循环迭代次数为其他情形的,则将循环展开归类为第三类。
17、作为本专利技术面向双simd部件的代码循环展开处理方法,进一步地,在目标平台上对循环体执行指定次数的循环展开,包含:
18、利用编译器自带循环展开方式对循环体执行指定次数的循环展开,所述指定次数为2次。
19、再一方面,本专利技术还提供一种面向双simd部件的代码循环展开处理系统,用于目标程序代码的编译优化,包含:向量化模块、标记识别模块和循环展开模块,其中,
20、向量化模块,用于利用编译器对目标程序自动向量化并生成向量语句;
21、标记识别模块,用于针对双simd部件自动向量化优化需求,识别并标记向量语句中含有simd语句的循环体;
22、循环展开模块,用于在遍历标记的循环体时,若目标平台支持双simd部件的流水执行,则在目标平台上对循环体执行指定次数的循环展开。
23、本专利技术的有益效果:
24、本专利技术可以使用与传统的循环展开选项不同的编译选项,传统的循环展开选项可以将所有的循环体都展开,本案方案中可以在编译器中利用编译选项实现自动决定循环展开含有向量化语句的循环体;通过在编译器中间优化遍中添加优化遍来实现自动决定循环展开特定循环体,不需要修改源程序,且优化遍判断是否将一个循环体展开的方式是遍历所有的程序中所有的最内层循环体,循环含有向量模式数据的insn语句,在编译器的中间优化遍中寻找含有特殊指令或特殊数据模式的循环,可在中间表示的寄存器传输语言rtl阶段遍历所有循环体,在每个循环体中寻找满足条件的循环体;可以只通过添加编译选项的方式来实现面向双simd部件的循环展开,避免人工修改程序,提高双simd部件的使用效率,提升程序性能,在数字信号处理、大数据、人工智能、高性能计算等领域具有较好的应用前景。
本文档来自技高网...【技术保护点】
1.一种面向双SIMD部件的代码循环展开处理方法,用于目标程序代码的编译优化,其特征在于,包含:
2.根据权利要求1所述的面向双SIMD部件的代码循环展开处理方法,其特征在于,利用编译器对目标程序自动向量化并生成向量语句,包含:
3.根据权利要求1或2所述的面向双SIMD部件的代码循环展开处理方法,其特征在于,识别并标记向量语句中含有SIMD语句的循环体,包含:
4.根据权利要求3所述的面向双SIMD部件的代码循环展开处理方法,其特征在于,判断向量语句中是否使用指定语句,还包含:
5.根据权利要求1所述的面向双SIMD部件的代码循环展开处理方法,其特征在于,在目标平台上对循环体执行指定次数的循环展开,包含:
6.根据权利要求5所述的面向双SIMD部件的代码循环展开处理方法,其特征在于,根据循环迭代次数将循环展开进行分类,包含:
7.根据权利要求1所述的面向双SIMD部件的代码循环展开处理方法,其特征在于,在目标平台上对循环体执行指定次数的循环展开,包含:
8.一种面向双SIMD部件的代码循环展开处
9.一种电子设备,其特征在于,包括:
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,当计算机程序被执行时,能够实现如权利要求1~7任一项所述的方法。
...【技术特征摘要】
1.一种面向双simd部件的代码循环展开处理方法,用于目标程序代码的编译优化,其特征在于,包含:
2.根据权利要求1所述的面向双simd部件的代码循环展开处理方法,其特征在于,利用编译器对目标程序自动向量化并生成向量语句,包含:
3.根据权利要求1或2所述的面向双simd部件的代码循环展开处理方法,其特征在于,识别并标记向量语句中含有simd语句的循环体,包含:
4.根据权利要求3所述的面向双simd部件的代码循环展开处理方法,其特征在于,判断向量语句中是否使用指定语句,还包含:
5.根据权利要求1所述的面向双simd部件的代码循环展开处理方法,其特征在于,在目标平台上对循环体执行指定次数的循环展开...
【专利技术属性】
技术研发人员:单征,姚金阳,赵博,李颖颖,钱宏,徐金龙,刘丽丽,刘文博,付炫钰,
申请(专利权)人:中国人民解放军战略支援部队信息工程大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。