实验纪录——GEM5+McPAT

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shuiliusheng/article/details/83344777

实验纪录——GEM5+McPAT

  1. 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
    
  2. 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 可以查看命令行参数
  3. 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"
      
  4. 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
      
  5. 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
      
  6. 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

猜你喜欢

转载自blog.csdn.net/shuiliusheng/article/details/83344777
今日推荐