Ubuntu18.04LTS下zsim+nvmain模拟器编译安装(HSCC/SHMA)
该模拟器的安装我是综合了好几篇博客,再根据自己碰到的问题总结而来的。
这个模拟器对系统的要求比较严格,如果图省事,可以用Ubuntu14.04LTS按照第一篇博客的教程一步一步来,基本上不会有任何问题。
参考博客:
ZSim/NVMain模拟器编译(HSCC/SHMA)
ubuntu下 zsim + nvmain配置
Zsim+nvmain安装
linux boost库安装
ubuntu18.04无法安装libesd0-dev完美解决办法
gcc/g++多版本切换 (ubuntu18.04)
搭建环境
操作系统:Ubuntu 18.04LTS
编译器版本:GCC-4.6.4
模拟器GitHub代码仓库:https://github.com/CGCL-codes/HSCC
模拟器Gitee代码仓库:https://gitee.com/NVM_Systems/HSCC
安装依赖库
1.先修改软件源:
# 如果未安装vim,可以用gedit
sudo vim /etc/apt/sources.list
# 添加如下源
deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse
# 更新软件源
sudo apt-get update
2.安装依赖库
sudo apt install scons gcc-4.6 g++-4.6 libhdf5-serial-dev libconfig++-dev libelfg0-dev libgoogle-glog-dev
3.确定当前使用的GCC版本
# 查看当前gcc版本,g++也一样
gcc --version
g++ --version
# 如果是4.6,则直接到下一步,否则参考博客,切换gcc和g++版本
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 50
# 选择gcc-4.6和g++-4.6版本
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
4.编译安装Boost库
1.下载boost1.59.0版本
2.解压
tar zxvf boost_1_59_0.tar.gz
3.安装依赖库
sudo apt-get install build-essential cmake python-dev python3-dev libboost-all-dev libbz2-dev
sudo ldconfig
4.进入boost_1_59_0,进行编译安装
cd boost_1_59_0
sudo ./bootstrap.sh
sudo ./b2
sudo ./b2 --buildtype=complete install
5.添加boost环境变量
sudo vim /etc/profile.d/boost.sh
# 输入以下内容
#!/bin/sh
BOOST_ROOT=(boost的解压路径)
BOOST_INCLUDE=/usr/local/include/boost
BOOST_LIB=/usr/local/lib
export BOOST_INCLUDE BOOST_LIB BOOST_ROOT
# 修改运行权限
sudo chmod +x /etc/profile.d/boost.sh
source /etc/profile.d/boost.sh
6.测试是否安装成功
vim test.cpp
# 输入以下内容
#include <boost/lexical_cast.hpp>
#include <iostream>
int main()
{
using boost::lexical_cast;
int a= lexical_cast<int>("123456");
double b = lexical_cast<double>("123.456");
std::cout << a << std::endl;
std::cout << b << std::endl;
return 0;
}
# 编译运行
g++ -o test test.cpp
./test
# 输出
# 123456
# 123.456
5. 编译zsim
1.参考第一篇博客修改各个文件:env.sh
# 解压HSCC-master.zip,进入zsim-nvmain
unzip HSCC-master.zip
cd HSCC-master/zsim-nvmain
vim env.sh
# 修改env.sh为如下内容
#!/bin/sh
PINPATH=$PWD/pin_kit
NVMAINPATH=$PWD/nvmain
ZSIMPATH=$PWD
BOOST=/usr/local
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$BOOST/lib
CPLUS_INCLUDE_PATH=.
export ZSIMPATH PINPATH NVMAINPATH BOOST LD_LIBRARY_PATH CPLUS_INCLUDE_PATH
2.修改SConstruct、src/pin_cmd.cpp
vim SConstruct
# 修改28行的内容,去掉-e,变为如下内容:
# else:
# env.Command(versionFile, allSrcs + ["SConstruct"],
# 'echo "#define ZSIM_BUILDDATE \\""`date`\\""\\\\n#define ZSIM_BU ILDVERSION \\""no git repo\\""" >>' + versionFile)
vim src/pin_cmd.cpp
# 第53行左右的位置,在几个args pushback里添加一行代码:
# args.push_back("-ifeellucky");
3.修改nvmain/MemControl/LO-Cache/LO-Cache.h,然后编译
vim nvmain/MemControl/LO-Cache/LO-Cache.h
# 将85行处,两个变量的初始化去掉:
# ncounter_t read_hit;
# ncounter_t write_hit;
source env.sh
# -j 后面加电脑的核数
scons -j 12
4.修改build/opt/hdf5_stats.cpp、build/opt/zsim.cpp,处理lib,然后重新编译
vim build/opt/hdf5_stats.cpp
# 将两个头文件的改成绝对路径
# #include "/usr/include/hdf5/serial/hdf5.h"
# #include "/usr/include/hdf5/serial/hdf5_hl.h"
# 新建libhdf5.so和libhdf5_hl.so软连接
sudo ln -s /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5.so /usr/lib/x86_64-linux-gnu/libhdf5.so
sudo ln -s /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5_hl.so /usr/lib/x86_64-linux-gnu/libhdf5_hl.so
vim build/opt/zsim.cpp
# 注释掉812行:assert(vdsoPatchData[tid].level);
# 重新编译
scons -j 12
5.修改config/dram.cfg,修改系统设置,运行模拟,查看结果
#查看有无库缺失,如果有undefined symbol,说明依赖安装出错
ldd -r bin/libzsim.so
vim config/dram.cfg
#修改gmMBytes和process0,其中ls指令在其它Ubuntu版本中可能会报错,可以把它换成你要模拟的程序
#zsim对内核很敏感,不同内核的ls指令实现是不同的
# gmMBytes = 1024;
# process0 = {
command = "ls -ahl";
# };
# 给pinbin执行权限
chmod +x pin_kit/intel64/bin/pinbin
# 让系统允许Pin向负载进程注入代码,每次重启都要执行
sudo sysctl -w kernel.yama.ptrace_scope=0
# 进入config文件夹下,执行
cd config
../bin/zsim dram.cfg
至此,该模拟器安装已经完成。