实验纪录——GEM5+McPAT
-
gem5安装
#gem5最新下载:http://repo.gem5.org/ (第二个) #稳定版的gem5,github地址:https://github.com/EmilyBragg/mcpat-gem5 $sudo apt-get install g++ $sudo apt-get install scons $sudo apt-get install swig $sudo apt-get install zlib1g-dev $sudo apt-get install python-dev $sudo apt-get install m4 $sudo apt-get install libprotobuf-dev python-protobuf protobuf-compiler libgoogle-perftools-dev $sudo apt-get install python-pydot
-
gem5使用
- scons build/(目标架构名称)/gem5.opt,例如X86, ALPHA,ARM
- 测试:./build/目标架构名称/gem5.opt configs/example/se.py -c tests/test-progs/hello/bin/目标架构名称/linux/hello
- ./build/目标架构名称/gem5.opt configs/example/se.py -h 可以查看命令行参数
-
gem5遇到的问题:
-
使用scons编译生成X86的opt时,会出现defined but not used [-Werror=unused-variable]的问题。解决:
1. 使用grep -rn "Werror" 找到 src/SConscript:162: def __init__(self, source, Werror=True, swig=False, **guards): 2. 此时将True改为False即可
-
使用gem5进行测试的代码必须是静态编译之后的可执行文件,例如gcc hello.c -o hello -static
-
测试代码的输入问题
- 当测试代码的输入是从命令行输入时,使用-o “输入参数”
- 当测试代码使用的cin/scanf的输入时,使用–input “文件”,将标准输入定位到文件中。–output是将代码中的输出重定向到文件中
- 示例
./build/X86/gem5.opt configs/example/se.py --cpu-type=detailed --caches --l2cache -c qsort/bin/qsort_O2 -o "qsort/input_small.dat" --output="qsort_O2.out"
-
-
gem5的输出文件到mcpat的输入文件的转换
-
两者之间的转换过程主要是将mcpat提供的模板文件中未知参数替换为gem5的输出文件中提供的参数
-
转换脚本:git clone https://bitbucket.org/dskhudia/gem5tomcpat.git
-
输入文件:stats.txt config.json template-xeon.xml(mcpat提供的模板文件,也可能是其它的)
-
输出文件:mcpat-out.xml文件,可用于mcpat使用
python ../GEM5ToMcPAT.py ./input/stats.txt ./input/config.json ../template-xeon.xml
-
可能会出现的问题:stats.txt文件中包括多个统计信息,因此需要先将其拆分为多个单个的文件,然后再使用,拆分的依据是文件中的:“---------- Begin Simulation Statistics ----------” ,拆分使用python脚本
-
拆分之后的输出文件为多个number.txt,此时需要将这些文件逐一转换,shell脚本为:输出文件为number.xml,用于mcpat使用
# import re # coding=gbk f1 = file("stats.txt") ss = "---------- Begin Simulation Statistics ----------" sr = f1.read().split(ss) f1.close() for i in range(len(sr)): f = file("%d.txt" % i, "w") f.write(sr[i] if i == 0 else ss + sr[i]) f.close()
#!/bin/bash mkdir output i=1 for i in {1..1} do python ../GEM5ToMcPAT.py ./input/$i.txt ./input/config.json ../template-xeon.xml mv mcpat-out.xml ./output/$i.xml let i=i+1 done
-
-
McPAT的使用
-
McPAT文件也可以从github中下载:https://github.com/EmilyBragg/mcpat-gem5
-
使用make命令,在McPAT文件中编译,如果出错,解决为:
sudo apt-get install gcc-multilib sudo apt-get install g++-multilib
-
转换过程:
#使用mcpat进行模拟,得到结果在output.log中 ./mcpat -infile input.xml -print_level 5 > output.log #如果是多个需要模拟的文件,希望将结果输出到一起,使用cat命令 cat output_i.log >>total.log
-
-
hotspot使用
- https://github.com/copies/hotspot hotspot v6.0的代码
- 输入文件是mcpat统计到的各个部件的动态功耗文件,通过hotspot可以得到各个部件的温度值。hotspot需要输入版图文件,默认的是ev6.flp,是根据alpha21264绘制的。对于自己的需求,可以根据mcpat生成的log文件中各个部件的面积来计算每个部件的长,宽和坐标,自己规划版图
#mcpat.ptrace文件为mcpat输出文件中,提取出的每个部件的名称和动态功耗,第一行为部件名称,之后每一行对应着动态功耗文件 ./hotspot -c hotspot.config -f ev6.flp -p mcpat.ptrace -o output.ttrace #输出文件为output.ttrace为各个部件的瞬时的温度文件 ./hotspot -c hotspot.config -f ev6.flp -p mcpat.ptrace -steady_file output.steady #输出文件为output.steady为各个部件的稳态时的温度文件 ./hotspot -c hotspot.config -f ev6.flp -p mcpat.ptrace -steady_file output.steady -model_type grid -grid_steady_file output.grid.steady ./grid_thermal_map.pl ev6.flp output.grid.steady >output.svg #svg文件为矢量图,为最后绘制的温度版图
参考:http://blog.csdn.net/caoyahong114/article/details/50955732