生成可执行文件进行仿真切片恢复的CPU芯片仿真加速方法与流程

专利2023-05-25  133


生成可执行文件进行仿真切片恢复的cpu芯片仿真加速方法
技术领域
1.本发明涉及cpu芯片仿真技术领域,具体而言,涉及一种生成可执行文件进行仿真切片恢复的cpu芯片仿真加速方法,更具体地是通过生成可执行文件来实现仿真切片恢复的一种cpu芯片仿真加速方法。


背景技术:

2.切片仿真是常用的对cpu芯片进行验证的手段,如果cpu芯片能够无错执行切片,那么所生成的指令日志应该和生成的切片在模拟器上执行的指令日志一致,因此,切片仿真可以用于验证cpu的正确性。cpu芯片在验证的过程中,需要执行大量程序以验证其稳定性,因而芯片仿真执行是一个非常耗时的过程。
3.仿真切片通常是生成切片程序的执行上下文,其包括内存、磁盘、寄存器、缓存的快照等,并恢复到仿真模型中。当真实cpu芯片硬件没有被建模时,特别是乱序执行cpu模型缺失的时候,通过不同的仿真模型生成出来的快照无法恢复到真实的硬件模型中。
4.业内常采用如表1所列举的几种常见切片方法,比较每种方法的切片仿真应用场景和硬件cpu模型的关系如下:
5.表1:
[0006][0007][0008]
因此,需要一种在普通模拟器环境生成切片,且切片后的程序能够在真实硬件环境中快速执行的方法,以达到缩短仿真的时间且无需耗费较大工作量的目的。


技术实现要素:

