Gem5、Mcpat 和Hotspot 的联合仿真
⼀、Gem5
1、Gem5的安装
对于gem5的安装在下⾯这篇⽂章中已经有了描述,这⾥不再赘述。
2、使⽤Gem5运⾏benchmark ,得到相应的输出⽂件
这⾥我们选⽤全系统模式进⾏仿真,整篇⽂章中均以fft为例。
(1)修改gem5的配置⽂件
修改/cyh/gem5/gem5-stable/configs/common⽬录下的SysPaths.py⽂件,将dist的路径修改为我⾃⼰的,例如: path = [ ‘/dist/m5/system’, ‘/home/cyh/cyh/gem5/gem5-stable/dist’ ]
(2)将benchmark和相应的输⼊⽂件mount到/mnt下
(3)将benchmark装载进磁盘后,⼀定要解除挂载
(4)在⽬录/home/cyh/cyh/gem5/gem5-stable/configs/boot下,添加每个benchmark的rcS⽂件。例如:S的内容如下
(5)运⾏benchmark,执⾏下列的命令
注意:这⾥的输出⽂件的⽬录是m5out/,我们是可以指定这个输出⽬录的。
(6)程序运⾏完以后,在⽬录/home/cyh/cyh/gem5/gem5-stable/m5out下查看相应的输出⽂件。⽂件夹中有⽂件:config.ini 、config.json 、 simout 、 、 system.inal,我们主要关注的是,提取其中的信息。⼆、gem5tomcpat
注意⼀:对于gem5⽣成的⽂件不能直接作为mcpat的输⼊⽂件,所以我们需要⼀些脚本进⾏中间转换,转变为mcpat可以识别的格式。注意⼆:我们通过设置dump可以得到多段stats的数值,但是gem5tomcpat只能处理⼀段,所以我们可以将进⾏分段。cd /home/cyh/cyh/gem5/gem5-stable
sudo mount -o,loop,offset=32256 ./dist/disks/x86root.img /mnt
cd /mnt
sudo cp /home/cyh/cyh/gem5/gem5-stable/benchmark/fft ./mybench
cd /home/cyh/cyh/gem5/gem5-stable
sudo umount /mnt
# !/bin/sh cd mybench
/sbin/m5 dumpstats 0 300000
/sbin/m5 resetstats
0 300000
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
echo "Running benchmark fft now ..."
./fft -m10 -p1 -n65536 -l4 -o
echo "Finish benchmark fft :D"
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
/sbin/m5 exit
./build/X86/gem5.opt -r -d m5out/ configs/example/fs.py --kernel=x86_64-vmlinux-2.6.28.4-smp --caches -b mybench_fft
下⾯是使⽤python语⾔写的可以进⾏分段的⽂件,代码如下:
通过上述脚本的处理,我们可以得到多个txt⽂件,将这些⽂件打包拷贝到gem5tomcpat⽂件夹中。
⾄此,我们需要gem5tomcpat进⾏转换,将txt⽂件转变为xml⽂件(xml⽂件即是mcpat可以识别的⽂件格式),下⾯使⽤shell脚本进⾏转换,例如fft.sh的内容如下:
注意:这⾥的Z.xml是我们⾃⼰写的xml模板⽂件,⽤于提取stats中的信息。
这样我们就可以得到所有的xml⽂件,将这些⽂件打包拷贝到mcpat中。
三、mcpat
从官⽹上下载,我下载的是mcpat0.8_,解压到⾃⼰的⽬录下,在make的时候可能会报错,这时我们需要安装以下的东西:
然后make就可以通过了。接下来我们就可以使⽤mcpat进⾏实验了。
将上述得到的xml⽂件作为输⼊⽂件,通过mcpat可执⾏⽂件就可以⽣成我们需要的功耗⽂件,即xxx.log⽂件。
svg文件怎么生成将所有的xml⽂件转换为log⽂件的fft.sh的内容如下:
注意:这⾥的102指的是我们拥有102个xml⽂件,通过上述脚本的执⾏,将会产⽣102个xxx.log⽂件,接下来我们需要将所有的xxx.log ⽂件合并为⼀个log⽂件。所⽤的脚本merge-fft.sh的内容如下:# import re
# map(lambda i: file('%d.txt' % i[0], 'w').write(i[1]), enumerate(re.findall(r'(@?Finish &)', file('').read(), re.S)))
#coding=gbk f1 = file("")
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
i=1for
i in {1..102}
do
python GEM5ToMcPAT.py /home/cyh/cyh/gem5tomcpat/gem5tomcpat/fft/$i .txt config.l
l /home/cyh/cyh/gem5tomcpat/gem5tomcpat/fft-results/fft_$i .xml
let i=i+1
done
sudo apt-get install gcc-multilib 和
sudo apt-get install g++-multilib
#!/bin/bash
i=1
for i in {1..102}
do
./mcpat -infile /home/cyh/cyh/mcpat/fft/fft_$i .xml -print_level 5 > /home/cyh/cyh/mcpat/fft-results/fft_$i .log
let i=i+1
done
⾄此,我们就得到了fft.log⽂件。
四、mcpat2hotspot
在/home/cyh/cyh⽬录下建⽴新的⽂件夹,命名为:mcpat2hotspot,将上述fft.log⽂件拷贝到该⽂件夹下。这⾥我们主要提取fft.log ⽂件中的动态功耗,所以使⽤下⾯的脚本进⾏提取,其内容如下:
这样我们可以得到⽂件,然后将数据拷贝到excel中进⾏计算,就可以得到各个部件的功耗值。
五、HotSpot
从官⽹上下载,解压到⾃⼰的⽬录下。
以上述得到的动态功耗⽂件作为输⼊⽂件,通过hotspot可执⾏⽂件,我们就可以得到各个部件温度的值。
在hotspot中默认的模型是block模型,我们可以指定模型,⽐如grid模型。block模型:#!/bin/bash
i=1for i in {1..102}
do
./mcpat -infile /home/cyh/cyh/mcpat/fft/fft_$i .xml -print_level 5 > /home/cyh/cyh/mcpat/fft-results/fft_$i .log
let i=i+1
done #! /bin/bash
cat /home/cyh/cyh/mcpat3hotspot/fft.log | grep "Runtime Dynamic" > /home/cyh/cyh/
readf="/home/cyh/cyh/"
#printf="/home/cyh/"
printf="/home/cyh/cyh/mcpat3hotspot/"
for (( i=1;i<=102;i=i+1 ))
do
exp=$( head -n 40
$readf )
echo -n "$exp" | sed -n '4p' | awk '{printf $4 "\t"}' >> $printf
echo -n "$exp" | sed -n '5p' | awk '{printf $4 "\t"}' >> $printf
echo -n "$exp" | sed -n '6p' | awk '{printf $4 "\t"}' >> $printf
echo -n "$exp" | sed -n '15p' | awk '{printf $4 "\t"}' >> $printf
echo -n "$exp" | sed -n '16p' | awk '{printf $4 "\t"}' >> $printf
echo -n "$exp" | sed -n '21p' | awk '{printf $4 "\t"}' >> $printf
echo -n "$exp" | sed -n '22p' | awk '{printf $4 "\t"}' >> $printf
echo -n "$exp" | sed -n '25p' | awk '{printf $4 "\t"}' >> $printf
echo -n "$exp" | sed -n '28p' | awk '{printf $4 "\t"}' >> $printf
echo -n "$exp" | sed -n '29p' | awk '{printf $4 "\t"}' >> $printf
echo -n "$exp" | sed -n '36p' | awk '{printf $4 "\t"}' >> $printf
echo -n "$exp" | sed -n '37p' | awk '{printf $4 "\n"}' >> $printf
tail -n +41 $readf >
# $readf
> $readf
done
rm -rf /home/cyh/cyh/
rm -rf /home/cyh/cyh/
./hotspot -c hotspot .config -f Z .flp -p fft .ptrace -o fft .ttrace
./hotspot -c hotspot .config -f Z .flp -p fft .ptrace -steady_file fft .steady
注意⼀:上述命令的Z.flp指的是版图⽂件,在hotspot中有默认的ev6.flp,但是我们需要⾃⼰的版图⽂件,所以我们可以根据fft.log⽂件中的各个部件的⾯积来计算每个部件的长、宽和坐标。
注意⼆:fft.ptrace⽂件是我们从mcpat2hotspot得到的功耗⽂件,ace是瞬态时的温度⽂件,fft.steady 是稳态时的温度⽂件。grid模型:
注意⼀:Z.flp是版图⽂件, fft.ptrace是功耗⽂件, ace 是瞬态温度,fft.steady是稳态温度。
注意⼆:通过第⼆条语句我们可以⽣成⼀个gcc.svg⽂件,这是⼀个中间⽂件。
注意三:通过第三条语句我们可以⽣成fft.pdf⽂件,该⽂件是⼀个彩⾊的温度分布图。
⾄此,Gem5、Mcpat和Hotspot的联合仿真就结束了。 Good Luck Fern!./hotspot -c hotspot
.config -f Z .flp -p fft .ptrace -o fft .ttrace -steady_file fft .steady -model_type grid -grid_steady_file fft .grid.steady
./grid_thermal_map .pl Z .flp fft .grid.steady > fft .svg
convert -font Helvetica svg:fft .svg fft .pdf
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论