System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种简化OpenMP指导语句的函数向量化方法技术_技高网

一种简化OpenMP指导语句的函数向量化方法技术

技术编号:43281993 阅读:22 留言:0更新日期:2024-11-12 16:05
本发明专利技术公开一种简化OpenMP指导语句的函数向量化方法,在编译器中添加了用于简化OpenMP指导语句的函数向量化优化遍,该优化遍在函数向量化优化遍之前,该优化遍可以遍历需要向量化的循环,自动为被调函数加相应的指导语句,而不再需要程序员在被调函数上手工添加有关函数向量化的指导语句,从而简化基于OpenMP指导语句的函数向量化。本发明专利技术简化了基于OpenMP指导语句的函数向量化,不再需要程序员在被调函数上手工添加有关函数向量化的指导语句,从而在一定程度上减少程序员负担。

【技术实现步骤摘要】

本专利技术涉及计算机,尤其涉及一种简化openmp指导语句的函数向量化方法。


技术介绍

1、全函数向量化是一种将整个函数转换为可同时处理多个数据元素的simd指令的技术,以提高计算效率。这种方法不同于传统的循环向量化,全函数向量化的优点在于它可以将整个函数的计算效率最大化,包括控制流和变量使用等方面,可以更好地利用simd指令的优势,其代码具有较高的可读性和易用性。除此之外,函数向量化比传统的基于循环的操作更快,特别是在处理大型数据集时效果明显。随着多核处理器和gpu等并行计算平台的出现,全函数向量化技术在许多领域都得到了广泛的应用,如图像处理、数据处理、机器学习、深度学习等。

2、目前函数向量化主要基于openmp指导语句来实现,然而基于openmp指导语句的函数向量化需要同时对调用点所在的循环和被调函数都加上指导语句以实现向量化。在openmp中,基于指导语句的函数向量化通过#pragma omp declare simd和#pragmaompsimd指令来实现。#pragma omp declare simd指令告知编译器特定函数可以安全地进行simd向量化。当编译器遇到此指令时,会尝试生成函数的向量化版本,以便在并行区域中调用该函数时更有效地利用simd指令集。在需要向量化的循环上加#pragma ompsimd指导语句,在遇到函数调用时,编译器会寻找是否存在向量化版本的函数可以调用。从而实现函数向量化。

3、现有基于指导语句的函数向量化需要同时对循环中的调用点和被调函数加上指导语句以实现向量化,此方式较为繁琐并且为程序员增加负担。


技术实现思路

1、目前基于openmp指导语句的函数向量化需要同时对调用点所在的循环和被调函数都加上指导语句以实现向量化,此方法较为繁琐并且为程序员增加负担。针对如何简化基于openmp指导语句的函数向量化问题,本专利技术提出一种简化openmp指导语句的函数向量化方法,在编译器中添加了优化遍,该优化遍在函数向量化优化遍之前。该优化遍可以遍历需要向量化的循环,自动为被调函数加相应的指导语句,而不再需要程序员在被调函数上手工添加有关函数向量化的指导语句。从而简化基于openmp指导语句的函数向量化。

2、为了实现上述目的,本专利技术采用以下技术方案:

3、一种简化openmp指导语句的函数向量化方法,包括:

4、在编译器中添加简化openmp指导语句的函数向量化优化遍,在编译程序时,遍历需要向量化的循环,自动为被调函数加相应的openmp指导语句。

5、进一步地,所述优化遍的执行过程包括:

6、步骤1、判断编译选项是否已打开,若是则转至步骤2,若否则结束整个优化遍执行过程;

7、步骤2、遍历所有函数;

8、步骤3、检查函数是否具有omp declare simd属性,若是则转至步骤4,若否则转至步骤5;

9、步骤4、标记此函数,表示需要对该函数的函数体包含的所有被调函数进行处理;

10、步骤5、遍历标记函数体中的语句;

11、步骤6、检查是否是omp_simd循环语句,若是则转至步骤7,若否则转至步骤8;