[0009]
为了解决上述问题,本发明提供一种生成可执行文件进行仿真切片恢复的cpu芯片仿真加速方法,其只需软件团队由普通模拟器生成切片并在真实硬件上执行,通过执行程序特征部分就可以起到执行该程序的验证效果,从而缩短了大量程序执行的仿真时间及工作量。
[0010]
为达到上述目的,本发明提供了一种生成可执行文件进行仿真切片恢复的cpu芯
片仿真加速方法,其包括:
[0011]
步骤s1:采用行为仿真模型与simpoint结合摘取指定程序中权重较高部分的基本块向量,生成特征切片,其中,所述行为仿真模型为gem5;
[0012]
步骤s2:修改行为仿真模型,并使用开发的指令和指令上下文跟踪功能再次运行行为仿真模型,在特征切片的开始执行阶段开始跟踪特征切片的执行,直到特征切片执行的结束;
[0013]
步骤s3:在特征切片执行完成后,指令上下文跟踪功能根据跟踪结果生成一段切片汇编代码,得到指定程序切片;
[0014]
步骤s4:利用目标测试系统上可执行的测试固件,执行得到的指定程序切片。
[0015]
在本发明一实施例中,其中,步骤s1具体包括:
[0016]
步骤s1.1:在运行行为仿真模型gem5的同时引入simpoint切片功能,分析并提取权重最高的程序基本块向量,生成可被simpoint使用的且用于分析权重的基本块向量侧写文件;
[0017]
步骤s1.2:运行simpoint分析基本块向量侧写文件,输出simpoint权重分析结果文件;
[0018]
步骤s1.3:再次执行行为仿真模型gem5,读入simpoint权重结果文件中指定基本块向量侧写文件有较高权重的基本块向量,并生成模拟器能够重复执行的检查点快照,得到特征切片。
[0019]
在本发明一实施例中,其中,步骤s2中的指令和指令上下文跟踪功能为一gem5模拟器的插件,当每次指定程序的指令被gem5模拟器的cpu执行时调用该插件,此时记录被执行的指令码和当时的模拟器内的内存与寄存器的状态。
[0020]
在本发明一实施例中,其中,步骤s2中的跟踪功能包括对cpu寄存器、代码及数据的自动跟踪,其中数据还包括数据段、栈和堆,具体包括:
[0021]
对cpu寄存器的跟踪只在特征切片的开始执行的时候,并记录所有上下文寄存器的信息;
[0022]
对栈的跟踪是在特征切片的开始执行的时候,通过堆栈指针记录切片开始时候的堆栈信息;
[0023]
对栈的跟踪还包括在特征切片的执行过程中,记录其帧信息;
[0024]
对数据段和堆的跟踪是在特征切片的执行过程中,记录其第一次读取的被记录到内存地址中的内容;
[0025]
对数据段和堆的跟踪还包括在特征切片执行完成后,合并第一次读取到的内存地址中的内容,并形成执行过程访问过的内存信息的离散列表;以及
[0026]
对代码的跟踪是在特征切片的执行过程中,通过跟踪跳转/调用指令记录被执行的函数符号信息,所述函数符号信息包括目标函数的符号名称和首地址。
[0027]
在本发明一实施例中,其中,步骤s3中的切片汇编代码的内容包括:
[0028]
第一段为一段寄存器加载指令,以恢复cpu的上下文寄存器的过程;
[0029]
第二段为一段被切片程序读写的内存,其包括堆或数据段,以建立虚拟内存映射的过程;
[0030]
第三段为一段内存加载指令,以恢复目标内存地址内容的过程;
[0031]
第四段为一段将所有被记录的函数符号信息以汇编函数的方式输出的代码段,其中函数符号信息中的符号是以符号名表示而不以地址表示;
[0032]
第五段为一段将被记录的函数所调用的函数通过汇编函数的方式输出的代码段,其中函数的符号也是以符号名表示而不以地址表示;以及
[0033]
第六段为一段栈恢复代码,具体为根据栈及帧信息修改堆栈指针获得栈及帧的空间,并将保存的帧内容存放到栈及帧的空间中。
[0034]
在本发明一实施例中,其中,步骤s4具体包括:
[0035]
步骤s4.1:为测试固件增加内存管理单元的支持,以使得测试固件在执行指定程序切片时有与操作系统执行指定程序时相似的地址空间环境;
[0036]
步骤s4.2:将生成的切片汇编代码以一个切片入口函数的形式与目标测试系统所能够启动的测试固件链接到一起,成为一个可执行文件,其中,链接过程是将符号重新链接成新的地址的过程;
[0037]
步骤s4.3:目标测试系统的cpu直接执行该可执行文件,其中,先运行目标测试系统测试固件自身的bsp部分,然后跳转到切片汇编代码入口,通过调用切片入口函数即能够再现指定程序切片的整个执行过程。
[0038]
本发明提供的生成可执行文件进行仿真切片恢复的cpu芯片仿真加速方法,与现有技术相比,其无需花费硬件建模的庞大工作量,只需由普通模拟器生成切片即能在真实硬件上执行,并且对于执行程序而言,只需执行其特征部分就可以起到执行该程序的验证效果,从而缩短了大量程序执行所耗费的仿真时间。
附图说明
[0039]
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0040]
图1为切割基本块的原理示意图;
[0041]
图2为本发明一实施例的流程图。
具体实施方式
[0042]
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0043]
图1为切割基本块的原理示意图,如图1所示,本发明所采用的切片仿真方法是基于simpoint工具来达到缩短仿真执行时间的目的,其原理为:被仿真的指定程序(如spec cpu(spec组织推出的cpu子系统评估软件)基准测试(benchmark)中的一个测试用例)可能需要运行非常长的时间才能获得仿真结果,因而在硬件仿真器上无法执行完成。simpoint是一种分析程序执行过程,它是以每百万条指令(也可以是以更多或者更少的指令)为间隔将程序(application code)切割为基本块向量(basic block vector),程序指令流以分支
和跳转指令为边界分割为基本块(basic block)(参见图1),其中百万条指令包含一定数量基本块(a、b、c、d、e、f等),这些个基本块组成的基本块数组则称之为基本块向量(bbv),并能够分析每个基本块向量在整个执行过程中权重的工具。
[0044]
在实际仿真过程中,为了缩短仿真时间,通常需要从指定程序中摘取出部分基本块向量,通过只执行这些部分的基本块向量就能够代表整个程序的执行,其中,这些部分的基本块向量基本为权重较高的,在本发明的实施例中将其定义为指定程序的特征切片信息。
[0045]
图2为本发明一实施例的流程图,如图2所示,本实施例提供一种生成可执行文件进行仿真切片恢复的cpu芯片仿真加速方法,其包括:
[0046]
步骤s1:采用行为仿真模型与simpoint结合摘取指定程序中权重较高部分的基本块向量,生成特征切片,其中,行为仿真模型为gem5;
[0047]
gem5是一款模块化的离散事件驱动全系统模拟器,它是一款高度可配置、集成多种isa和多种cpu模型的体系结构模拟器,gem5能够支持相对复杂的乱序cpu模型,生成的切片质量较高,能起到验证真实cpu实现的作用。
[0048]
在本实施例中,其中,步骤s1具体包括:
[0049]
步骤s1.1:在运行行为仿真模型gem5的同时引入simpoint切片功能,分析并提取权重最高的程序基本块向量,生成可被simpoint使用的且用于分析权重的基本块向量(bbv)侧写文件(basic block vector profile);
[0050]
步骤s1.2:运行simpoint分析基本块向量(bbv)侧写文件,输出simpoint权重分析结果文件;例如基准测试程序的主循环,由于其周期性重复执行,就会被simpoint计算分析为有较高权重的bbv,simpoint输出的权重分析结果文件中就会将其标注为高权重。
[0051]
步骤s1.3:再次执行行为仿真模型gem5,读入simpoint权重结果文件中指定基本块向量(bbv)侧写文件有较高权重的基本块向量(bbv),并生成模拟器能够重复执行的检查点快照,得到特征切片。由于gem5的checkpoint包含了模拟器状态,因此模拟器可以从快照中恢复执行,到快照结束时完成执行。
[0052]
步骤s2:修改行为仿真模型,并使用开发的指令和指令上下文跟踪功能再次运行行为仿真模型,在特征切片的开始执行阶段开始跟踪特征切片的执行,直到特征切片执行的结束;
[0053]
在本实施例中,其中,步骤s2中的指令和指令上下文跟踪功能为一gem5模拟器的插件,当每次指定程序的指令被gem5模拟器的cpu执行时调用该插件,此时记录被执行的指令码和当时的模拟器内的内存与寄存器的状态。由于程序中包含无数条指令,模拟器需要一条一条执行这些指令,因此在模拟器的指令提交阶段可以截获模拟器cpu执行了什么指令和当时的寄存器与内存的内容(即执行时的上下文)。
[0054]
在本实施例中,其中,步骤s2中的跟踪功能包括对cpu寄存器、代码及数据的自动跟踪,其中数据还包括数据段、栈和堆,具体为:
[0055]
s2.1:对cpu寄存器的跟踪只在特征切片的开始执行的时候,并记录所有上下文寄存器的信息;
[0056]
s2.2:对栈的跟踪是在特征切片的开始执行的时候,通过堆栈指针(sp)记录切片开始时候的堆栈信息;
[0057]
s2.3:对栈的跟踪还包括在特征切片的执行过程中,记录其帧(fp)信息;
[0058]
s2.4:对数据段和堆的跟踪是在特征切片的执行过程中,记录其第一次读取的被记录到内存地址中的内容;
[0059]
s2.5:对数据段和堆的跟踪还包括在特征切片执行完成后,合并第一次读取到的内存地址中的内容,并形成执行过程访问过的内存信息的离散列表;以及
[0060]
s2.6:对代码的跟踪是在特征切片的执行过程中,通过跟踪跳转/调用指令记录被执行的函数符号(pc)信息,所述函数符号信息包括目标函数的符号名称和首地址。
[0061]
步骤s3:在特征切片执行完成后,指令上下文跟踪功能根据跟踪结果生成一段切片汇编代码,得到指定程序切片;
[0062]
在本实施例中,其中,步骤s3中的切片汇编代码的内容包括:
[0063]
s3.1:第一段为一段寄存器加载指令,以恢复cpu的上下文寄存器的过程;
[0064]
s3.2:第二段为一段被切片程序读写的内存,其包括堆或数据段,以建立虚拟内存映射的过程;
[0065]
s3.3:第三段为一段内存加载指令,以恢复目标内存地址内容的过程;
[0066]
s3.4:第四段为一段将所有被记录的函数符号信息以汇编函数的方式输出的代码段,其中函数符号信息中的符号是以符号名表示而不以地址表示;
[0067]
s3.5:第五段为一段将被记录的函数所调用的函数通过汇编函数的方式输出的代码段,其中函数的符号也是以符号名表示而不以地址表示;由于跟踪的函数所走过的调用路径可能不包括该函数所调用的所有函数,因此就可能会引起链接失败,故本实施增加本s3.5,以解决这一问题。
[0068]
s3.6:第六段为一段栈恢复代码,具体为根据栈及帧信息修改堆栈指针(sp)获得栈及帧的空间,并将保存的帧内容存放到栈及帧的空间中。
[0069]
步骤s4:利用目标测试系统上可执行的测试固件,执行得到的指定程序切片。
[0070]
其中,步骤s4中的目标测试系统可以为arm64或riscv系统,由于该测试固件通常是在实现切片功能前就已经开发完成,本实施例中增加了虚拟内存的实现,用于恢复被保存的内存。
[0071]
在本实施例中,其中,步骤s4具体包括:
[0072]
步骤s4.1:为测试固件增加内存管理单元(memmorymanagementunit,mmu)的支持,以使得测试固件在执行指定程序切片时有与操作系统执行指定程序时相似的地址空间环境;这里所述的相似的地址空间环境即为利用mmu功能将实际芯片的物理地址映射为虚拟地址空间,该虚拟地址空间的地址范围等价于被切片指定程序当初的地址空间,这样就可以保持被切片程序的指令/数据地址不变。
[0073]
步骤s4.2:将生成的切片汇编代码以一个切片入口函数的形式与目标测试系统所能够启动的测试固件链接到一起,成为一个可执行文件,其中,链接过程实际是将符号重新链接成新的地址的过程;由于函数和被调用函数都被输出到代码段,而全局内存访问表现为内存读写指令与变量无关,因此可以无错链接成为一个可执行文件,链接过程会将符号重新链接成新的地址,注意整个切片恢复过程由于链接步骤存在,因此并不关心函数符号(pc)的地址;
[0074]
步骤s4.3:目标测试系统的cpu直接执行运行该可执行文件,其中,首先运行目标
测试系统测试固件自身的bsp(一般是指板级支持包)部分,然后跳转到切片汇编代码入口,通过调用切片入口函数即能够再现指定程序切片的整个执行过程。注意整个切片恢复过程由于栈恢复步骤存在,因此不需要关心堆栈指针(sp)地址,调用切片入口函数即可再现切片的整个执行过程。
[0075]
本发明提供的生成可执行文件进行仿真切片恢复的cpu芯片仿真加速方法,与现有技术相比,其无需花费硬件建模的庞大工作量,只需由普通模拟器生成切片即能在真实硬件上执行,并且对于执行程序而言,只需执行其特征部分就可以起到执行该程序的验证效果,从而缩短了大量程序执行所耗费的仿真时间。
[0076]
本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
[0077]
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。

