Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
nexus-am
提交
1b3e4008
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,发现更多精彩内容 >>
提交
1b3e4008
编写于
7月 07, 2022
作者:
X
XiChen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
hpm: add parse_encoding
上级
f99729f8
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
91 addition
and
5 deletion
+91
-5
apps/hpmdriver/Readme.md
apps/hpmdriver/Readme.md
+6
-5
apps/hpmdriver/events.h
apps/hpmdriver/events.h
+4
-0
apps/hpmdriver/parse_Evecoding.py
apps/hpmdriver/parse_Evecoding.py
+81
-0
未找到文件。
apps/hpmdriver/Readme.md
浏览文件 @
1b3e4008
...
...
@@ -4,12 +4,13 @@
 
 
[
nexus-am仓库地址
](
https://github.com/OpenXiangShan/nexus-am/tree/southlake
)
,采用
`southlake`
分支。用法见
[
开发环境文档
](
https://xiangshan-doc.readthedocs.io/zh_CN/latest/tools/xsenv/
)
```
shell
nexus-am/apps/hpmdriver
-
Makefile
-
events.h :性能事件编码表
-
hpmdriver.h :头文件,包含性能时间寄存器结构和各类功能
函数
-
hpmdriver.c :主函数
├── Makefile
├── events.h :性能事件编码表
├── hpmdriver.h :头文件,包含性能时间寄存器结构和各类功能函数
├── hpmdriver.c :主
函数
```
 
 
采用
`make ARCH=riscv64-xs-southlake`
编译,可以采用如下指令编译+运行
...
...
apps/hpmdriver/events.h
浏览文件 @
1b3e4008
#ifndef __EVENTS_H__
#define __EVENTS_H__
// due to the probable performance event change
// it is recommeded to parse_encoding again
// to update this event_encoding
#define noEvent 0
#define Frontend_noEvent 0
#define Frontend_frontendFlush 1
...
...
apps/hpmdriver/parse_Evecoding.py
0 → 100644
浏览文件 @
1b3e4008
import
os
import
re
xs
=
os
.
environ
[
'NOOP_HOME'
]
am
=
os
.
environ
[
'AM_HOME'
]
assert
(
xs
)
assert
(
am
)
# grep -r -n generatePerfEvent src > generatePerfEventlog
generatePerfEventlog
=
os
.
path
.
join
(
xs
,
'generatePerfEvent_log'
)
# make emu EMU_THREADS=8 -j24 > generate_log 2>&1 &
generate_log
=
os
.
path
.
join
(
xs
,
'generate_log'
)
events_header
=
os
.
path
.
join
(
am
,
'apps/hpmdriver/events.h'
)
# open src file that has perfEvents and parse
def
parse_events_src
():
with
open
(
generatePerfEventlog
,
'r'
)
as
f
:
c
=
f
.
read
()
regexp
=
'(.*scala):'
paths
=
re
.
findall
(
regexp
,
c
)
all_events
=
[]
for
path
in
paths
:
module
=
path
.
split
(
'/'
)[
-
1
].
split
(
'.'
)[
0
]
with
open
(
os
.
path
.
join
(
xs
,
path
),
'r'
)
as
f
:
c
=
f
.
read
()
# the following is to match content in Seq()
pf
=
'val perfEvents = Seq'
st
=
c
.
find
(
pf
)
if
st
==
-
1
:
continue
st
=
st
+
len
(
pf
)
cnt
=
0
for
i
in
range
(
10000
):
ch
=
c
[
st
+
i
]
if
ch
==
'('
:
cnt
+=
1
elif
ch
==
')'
:
cnt
-=
1
if
cnt
==
0
:
content
=
c
[
st
:
st
+
i
+
1
]
break
# turn Seq(...) to (module, name, signal, coding)
for
eve
in
re
.
findall
(
r
'\("(.*)", (.*)\),'
,
content
):
name
=
eve
[
0
].
strip
()
signal
=
eve
[
1
].
strip
()
# search for coding in generate_log
with
open
(
generate_log
,
'r'
)
as
f
:
g
=
f
.
read
()
regexp
=
f
'\((\w+) perfEvents Set,(
{
name
}
)\s*,(.+),(\d+)'
matches
=
re
.
findall
(
regexp
,
g
)
coding
=
'NA'
block
=
'NA'
if
len
(
matches
)
==
1
:
coding
=
matches
[
0
][
3
]
block
=
matches
[
0
][
0
]
elif
len
(
matches
)
>
1
:
coding
=
','
.
join
([
x
[
3
]
for
x
in
matches
])
block
=
matches
[
0
][
0
]
all_events
.
append
((
block
,
module
,
name
,
signal
,
coding
))
for
event
in
all_events
:
print
(
'@'
.
join
([
x
for
x
in
event
]))
# use excel to export this, split = '@'
def
parse_encoding
():
with
open
(
generate_log
,
'r'
)
as
f
:
c
=
f
.
read
()
regexp
=
'\((\w+) perfEvents Set,(\w+)\s*,(.+),(\d+)'
matches
=
re
.
findall
(
regexp
,
c
)
for
match
in
matches
:
block
=
match
[
0
]
name
=
match
[
1
]
coding
=
match
[
3
]
print
(
f
'#define
{
block
}
_
{
name
}
{
coding
}
'
)
if
__name__
==
'__main__'
:
parse_events_src
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录