Parsec+Gem5环境搭建与使用指南

Parsec+Gem5环境搭建与使用指南PARSEC 的编译运行 运行的 PARSEC3 的版本为 3 0 beta 其中 PARSEC3 包括以下 13 种 benchmark blackscholes bodytrack canneal dedup facesim ferret

大家好,我是讯享网,很高兴认识大家。

PARSEC的编译运行

查看说明文档

数据集规模

测试数据集分为以下7种:
test: Minimal input to verify that programs are executable.
simdev: Very small input which causes code execution comparable to a typical input for this program. Intended for microarchitectural simulator development.
simsmall: Small input for performance measurements with microarchitectural simulators.
simmedium: Medium-sized input for performance measurements with microarchitectural simulators.
simlarge: Large-sized input for performance measurements with microarchitectural simulators. Execution time about 10 to 20 seconds.
native: Very large input intended for large-scale experiments on real machines.

编译

编译特定项目如blackscholes
./bin/parsecmgmt –a build –p [package]
eg: ./bin/parsecmgmt –a build –p blackscholes

编译时-c选择编译选项,默认为gcc编译:
./bin/parsecmgmt –a build –p parse -c gcc-hooks
在这里插入图片描述
讯享网
静态链接
方式1:使用static-patch.diff补丁
方式2:修改config/gcc.bldconf 的默认编译文件gcc.bldconf
在LDFLAG后加-static
运行
-a后加run,-i后加测试数据集规模,-n后加数字表示线程数
eg: ./bin/parsecmgmt -a run -p ferret -i simsmall -n 4

在每个编译生成的package的目录里包含以下内容,其中编译生成的可执行文件在各个benchmark的相应inst/bin 目录里,inputs目录里为各个测试集的数据,run目录里为运行后的输出文件。
在这里插入图片描述

删除
删除已经编译的文件:
./bin/parsecmgmt -a fullclean -p all

删除特定项目:
./bin/parsecmgmt -a uninstall -p [package]
eg: ./bin/parsecmgmt -a uninstall -p blackscholes

遇到问题

1./usr/bin/ld: cannot find -lstdc++ 缺少libstdc++.a的静态库文件,将该文件添加到/usr/lib/相应目录即可。
在这里插入图片描述
2. blackscholes编译遇到问题:/usr/bin/m4:No such file or directory,表示该编译环境缺少m4

m4安装:

  1. 解压
    tar -zxvf m4-1.4.18.tar.gz
  2. 配置
    ./configure --prefix=/usr/
  3. 编译
    make
  4. 安装
    make install
    其中make编译遇到问题:freadahead.c: In function ‘freadahead’:
    freadahead.c:92:3: error: #error “Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib.”
    #error “Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib.”
    在这里插入图片描述