12、步骤7、标记此循环,表示需要对该循环的循环体包含的所有被调函数进行处理;

13、步骤8、检查是否是函数调用语句并且在标记函数体中,若是则转至步骤9,若否则转至步骤10;

14、步骤9、为被调函数添加omp declare simd属性;

15、步骤10、判断函数体遍历是否结束,若是则转至步骤11,若否则转至步骤5;

16、步骤11、遍历标记循环体中的语句;

17、步骤12、检查是否是函数调用语句,若是则转至步骤13,若否则转至步骤14;

18、步骤13、为被调函数添加omp declare simd属性;

19、步骤14、判断标记循环体遍历是否结束,若是则转至步骤15,若否则转至步骤11;

20、步骤15、判断所有函数是否遍历结束,若是则结束整个优化遍执行过程,若否则转至步骤2。

21、进一步地,所述编译选项在编译程序时添加,用于为被调函数自动添加ompdeclare simd属性,编译器识别omp declare simd属性后提供向量化版本的函数。

22、进一步地,所述步骤5或步骤11通过执行相应函数实现,该函数具体执行过程包括:

23、检查给定的语句是否存在且是一个绑定表达式,如果是绑定表达式,则获取绑定表达式中的语句列表,并递归调用自身来遍历这些语句;

24、如果给定的语句是一个openmp simd指令,则设置一个标志,然后递归地遍历该指令的第一个操作数,然后再将标志复位;

25、如果给定的语句是一个语句列表,则迭代遍历该列表中的每个语句,并递归调用自身来处理每个语句;

26、如果给定的语句既不是绑定表达式也不是openmp simd指令,并且当前处于openmp函数或标志语句内部,则检查语句是否是函数调用,如果是函数调用,检查该函数是否在系统头文件中声明,如果不是,则将其添加到一个列表中,然后,递归地处理函数调用的每个参数;

27、如果给定的语句不属于以上任何一种情况,则检查语句是否包含操作数,并递归地遍历这些操作数。

28、与现有技术相比,本专利技术具有的有益效果:

29、本专利技术在编译器中添加了优化遍,该优化遍可以自动为被调函数加相应的指导语句从而简化基于openmp指导语句的函数向量化。使用该优化遍时,在编译时添加编译选项即可打开。

30、简化过的基于openmp指导语句的函数向量化,只需要在循环上加openmp的指导语句。传统的基于openmp指导语句的函数向量化需要同时在循环上和被调函数上同时加上openmp的指导语句,较为繁琐为程序员增加负担。本专利技术解决了该问题,简化了基于openmp指导语句的函数向量化,不再需要程序员在被调函数上手工添加有关函数向量化的指导语句,从而在一定程度上减少程序员负担。

本文档来自技高网...

【技术保护点】

1.一种简化OpenMP指导语句的函数向量化方法,其特征在于,包括:

2.根据权利要求1所述的一种简化OpenMP指导语句的函数向量化方法,其特征在于,所述优化遍的执行过程包括:

3.根据权利要求2所述的一种简化OpenMP指导语句的函数向量化方法,其特征在于,所述编译选项在编译程序时添加,用于为被调函数自动添加omp declare simd属性,编译器识别omp declare simd属性后提供向量化版本的函数。

4.根据权利要求1所述的一种简化OpenMP指导语句的函数向量化方法,其特征在于,所述步骤5或步骤11通过执行相应函数实现,该函数具体执行过程包括:

【技术特征摘要】

1.一种简化openmp指导语句的函数向量化方法,其特征在于,包括:

2.根据权利要求1所述的一种简化openmp指导语句的函数向量化方法,其特征在于,所述优化遍的执行过程包括:

3.根据权利要求2所述的一种简化openmp指导语句的函数向量化方法,其特征在于,所述编译选项在编译...

【专利技术属性】
技术研发人员:单征姚金阳赵博李颖颖刘丽丽徐金龙刘文博付炫钰
申请(专利权)人:中国人民解放军战略支援部队信息工程大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1