CN117851270A - 晶上***编译器测试方法、装置、电子设备及存储介质 - Google Patents
晶上***编译器测试方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN117851270A CN117851270A CN202410259794.7A CN202410259794A CN117851270A CN 117851270 A CN117851270 A CN 117851270A CN 202410259794 A CN202410259794 A CN 202410259794A CN 117851270 A CN117851270 A CN 117851270A
- Authority
- CN
- China
- Prior art keywords
- compiler
- test
- operator
- result
- testing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000012360 testing method Methods 0.000 title claims abstract description 413
- 238000000034 method Methods 0.000 title claims abstract description 52
- 238000004422 calculation algorithm Methods 0.000 claims abstract description 105
- 230000008569 process Effects 0.000 claims abstract description 21
- 238000012795 verification Methods 0.000 claims description 46
- 238000004590 computer program Methods 0.000 claims description 16
- 101100217298 Mus musculus Aspm gene Proteins 0.000 claims description 11
- 238000000605 extraction Methods 0.000 claims description 4
- 238000005457 optimization Methods 0.000 description 13
- 238000010586 diagram Methods 0.000 description 7
- 238000011056 performance test Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 238000013461 design Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 238000011990 functional testing Methods 0.000 description 3
- 230000010354 integration Effects 0.000 description 3
- 238000013515 script Methods 0.000 description 3
- 238000013112 stability test Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000012430 stability testing Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3696—Methods or tools to render software testable
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及晶上***编译器测试方法、装置、电子设备及存储介质,包括:获取第一测试数据,并根据密码测试算法调用密码算法库对第一测试数据进行处理,以生成预期输出结果。基于MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式,获取源代码。通过编译器前端对源代码进行分析,以生成第一中间表示,从第一中间表中提取满足对应编译器硬件运行特征的算子。对提取出的算子进行优化,得到目标算子,并将源代码中的源算子替换为目标算子,得到优化代码。通过编译器后端对优化代码进行编译,生成对应编译器硬件运行特征的目标指令,并发送至对应编译器硬件进行协同运行。调用FileCheck根据预期输出结果对协同运行结果进行校验,生成编译器测试报告。
Description
技术领域
本发明涉及晶上***编译器技术领域,特别是涉及一种晶上***编译器测试方法、装置、电子设备及存储介质。
背景技术
晶上***是一种基于晶圆级集成,并通过软硬件一体化的设计方式构建的新型芯片***。此外,晶上***采用完整的晶圆基板来做***内部各模块的互连底座,用一个密布各种芯粒的晶圆来实现一个完整的***,各模块之间的连接支持软件定义以及各模块本身的功能,同时也可以支持软件定义。晶上***从***角度突破了工艺对提高芯片集成度的限制,降低了芯粒之间通信的能耗,有着极强的灵活性与可扩展性。
然而,晶上***的高灵活性、软件定义化的实现,在底层需要依赖于可重构的计算单元,而在***层面,则要依靠强大的编译器来进行应用任务的划分、编译和调度,才能充分发挥整个***的性能。其中,编译器是晶上***从理论走向实际应用、从硬件走向软硬件一体化的关键一环。针对晶上***的编译器设计,主要需要关注以下几个环节:
(1)硬件感知
晶上***具有计算单元可重构、互联方式可重构的特性,编译器能够获取当前时刻的计算单元的布局、互连方式等信息,是最大化利用***性能并减少***开销的前提条件。
(2)任务调度
根据已知的***硬件信息、硬件资源状态、应用任务特性,编译器对任务进行合理的分解、调配,将任务拆至不同的计算单元执行。
(3)异构编译
晶上***拥有形形色色基于不同计算架构的计算单元,编译器根据调度安排,将划分好的源算子进行编译成目标硬件的机器指令。
因此,晶上***的编译器需要支持多种架构的异构编译和跨平台编译。基于以上三点,晶上***的编译器设计开发无疑具有极高的复杂度,评估晶上***编译器的结果正确性、验证晶上***编译器能够充分发挥***性能,也成了编译器设计中的核心环节。
晶上***相比于片上***,较为显著的一个特点是晶上***拥有更高层次、更细粒度上的异构计算资源。异构计算,即同一个***中拥有不同指令集、不同体系架构的硬件计算资源,***通过合理调配,成功使不同特点的资源能够充分发挥其效能。晶上***的异构计算资源主要包括CPU、GPU、FPGA、ASIC和DSP等,具有异构资源更丰富、资源扩展重构性更强、异构粒度更细等特点。
目前,传统编译器的结构可以划分为三个部分:前端接口表示,中间表示层和后端目标指令生成。其中,编译器前端接口表示负责接收以高级语言形式表示的应用程序,并对其进行语法分析、词法分析、语义分析,之后转换为统一格式的中间表示IR(IntermediateRepresentation)。中间表示层对IR进行与源代码无关的统一优化工作,主要是将源代码中的各类源算子转换成用于中间表示的目标算子。之后,后端目标指令生成将中间表示翻译成底层硬件所对应的机器指令以用于执行。传统编译器大多是针对同构性硬件进行编译优化,针对多种异构器件难以实现统一编译优化。
发明内容
基于此,有必要针对上述技术问题,提供一种能够针对多种异构器件实现统一编译优化的晶上***编译器测试方法、装置、电子设备及存储介质。
本发明提供了一种晶上***编译器测试方法,所述方法包括:
获取第一测试数据,并根据密码测试算法调用密码算法库对所述第一测试数据进行处理,以生成预期输出结果,所述第一测试数据为编译器测试框架通过随机数自动生成或自定义输入得到的;
基于MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式,获取源代码,所述源代码为满足所述MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式的代码;
通过编译器前端对所述源代码进行分析,以生成第一中间表示,并从所述第一中间表示中提取出包括但不仅限于第一算子和第二算子,所述第一算子和第二算子分别为满足不同编译器硬件运行特征的算子;
基于所述不同编译器硬件运行特征,分别对所述第一算子和第二算子进行优化,得到第一目标算子和第二目标算子,并将所述源代码中的第一算子和第二算子分别替换为所述第一目标算子和第二目标算子,得到优化代码;
通过编译器后端对所述优化代码进行编译,以生成相应的第一目标指令和第二目标指令,并将所述第一目标指令和第二目标指令分别发送至对应运行特征的编译器硬件进行协同运行,得到协同运行结果;
调用FileCheck基于所述预期输出结果对所述协同运行结果进行校验,得到校验结果,并基于所述校验结果生成编译器测试报告,所述校验结果用于表征所述协同运行结果与预期输出结果是否一致。
在其中一个实施例中,所述获取第一测试数据,并根据密码测试算法调用密码算法库对所述第一测试数据进行处理,以生成预期输出结果,之前包括:
基于llvm-lit测试套件搭建编译器测试框架,并对所述第一测试数据的测试路径进行整理,所述编译器测试框架用于支持编译器测试的自动化运行部署;
基于所述编译器测试框架构建编译器测试环境,所述编译器测试环境为通过编写lit.cfg以及lit.local.cfg得到的。
在其中一个实施例中,所述取第一测试数据,并根据密码测试算法调用密码算法库对所述第一测试数据进行处理,以生成预期输出结果,之前还包括:
根据所述第一测试数据的测试内容,获取编译器测试执行范围,所述编译器测试执行范围至少包括所述第一测试数据执行测试的根目录、所述根目录下不需要执行测试的子目录以及执行测试的文件后缀。
在其中一个实施例中,所述密码测试算法至少包括SHA1以及SM4密码测试算法,所述密码算法库至少包括OpenSSL以及GmSSL密码算法库;
所述获取第一测试数据,并根据密码测试算法调用密码算法库对所述第一测试数据进行处理,以生成预期输出结果,包括:
根据随机数自动生成数据或自定义输入数据生成批量测试数据,以获取所述第一测试数据;
通过SHA1或SM4密码测试算法调用OpenSSL或GmSSL密码算法库生成所述预期输出结果。
在其中一个实施例中,所述第一接口为ciface接口,所述第二接口为#pragma接口;
所述基于MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式,获取源代码,之后还包括:
根据MLIR自动生成的ciface接口或编译器自定义的#pragma接口的数据格式对所述源代码进行编译,并判断编译器前端生成的所述第一中间表示是否与所述源代码具有等价语义;以及
进一步判断密码测试算法的源算子通过中间表示处理后是否优化生成满足对应编译器硬件运行特征的目标算子,得到第一判断结果;
其中,所述源算子至少包括消息填充和哈希映射,所述编译器测试报告还包括所述第一判断结果。
在其中一个实施例中,所述调用FileCheck基于所述预期输出结果对所述协同运行结果进行校验,得到校验结果,并基于所述校验结果生成编译器测试报告,之前还包括:
从不同密码算法库中选取目标代码,并将所述目标代码编译为目标指令发送至与所述优化代码相同的编译器硬件运行,得到所述目标代码的运行结果;
基于所述目标代码的运行结果,判断所述目标代码的运行结果与所述协同运行结果是否一致,得到第二判断结果;
其中,所述目标代码与所述优化代码具有相同的编译器硬件运行特征,所述编译器测试报告还包括所述第二判断结果。
在其中一个实施例中,所述方法还包括:
多次以同一所述密码测试算法为测试任务,获取每次所述密码测试算法对应的所述协同运行结果;
判断多次密码测试算法对应的所述协同运行结果是否一致,以获取用于验证编译器测试稳定性的第三判断结果;
其中,所述编译器测试报告还包括所述第三判断结果。
本发明还提供了一种晶上***编译器测试装置,所述装置包括:
预期结果生成模块,用于获取第一测试数据,并根据密码测试算法调用密码算法库对所述第一测试数据进行处理,以生成预期输出结果,所述第一测试数据为编译器测试框架通过随机数自动生成或自定义输入得到的;
源代码获取模块,用于基于MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式,获取源代码,所述源代码为满足所述MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式的代码;
算子提取模块,用于通过编译器前端对所述源代码进行分析,以生成第一中间表示,并从所述第一中间表示中提取出包括但不仅限于第一算子和第二算子,所述第一算子和第二算子分别为满足不同编译器硬件运行特征的算子;
算子优化模块,用于基于所述不同编译器硬件运行特征,分别对所述第一算子和第二算子进行优化,得到第一目标算子和第二目标算子,并将所述源代码中的第一算子和第二算子分别替换为所述第一目标算子和第二目标算子,得到优化代码;
协同运行模块,用于通过编译器后端对所述优化代码进行编译,以生成相应的第一目标指令和第二目标指令,并将所述第一目标指令和第二目标指令分别发送至对应运行特征的编译器硬件进行协同运行,得到协同运行结果;
测试报告生成模块,用于调用FileCheck基于所述预期输出结果对所述协同运行结果进行校验,得到校验结果,并基于所述校验结果生成编译器测试报告,所述校验结果用于表征所述协同运行结果与预期输出结果是否一致。
本发明还提供了一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现如上述任一种所述的晶上***编译器测试方法。
本发明还提供了一种计算机存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述的晶上***编译器测试方法。
上述晶上***编译器测试方法、装置、电子设备及存储介质,编译器测试框架通过随机数自动生成或者手动输入生成批量测试数据,并根据密码测试算法调用密码算法库对测试数据进行处理,生成预期输出结果。随后,基于MLIR自动生成的ciface接口或者编译器自定义的#pragma接口的数据格式,获取满足ciface接口或者编译器自定义的#pragma接口的数据格式的源代码。然后,再通过编译器前端对源代码进行分析,以生成对应的中间表示,从中间表示中提取算子进行优化,得到满足对应编译器硬件运行特征的目标算子,并将对应的目标算子替换掉源代码中的源算子,得到优化代码。通过编译器后端对得到的优化代码表示进行编译,生成多个目标指令,并将生成的目标指令发送至对应运行特征的编译器硬件进行协同运行,得到协同运行结果。最后,调用FileCheck对该协同运行结果进行校验,得到用于表征协同运行结果是否与预期输出结果一致的校验结果,并基于该校验结果生成编译器测试报告。该方法通过评估晶上***编译器的测试结果正确性、验证晶上***编译器是否能够充分发挥***性能,实现了对晶上***多维度的测试验证。另外,该方法还支持用户一键部署,能够有效降低编译器的测试成本,提升晶上***编译器开发效率。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提供的晶上***编译器测试方法流程示意图之一;
图2为本发明提供的具体实施例中晶上***编译器测试方法的晶上***编译器测试框架结构示意图;
图3为本发明提供的具体实施例中晶上***编译器测试方法的晶上***编译器测试流程示意图;
图4为本发明提供的晶上***编译器测试方法流程示意图之二;
图5为本发明提供的晶上***编译器测试方法流程示意图之三;
图6为本发明提供的晶上***编译器测试方法流程示意图之四;
图7为本发明提供的晶上***编译器测试方法流程示意图之五;
图8为本发明提供的晶上***编译器测试方法流程示意图之六;
图9为本发明提供的晶上***编译器测试装置结构示意图;
图10为本发明提供的计算机设备的内部结构图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地说明,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合图1-图10描述本发明的晶上***编译器测试方法、装置、电子设备及存储介质。
如图1所示,在一个实施例中,一种晶上***编译器测试方法,包括以下步骤:
步骤S110,获取第一测试数据,并根据密码测试算法调用密码算法库对第一测试数据进行处理,以生成预期输出结果,第一测试数据为编译器测试框架通过随机数自动生成或自定义输入得到的。
具体的,首先通过随机数自动生成或者手动输入数据生成批量测试数据,即第一测试数据,并根据密码测试算法调用密码算法库对该测试数据进行处理,生成预期输出结果。
结合图2和图3所示,在具体的实施例中,首先通过随机数自动生成或者手动输入数据生成批量测试数据,选择SHA1、SM4等密码测试算法,通过调用OpenSSL、GmSSL等密码算法库生成预期输出结果,其中单条输入数据的大小和用例生成数量可以进行指定。
需要说明的是,编译器的测试用例由开源算法库和自定义程序段组成。其中开源算法库包括OpenSSL和GmSSL两个密码学算法库,PolyBench中包括三十种静态控制的典型数值计算程序。以上算法库的程序中有部分需要自定义数据的输入,输入数据根据测试需求和目标,可以基于随机算法自动生成或手动定义。
其中,OpenSSL是一个功能丰富且自包含的开源安全工具箱,提供了丰富的高性能密码学算法库,且应用广泛,可以作为加解密任务的性能测试对比基准。GmSSL是一种国产商用密码开源库,实现了对国密算法、标准和安全通信协议的全面功能覆盖,支持包括移动端在内的主流操作***和处理器,支持密码钥匙、密码卡等典型国产密码硬件,提供功能丰富的命令行工具及多种编译语言编程接口。
步骤S120,基于MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式,获取源代码,源代码为满足MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式的代码。
具体的,编译器测试框架以密码测试算法为测试任务,根据MLIR自动生成的第一接口(如ciface接口)或者编译器自定义的第二接口(如#pragma接口)的数据格式,获取相应的满足MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式的源代码。
在具体的实施例中,以SHA1密码测试算法为测试任务,编译器测试框架首先是根据MLIR自动生成的ciface接口或编译器自定义的#pragma接口的格式进行源代码编写,看晶上***编译器前端是否能够对源代码分析后生成等价的中间表示(IR)。接着还需要判断密码算法的消息填充、哈希映射等源算子通过中间表示优化后是否成功生成CPU、GPU、DSP器件的目标算子。
其中,多层级中间表示MLIR(Muti-level Intermediate Representation)是一种针对特定领域语言的可扩展可重用编译器框架,可以被看作是机器学习时代的LLVM,它旨在解决众多不同领域语言中间表示的转化问题。通过将各种中间表示纳入MLIR自身框架下的方言(dialect)中,统一了各种中间表示的语法,方便了特定领域编译器的构建,并将现有的编译器技术整合化,适用于构建晶上***的编译框架。
需要说明的是,编译器的测试分为功能测试和性能测试。其中功能性测试根据测试目标和测试对象可以划分为:前端接口测试、中间表示优化测试、异构指令生成测试、一致性测试和稳定性测试。由于晶上***集成了CPU、GPU、DSP等多种异构器件,晶上***编译器基于MLIR多层级异构编译框架进行设计,故在测试时需考虑晶上***编译器对多种异构器件优化编译的支持情况。
前端接口测试主要测试晶上***编译器是否支持MLIR自动生成的ciface接口或者编译器自定义的#pragma接口两种形式的输入。中间表示优化测试是测试晶上***编译器能否支持一套异构器件无关的中间表示方法,可有效实现源算子到不同异构器件目标算子的正确生成。异构指令生成测试是对端到端编译功能的验证,主要通过判断优化后的中间表示能否正确编译成目标机器指令,或者判断中间表示在异构器件上的运行结果是否正确。一致性测试和稳定性测试是对前三类测试在不同维度上的重复性测试,以验证编译器的编译功能的稳定性和一致性。
其中,一致性测试的重复是输出结果的重复,向编译器输入等价的和相同源代码程序段,观察能否输出相同的结果。稳定性测试的重复是指测试流程的重复,将整个测试用例自动循环多次运行,验证编译器是否能够稳定输出相同的测试结果报告。
性能测试主要是编译器对任务级测试用例编译后得到可执行文件的运行时间等指标,可通过预定义操作***级计时器以及***-benchmark来进行监控。
其中,Google-benchmark是一个基于***-test框架搭建的C++程序基准测试平台,用于度量代码的性能,执行时间和资源使用情况,提供了相对自动化的测试运行方案和灵活的调用接口,此外还能提供丰富的、可定制化的性能统计数据。
步骤S130,通过编译器前端对源代码进行分析,以生成第一中间表示,并从第一中间表示中提取出包括但不仅限于第一算子和第二算子,第一算子和第二算子分别为满足不同编译器硬件运行特征的算子。
具体的,编译器测试框架通过编译器前端对源代码进行分析,进而生成其对应的中间表示,即第一中间表示,并从第一中间表示中提取出包括但不仅限于第一算子和第二算子,即可从第一中间表示中提取出一个算子或者多个算子,且提取出的每个算子均对应有相应运行特征的编译器硬件,本实施例以两个算子,即第一算子和第二算子为例,对下述协同运行以及编译器测试报告的生成进行表述。
步骤S140,基于不同编译器硬件运行特征,分别对第一算子和第二算子进行优化,得到第一目标算子和第二目标算子,并将源代码中的第一算子和第二算子分别替换为第一目标算子和第二目标算子,得到优化代码。
具体的,编译器测试框架基于不同编译器硬件的运行特征,分别对步骤S130中提取出的第一算子和第二算子进行优化处理,得到第一算子和第二算子分别对应的第一目标算子和第二目标算子,并将源代码中的第一算子和第二算子对应的源算子替换为第一目标算子和第二目标算子,得到最终的优化代码。
步骤S150,通过编译器后端对优化代码进行编译,以生成相应的第一目标指令和第二目标指令,并将第一目标指令和第二目标指令分别发送至对应运行特征的编译器硬件进行协同运行,得到协同运行结果。
具体的,编译器测试框架通过编译器后端对优化代码进行编译,以生成分别与第一目标算子和第二目标算子相对应的第一目标指令和第二目标指令,随后,将第一目标指令和第二目标指令分别发送至对应运行特征的编译器硬件(如CPU、GPU、DSP等器件)进行协同运行,得到协同运行结果。
需要说明的是,编译器后端对优化代码进行编译生成的目标指令数量与优化代码中的目标算子数量相对应,即当优化代码中所替换的目标算子为一个时,则只生成一个对应运行特征的编译器硬件的目标指令,当优化代码中所替换的目标算子为多个(超过两个的任意数量),则生成对应数量的对应运行特征的编译器硬件的目标指令,并将生成的每个目标指令分配至对应的编译器硬件中进行协同运行。
在具体的实施例中,通过晶上***编译器后端对优化的中间表示进行编译,编译形成的目标指令分别在晶上***的CPU、GPU、DSP间协同运行。
在本实施例中,通过脚本运行的形式,以不同的密码算法多次调用编译器完成编译器前端接口测试、中间表示优化测试以及编译器后端目标代码是否生成来验证晶上***编译器的一致性。同时还会在晶上***上循环运行编译生成的目标指令,以验证晶上***编译器的稳定性。为验证晶上***编译器性能,还可针对SHA1密码算法通过调用OpenSSL、GmSSL密码算法库采用传统同构编译器完成编译,编译完成的目标指令在CPU上运行,对比CPU平台上的密码算法运行时间与晶上***上密码算法的密码运行时间。
另外,执行性能测试令./SHA1CoreBenchmark.out,编译器测试框架调用基于MLIR的晶上***编译器对SHA1算法任务进行优化编译, 编译完成后目标代码与OpenSSL、GmSSL目标代码在相同硬件平台上运行。
步骤S160,调用FileCheck基于预期输出结果对协同运行结果进行校验,得到校验结果,并基于校验结果生成编译器测试报告,校验结果用于表征协同运行结果与预期输出结果是否一致。
具体的,编译器框架通过调用FileCheck对协同运行结果进行校验,得到用于表征协同运行结果与预期输出结果是否一致的校验结果,并基于该校验结果生成编译器测试报告。
需要说明的是,该用于表征协同运行结果与预期输出结果是否一致的校验结果仅为编译器测试报告中的一部分,且编译器测试报告中的其他已于具体实施例中进行详述,此处不再赘述。
在具体的实施例中,测试结果校验分为功能校验和性能校验。其中功能校验主要关注测试运行结果的正确性,正确性通过对比GCC、Clang等主流C/C++编译器的编译运行结果进行校验,通过FileCheck的CHECK、CHECK-NOT、CHECK-NEXT等标签的预设断言,通过定义脚本便可以自动化获取校验结果。性能校验通过对比相同测试用例在晶圆***编译器、GCC、Clang下的编译、运行所消耗的时间来判断。
其中,GCC是由GNU开发编译套件,它支持C、C++、Fortran、Java、Objective-C等多种编程语言的编译。同时,GCC也是目前使用最为广泛的c/c++编译器,拥有稳定广泛的跨操作***编译支持。
另外,编译器框架由llvm-lit驱动,从而实现编译器测试的自动化运行部署,通过lit.cfg文件对测试覆盖范围、测试使用工具、测试环境等参数进行配置。还可以通过子文件夹中的lit.local.cfg文件覆盖全局性配置,从而对局部参数进行特殊化设置,该测试框架测试结果通过脚本自动化生成测试结果日志。
需要说明的是,lit是一个可移植、可扩展的编译器自动化测试框架,它支持对llvm形式的编译器进行测试环境配置、测试用例管理和测试用例执行,结合FileCheck文本模式匹配工具,lit框架可以对测试结果进行校验,并给出相应测试结果提示信息。
在具体的实施例中,测试完成后进行功能测试结果校验和性能测试结果校验。功能测试结果中,前端接口测试及中间表示优化测试主要基于FileCheck匹配进行校验,通过FileCheck的CHECK、CHECK-NOT、CHECK-NEXT等标签的预设断言判断密码算法的消息填充、哈希映射等源算子是否成功生成目标算子。异构指令生成测试、一致性测试及稳定性测试主要是以晶上***编译器的目标代码运行结果与其他编译器编译结果的对比以及多次循环运行结果的对比来判断测试结果是否正确。性能测试结果则是读取相同算法不同编译目标代码的运行时间进行比较,确认性能测试指标是否满足要求。测试结果校验完成后,测试名称、失败测试数、成功测试数、不支持的测试、测试时间、对应用例运行速度等测试结果会自动保留在测试日志中,最终形成测试报告并输出。
其中,FileCheck是LLVM开发者工具中的一个工具,用于验证LLVM IR代码的输出结果是否符合预期,它通常在LLVM回归测试中使用,可以通过检查输出文件中的特定文本模式来验证代码的正确性。
上述晶上***编译器测试方法,编译器测试框架通过随机数自动生成或者手动输入生成批量测试数据,并根据密码测试算法调用密码算法库对测试数据进行处理,生成预期输出结果。随后,基于MLIR自动生成的ciface接口或者编译器自定义的#pragma接口的数据格式,获取满足ciface接口或者编译器自定义的#pragma接口的数据格式的源代码。然后,再通过编译器前端对源代码进行分析,以生成对应的中间表示,从中间表示中提取算子进行优化,得到满足对应编译器硬件运行特征的目标算子,并将对应的目标算子替换掉源代码中的源算子,得到优化代码。通过编译器后端对得到的优化代码表示进行编译,生成多个目标指令,并将生成的目标指令发送至对应运行特征的编译器硬件进行协同运行,得到协同运行结果。最后,调用FileCheck对该协同运行结果进行校验,得到用于表征协同运行结果是否与预期输出结果一致的校验结果,并基于该校验结果生成编译器测试报告。该方法通过评估晶上***编译器的测试结果正确性、验证晶上***编译器是否能够充分发挥***性能,实现了对晶上***多维度的测试验证。另外,该方法还支持用户一键部署,能够有效降低编译器的测试成本,提升晶上***编译器开发效率。
如图4所示,在一个实施例中,本发明提供的晶上***编译器测试方法,获取第一测试数据,并根据密码测试算法调用密码算法库对第一测试数据进行处理,以生成预期输出结果,之前包括以下步骤:
步骤S410,基于llvm-lit测试套件搭建编译器测试框架,并对第一测试数据的测试路径进行整理,编译器测试框架用于支持编译器测试的自动化运行部署。
具体的,在进行编译器测试之前,需要进行编译器测试框架的搭建以及测试环境配置,首先是基于llvm-lit测试套件搭建编译器测试框架,并对测试数据的测试路径进行整理,编译器测试框架用于支持编译器测试的自动化运行部署。
结合图2和图3所示,在具体的实施例中,晶圆级编译器测试框架基于llvm-lit测试套件搭建,测试前需构建好需要的软件和其对应版本,整理好测试目录和测试代码的对应路径。
步骤S420,基于编译器测试框架构建编译器测试环境,编译器测试环境为通过编写lit.cfg以及lit.local.cfg得到的。
具体的,测试环境的配置主要通过编写lit.cfg以及lit.local.cfg来实现。
步骤S430,根据第一测试数据的测试内容,获取编译器测试执行范围,编译器测试执行范围至少包括第一测试数据执行测试的根目录、根目录下不需要执行测试的子目录以及执行测试的文件后缀。
具体的,根据先前确定的测试数据的测试内容,获取编译器测试的执行范围,且该编译器测试的执行范围至少包括测试数据执行测试的根目录、根目录下不需要执行测试的子目录以及执行测试的文件后缀。
在具体的实施例中,需要配置的内容包括:测试工具的对应路径、测试名称、操作***环境、支持组件等,测试环境配置完成后进行测试内容选择,根据测试目标设定本次测试执行范围,包括执行测试的根目录、根目录下不需要执行测试的目录、执行测试的文件后缀等。
如图5所示,在一个实施例中,本发明提供的晶上***编译器测试方法,获取第一测试数据,并根据密码测试算法调用密码算法库对第一测试数据进行处理,以生成预期输出结果,具体包括以下步骤:
步骤S112,根据随机数自动生成数据或自定义输入数据生成批量测试数据,以获取第一测试数据。
具体的,编译器测试框架根据随机数自动生成数据或者人为手动自定义输入数据生成批量测试数据,进而获取需要的测试数据,即第一测试数据。
步骤S114,通过SHA1或SM4密码测试算法调用OpenSSL或GmSSL密码算法库生成预期输出结果。
具体的,编译器测试框架通过SHA1或SM4密码测试算法调用OpenSSL或GmSSL密码算法库生成预期输出结果。
如图6所示,在一个实施例中,本发明提供的晶上***编译器测试方法,基于MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式,获取源代码,之后还包括以下步骤:
步骤S610,根据MLIR自动生成的ciface接口或编译器自定义的#pragma接口的数据格式对源代码进行编译,并判断编译器前端生成的第一中间表示是否与源代码具有等价语义。
具体的,编译器测试框架根据MLIR自动生成的ciface接口或者编译器自定义的#pragma接口的数据格式对源代码进行编写,并判断编译器前端生成的第一中间表示是否与源代码具有等价语义,得到中间表示是否成功生成的测试结果。
步骤S620,进一步判断密码测试算法的源算子通过中间表示处理后是否优化生成满足对应编译器硬件运行特征的目标算子,得到第一判断结果。
具体的,在步骤S610的判断基础上,进一步判断密码测试算法的消息填充、哈希映射等源算子通过中间表示处理后是否优化生成对应编译器硬件运行特征的目标算子,如第一目标算子和第二目标算子,得到目标算子是否成功生成的测试结果。
其中,第一判断结果由中间表示是否成功生成以及目标算子是否成功生成共同构成,且为最终形成的编译器测试报告的一部分。
如图7所示,在一个实施例中,本发明提供的晶上***编译器测试方法,调用FileCheck基于预期输出结果对协同运行结果进行校验,得到校验结果,并基于校验结果生成编译器测试报告,之前还包括以下步骤:
步骤S710,从不同密码算法库中选取目标代码,并将目标代码编译为目标指令发送至与优化代码相同的编译器硬件运行,得到目标代码的运行结果。
具体的,编译器测试框架从不同密码算法库中选取与优化代码具有相同编译器硬件运行特征的目标代码,并将选取的目标代码编译为相应的目标指令发送至与优化代码相同的编译器硬件上运行,得到选取的目标代码的运行结果。
步骤S720,基于目标代码的运行结果,判断目标代码的运行结果与协同运行结果是否一致,得到第二判断结果。
具体的,编译器测试框架基于步骤S710中得到的目标代码的运行结果,判断该目标代码的运行结果与先前得到得到协同运行结果是否一致,得到相应的判断结果,即第二判断结果。
需要说明的是,第二判断结果为最终形成的编译器测试报告的一部分。
如图8所示,在一个实施例中,本发明提供的晶上***编译器测试方法,还包括以下步骤:
步骤S810,多次以同一密码测试算法为测试任务,获取每次密码测试算法对应的协同运行结果。
具体的,编译器测试框架多次循环以同一个密码测试算法为测试任务,并获取每次密码测试算法对应的协同运行结果。
步骤S820,判断多次密码测试算法对应的协同运行结果是否一致,以获取用于验证编译器测试稳定性的第三判断结果。
具体的,编译器测试框架基于步骤S810中得到的协同运行结果判断多次循环的密码测试算法对应的协同运行结果是否一致,以获取用于验证编译器测试稳定性的判断结果,即第三判断结果,来实现对编译器稳定性的验证。
需要说明的是,第三判断结果同为最终形成的编译器测试报告的一部分。
下面对本发明提供的晶上***编译器测试装置进行描述,下文描述的晶上***编译器测试装置与上文描述的晶上***编译器测试方法可相互对应参照。
如图9所示,在一个实施例中,一种晶上***编译器测试装置,包括预期结果生成模块910、源代码获取模块920、算子提取模块930、算子优化模块940、协同运行模块950以及测试报告生成模块960。
预期结果生成模块910用于获取第一测试数据,并根据密码测试算法调用密码算法库对第一测试数据进行处理,以生成预期输出结果,第一测试数据为编译器测试框架通过随机数自动生成或自定义输入得到的。
源代码获取模块920用于基于MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式,获取源代码,源代码为满足MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式的代码。
算子提取模块930用于通过编译器前端对源代码进行分析,以生成第一中间表示,并从第一中间表示中提取出包括但不仅限于第一算子和第二算子,第一算子和第二算子分别为满足不同编译器硬件运行特征的算子。
算子优化模块940用于基于不同编译器硬件运行特征,分别对第一算子和第二算子进行优化,得到第一目标算子和第二目标算子,并将源代码中的第一算子和第二算子分别替换为第一目标算子和第二目标算子,得到优化代码。
协同运行模块950用于通过编译器后端对优化代码进行编译,以生成相应的第一目标指令和第二目标指令,并将第一目标指令和第二目标指令分别发送至对应运行特征的编译器硬件进行协同运行,得到协同运行结果。
测试报告生成模块960用于调用FileCheck基于预期输出结果对协同运行结果进行校验,得到校验结果,并基于校验结果生成编译器测试报告,校验结果用于表征协同运行结果与预期输出结果是否一致。
在本实施例中,本发明提供的晶上***编译器测试装置,还包括测试框架搭建模块,用于:
基于llvm-lit测试套件搭建编译器测试框架,并对第一测试数据的测试路径进行整理,编译器测试框架用于支持编译器测试的自动化运行部署。
基于编译器测试框架构建编译器测试环境,编译器测试环境为通过编写lit.cfg以及lit.local.cfg得到的。
在本实施例中,本发明提供的晶上***编译器测试装置,还包括测试范围确定模块,用于:
根据第一测试数据的测试内容,获取编译器测试执行范围,编译器测试执行范围至少包括第一测试数据执行测试的根目录、根目录下不需要执行测试的子目录以及执行测试的文件后缀。
在本实施例中,本发明提供的晶上***编译器测试装置,预期结果生成模块具体用于:
根据随机数自动生成数据或自定义输入数据生成批量测试数据,以获取第一测试数据。
通过SHA1或SM4密码测试算法调用OpenSSL或GmSSL密码算法库生成预期输出结果。
在本实施例中,本发明提供的晶上***编译器测试装置,还包括一致性测试模块,用于:
根据MLIR自动生成的ciface接口或编译器自定义的#pragma接口的数据格式对源代码进行编译,并判断编译器前端生成的第一中间表示是否与源代码具有等价语义。以及
进一步判断密码测试算法的源算子通过中间表示处理后是否优化生成满足对应编译器硬件运行特征的目标算子,得到第一判断结果。
其中,源算子至少包括消息填充和哈希映射,编译器测试报告还包括第一判断结果。
在本实施例中,本发明提供的晶上***编译器测试装置,还包括性能测试模块,用于:
从不同密码算法库中选取目标代码,并将目标代码编译为目标指令发送至与优化代码相同的编译器硬件运行,得到目标代码的运行结果。
基于目标代码的运行结果,判断目标代码的运行结果与协同运行结果是否一致,得到第二判断结果。
其中,目标代码与优化代码具有相同的编译器硬件运行特征,编译器测试报告还包括第二判断结果。
在本实施例中,本发明提供的晶上***编译器测试装置,还包括稳定性测试模块,用于:
多次以同一密码测试算法为测试任务,获取每次密码测试算法对应的协同运行结果。
判断多次密码测试算法对应的协同运行结果是否一致,以获取用于验证编译器测试稳定性的第三判断结果。
其中,编译器测试报告还包括第三判断结果。
图10示例了一种电子设备的实体结构示意图,该电子设备可以是智能终端,其内部结构图可以如图10所示。该电子设备包括通过***总线连接的处理器、内存储器和网络接口。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***和计算机程序。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该电子设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现晶上***编译器测试方法,该方法包括:
获获取第一测试数据,并根据密码测试算法调用密码算法库对第一测试数据进行处理,以生成预期输出结果,第一测试数据为编译器测试框架通过随机数自动生成或自定义输入得到的;
基于MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式,获取源代码,源代码为满足MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式的代码;
通过编译器前端对源代码进行分析,以生成第一中间表示,并从第一中间表示中提取出包括但不仅限于第一算子和第二算子,第一算子和第二算子分别为满足不同编译器硬件运行特征的算子;
基于不同编译器硬件运行特征,分别对第一算子和第二算子进行优化,得到第一目标算子和第二目标算子,并将源代码中的第一算子和第二算子分别替换为第一目标算子和第二目标算子,得到优化代码;
通过编译器后端对优化代码进行编译,以生成相应的第一目标指令和第二目标指令,并将第一目标指令和第二目标指令分别发送至对应运行特征的编译器硬件进行协同运行,得到协同运行结果;
调用FileCheck基于预期输出结果对协同运行结果进行校验,得到校验结果,并基于校验结果生成编译器测试报告,校验结果用于表征协同运行结果与预期输出结果是否一致。
另一方面,本发明还提供了一种计算机存储介质,存储有计算机程序,计算机程序被处理器执行时实现晶上***编译器测试方法,该方法包括:
获获取第一测试数据,并根据密码测试算法调用密码算法库对第一测试数据进行处理,以生成预期输出结果,第一测试数据为编译器测试框架通过随机数自动生成或自定义输入得到的;
基于MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式,获取源代码,源代码为满足MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式的代码;
通过编译器前端对源代码进行分析,以生成第一中间表示,并从第一中间表示中提取出包括但不仅限于第一算子和第二算子,第一算子和第二算子分别为满足不同编译器硬件运行特征的算子;
基于不同编译器硬件运行特征,分别对第一算子和第二算子进行优化,得到第一目标算子和第二目标算子,并将源代码中的第一算子和第二算子分别替换为第一目标算子和第二目标算子,得到优化代码;
通过编译器后端对优化代码进行编译,以生成相应的第一目标指令和第二目标指令,并将第一目标指令和第二目标指令分别发送至对应运行特征的编译器硬件进行协同运行,得到协同运行结果;
调用FileCheck基于预期输出结果对协同运行结果进行校验,得到校验结果,并基于校验结果生成编译器测试报告,校验结果用于表征协同运行结果与预期输出结果是否一致。
又一方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令时实现晶上***编译器测试方法,该方法包括:
获获取第一测试数据,并根据密码测试算法调用密码算法库对第一测试数据进行处理,以生成预期输出结果,第一测试数据为编译器测试框架通过随机数自动生成或自定义输入得到的;
基于MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式,获取源代码,源代码为满足MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式的代码;
通过编译器前端对源代码进行分析,以生成第一中间表示,并从第一中间表示中提取出包括但不仅限于第一算子和第二算子,第一算子和第二算子分别为满足不同编译器硬件运行特征的算子;
基于不同编译器硬件运行特征,分别对第一算子和第二算子进行优化,得到第一目标算子和第二目标算子,并将源代码中的第一算子和第二算子分别替换为第一目标算子和第二目标算子,得到优化代码;
通过编译器后端对优化代码进行编译,以生成相应的第一目标指令和第二目标指令,并将第一目标指令和第二目标指令分别发送至对应运行特征的编译器硬件进行协同运行,得到协同运行结果;
调用FileCheck基于预期输出结果对协同运行结果进行校验,得到校验结果,并基于校验结果生成编译器测试报告,校验结果用于表征协同运行结果与预期输出结果是否一致。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。
作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双倍数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种晶上***编译器测试方法,其特征在于,所述方法包括:
获取第一测试数据,并根据密码测试算法调用密码算法库对所述第一测试数据进行处理,以生成预期输出结果,所述第一测试数据为编译器测试框架通过随机数自动生成或自定义输入得到的;
基于MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式,获取源代码,所述源代码为满足所述MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式的代码;
通过编译器前端对所述源代码进行分析,以生成第一中间表示,并从所述第一中间表示中提取出包括但不仅限于第一算子和第二算子,所述第一算子和第二算子分别为满足不同编译器硬件运行特征的算子;
基于所述不同编译器硬件运行特征,分别对所述第一算子和第二算子进行优化,得到第一目标算子和第二目标算子,并将所述源代码中的第一算子和第二算子分别替换为所述第一目标算子和第二目标算子,得到优化代码;
通过编译器后端对所述优化代码进行编译,以生成相应的第一目标指令和第二目标指令,并将所述第一目标指令和第二目标指令分别发送至对应运行特征的编译器硬件进行协同运行,得到协同运行结果;
调用FileCheck基于所述预期输出结果对所述协同运行结果进行校验,得到校验结果,并基于所述校验结果生成编译器测试报告,所述校验结果用于表征所述协同运行结果与预期输出结果是否一致。
2.根据权利要求1所述的晶上***编译器测试方法,其特征在于,所述获取第一测试数据,并根据密码测试算法调用密码算法库对所述第一测试数据进行处理,以生成预期输出结果,之前包括:
基于llvm-lit测试套件搭建编译器测试框架,并对所述第一测试数据的测试路径进行整理,所述编译器测试框架用于支持编译器测试的自动化运行部署;
基于所述编译器测试框架构建编译器测试环境,所述编译器测试环境为通过编写lit.cfg以及lit.local.cfg得到的。
3.根据权利要求2所述的晶上***编译器测试方法,其特征在于,所述取第一测试数据,并根据密码测试算法调用密码算法库对所述第一测试数据进行处理,以生成预期输出结果,之前还包括:
根据所述第一测试数据的测试内容,获取编译器测试执行范围,所述编译器测试执行范围至少包括所述第一测试数据执行测试的根目录、所述根目录下不需要执行测试的子目录以及执行测试的文件后缀。
4.根据权利要求1所述的晶上***编译器测试方法,其特征在于,所述密码测试算法至少包括SHA1以及SM4密码测试算法,所述密码算法库至少包括OpenSSL以及GmSSL密码算法库;
所述获取第一测试数据,并根据密码测试算法调用密码算法库对所述第一测试数据进行处理,以生成预期输出结果,包括:
根据随机数自动生成数据或自定义输入数据生成批量测试数据,以获取所述第一测试数据;
通过SHA1或SM4密码测试算法调用OpenSSL或GmSSL密码算法库生成所述预期输出结果。
5.根据权利要求1所述的晶上***编译器测试方法,其特征在于,所述第一接口为ciface接口,所述第二接口为#pragma接口;
所述基于MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式,获取源代码,之后还包括:
根据MLIR自动生成的ciface接口或编译器自定义的#pragma接口的数据格式对所述源代码进行编译,并判断编译器前端生成的所述第一中间表示是否与所述源代码具有等价语义;以及
进一步判断密码测试算法的源算子通过中间表示处理后是否优化生成满足对应编译器硬件运行特征的目标算子,得到第一判断结果;
其中,所述源算子至少包括消息填充和哈希映射,所述编译器测试报告还包括所述第一判断结果。
6.根据权利要求5所述的晶上***编译器测试方法,其特征在于,所述调用FileCheck基于所述预期输出结果对所述协同运行结果进行校验,得到校验结果,并基于所述校验结果生成编译器测试报告,之前还包括:
从不同密码算法库中选取目标代码,并将所述目标代码编译为目标指令发送至与所述优化代码相同的编译器硬件运行,得到所述目标代码的运行结果;
基于所述目标代码的运行结果,判断所述目标代码的运行结果与所述协同运行结果是否一致,得到第二判断结果;
其中,所述目标代码与所述优化代码具有相同的编译器硬件运行特征,所述编译器测试报告还包括所述第二判断结果。
7.根据权利要求1至6任一项所述的晶上***编译器测试方法,其特征在于,所述方法还包括:
多次以同一所述密码测试算法为测试任务,获取每次所述密码测试算法对应的所述协同运行结果;
判断多次密码测试算法对应的所述协同运行结果是否一致,以获取用于验证编译器测试稳定性的第三判断结果;
其中,所述编译器测试报告还包括所述第三判断结果。
8.一种晶上***编译器测试装置,其特征在于,所述装置包括:
预期结果生成模块,用于获取第一测试数据,并根据密码测试算法调用密码算法库对所述第一测试数据进行处理,以生成预期输出结果,所述第一测试数据为编译器测试框架通过随机数自动生成或自定义输入得到的;
源代码获取模块,用于基于MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式,获取源代码,所述源代码为满足所述MLIR自动生成的第一接口或编译器自定义的第二接口的数据格式的代码;
算子提取模块,用于通过编译器前端对所述源代码进行分析,以生成第一中间表示,并从所述第一中间表示中提取出包括但不仅限于第一算子和第二算子,所述第一算子和第二算子分别为满足不同编译器硬件运行特征的算子;
算子优化模块,用于基于所述不同编译器硬件运行特征,分别对所述第一算子和第二算子进行优化,得到第一目标算子和第二目标算子,并将所述源代码中的第一算子和第二算子分别替换为所述第一目标算子和第二目标算子,得到优化代码;
协同运行模块,用于通过编译器后端对所述优化代码进行编译,以生成相应的第一目标指令和第二目标指令,并将所述第一目标指令和第二目标指令分别发送至对应运行特征的编译器硬件进行协同运行,得到协同运行结果;
测试报告生成模块,用于调用FileCheck基于所述预期输出结果对所述协同运行结果进行校验,得到校验结果,并基于所述校验结果生成编译器测试报告,所述校验结果用于表征所述协同运行结果与预期输出结果是否一致。
9.一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。
10.一种计算机存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410259794.7A CN117851270B (zh) | 2024-03-07 | 2024-03-07 | 晶上***编译器测试方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410259794.7A CN117851270B (zh) | 2024-03-07 | 2024-03-07 | 晶上***编译器测试方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117851270A true CN117851270A (zh) | 2024-04-09 |
CN117851270B CN117851270B (zh) | 2024-05-03 |
Family
ID=90540502
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410259794.7A Active CN117851270B (zh) | 2024-03-07 | 2024-03-07 | 晶上***编译器测试方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117851270B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006031354A (ja) * | 2004-07-15 | 2006-02-02 | Renesas Technology Corp | テストプログラム生成装置及びテストプログラム生成システム |
US20140123109A1 (en) * | 2012-10-30 | 2014-05-01 | Oracle International Corporation | System and method for testing compiler implementation using dynamic combinatorial test generation |
US20140173552A1 (en) * | 2012-12-17 | 2014-06-19 | Unisys Corporation | Syntax language generator for compiler validation |
CN112232497A (zh) * | 2020-10-12 | 2021-01-15 | 苏州浪潮智能科技有限公司 | 一种编译ai芯片的方法、***、设备及介质 |
CN113722754A (zh) * | 2021-08-25 | 2021-11-30 | 上海阵方科技有限公司 | 隐私可执行文件的生成方法、装置和服务器 |
US20230251838A1 (en) * | 2022-02-07 | 2023-08-10 | Red Hat, Inc. | User customizable compiler attributes for code optimization |
US20230252209A1 (en) * | 2022-02-09 | 2023-08-10 | Xepic Corporation Limited | Method and apparatus of compiling verification system |
-
2024
- 2024-03-07 CN CN202410259794.7A patent/CN117851270B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006031354A (ja) * | 2004-07-15 | 2006-02-02 | Renesas Technology Corp | テストプログラム生成装置及びテストプログラム生成システム |
US20140123109A1 (en) * | 2012-10-30 | 2014-05-01 | Oracle International Corporation | System and method for testing compiler implementation using dynamic combinatorial test generation |
US20140173552A1 (en) * | 2012-12-17 | 2014-06-19 | Unisys Corporation | Syntax language generator for compiler validation |
CN112232497A (zh) * | 2020-10-12 | 2021-01-15 | 苏州浪潮智能科技有限公司 | 一种编译ai芯片的方法、***、设备及介质 |
CN113722754A (zh) * | 2021-08-25 | 2021-11-30 | 上海阵方科技有限公司 | 隐私可执行文件的生成方法、装置和服务器 |
US20230251838A1 (en) * | 2022-02-07 | 2023-08-10 | Red Hat, Inc. | User customizable compiler attributes for code optimization |
US20230252209A1 (en) * | 2022-02-09 | 2023-08-10 | Xepic Corporation Limited | Method and apparatus of compiling verification system |
Non-Patent Citations (1)
Title |
---|
叶鹏飞;: "一种针对大规模CGRA的编译器后端设计", 现代计算机, no. 06, 25 February 2020 (2020-02-25) * |
Also Published As
Publication number | Publication date |
---|---|
CN117851270B (zh) | 2024-05-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109426516A (zh) | 软件版本管理方法及装置 | |
CN101930400A (zh) | Sdk自动化测试***及方法 | |
CN112104709B (zh) | 智能合约的处理方法、装置、介质及电子设备 | |
US20040064806A1 (en) | Verifiable processes in a heterogeneous distributed computing environment | |
Chen et al. | Coca: Computation offload to clouds using aop | |
CN102880546A (zh) | 一种基于xml数据库的软件集成测试方法及*** | |
CN109656544B (zh) | 一种基于执行路径相似度的云服务api适配方法 | |
CN105022691A (zh) | 一种基于uml图的高度自动化软件测试方法 | |
WO2019112568A1 (en) | Inductive equivalence in machine-based instruction editing | |
CN109597618B (zh) | 程序开发方法、装置、计算机设备及存储介质 | |
CN114610640A (zh) | 一种面向物联网可信执行环境的模糊测试方法和*** | |
CN112997146B (zh) | 卸载服务器和卸载程序 | |
CN107977292A (zh) | Spi-nand的测试方法和装置 | |
CN117851270B (zh) | 晶上***编译器测试方法、装置、电子设备及存储介质 | |
CN116166907B (zh) | 一种使用WebAssembly和服务页面编译技术开发Web应用的方法及装置 | |
CN110609703B (zh) | 性能检测工具实现方法、装置、可读存储介质及终端设备 | |
CN117420985A (zh) | 一种使用JavaScript封装安卓服务功能的方法 | |
Dinh et al. | Assertion based parallel debugging | |
CN113657068A (zh) | Soc仿真验证及soc的仿真验证设备验证环境搭建方法 | |
CN109614320A (zh) | 一种检测代码接口准确性的方法及终端 | |
CN112148392A (zh) | 一种函数调用链获取方法、装置及存储介质 | |
Löscher et al. | Property-based testing of sensor networks | |
Azimian et al. | Energy metamorphic testing for android applications | |
CN113708971A (zh) | 一种Openstack云平台的部署方法及相关装置 | |
CN112506519A (zh) | 应用程序的编译方法、移动终端及服务器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |