晶上系统编译器测试方法、装置、电子设备及存储介质与流程

文档序号:37598551发布日期:2024-04-18 12:38阅读:8来源:国知局
晶上系统编译器测试方法、装置、电子设备及存储介质与流程

本发明涉及晶上系统编译器,特别是涉及一种晶上系统编译器测试方法、装置、电子设备及存储介质。


背景技术:

1、晶上系统是一种基于晶圆级集成,并通过软硬件一体化的设计方式构建的新型芯片系统。此外,晶上系统采用完整的晶圆基板来做系统内部各模块的互连底座,用一个密布各种芯粒的晶圆来实现一个完整的系统,各模块之间的连接支持软件定义以及各模块本身的功能,同时也可以支持软件定义。晶上系统从系统角度突破了工艺对提高芯片集成度的限制,降低了芯粒之间通信的能耗,有着极强的灵活性与可扩展性。

2、然而,晶上系统的高灵活性、软件定义化的实现,在底层需要依赖于可重构的计算单元,而在系统层面,则要依靠强大的编译器来进行应用任务的划分、编译和调度,才能充分发挥整个系统的性能。其中,编译器是晶上系统从理论走向实际应用、从硬件走向软硬件一体化的关键一环。针对晶上系统的编译器设计,主要需要关注以下几个环节:

3、(1)硬件感知

4、晶上系统具有计算单元可重构、互联方式可重构的特性,编译器能够获取当前时刻的计算单元的布局、互连方式等信息,是最大化利用系统性能并减少系统开销的前提条件。

5、(2)任务调度

6、根据已知的系统硬件信息、硬件资源状态、应用任务特性,编译器对任务进行合理的分解、调配,将任务拆至不同的计算单元执行。

7、(3)异构编译

8、晶上系统拥有形形色色基于不同计算架构的计算单元,编译器根据调度安排,将划分好的源算子进行编译成目标硬件的机器指令。

9、因此,晶上系统的编译器需要支持多种架构的异构编译和跨平台编译。基于以上三点,晶上系统的编译器设计开发无疑具有极高的复杂度,评估晶上系统编译器的结果正确性、验证晶上系统编译器能够充分发挥系统性能,也成了编译器设计中的核心环节。

10、晶上系统相比于片上系统,较为显著的一个特点是晶上系统拥有更高层次、更细粒度上的异构计算资源。异构计算,即同一个系统中拥有不同指令集、不同体系架构的硬件计算资源,系统通过合理调配,成功使不同特点的资源能够充分发挥其效能。晶上系统的异构计算资源主要包括cpu、gpu、fpga、asic和dsp等,具有异构资源更丰富、资源扩展重构性更强、异构粒度更细等特点。

11、目前,传统编译器的结构可以划分为三个部分:前端接口表示,中间表示层和后端目标指令生成。其中,编译器前端接口表示负责接收以高级语言形式表示的应用程序,并对其进行语法分析、词法分析、语义分析,之后转换为统一格式的中间表示ir(intermediaterepresentation)。中间表示层对ir进行与源代码无关的统一优化工作,主要是将源代码中的各类源算子转换成用于中间表示的目标算子。之后,后端目标指令生成将中间表示翻译成底层硬件所对应的机器指令以用于执行。传统编译器大多是针对同构性硬件进行编译优化,针对多种异构器件难以实现统一编译优化。


技术实现思路

1、基于此,有必要针对上述技术问题,提供一种能够针对多种异构器件实现统一编译优化的晶上系统编译器测试方法、装置、电子设备及存储介质。

2、本发明提供了一种晶上系统编译器测试方法,所述方法包括:

3、获取第一测试数据,并根据密码测试算法调用密码算法库对所述第一测试数据进行处理,以生成预期输出结果,所述第一测试数据为编译器测试框架通过随机数自动生成或自定义输入得到的;

4、基于mlir自动生成的第一接口或编译器自定义的第二接口的数据格式,获取源代码,所述源代码为满足所述mlir自动生成的第一接口或编译器自定义的第二接口的数据格式的代码;

5、通过编译器前端对所述源代码进行分析,以生成第一中间表示,并从所述第一中间表示中提取出包括但不仅限于第一算子和第二算子,所述第一算子和第二算子分别为满足不同编译器硬件运行特征的算子;

6、基于所述不同编译器硬件运行特征,分别对所述第一算子和第二算子进行优化,得到第一目标算子和第二目标算子,并将所述源代码中的第一算子和第二算子分别替换为所述第一目标算子和第二目标算子,得到优化代码;

7、通过编译器后端对所述优化代码进行编译,以生成相应的第一目标指令和第二目标指令,并将所述第一目标指令和第二目标指令分别发送至对应运行特征的编译器硬件进行协同运行,得到协同运行结果;

8、调用filecheck基于所述预期输出结果对所述协同运行结果进行校验,得到校验结果,并基于所述校验结果生成编译器测试报告,所述校验结果用于表征所述协同运行结果与预期输出结果是否一致。

9、在其中一个实施例中,所述获取第一测试数据,并根据密码测试算法调用密码算法库对所述第一测试数据进行处理,以生成预期输出结果,之前包括:

10、基于llvm-lit测试套件搭建编译器测试框架,并对所述第一测试数据的测试路径进行整理,所述编译器测试框架用于支持编译器测试的自动化运行部署;

11、基于所述编译器测试框架构建编译器测试环境,所述编译器测试环境为通过编写lit.cfg以及lit.local.cfg得到的。

12、在其中一个实施例中,所述取第一测试数据,并根据密码测试算法调用密码算法库对所述第一测试数据进行处理,以生成预期输出结果,之前还包括:

