针对NPU指令的仿真验证方法、装置、电子设备及存储介质与流程
- 国知局
- 2024-09-14 14:55:38
本技术涉及仿真,尤其涉及针对npu指令的仿真验证方法、装置、电子设备及存储介质。
背景技术:
1、在芯片中对npu指令进行仿真验证时,通过仿真的方式生成npu指令及指令序列的执行结果然后进行正确性验证。可以帮助芯片设计人员在设计阶段快速地确定指令集设计的合理性及部分功能实现的可行性,并且能够快速确定npu编译器所生成的指令或指令序列的正确性,以及快速地定位错误的指令或指令序列。
2、目前npu指令或指令序列的运行过程仿真方式主要有两种:一种方式是按成型的电路设计在电路硬件仿真器上搭建npu电路,真实执地行指令或指令序列,然后对结果进行正确性验证;另一种方式是使用专业电路仿真软件进行rtl仿真,通过软件模拟硬件的每一个时钟周期的运行状态进行仿真执行,然后对结果进行正确性验证。
3、根据上述可知,目前现有的仿真验证方式均存在弊端,如需要专业的硬件和电路仿真软件的支持,要模仿硬件的每一个时钟周期的行为仿真过程时间长的问题,且要求整个npu或部分指令的设计完成度达到完全可运行状态才可进行仿真运行,无法在更早的框架设计阶段进行验证。
4、因此,亟需一种快速高效、低成本且具有前瞻性的指令仿真校验方法。
技术实现思路
1、为了解决指令仿真校验低效、成本高且不具前瞻性的技术问题,本公开的目的在于提供一种针对npu指令的仿真验证方法、装置、电子设备及存储介质。
2、本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
3、根据本公开的一个方面,提供一种针对npu指令的仿真验证方法,包括:
4、从待执行指令序列中依次取出各指令,确定所述各指令所属硬件执行单元,并依次将所述各指令投递到相应的执行单元的指令队列中;
5、选取各执行单元对应的指令队列中的一条当前待执行指令;
6、解析所述当前待执行指令,获得指令参数;
7、根据所述指令参数,判断所述当前待执行指令是否存在依赖条件,其中,所述依赖条件指的是所述当前待执行指令依赖其他执行单元的执行结果;
8、若不存在所述依赖条件或所述依赖条件已满足,则从仿真模块中获取输入数据,并对所述输入数据进行格式转换,获得第一预设格式的输入数据,其中,所述依赖条件已满足指的是所述当前待执行指令依赖的所有所述其他执行单元的执行结果均已执行结束;
9、若所述依赖条件不满足,当前执行单元进入等待状态,直至所述依赖条件满足,获得所述第一预设格式的输入数据;
10、将所述第一预设格式的输入数据按照预设公式计算,获得当前仿真执行结果,并将所述当前仿真执行结果按照第二预设格式写入所述仿真模块中,其中,所述预设公式与硬件计算单元对应设置;
11、判断所述各执行单元对应的指令队列是否为空;
12、若所述各执行单元对应的指令队列不为空,则重复上述仿真验证步骤直至所述各执行单元对应的指令队列中的指令均获得对应的仿真执行结果。
13、在本公开一个实施例中,在所述将所述第一预设格式的输入数据按照预设公式计算,获得当前仿真执行结果,并将所述当前仿真执行结果按照第二预设格式写入所述仿真模块中之后,包括:
14、确定所述当前仿真执行结果是否为所述其他执行单元的依赖条件;
15、若为所述其他执行单元的依赖条件,则发送信号给对应的目标执行单元;
16、判断所述目标执行单元是否处于等待状态;
17、若所述目标执行单元不处于等待状态,则标记所述目标执行单元的目标指令对所述当前待执行指令的依赖条件已满足;
18、若所述目标执行单元为等待状态且所述目标指令的依赖条件已满足,则执行所述目标指令的仿真验证。
19、在本公开一个实施例中,所述第一预设格式为在软件中所述预设公式计算所需要的输入格式;
20、所述若不存在所述依赖条件或所述依赖条件已满足,则从仿真模块中获取输入数据,并对所述输入数据进行格式转换,获得第一预设格式的输入数据,包括:
21、根据所述当前待执行指令从主内存仿真模块、内部存储器仿真模块或内部寄存器仿真模块中搜集输入数据;
22、将所述输入数据转换成所述第一预设格式。
23、在本公开一个实施例中,所述预设公式的获取,包括:
24、根据所述各指令所要实现的计算功能以及硬件计算单元的特性,获取预设公式,以使软件的所述预设公式的计算结果与所述硬件指令的期望计算结果一致。
25、在本公开一个实施例中,所述第二预设格式为所述当前待执行指令所对应的输出数据格式。
26、在本公开一个实施例中,所述判断所述各执行单元对应的指令队列是否为空,包括:
27、判断所述当前执行单元中的当前指令队列是否为空;
28、若所述当前执行单元的当前指令队列不为空,则选取所述当前指令队列中的一条新当前待执行指令进行仿真验证;
29、若所述当前执行单元的当前指令队列为空,则所述当前执行单元的仿真验证结束;
30、判断所有执行单元对应的指令队列是否均为空;
31、若所述所有执行单元对应的指令队列均为空,则所述所有执行单元的仿真验证已完成;
32、若所述所有执行单元对应的指令队列存在不为空的情况,则继续执行相应的仿真验证。
33、在本公开一个实施例中,还包括:
34、根据所述仿真执行结果,检查主内存仿真模块、内部存储器仿真模块以及内部寄存器仿真模块中的数据是否符合预期。
35、根据本公开的另一个方面,提供一种针对npu指令的仿真验证装置,包括:
36、指令获取模块,用于从待执行指令序列中依次取出各指令,确定所述各指令所属硬件执行单元,并依次将所述各指令投递到相应的执行单元的指令队列中;
37、指令选取模块,用于选取各执行单元对应的指令队列中的一条当前待执行指令;
38、解析模块,用于解析所述当前待执行指令,获得指令参数;
39、第一判断模块,用于根据所述指令参数,判断所述当前待执行指令是否存在依赖条件,其中,所述依赖条件指的是所述当前待执行指令依赖其他执行单元的执行结果;
40、第一数据获取模块,用于若不存在所述依赖条件或所述依赖条件已满足,则从仿真模块中获取输入数据,并对所述输入数据进行格式转换,获得第一预设格式的输入数据,其中,所述依赖条件已满足指的是所述当前待执行指令依赖的所有所述其他执行单元的执行结果均已执行结束;
41、第二数据获取模块,用于若所述依赖条件不满足,当前执行单元进入等待状态,直至所述依赖条件满足,获得所述第一预设格式的输入数据;
42、计算模块,用于将所述第一预设格式的输入数据按照预设公式计算,获得当前仿真执行结果,并将所述当前仿真执行结果按照第二预设格式写入所述仿真模块中,其中,所述预设公式与硬件计算单元对应设置;
43、第二判断模块,用于判断所述各执行单元对应的指令队列是否为空;
44、结果获取模块,用于若所述各执行单元对应的指令队列不为空,则重复上述仿真验证步骤直至所述各执行单元对应的所述指令队列中的指令均获得对应的仿真执行结果。
45、根据本公开的又一个方面,提供一种电子设备,处理器;以及
46、存储器,用于存储所述处理器的可执行指令;
47、其中,所述处理器配置为经由执行所述可执行指令来执行上述任意一项所述的针对npu指令的仿真验证方法。
48、根据本公开的再一个方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一项所述的针对npu指令的仿真验证方法。
49、本公开的实施例所提供的提供一种针对npu指令的仿真验证方法,包括:从待执行指令序列中依次取出各指令,确定所述各指令所属硬件执行单元,并依次将所述各指令投递到相应的执行单元的指令队列中;选取各执行单元对应的指令队列中的一条当前待执行指令;解析所述当前待执行指令,获得指令参数;根据所述指令参数,判断所述当前待执行指令是否存在依赖条件,其中,所述依赖条件指的是所述当前待执行指令依赖其他执行单元的执行结果;若不存在所述依赖条件或所述依赖条件已满足,则从仿真模块中获取输入数据,并对所述输入数据进行格式转换,获得第一预设格式的输入数据;若所述依赖条件不满足,当前执行单元进入等待状态,直至所述依赖条件满足,获得所述第一预设格式的输入数据;将所述第一预设格式的输入数据按照预设公式计算,获得当前仿真执行结果,并将所述当前仿真执行结果按照第二预设格式写入所述仿真模块中,其中,所述预设公式与硬件计算单元对应设置;判断所述各执行单元对应的指令队列是否为空,若所述各执行单元对应的指令队列不为空,则重复上述仿真验证步骤直至所述各执行单元对应的所述指令队列中的指令均获得对应的仿真执行结果。采用纯软件的仿真验证方法分析npu指令执行结果的正确性,不需要专业的硬件和电路仿真软件的支持,降低成本。且在指令的仿真中规避了现有仿真方式中要模仿硬件的每一个时钟周期的行为的过程,解决了现有仿真过程时间长的问题。同时可以在芯片电路设计完成之前就可进行仿真,具有很强的前瞻性,也可以很容易地集成到npu编译器中自动检查编译器生成的指令序列,还可以集成到神经网络推理框架中参与业务相关的全链条仿真。实现高效、低成本且具有前瞻性的指令仿真验证。
本文地址:https://www.jishuxx.com/zhuanli/20240914/296398.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。