Comments (24)
两个方面的问题:
- address map是如何设置的
- 为什么会出问题,要怎么修改
address map 的设置和使用
nemu 访问物理地址,会先判断是 ddr 还是 外设:https://github.com/OpenXiangShan/NEMU/blob/master/src/memory/paddr.c#L96
https://github.com/OpenXiangShan/NEMU/blob/master/src/memory/paddr.c#L126
ddr和外设是不同的处理方式,您如果有兴趣可以继续追下去。
函数 in_pmem
负责这个判断,可以简单理解为 0x80000000
以上的为 ddr,以下的为 外设(具体判断更复杂一些)。
为什么会出错,要怎么修改
这个报错信息在 外设地址检查函数,如果地址不在任何一个外设的地址范围,就会报错。
根据报错信息,地址为 0xffffff00
,应该在 ddr 里面,但是报错了。说明 ddr 的地址空间没有覆盖 0xffffff00
,因此被分配到 外设空间了。错误应该在于 nemu 的配置中,内存空间分配不够:https://github.com/OpenXiangShan/NEMU/blob/cpt-bk/include/memory/paddr.h#L10。
但是默认大小已经是 8GB 了,覆盖了出错的地址。所以您在使用哪个分支呢,是否修改了nemu的配置呢,能否提供更多的日志信息呢?
from nemu.
你好,我这个是cpt-bk分支,好像没有找到外设内存基地址,主内存基地已找到
我单步调试看到确实是进入到了外设内存地址中,
但是不明白外设内存分布是怎么样的,在哪可以查询到呢。我找了好久,没找到,谢谢。
from nemu.
0xffffff00
并不是外设地址,而是 ddr 地址空间配置不足,导致nemu认为是外设空间。
from nemu.
我们是用cpt-bk分支
ddr设置的也是8G空间,我们觉得是命令用错了,我们想了解下如果只是单纯配置a0寄存器为101打开checkpoint模式该用什么命令呢?我们目前用./build/riscv64-nemu-interpreter rv64uc-p-rvc.bin -D outputs -w build -C simpoint_profile --simpoint-profile --interval=1000000和./build/riscv64-nemu-interpreter -b rv64uc-p-rvc.bin都不行(rv64uc-p-rvc.bin是修改寄存器的汇编代码可执行文件),谢谢!
from nemu.
打checkpoint分为三部,你的命令是符合第一步的格式的(但是少了-b参数,batch mode)。
cpt-bk分支,现在不支持在M态生成checkpoint。我们现在使用checkpoint的场景是,在linux之上,生成spec程序或其他程序的checkpoint,在启动spec程序之前,运行自定义程序,进入checkpoint模式。
需要提醒,手册中忘记说明的细节:
checkpoint模式下,nemu会加载一段程序 gcpt.bin
,到内存中,地址空间为:(0x80000000,0xa0000)
。gcpt.bin 负责 checkpoint 的恢复,这一段程序也会成为 checkpoint 文件的一部分。如果您自己想要生成自己的程序的checkpoint,需要把起始地址调到 0x800a0000
。
上面的信息可能不足以解决你的问题,您可以先尝试一下。
from nemu.
你好,我已经生成checkpoint了的.gz文件了,
想了解一下,下一步该如何调用verilator emu来对它进行仿真呢?谢谢
from nemu.
想再补充请教下,根据解析进行一次profiling是要先关闭时间中断,然后开启profiling,最后nemu trap吗,是要求汇编代码先将a0寄存器置为0x100,然后再置为0x101,最后再置为0x000?我的理解对吗?谢谢
from nemu.
nemu-trap指令的使用方式是:
- 置a0寄存器 :li a0 0x100
- nemu-trap指令 :0x6b
两条指令完成一个功能。类似于函数调用+传参数。时间中断和profiling相当于是两次函数调用,需要执行上面的指令两次。
from nemu.
你好,我已经生成checkpoint了的.gz文件了, 想了解一下,下一步该如何调用verilator emu来对它进行仿真呢?谢谢
对于香山的emu,checkpoint文件可以当成是普通的workload来用,香山会处理。
如果您需要在自己的emu上运行,可以参考香山的处理方式:https://github.com/OpenXiangShan/difftest/blob/master/src/test/csrc/common/ram.cpp#L153
from nemu.
你好,我们已经按照方法实现了checkpoint,但是最后生成这么多切片,每一个切片的大小是22M,但是我们并行跑第一个和第二个切片的时候发现,好像执行的代码是一样的
我一直以为是切完片后把程序分段了,然后再并行执行这些分段的代码计时,我想问一下这些分完片的内容都相同吗?我只用执行其中一个分片就行了?
from nemu.
checkpoint 是对系统的执行状态进行保存,所以静态代码是一样的,但是处于不同的执行阶段。
并行执行所有的checkpoint(注意需要限制每个片段的执行时间,即22M),“相当于是”执行了整个程序。(注意需要限制每个片段的执行时间,即22M)。对于某个切片,如果不限制执行时间(指令数),它会一直执行下去。
您可以跑一下其他的checkpoint,看看执行阶段是不是一样的,比如最后一个片段。
from nemu.
1、
你好,我分别执行了第三个和最后一个checkpoint的代码,打印结果如下,我还是不太明白,他们为什么又是会出现相同的打印,按道理说它们分别属于不同的执行阶段,不应该会有相同的打印。
按照打checkpoint原理来说,每个点都是属于不同的执行阶段,为什么会有相关的打印执行,就算是有之前的打印缓存被保留下来了为什么没有,第一个切片的hello world打印?我这边不太明白。
2、那我该如何通过执行这些切片来最后还原我的spec2006的分数呢?通过计算每条指令的执行时间然后最后进行估算总的spec2006的执行时间吗?你们有具体的估算spec2006的方法吗?谢谢!
from nemu.
- 可能是生成的checkpoint出错了,也可能是workload就出错了
- 每个checkpoint都有个权重,指令数,cycles(CPI),所有checkpoints的加权和就相当于是整个workload,单位是cycles。也就得到了一个workload的总cycles数,即时间。
from nemu.
可以检查一下nemu跑worload时,行为是否是正确的。
另外还有生成checkpoint时的log,是否是正常的。
from nemu.
(1)
想请教下,如果我的“hello world!"打印在_200000_.gz这个切片中,我在执行其它切片gz文件的时候是不是应该不会有这个打印信息,这个打印信息只存在_200000_.gz切片信息中,是吗?这是我checkpoint的打印信息log。
香山切片log.txt
(2)
你所指的限制每个片段执行时间是指--checkpoint-interval这个参数吗?还是有其它命令指定,谢谢。
from nemu.
- 是的。
- 每个切片对应于workload的一段执行流程,但其实际上是系统状态的快照,在执行时需要手动限制执行周期。在香山中,通过
-I
参数来指定执行指令书,如-I 22M
。具体时间长度,由打checkpoint时的设计决定,也就是 --checkpoint-interval。
突然想到一个细节没有写明:每个checkpoint文件的时间点,并不是严格的对应于checkpoint的时间点,而是会提前一个周期(interval),目的是为了预热硬件中的cache、bpu等内容。
from nemu.
请教一下你们之前测试香山内核spec2006的记录在哪里可以找到呢?谢谢
from nemu.
我们测试 SPEC06,一方面是通过 NEMU 生成 checkpoint,运行 checkpoint,并和 NEMU 做 diff-test 对比。另一方面,在FPGA上运行完整的 SPEC06 程序。
from nemu.
根据反馈,更新了香山文档中关于 Simpoint 的介绍:https://xiangshan-doc.readthedocs.io/zh_CN/latest/tools/simpoint/
from nemu.
想问一下,为什么我最后生成的切片,每一个切片大小比之前没有经过切片的大小还要大呢?这个正常吗?按道理说,切片是原目标文件的采样部分,为什么切片后单个切片还比原目标文件大?搞不明白,最后单个切片在emu上跑的时候时间也是很长,我用的也是你们的香山的emu,想请教下,你们跑spec2006的429测试用例单个切片时间一般是跑多久呢?谢谢。
from nemu.
Checkpoint 文件是对系统状态的保存,包括体系结构状态和内存数据等等,文件大小大于程序本身的大小是正常的。
单个 checkpoint 在emu上的执行时间和 1)emu的仿真速度 2)checkpoint 的区间大小有关。
如:一个 checkpoint 的区间大小为 20,000,000条指令,测试程序的IPC为 2,emu仿真速度为 2000/s。最终需要仿真
20000000 * 2 / 2 / 2000 = 10000 s = 2.7h。
对于香山这么大规模的处理器核,仿真速度跑到2000/s也是理想的,不同程序的不同片段的IPC也有差别。我们跑 Checkpoint 的时间一般接近这个时间。
from nemu.
Checkpoint 文件是对系统状态的保存,包括体系结构状态和内存数据等等,文件大小大于程序本身的大小是正常的。 单个 checkpoint 在emu上的执行时间和 1)emu的仿真速度 2)checkpoint 的区间大小有关。 如:一个 checkpoint 的区间大小为 20,000,000条指令,测试程序的IPC为 2,emu仿真速度为 2000/s。最终需要仿真 20000000 * 2 / 2 / 2000 = 10000 s = 2.7h。 对于香山这么大规模的处理器核,仿真速度跑到2000/s也是理想的,不同程序的不同片段的IPC也有差别。我们跑 Checkpoint 的时间一般接近这个时间。
1、
乘以2是指的预热的20000000条指令吗?
2、你们是怎么从每个切片的指令周期数估算整个workload总的指令周期数(cycles)呢?还是不太明白,毕竟每个切片才20000000条指令,是每个切片的指令周期数(cycles)的加权和,再乘以有多少个interval吗?毕竟一个切片是代表一类interval区间的数据吧,你把所有切片的所执行的指令周期数(cycles)加权和加到一起也不能一个workload全部的执行指令周期数(cycles)吧?
from nemu.
Checkpoint 文件是对系统状态的保存,包括体系结构状态和内存数据等等,文件大小大于程序本身的大小是正常的。 单个 checkpoint 在emu上的执行时间和 1)emu的仿真速度 2)checkpoint 的区间大小有关。 如:一个 checkpoint 的区间大小为 20,000,000条指令,测试程序的IPC为 2,emu仿真速度为 2000/s。最终需要仿真 20000000 * 2 / 2 / 2000 = 10000 s = 2.7h。 对于香山这么大规模的处理器核,仿真速度跑到2000/s也是理想的,不同程序的不同片段的IPC也有差别。我们跑 Checkpoint 的时间一般接近这个时间。
1、
乘以2是指的预热的20000000条指令吗?
2、你们是怎么从每个切片的指令周期数估算整个workload总的指令周期数(cycles)呢?还是不太明白,毕竟每个切片才20000000条指令,是每个切片的指令周期数(cycles)的加权和,再乘以有多少个interval吗?毕竟一个切片是代表一类interval区间的数据吧,你把所有切片的所执行的指令周期数(cycles)加权和加到一起也不能一个workload全部的执行指令周期数(cycles)吧?
您可以参考香山手册:https://xiangshan-doc.readthedocs.io/zh_CN/latest/tools/simpoint/
from nemu.
是这样的我们目前执行emu的运行指令是。/emu -i XXX.gz -I 19900000 -W 9900000 。当中-W我们看了下是预热的指令数,为什么我们执行完了后最后统计的指令数和指令周期数依然将预热部分算进去了,我们查看了源码,emu最后运行时应该是先执行预热部分,预热执行完成后再进行相关寄存器的重置,好像最后结果看相关寄存器没有重置成功?我们最后的统计结果如图,谢谢。
from nemu.
Related Issues (20)
- Tracing分支的切片在香山的 emu 上运行出错 HOT 18
- tracing分支 在生成最后的切片不会停止 HOT 3
- 关于spec06 int部分测试用例分数与发布分数对不上的问题
- RISCV指令在NEMU-master分支运算结果错误(jalr/ebreak&c.ebreak/原子比大小指令) HOT 1
- oracle_trace分支在编译用于DiffTest的参考模型版本时与遇到error HOT 1
- master上config/riscv64-xs_defconfig中需要使能CONFIG_SHARE HOT 2
- protoc/protobuf版本不匹配 HOT 1
- 关于fnmadd.s指令在溢出边界条件时运算错误 HOT 3
- csrw对于0x5c0-0x5FF寄存器写异常 HOT 1
- 《riscv64 debian镜像制作》不能进入镜像
- 尝试用nemu启动 debian时,报错 Timed out waiting for device dev-hvc0.device
- checkpointing运行后,文件夹为空,加了dont-skip-boot以后,checkpoint遇到crash
- NEMU在开启性能优化选项后,执行EBREAK指令时出现段错误
- master 分支编译的 NEMU 链接出错 HOT 1
- 关于使用NEMU-tracing生成baremetal app checkpoint HOT 3
- Compile error when turn on CONFIG_DEBUG
- NEMU cpt-bk分支运行中,参数选择的问题 HOT 14
- SPEC CPU 2006 分数 切片跑分 估值 问题 HOT 10
- Nemu CPU模拟器统计运行程序总指令的问题。 HOT 1
- NEMU Tracing 分支 相对 cpt-bk 分支 profiling的算法差异 及 tracing的意涵是什么 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from nemu.