13、根据所述第一测试数据的测试内容,获取编译器测试执行范围,所述编译器测试执行范围至少包括所述第一测试数据执行测试的根目录、所述根目录下不需要执行测试的子目录以及执行测试的文件后缀。

14、在其中一个实施例中,所述密码测试算法至少包括sha1以及sm4密码测试算法,所述密码算法库至少包括openssl以及gmssl密码算法库;

15、所述获取第一测试数据,并根据密码测试算法调用密码算法库对所述第一测试数据进行处理,以生成预期输出结果,包括:

16、根据随机数自动生成数据或自定义输入数据生成批量测试数据,以获取所述第一测试数据;

17、通过sha1或sm4密码测试算法调用openssl或gmssl密码算法库生成所述预期输出结果。

18、在其中一个实施例中,所述第一接口为ciface接口,所述第二接口为#pragma接口;

19、所述基于mlir自动生成的第一接口或编译器自定义的第二接口的数据格式,获取源代码,之后还包括:

20、根据mlir自动生成的ciface接口或编译器自定义的#pragma接口的数据格式对所述源代码进行编译,并判断编译器前端生成的所述第一中间表示是否与所述源代码具有等价语义;以及

21、进一步判断密码测试算法的源算子通过中间表示处理后是否优化生成满足对应编译器硬件运行特征的目标算子,得到第一判断结果;

22、其中,所述源算子至少包括消息填充和哈希映射,所述编译器测试报告还包括所述第一判断结果。

23、在其中一个实施例中,所述调用filecheck基于所述预期输出结果对所述协同运行结果进行校验,得到校验结果,并基于所述校验结果生成编译器测试报告,之前还包括:

24、从不同密码算法库中选取目标代码,并将所述目标代码编译为目标指令发送至与所述优化代码相同的编译器硬件运行,得到所述目标代码的运行结果;

25、基于所述目标代码的运行结果,判断所述目标代码的运行结果与所述协同运行结果是否一致,得到第二判断结果;

26、其中,所述目标代码与所述优化代码具有相同的编译器硬件运行特征,所述编译器测试报告还包括所述第二判断结果。

27、在其中一个实施例中,所述方法还包括:

28、多次以同一所述密码测试算法为测试任务,获取每次所述密码测试算法对应的所述协同运行结果;

29、判断多次密码测试算法对应的所述协同运行结果是否一致,以获取用于验证编译器测试稳定性的第三判断结果;

30、其中,所述编译器测试报告还包括所述第三判断结果。

31、本发明还提供了一种晶上系统编译器测试装置,所述装置包括:

32、预期结果生成模块,用于获取第一测试数据,并根据密码测试算法调用密码算法库对所述第一测试数据进行处理,以生成预期输出结果,所述第一测试数据为编译器测试框架通过随机数自动生成或自定义输入得到的;

33、源代码获取模块,用于基于mlir自动生成的第一接口或编译器自定义的第二接口的数据格式,获取源代码,所述源代码为满足所述mlir自动生成的第一接口或编译器自定义的第二接口的数据格式的代码;

34、算子提取模块,用于通过编译器前端对所述源代码进行分析,以生成第一中间表示,并从所述第一中间表示中提取出包括但不仅限于第一算子和第二算子,所述第一算子和第二算子分别为满足不同编译器硬件运行特征的算子;

35、算子优化模块,用于基于所述不同编译器硬件运行特征,分别对所述第一算子和第二算子进行优化,得到第一目标算子和第二目标算子,并将所述源代码中的第一算子和第二算子分别替换为所述第一目标算子和第二目标算子,得到优化代码;

36、协同运行模块,用于通过编译器后端对所述优化代码进行编译,以生成相应的第一目标指令和第二目标指令,并将所述第一目标指令和第二目标指令分别发送至对应运行特征的编译器硬件进行协同运行,得到协同运行结果;

37、测试报告生成模块,用于调用filecheck基于所述预期输出结果对所述协同运行结果进行校验,得到校验结果,并基于所述校验结果生成编译器测试报告,所述校验结果用于表征所述协同运行结果与预期输出结果是否一致。

38、本发明还提供了一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现如上述任一种所述的晶上系统编译器测试方法。

39、本发明还提供了一种计算机存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述的晶上系统编译器测试方法。

40、上述晶上系统编译器测试方法、装置、电子设备及存储介质,编译器测试框架通过随机数自动生成或者手动输入生成批量测试数据,并根据密码测试算法调用密码算法库对测试数据进行处理,生成预期输出结果。随后,基于mlir自动生成的ciface接口或者编译器自定义的#pragma接口的数据格式,获取满足ciface接口或者编译器自定义的#pragma接口的数据格式的源代码。然后,再通过编译器前端对源代码进行分析,以生成对应的中间表示,从中间表示中提取算子进行优化,得到满足对应编译器硬件运行特征的目标算子,并将对应的目标算子替换掉源代码中的源算子,得到优化代码。通过编译器后端对得到的优化代码表示进行编译,生成多个目标指令,并将生成的目标指令发送至对应运行特征的编译器硬件进行协同运行,得到协同运行结果。最后,调用filecheck对该协同运行结果进行校验,得到用于表征协同运行结果是否与预期输出结果一致的校验结果,并基于该校验结果生成编译器测试报告。该方法通过评估晶上系统编译器的测试结果正确性、验证晶上系统编译器是否能够充分发挥系统性能,实现了对晶上系统多维度的测试验证。另外,该方法还支持用户一键部署,能够有效降低编译器的测试成本,提升晶上系统编译器开发效率。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1