- make
- git
- g++
- python
git clone https://github.com/yhzhoucs/test-automation.git
chmod +x prepare.sh
./prepare.sh
这个脚本会拉取 ligra 的代码,执行 patch 修改它,最后编译出可执行文件
可以修改 prepare.sh 脚本中的 BUILD_THREADS_NUM
来控制编译的线程数
进 scripts/autorun.py 中修改最上方的配置
python scripts/autorun.py
进 logs 目录查看执行结果
# 查看命令使用方法
python scripts/gen.py -h
# 生成一个 rmat18 图,其中 a,b,c 分别为 0.77, 0.04, 0.02
# 输出到 temp/my-rmat-18 文件,使用 10 个并发线程
python scripts/gen.py 18 0.77 0.04 0.02 -o temp/my-rmat-18 -t 10
# 使用默认位置(输出到 ./rMat_18),默认线程(1个)
python scripts/gen.py 18 0.77 0.04 0.02
位于 converter 目录下,可实现 模拟器格式、边表格式、 Ligra 格式 三者之间的相互转化
- cmake 3.20.0 及以上
- ninja 【可选】
- g++10 及以上
首先写你的 CMakeUserPresets.json 文件
可参考:
{
"version": 2,
"configurePresets": [
{
"name": "x64-release",
"displayName": "x64 Release",
"description": "build for x64 arch",
"inherits": "ci-ninja",
"architecture": {
"value": "x64",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_C_COMPILER": "$env{HOME}/local/bin/gcc",
"CMAKE_CXX_COMPILER": "$env{HOME}/local/bin/g++"
}
}
],
"buildPresets": [
{
"name": "converter",
"configurePreset": "x64-release",
"targets": ["converter"]
}
]
}
P.S. 如果系统里装有 gcc/g++ ,那么将下面两行删去后一般就能正常运行
"CMAKE_C_COMPILER": "$env{HOME}/local/bin/gcc",
"CMAKE_CXX_COMPILER": "$env{HOME}/local/bin/g++"
P.S. 如果不想用 Ninja 建构,你也可以指定如 Unix Makefiles 之类的构建器
{
"name": "x64-release",
"displayName": "x64 Release",
"description": "build for x64 arch",
"inherits": "ci-base",
"generator": "Unix Makefiles",
"architecture": {
"value": "x64",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
}
}
然后就可以使用 Presets 编译项目了:
# 在 convert 目录下
cmake --list-presets
# 查看 build preset
cmake --list-presets build
# 配置 cmake
cmake --preset <preset-name>
# 编译
cmake --build --preset <preset-name>
# 如果是用上面提供的 CMakeUserPresets.json
# 那么运行的命令依次为
cmake --preset x64-release
cmake --build --preset converter
或者不使用 CMakePresets ,而是用 CMake 命令构建:
# 在 convert 目录下
cmake -S . -B build -G "Ninja Multi-Config" # 使用 Ninja
# cmake -S . -B build -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release # 使用 cmake
cmake --build build --config "Release" # 使用 Ninja Multi-Config 配置
执行 converter 并输入参数,格式如下:
converter <mode> [-s] -i <file1[,file2]> -o <file1[,file2]>
converter <mode> [-s] -i <file1> [-i file2] -o <file1> [-o file2]
converter <mode> [-s] --input <file1[,file2]> --output <file1[,file2]>
mode 为转换模式,有下面几个选择
e2l
:边表到 Ligrae2s
:边表到模拟器,此时 -o 要指定两个文件名,前一个是偏移,后一个是边l2e
:Ligra 到边表l2s
:Ligra 到模拟器,同样 -o 要指定两个文件名s2e
:模拟器到边表,此时 -i 要指定两个文件名,前一个是偏移,后一个是边s2l
:模拟器到 Ligra ,同样 -i 要指定两个文件名
如果指定 -s
那么对于每条边,添加它的反向边
# 查看使用指南
converter --help
# 下面是几个示例
# 将 Ligra 格式转化为模拟器格式
# -o 后面的两个文件名间不能有空格,用逗号隔开
./converter l2s -i ./dataset/ligra.txt -o ./output/row_ptr,./output/column
# 等效于
./converter l2s -i ./dataset/ligra.txt -o ./output/row_ptr -o ./output/column
# 将边表格式转化为 Ligra 格式
./converter e2l -i ./dataset/soc-Slashdot0811.txt -o ./output/ligra.txt