在对应文件目录下:
sed -i ‘s/IO_ftrylockfile/IO_EOF_SEEN/’ lib/*.c
echo “#define _IO_IN_BACKUP 0x100” >> lib/stdio-impl.h
问题解决,重新make,正常编译。

  1. raytrace编译遇到问题:
    configure: error: X11 development libraries needed for xlib driver
    这是因为缺少X11相关的图像库文件
    解决方法: yum install libX11-devel

接下来遇到问题:
Package ‘xext’, required by ‘virtual:world’, not found
在这里插入图片描述

解决方法:yum install libXext-devel

接下来遇到问题:
Package ‘xt’, required by ‘virtual:world’, not found
在这里插入图片描述

解决方法:yum install libXt-devel

接下来遇到问题:Package ‘xmu’, required by ‘virtual:world’, not found
Package ‘xi’, required by ‘virtual:world’, not found
解决方法:yum install libXmu-devel
yum install libXi-devel
raytrace静态链接时遇到如cannot find –lXmu等以下问题,缺少相应的静态库文件。
在这里插入图片描述

  1. ferret编译遇到问题:’HUGE’ undeclared,该变量没有被定义。
    在这里插入图片描述

参考https://github.com/cirosantilli/parsec-benchmark,
将以下相关文件中的HUGE改为 HUGE_VAL:
在这里插入图片描述

接下来遇到问题cannot find -lrt等,需要把对应静态库文件librt.a、libstdc++.a等放入/usr/lib/

在这里插入图片描述

5.swaptions运行时报错Error: Fewer swaptions than threads
在这里插入图片描述

该问题由于脚本错误导致的,运行swaptions的test测试集正确指令为:
swaptions -ns 1 -sm 5 -nt 1
最后一位表示运行线程数,线程数要小于第一个参数 否则会报错无法运行。

  1. vips编译遇到问题:
    configure: error: * Working zlib library and headers not found *
    在这里插入图片描述

该问题由于zlib静态链接引起的,重新使用动态链接编译zlib,vips可以正常编译通过。

若遇到undefined reference to `fcntl64’的问题,该问题由于libstdc++.a静态库版本问题引起冲突,删除错误静态库编译正常
在这里插入图片描述

GEM5+PARSEC

1.使用gem工具将镜像挂载到mnt目录:
./util/gem5img.py mount …/…/fs_images/disks/aarch64-ubuntu-trusty-headless.img /home/myw/mnt/
2.将PARSEC生成的Pkg可执行文件放入目录parsec/bin,输入文件放入parsec/inputs
3.取消挂载:
umount /home/myw/mnt/
在这里插入图片描述
4.运行gem5:
export M5_PATH=/home/z00/fs-image/

./build/ARM/gem5.opt configs/example/fs.py -n 1 --kernel=/home/z00/linux/vmlinux --machine-type=VExpress_GEM5_V1 --dtb-file=armv8_gem5_v1_1cpu.dtb --disk-image=aarch64-ubuntu-trusty-headless.img --caches --bootloader ./system/arm/bootloader/arm64/boot.arm64

6.系统起来后使用/sbin/m5 checkpoint设置断点,在下次启动时直接从checkpoint保存点开始启动,-r后参数表示启动的checkpoint位置,–checkpoint-dir用于设置断点目录位置。
例如:
./build/ARM/gem5.opt configs/example/fs.py -n 2 --kernel=/home/z00/linux/vmlinux --machine-type=VExpress_GEM5_V1 --dtb-file=armv8_gem5_v1_2cpu.dtb --disk-image=/home/myw/fs_images/disks/aarch64-ubuntu-trusty-headless.img -r 1 --caches --bootloader ./system/arm/bootloader/arm64/boot.arm64 --ruby --num-dirs=1 --network=simple --topology=Crossbar --cpu-type=DerivO3CPU --checkpoint-dir=m5out/checkpoint --script=./path/run.rcS
其中run.rcS为从断点启动系统后运行脚本

run the facesim benchmark

cd bin
/sbin/m5 dumpstats
/sbin/m5 resetstats
time ./facesim -timing -threads 4
echo “facesim Done 😄”
/sbin/m5 exit
/sbin/m5 exit

8.m5常用工具
usage: /sbin/m5 exit [delay]
/sbin/m5 resetstats [delay [period]] 复位统计信息
/sbin/m5 dumpstats [delay [period]] 打印统计信息
/sbin/m5 checkpoint [delay [period]] 打断点

遇到问题:
1.遇到如libstdc++.so.6: version ‘GLIBCXX_3.4.21’ not found
libgomp.so.1: version ‘GOMP_4.0’ not found
该问题由于编译环境和运行环境的差异引起的,运行环境缺少相应版本的动态库文件。
在这里插入图片描述

解决方案
1 动态库替换添加
1)sudo cp /usr/local/lib64/libstdc++.so.6.0.20 /usr/lib64 //复制文件
2)sudo rm -rf /usr/lib64/libstdc++.so.6 //删除旧文件
3)sudo ln -s /usr/lib64/libstdc++.so.6.0.20 /usr/lib64/libstdc++.so.6 //创建新连接

  1. libstdc++.so.6: version `GLIBCXX_3.4.20’ not found,此问题由于编译器版本不匹配导致的,需将g++和gcc升级到4.9版本以上,或替换相应库文件
    在这里插入图片描述
    strings /usr/lib/libstdc++.so.6 |grep GLIBCXX 可查看当前支持的GLIBCXX版本

3.-bash: ./blackscholes: Permission denied 表示没有运行的权限,ll查看权限
在这里插入图片描述
命令行输入chmod u+x blackscholes改变权限
在这里插入图片描述
4. facesim运行时需要进入input文件所在目录,否则会运行失败
在这里插入图片描述
5.使用gem5挂载工具失败的问题
在这里插入图片描述
losetup -d /dev/loop1
losetup -o 32256 /dev/loop1 /home/mwx/disk/aarch64-ubuntu-trusty-headless.img
mount /dev/loop1 /home/mwx/mnt/

7.x264运行遇到问题:double free or corruption (!prev)(尚未解决)
在这里插入图片描述
PARSEC_CPU_NUM=4 PARSEC_CPU_BASE=16

小讯
上一篇 2025-01-06 19:37
下一篇 2025-02-22 22:32

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/58392.html