一种基于申威平台的SIMDintrinsic实现方法与流程

文档序号:34066716发布日期:2023-05-06 15:29阅读:100来源:国知局
一种基于申威平台的SIMDintrinsic实现方法与流程

本发明涉及申威平台的simd,特别涉及一种基于申威平台的simdintrinsic实现方法,具体涉及一种基于申威平台(申威平台是一款基于国产cpu——申威cpu的计算机平台)的simd(single instruction multiple data,单指令多数据流)intrinsic(simd内联函数)的实现方法。


背景技术:

1、(1)该行业的技术发展现状

2、现代处理器中包含向量处理单元,支持simd指令集(向量处理器,又称数组处理器,是一种实现了直接操作一维数组(向量)指令集的中央处理器cpu)。为了方便用户使用simd功能,处理器厂商会在c语言层面设计一套simd intrinsic函数接口,这些函数接口与simd指令一一对应,通过编译器获得与汇编编程一样的性能。目前国外处理器厂商英特尔有x86 intrinsic,arm(advanced risc machine)有对应的neon intrinsic(neon是arm v7架构开始引入的simd指令),在国内,国产化的申威平台推出有类似功能的simd函数(用申威平台的simd指令实现的函数)。

3、(2)现有技术中存在的缺陷

4、现有的simd intrinsic都是各家厂商针对各自平台设计的,并没有统一的标准,这导致在软件移植有simd intrinsic的程序到申威平台时,移植人员需要熟悉双方平台的simd指令集,无疑增加了软件移植的难度,限制了申威平台的推广。


技术实现思路

1、本发明的目的在于提供一种基于申威平台的simd intrinsic实现方法,该方法可实现在源码层面兼容x86 intrinsic。

2、为解决上述技术问题,本发明提供了一种基于申威平台的simd intrinsic实现方法,包括如下步骤:

3、s1:扫描源码,判断是否有x86 intrinsic函数;在源码中扫描x86 intrinsic函数的关键字,扫描范围包括源码、配置文件;

4、所述关键字有:x86 intrinsic函数头文件名称、x86 intrinsic函数名前缀、advanced vector extensions;

5、在所述步骤s1中,如果扫描结果中有所述关键字,则能够判断源码中存在对x86intrinsic函数的调用;

6、在所述步骤s1中,还包括对源码编译,如果在源码编译过程中出现“找不到x86intrin.h”的错误提示,则判断源码中存在对x86 intrinsic函数的调用;

7、s2:判断x86 intrinsic函数可否在申威平台上进行重构;为了保证函数兼容,针对256位向量的函数进行重构,这类函数声明在immintrin.h文件中,以“_mm256”作为函数名前缀;

8、s3:重构x86 intrinsic函数;如果有对应的申威平台simd函数,则重构x86intrinsic函数时使用申威平台simd函数;申威平台在编译器中对申威平台simd函数进行支持,执行效率高;

9、s4:进行测试;将步骤s3申威平台重构的x86 intrinsic函数(即申威平台simdintrinsic函数)用libjpeg(开源的跨平台图形处理库)测试用例进行测试,如果申威平台的测试结果同x86平台的测试结果一致,则证明申威平台simd intrinsic函数与x86intrinsic函数二者功能相同,且二者函数接口兼容。这样可以确保x86平台上的含有x86intrinsic函数的代码可以不加修改直接在申威平台上编译运行,从而达到降低移植难度的目的。

10、优选的,在所述步骤s3中,如果没有对应的申威平台simd函数(申威平台simd函数是申威平台用simd指令实现的函数接口),需要重构_mm256_madd_epi16()这个x86intrinsic函数,则能够通过组合simd_vsrlw()、simd_vbisw()、simd_vsllw()、simd_vaddw()多种simd函数实现_mm256_madd_epi16()函数的功能。

11、本发明具有以下有益效果:

12、(1)本方法实现的申威平台simd intrinsic(即申威平台上重构的x86 intrinsic函数)与x86平台上的x86 intrinsic函数名和参数一致,处理256位向量的x86 intrinsic程序可以直接编译运行在申威平台上。

13、(2)本方法实现的申威平台simd intrinsic函数使用申威gcc(申威gcc是申威平台的c语言编译器)支持的simd函数,具有良好的稳定性。

14、(3)本方法既可以作为软件移植方法,也可以作为软件优化方法使用。

15、(4)本发明提供的一种基于申威平台simd intrinsic的实现方法,用申威平台simd指令集通过simd函数来重构x86 intrinsic同名内联函数,可以让使用x86 intrinsic函数的程序不用修改就能够在申威平台上通过编译,并且能够保证编译过程的安全。该方法大大降低软件开发或者适配过程中的simd指令集的学习成本,对构建完善的申威平台生态建设有着重要意义。



技术特征:

1.一种基于申威平台的simd intrinsic实现方法,其特征在于,包括如下步骤:

2.如权利要求1所述的一种基于申威平台的simd intrinsic实现方法,其特征在于,在所述步骤s3中,如果没有对应的申威平台simd函数,需要重构_mm256_madd_epi16()函数,则能够通过组合simd_vsrlw()、simd_vbisw()、simd_vsllw()、simd_vaddw()多种simd函数实现_mm256_madd_epi16()函数的功能。


技术总结
本发明涉及申威平台的SIMD技术领域,特别涉及一种基于申威平台的SIMD intrinsic实现方法。包括如下步骤:S1:扫描源码,判断是否有x86 intrinsic函数;S2:判断x86 intrinsic函数可否在申威平台上进行重构;S3:重构x86 intrinsic函数;S4:进行测试;将步骤S3申威平台重构的x86 intrinsic函数用libjpeg测试用例进行测试,如果申威平台的测试结果同x86平台的测试结果一致,则证明申威平台SIMD intrinsic函数与x86 intrinsic函数二者功能相同。该方法可实现在源码层面兼容x86 intrinsic。

技术研发人员:崔镭,张昊,马昌虎,董杰,陈慎慎
受保护的技术使用者:中电科申泰信息科技有限公司
技术研发日:
技术公布日:2024/1/12
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1