LLVM-MCA: Install&RunTests
github
https://github.com/llvm/llvm-project/tree/main/llvm/tools/llvm-mca
Quick Start
安装
下载可执行文件上传服务器,解压
安装遇到的问题
- cannot find libtinfo.so.5
- sudo apt install libncurses5
- ln -s /usr/lib/libncursesw.so.6 /usr/lib/libtinfo.so.5 或者类似的 ln -s /usr/lib/libncurses.so.5 /usr/lib/libtinfo.so.5
- 在/snap/core下找到了,但是这是什么目录?是之前Ubuntu的包管理工具,但是已经不用了。
从源码安装
node5
由于之后要写代码的,还是从头安装更好。
1 | cd llvm-project |
kunpeng
1 | cmake -S llvm -B build -G "Unix Makefiles" -DLLVM_ENABLE_PROJECTS=all -DCMAKE_INSTALL_PREFIX="~/Install/llvm" -DCMAKE_BUILD_TYPE=Debug -DLLVM_ENABLE_ASSERTIONS=On |
error
1 | g++: error: unrecognized command line option ‘-mllvm’ |
change
1 | cmake -S llvm -B build -G "Unix Makefiles" -DLLVM_ENABLE_PROJECTS="clang;llvm-mca" -DCMAKE_INSTALL_PREFIX="~/Install/llvm" -DLLVM_TARGETS_TO_BUILD=AArch64 -DCMAKE_BUILD_TYPE=Debug -DLLVM_ENABLE_ASSERTIONS=On |
使用
1 | clang foo.c -O2 -target x86_64-unknown-unknown -S -o - | llvm-mca -mcpu=btver2 |
由于不是X86,llc --version
查看到target是 aarch64-unknown-linux-gnu
1 | clang /home/shaojiemike/Download/llvm-project-main/lldb/test/API/lang/c/forward/foo.c -O2 -target aarch64-unknown-linux-gnu -S -o -|llvm-mca -timeline -show-encoding -all-stats -all-views |
生成汇编代码,并默认管道到llvm-mca,并开启所有输出。
可以看出是用TSV110Unit的port,默认cpu是tsv110
名词解释
ALU/BRU
算数逻辑单元 ALU 负责处理整数运算指令. 跳转处理单元BRU 负责处理跳转指令. BRU 可以与 ALU 合并, 复用 ALU 的逻辑来计算跳转指令的条件和跳转地址, 也可以作为一个单独的功能单元接入到流水线中.
MDU
乘除法单元 MDU (mult-divide unit)
需要进一步的研究学习
- llvm-mca微指令怎么实现的,怎么把汇编变成微指令
- 在view里加memory的实现
- 考虑了cache命中等影响 https://github.com/andreas-abel/uiCA uops
- 鲲鹏架构 https://bbs.huaweicloud.com/community/usersnew/id_1513665626477516
遇到的问题
llvm-mca -mcpu=help
竟然会卡住,不知道为什么- 所以说是华为已经写了一个叫tsv110的,实现2个功能?
开题缘由、总结、反思、吐槽~~
参考文献
无样例输出
1 | Iterations: 100 |
LLVM-MCA: Install&RunTests
http://icarus.shaojiemike.top/2021/09/15/Work/HPC/llvm-mca/LLVM-mca2/