作者shane87123 (阳光大肥宅)
看板CompilerDev
标题[讨论] 分享 test-suite 建置方法与问题发问
时间Tue Mar 15 01:10:58 2022
最近自己写了优化演算法,
不过是针对特定情况的 pattern 才会进行优化。
然而我知道 compiler 会有 Phase Ordering Problem,
我想测定应用了我的优化演算法的 O1、O2、O3 与原本的 O1、O2、O3 跑在一个公信的
benchmark 上会不会有问题
(理论上不会,除非 benchmark 的 cases 有符合我的 pattern)
目前是锁定使用 LLVM 的 test-suite 这个专案,
不过我研究半天,他有几个问题似乎不太符合我的需求:
1. Build 很久
2. 跑很久:大多数的 cases 应该都不会符合我的 pattern,也就是说与原本的 O1、O2、O3 无异,
但却还是要跑一次,我在想有没有办法能够去 diff LLVM IR
3. 我每一次修正我的优化器似乎都要 Build 一次:
这部分不知道是不是我有误会,我认为他是用 llvm 去编译 cases,再去运行跑分,
所以只要我优化器有做变动,是不是就要整个重新build?
打到这边我突然想到
他似乎是利用 llvm-lit 去做 testing 的,所以理论上我优化器重新 build 後,
不用重新build test-suite 直接用 llvm-lit 跑就可以得到重新编译後的优化器效能?
我对 llvm-lit 这块没有研究很透彻,还请大家多多解答、讨论
另外,这边在编译 test-suite 的时候有遇到问题,这边跟大家分享一下解法
照着官方文件(
https://llvm.org/docs/TestSuiteGuide.html)去 cmake 时,
会有某个程式码片段 for (auto _:status)会出错,原因是他居然没有用 -std=c++11 这个 flag 去编译
分享一下我 cmake 法:
首先,先创建要 build 的资料夹
mkdir test-suite-build
之後参考文件+版主说的 Ninja(真的快很多)
cd test-suite-build # 先到 build 的资料夹
cmake -G Ninja \
-DCMAKE_C_COMPILER=<llvm-project-path>/build/bin/clang \
-DCMAKE_CXX_COMPILER=<llvm-project-path>/build/bin/clang++ \
-DCMAKE_CXX_FLAG="-std=c++11" \
-C../test-suite/cmake/caches/O3.cmake \
../test-suite
快速使用就直接
cd test-suite-build
llvm-lit -v -j 1 -o results.json .
开始进行 benchmark,太久的话可以去挑选资料夹,如
llvm-lit -v -j 1 -o result.json MicroBenchmarks
若我要比较两个优化器的优缺与否,应该会是这样做(?):
<path-to-old-llvm-project>/build/bin/llvm-lit -v -j 1 -o original.json .
得到原本优化器的跑分
接下来
<path-to-new-llvm-project>/build/bin/llvm-lit -v -j 1 -o new.josn .
得到两份 json 档,再利用 compare.py 去比较跑分
test-suite/utils/compare.py original.json new.json
应该会是这样做,不确定正确与否,欢迎讨论!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.141.111.59 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/CompilerDev/M.1647277863.A.285.html
1F:推 jerry0715no1: lit -j1当然慢啊 开多一点吧 03/16 08:44
可是要去测试,不是应该开一个 thread 吗?
否则,开越多好像只是测到平行化程度(?
我其实不太知道如果要测试 compiler compile 出来的程式码品质如何
要开几个 core 才好
※ 编辑: shane87123 (118.160.253.115 台湾), 03/20/2022 12:29:26
2F:推 akasan: lit 只是跑测试的小工具而已,每次编译器有修改都要重新 b 03/20 17:05
3F:→ akasan: uild llvm testsuite 没错 03/20 17:05
4F:→ Lipraxde: 看很久没看出来到底是要跑测试还是跑 benchmark 03/22 12:48