xref: /XiangShan/scripts/top-down/README.md (revision eb163ef08fc5ac1da1f32d948699bd6de053e444)
1*eb163ef0SHaojin Tang# top-down 分析工具
2*eb163ef0SHaojin Tang
3*eb163ef0SHaojin Tang本仓库集成了 top-down 分析所需要的工具。
4*eb163ef0SHaojin Tang
5*eb163ef0SHaojin Tang## 运行仿真
6*eb163ef0SHaojin Tang
7*eb163ef0SHaojin Tang1. 将仿真文件拷贝至 `emus` 目录下,如 `emus/emu_20220316_0`
8*eb163ef0SHaojin Tang2. 将要运行的测试名称写在 `file.f` 中,具体格式可以参考已有文件(目前最大并行度设置为 16 个 emus,以 fifo 顺序运行 `file.f` 中的程序,因此可按需调整该文件的内容)
9*eb163ef0SHaojin Tang3. 在 tmux/screen 中运行 `./run_emu.sh <emu>`,或是 `nohup ./run_emu.sh <emu>`,以忽略退出终端时的 hup 信号
10*eb163ef0SHaojin Tang4. 运行结束后,将自动进行下列操作
11*eb163ef0SHaojin Tang
12*eb163ef0SHaojin Tang### 提取性能计数器
13*eb163ef0SHaojin Tang
14*eb163ef0SHaojin Tang1. 性能计数器位于 `${spec_name}/${emu}.dir` 中,如 `spec06_rv64gcb_o2_20m/emu_20220316_0.dir`
15*eb163ef0SHaojin Tang2. 性能计数器包含 warmup 过程的结果,因此需要先删去每个文件的前半部分,脚本会自动在 `${spec_name}/${emu}.dir/csv` 生成中间文件
16*eb163ef0SHaojin Tang3. 提取 csv 格式的 top-down 性能计数器
17*eb163ef0SHaojin Tang4. 删除中间文件
18*eb163ef0SHaojin Tang
19*eb163ef0SHaojin Tang```bash
20*eb163ef0SHaojin Tangsed "1,$(($(cat ${dir}/${spec_name}/${emu}.dir/${name}.log | wc -l) / 2))d" ${dir}/${spec_name}/${emu}.dir/${name}.log >${dir}/${spec_name}/${emu}.dir/csv/${name}.log
21*eb163ef0SHaojin Tang${dir}/top-down.sh ${dir}/${spec_name}/${emu}.dir/csv/${name}.log
22*eb163ef0SHaojin Tangrm ${dir}/${spec_name}/${emu}.dir/csv/${name}.log
23*eb163ef0SHaojin Tang```
24*eb163ef0SHaojin Tang
25*eb163ef0SHaojin Tang### 生成图表
26*eb163ef0SHaojin Tang
27*eb163ef0SHaojin Tang生成图表使用的是 `top_down.py`,其会被 `run_emu.sh` 自动调用:
28*eb163ef0SHaojin Tang
29*eb163ef0SHaojin Tang```bash
30*eb163ef0SHaojin Tang$python ${dir}/top_down.py ${name} ${dir}/${spec_name}/${emu}.dir ${emu} # python ./top_down.py title dir suffix
31*eb163ef0SHaojin Tang```
32*eb163ef0SHaojin Tang
33*eb163ef0SHaojin Tang`top_down.py` 中需要关注的代码如下:
34*eb163ef0SHaojin Tang
35*eb163ef0SHaojin Tang```python
36*eb163ef0SHaojin Tang# top_down.py
37*eb163ef0SHaojin Tang(
38*eb163ef0SHaojin Tang    Page(page_title=title, layout=Page.SimplePageLayout)
39*eb163ef0SHaojin Tang    .add(process_one(directory + "/csv/" + title + ".log.csv", title + "_" + suffix))
40*eb163ef0SHaojin Tang    .render(directory + "/html/" + title + ".html"))
41*eb163ef0SHaojin Tang```
42*eb163ef0SHaojin Tang
43*eb163ef0SHaojin Tang每一个以 `.add` 开头的行代表了一个子图,可以按需增删这些行。
44