Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
nexus-am
提交
f99729f8
N
nexus-am
项目概览
OpenXiangShan
/
nexus-am
大约 1 年 前同步成功
通知
2
Star
21
Fork
25
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
nexus-am
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f99729f8
编写于
7月 07, 2022
作者:
X
XiChen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
hpm: slight modification
上级
4ab7a3b5
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
13 addition
and
13 deletion
+13
-13
apps/hpmdriver/Readme.md
apps/hpmdriver/Readme.md
+9
-7
apps/hpmdriver/hpmdriver.c
apps/hpmdriver/hpmdriver.c
+3
-4
apps/hpmdriver/hpmdriver.h
apps/hpmdriver/hpmdriver.h
+1
-2
未找到文件。
apps/hpmdriver/Readme.md
浏览文件 @
f99729f8
...
...
@@ -2,7 +2,7 @@
## 环境
[
nexus-am仓库地址
](
https://github.com/OpenXiangShan/nexus-am/tree/southlake
)
,采用
`southlake`
分支。用法见
[
开发环境文档
](
https://xiangshan-doc.readthedocs.io/zh_CN/latest/tools/xsenv/
)
 
 
[
nexus-am仓库地址
](
https://github.com/OpenXiangShan/nexus-am/tree/southlake
)
,采用
`southlake`
分支。用法见
[
开发环境文档
](
https://xiangshan-doc.readthedocs.io/zh_CN/latest/tools/xsenv/
)
nexus-am/apps/hpmdriver
...
...
@@ -11,7 +11,7 @@ nexus-am/apps/hpmdriver
-
hpmdriver.h :头文件,包含性能时间寄存器结构和各类功能函数
-
hpmdriver.c :主函数
采用
`make ARCH=riscv64-xs-southlake`
编译,可以采用如下指令编译+运行
 
 
采用
`make ARCH=riscv64-xs-southlake`
编译,可以采用如下指令编译+运行
```
shell
make
ARCH
=
riscv64-xs-southlake
&&
$NOOP_HOME
/build/emu
--no-diff
-i
./build/
*
.bin 2>&1 |
tee
log | less
...
...
@@ -19,17 +19,17 @@ make ARCH=riscv64-xs-southlake && $NOOP_HOME/build/emu --no-diff -i ./build/*.bi
## 使用方法
向性能事件寄存器
`mhpmevent`
中写入
`希望统计的性能事件`
,以及
`多个性能事件之间的组合方式`
(可以采用头文件中的宏定义)。然后读取对应的
`mhpmcounter`
寄存器,即可获得计数值。
 
 
向性能事件寄存器
`mhpmevent`
中写入
`希望统计的性能事件`
,以及
`多个性能事件之间的组合方式`
(可以采用头文件中的宏定义)。然后读取对应的
`mhpmcounter`
寄存器,即可获得计数值。
mode域指定了
,统计该特权级下的性能事件。
 
 
mode域指定
,统计该特权级下的性能事件。
性能计数事件的组合方式:
 
 
性能计数事件的组合方式:
-
Event0
\<
Optype0
\>
Event1 = T1
-
Event2
\<
Optype1
\>
Event3 = T2
-
T1
\<
Optype2
\>
T2 = Result
**特别注意,性能事件必须用其对应的性能事件寄存器统计**
,具体见下表。因为各个Block的
`Hardware Performance Monitor`
只与对应范围的
`csr mhpmevent`
寄存器相连,所以只能利用对应范围的
`mhpmevent`
寄存器去统计。而且各个Block性能事件的编码均从0开始,如果没有利用正确的性能事件,则
会导致统计结果出错。
 
 
**特别注意,性能事件必须用其对应的性能事件寄存器统计**
,具体见下表。因为各个Block的
`Hardware Performance Monitor`
只与对应范围的
`csr mhpmevent`
寄存器相连,所以只能利用对应范围的
`mhpmevent`
寄存器去统计。而且各个Block性能事件的编码均从0开始,如果没有利用正确的
`mhpmevent`
寄存器,
会导致统计结果出错。
| 事件 | 对应的寄存器 |
| ------------- | ---- |
...
...
@@ -38,5 +38,7 @@ make ARCH=riscv64-xs-southlake && $NOOP_HOME/build/emu --no-diff -i ./build/*.bi
| MemBlock |
`mhpmevent19~26`
|
| 缓存 |
`mhpmevent27~31`
|
具体示例,可以参考
`hpmdriver.c`
 
 
提供了
`set_event_quad/set_evet_double/set_event_single`
来设置4个性能事件的组合/2个性能事件的组合/单个性能事件。
`se_cc`
设置性能事件并清除计数器。
`print_coutner`
打印计数器的值。
 
 
具体示例,可以参考
`hpmdriver.c`
apps/hpmdriver/hpmdriver.c
浏览文件 @
f99729f8
...
...
@@ -2,13 +2,13 @@
int
main
()
{
printf
(
"Hello, XiangShan!
\n
"
);
print
d
_csr
(
marchid
);
print
u
_csr
(
marchid
);
printx_csr
(
mcountinhibit
);
printx_csr
(
mcounteren
);
printx_csr
(
scounteren
);
print
d
_csr
(
mcycle
);
print
d
_csr
(
minstret
);
print
u
_csr
(
mcycle
);
print
u
_csr
(
minstret
);
se_cc_single
(
3
,
MODE_M
,
Frontend_frontendFlush
);
se_cc_single
(
11
,
MODE_M
,
CtrlBlock_decoder_waitInstr
);
...
...
@@ -20,7 +20,6 @@ int main() {
a
+=
a
+
i
;
}
printf
(
"%lu
\n
"
,
a
);
// *** tmp workload ***
print_event
(
3
);
print_counter
(
3
);
...
...
apps/hpmdriver/hpmdriver.h
浏览文件 @
f99729f8
...
...
@@ -44,6 +44,7 @@
#define clear_counter(id) csr_write(mhpmcounter##id, 0x0UL)
#define print_counter(id) printf("mhpmcounter%d: %lu\n", id, csr_read(mhpmcounter##id))
#define printd_csr(csr) printf(#csr": %ld\n", csr_read(csr))
#define printu_csr(csr) printf(#csr": %lu\n", csr_read(csr))
#define printx_csr(csr) printf(#csr": %lx\n", csr_read(csr))
#define set_event_quad(csr_id, mode, optype2, optype1, optype0, event3, event2, event1, event0) \
...
...
@@ -75,6 +76,4 @@
{set_event_single(csr_id, mode, event);clear_counter(csr_id);}
#endif
/* __HPMDRIVER_H_ */
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录