技术特征:
1.一种生成可执行文件进行仿真切片恢复的cpu芯片仿真加速方法,其特征在于,包括:步骤s1:采用行为仿真模型与simpoint结合摘取指定程序中权重较高部分的基本块向量,生成特征切片,其中,所述行为仿真模型为gem5;步骤s2:修改行为仿真模型,并使用开发的指令和指令上下文跟踪功能再次运行行为仿真模型,在特征切片的开始执行阶段开始跟踪特征切片的执行,直到特征切片执行的结束;步骤s3:在特征切片执行完成后,指令上下文跟踪功能根据跟踪结果生成一段切片汇编代码,得到指定程序切片;步骤s4:利用目标测试系统上可执行的测试固件,执行得到的指定程序切片。2.根据权利要求1所述的生成可执行文件进行仿真切片恢复的cpu芯片仿真加速方法,其特征在于,步骤s1具体包括:步骤s1.1:在运行行为仿真模型gem5的同时引入simpoint切片功能,分析并提取权重最高的程序基本块向量,生成可被simpoint使用的且用于分析权重的基本块向量侧写文件;步骤s1.2:运行simpoint分析基本块向量侧写文件,输出simpoint权重分析结果文件;步骤s1.3:再次执行行为仿真模型gem5,读入simpoint权重结果文件中指定基本块向量侧写文件有较高权重的基本块向量,并生成模拟器能够重复执行的检查点快照,得到特征切片。3.根据权利要求1所述的生成可执行文件进行仿真切片恢复的cpu芯片仿真加速方法,其特征在于,步骤s2中的指令和指令上下文跟踪功能为一gem5模拟器的插件,当每次指定程序的指令被gem5模拟器的cpu执行时调用该插件,此时记录被执行的指令码和当时的模拟器内的内存与寄存器的状态。4.根据权利要求1所述的生成可执行文件进行仿真切片恢复的cpu芯片仿真加速方法,其特征在于,步骤s2中的跟踪功能包括对cpu寄存器、代码及数据的自动跟踪,其中数据还包括数据段、栈和堆,具体包括:对cpu寄存器的跟踪只在特征切片的开始执行的时候,并记录所有上下文寄存器的信息;对栈的跟踪是在特征切片的开始执行的时候,通过堆栈指针记录切片开始时候的堆栈信息;对栈的跟踪还包括在特征切片的执行过程中,记录其帧信息;对数据段和堆的跟踪是在特征切片的执行过程中,记录其第一次读取的被记录到内存地址中的内容;对数据段和堆的跟踪还包括在特征切片执行完成后,合并第一次读取到的内存地址中的内容,并形成执行过程访问过的内存信息的离散列表;以及对代码的跟踪是在特征切片的执行过程中,通过跟踪跳转/调用指令记录被执行的函数符号信息,所述函数符号信息包括目标函数的符号名称和首地址。5.根据权利要求4所述的生成可执行文件进行仿真切片恢复的cpu芯片仿真加速方法,其特征在于,步骤s3中的切片汇编代码的内容包括:
第一段为一段寄存器加载指令,以恢复cpu的上下文寄存器的过程;第二段为一段被切片程序读写的内存,其包括堆或数据段,以建立虚拟内存映射的过程;第三段为一段内存加载指令,以恢复目标内存地址内容的过程;第四段为一段将所有被记录的函数符号信息以汇编函数的方式输出的代码段,其中函数符号信息中的符号是以符号名表示而不以地址表示;第五段为一段将被记录的函数所调用的函数通过汇编函数的方式输出的代码段,其中函数的符号也是以符号名表示而不以地址表示;以及第六段为一段栈恢复代码,具体为根据栈及帧信息修改堆栈指针获得栈及帧的空间,并将保存的帧内容存放到栈及帧的空间中。6.根据权利要求5所述的生成可执行文件进行仿真切片恢复的cpu芯片仿真加速方法,其特征在于,步骤s4具体包括:步骤s4.1:为测试固件增加内存管理单元的支持,以使得测试固件在执行指定程序切片时有与操作系统执行指定程序时相似的地址空间环境;步骤s4.2:将生成的切片汇编代码以一个切片入口函数的形式与目标测试系统所能够启动的测试固件链接到一起,成为一个可执行文件,其中,链接过程是将符号重新链接成新的地址的过程;步骤s4.3:目标测试系统的cpu直接执行该可执行文件,其中,先运行目标测试系统测试固件自身的bsp部分,然后跳转到切片汇编代码入口,通过调用切片入口函数即能够再现指定程序切片的整个执行过程。

技术总结
一种生成可执行文件进行仿真切片恢复的CPU芯片仿真加速方法,其包括:S1:采用行为仿真模型与SimPoint结合摘取指定程序中权重较高部分的基本块向量,生成特征切片,其中,行为仿真模型为gem5;S2:修改行为仿真模型,并使用开发的指令和指令上下文跟踪功能再次运行行为仿真模型,在特征切片的开始执行阶段开始跟踪特征切片的执行,直到特征切片执行的结束;S3:在特征切片执行完成后,指令上下文跟踪功能根据跟踪结果生成一段切片汇编代码,得到指定程序切片;S4:利用目标测试系统上可执行的测试固件,执行得到的指定程序切片。执行得到的指定程序切片。执行得到的指定程序切片。


技术研发人员:郑律 姜志颖 王飞 范东睿
受保护的技术使用者:苏州睿芯集成电路科技有限公司
技术研发日:2022.06.24
技术公布日:2022/11/1
转载请注明原文地址: https://tieba.8miu.com/read-2833.html

最新回复(0)