栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

gem5 Vector Engine 配置

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

gem5 Vector Engine 配置

gem5 Vector Engine 配置

所使用的 gem5 相关信息如下:

项目 gem5 Vector Engine

也可以使用PLCT的版本,并附有实现分析

环境 Linux(含WSL2),需要支持Python2

注意 自2020.10起官方gem5过渡至全面支持Python3(下称新一代),而该项目是基于旧一代(2020之前)的gem5开发的

区分 旧一代的配置文件中主从模式所使用的成员为master,slave

配置

配置完成后的大小为 33.0 GB

Python2配置

下面将以 Ubuntu 20.04 作为介绍,其它发行版类似

    启用universe源仓库并更新软件包索引
    sudo add-apt-repository universe
    sudo apt update
    
    安装Python2
    sudo apt install python2
    
    下载get-pip.py脚本,这里需要根据当前的Python2版本来下载,我的本机上是Python 2.7.18
    # 查看Python版本
    $ python2 --version
    Python 2.7.18
    
    # 下载get-pip.py
    curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
    
    通过python2运行脚本来安装pip,忽略"过期已不支持"的警告(黄色显示)即可
    sudo python2 get-pip.py
    
    检查Python2和pip2的版本信息,以及默认python和pip是不是关联正确
    $ python2 --version
    Python 2.7.18
    $ pip2 --version
    pip 20.3.4 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
    
    # python和pip必须与上面的结果一致
    $ python --version
    Python 2.7.18
    $ pip --version
    pip 20.3.4 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
    
Q: 我照着链接上下载了get-pip.py,然而安装失败?

原本的操作是:

curl https://bootstrap.pypa.io/get-pip.py --output get-pip.py

可是get-pip.py需要和Python2的版本对应,安装失败时会提示到一个指定链接(包含了Python2的版本号)下载,重复步骤3

Q: 我安装成功了,可是在之后的配置中反复遇到Python相关的问题?

这个项目的 SConscript 默认调用的是python(而不是python2)
请执行步骤5(最后一步)检查python默认与哪一个解释器关联了

$ python --version
Python 2.7.18

如果你没做过类似alias python=python3这类操作,python会自动关联至python2,对于pip也是同理

如果没有的话可以通过修改~/.bashrc,添加alias python="/usr/bin/python2.7"来完成 (未测试!)

安装gem5

参考 安装教程

请在配置好 Python2 的前提下继续

    安装所有的依赖包
    sudo apt install build-essential git m4 scons zlib1g zlib1g-dev libprotobuf-dev protobuf-compiler libprotoc-dev libgoogle-perftools-dev python-dev python
    
    从GitHub上clone develop分支 到本地
    git clone -b develop git@github.com:RALC88/gem5.git
    

    master分支是上一代的stablegem5,不包括向量引擎!

    开始编译
    scons build/RISCV/gem5.opt -j 4
    
    然后开始漫长的等待.<{=....运行任意一个默认配置,检查是否能正常工作
    build/RISCV/gem5.opt configs/example/hmc_hello.py
    
    build/RISCV/gem5.opt configs/example/riscv_vector_engine.py --cmd=tests/test-progs/hello/bin/riscv/linux/hello
    
    将输出类似下面的结果
    gem5 version [DEVELOP-FOR-V20.1]
    gem5 compiled Jan  6 2022 17:53:18
    gem5 started Jan  6 2022 22:38:42
    gem5 executing on DESKTOP-9F2JKA5, pid 7395
    command line: build/RISCV/gem5.opt configs/example/hmc_hello.py
    
    Global frequency set at 1000000000000 ticks per second
    0: system.remote_gdb: listening for remote gdb on port 7000
    info: Entering event queue @ 0.  Starting simulation...
    warn: readlink() called on '/proc/self/exe' may yield unexpected results in various settings.
        Returning '/mnt/d/AC/gem5/tests/test-progs/hello/bin/riscv/linux/hello'
    info: Increasing stack size by one page.
    Hello world!
    
配置自动补全与高亮

对于Vim大佬,“高亮补齐什么的都是浮云”;然而作为VSCode忠实用户的本菜鸡只相信Pylance(确信)

需要配置 m5与SimObjects源码 的路径,使得VSCode Pylance能成功识别 SimObjects 从而提供代码补全及高亮

    进入build/RISCV/python/,需要将它的路径添加到sys.path中

    定位到 site-packages 中,可以通过查看sys.path,其中包含 site-packages 的路径就是了

    $ python
    Python 2.7.18 (default, Mar  8 2021, 13:02:45)
    [GCC 9.3.0] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import sys
    >>> sys.path
    ['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/home/yuxuan-z/.local/lib/python2.7/site-packages', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
    >>> exit() # 退出,已经定位到 '/home/yuxuan-z/.local/lib/python2.7/site-packages'
    

    将当前所在目录(比gem5的父目录)导入 site-packages 的新文件 gem5.pth中,使得sys.path中包含了该目录

    $ pwd > '/home/yuxuan-z/.local/lib/python2.7/site-packages/gem5.pth'
    $ cat '/home/yuxuan-z/.local/lib/python2.7/site-packages/gem5.pth'
    /mnt/d/AC/gem5/build/RISCV/python
    

    再次查看,确认包含在内

    $ python
    Python 2.7.18 (default, Mar  8 2021, 13:02:45)
    [GCC 9.3.0] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import sys
    >>> sys.path
    ['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/home/yuxuan-z/.local/lib/python2.7/site-packages', '/mnt/d/AC/gem5/build/RISCV/python', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
    >>>
    

    到这里我们解决了m5和m5.objects包未识别的问题,但没有解决SimObjects无法高亮的问题,需要进一步配置

    gem5的SimObjects定义都位于目录src/下的各个子文件夹内,为了方便日后复用我们将src/拷贝一份至api/

    cp src/ -r api/
    

    同第2到4步依次加入

    # 追加进入gem5.pth中
    # 不选择gem5/api是为了之后能直接识别 from api. 并注释掉
    echo /mnt/d/AC/tools/gem5/ >> '/home/yuxuan-z/.local/lib/python2.7/site-packages/gem5.pth'
    echo /mnt/d/AC/tools/gem5/api/python/ >> '/home/yuxuan-z/.local/lib/python2.7/site-packages/gem5.pth'
    

    为什么不导入build/RISCV/呢?这时因为在生成完毕后,SimObjects所在的源文件 会被清空,这时导入是无意义的
    如果我选择导入gem5/api/而不是gem5/可以吗?可以,之后的config.sh稍微要做修改(见第10步)

    此时通过导入这些src/下的"伪头部",就可以实现VSCode Pylance的高亮与代码补全,但是要注意因为这些"伪头部"是未编译的,所以执行的话会出错!记得注释掉!

    # a simple test script
    
    # **必须导入** (就像)
    import m5
    from m5.objects import *
    
    
    from common.Caches import *
    
    # 导入SimObjects,完成后记得注释掉!
    # from api.sim.System import System
    # from api.sim.Process import Process
    # from api.sim.ClockDomain import ClockDomain
    
    system = System()
    ...
    

    为了避免污染gem5环境,请在独立于gem5的一个工作区内编写配置脚本(见上),只要指定路径就可以运行了

    $ /mnt/d/AC/gem5/build/RISCV/gem5.opt /mnt/d/DEV/hello-world.py
    

    为了简化第8, 9步,可以写一个config.sh来执行:根据架构和路径不同修改 安装路径GEM5_DIR,指令架构ARCH,生成的二进制类型BIN,在执行时指定将 配置脚本的位置 和 workload(即需要载入的可执行文件)作为命令行参数传入即可

    # config.sh script
    # Usage: $ ./config.sh [config_script.py] [abspath of exe]
    
    # ? location of gem5
    readonly GEM5_DIR=/mnt/d/AC/tools/gem5
    # ? ISA compiled
    readonly ARCH=RISCV
    # ? bin type built
    readonly BIN=opt
    
    # ! pseudo-headers MUST NOT appear in script
    # * comment them (debug)
    sed -i '/from api./ s/^/# /' $1
    # * OR remove them (release), with a back-up
    # sed -i.bak '/from api./d' $1
    
    # * exec gem5 config
    $GEM5_DIR/build/$ARCH/gem5.$BIN $1 --cmd=$2 ${@:3}
    

    其中$1表示 配置文件,$2为 workload的绝对路径

    使用时:

    $ ./config.sh hello-world.py /mnt/d/AC/tools/gem5/tests/test-progs/hello/bin/riscv/linux/hello
    

    在第7步中,如果加入的是gem5/api/的话,导入时不需要加上api.

    # a simple test script
    
    # **必须导入** (就像)
    import m5
    from m5.objects import *
    
    
    from common.Caches import *
    
    # 不需要加上api.
    # from sim.System import System
    # from sim.Process import Process
    # from sim.ClockDomain import ClockDomain
    
    system = System()
    ...
    

    相应的config.sh要能直接识别伪头部所在的所有文件夹(不再是识别from api.了):

    # config.sh script
    # Usage: $ ./config.sh [config_script.py] [abspath of exe]
    
    # ? location of gem5
    readonly GEM5_DIR=/mnt/d/AC/tools/gem5
    # ? ISA compiled
    readonly ARCH=RISCV
    # ? bin type built
    readonly BIN=opt
    
    # TODO: modify this
    # ! pseudo-headers MUST NOT appear in script
    # * comment them (debug)
    sed -i '/from (arch|base|cpu|dev|gpu-compute|kern|mem|proto|python|sim|systemc|unittest)./ s/^/# /' $1
    # * OR remove them (release)
    # sed -i.bak '/from (arch|base|cpu|dev|gpu-compute|kern|mem|proto|python|sim|systemc|unittest)./d' $1
    
    # * exec gem5 config
    $GEM5_DIR/build/$ARCH/gem5.$BIN $1 --cmd=$2
    
我可以直接将src/下的所有.py复制到build/RISCV/下来配置吗?

没试过,请 hhh

使用

<教程> 旧一代教程<文档> 旧一代文档{教学视频} J. Lowe-Power(开发人员) @ 油管 查看系统配置图

通过gem5.opt运行系统配置后会在当前工作路径(cwd)下创建./m5out/的文件夹,里面包含了提供相关配置信息的config.dot

    安装 Graphiz

    sudo apt install graphviz
    

    Graphiz是pydot的后端,如果没安装即使装了pydot也没用

    通过pip2安装pydot

    pip2 install pydot
    

    运行配置文件,这时会在cwd下自动创建./m5out/

    进入./m5out/,里面有(默认生成的)可供查看的.svg和.pdf

    若想将config.dot导出为其它格式(比如.png),可以执行dot命令(参考第4节)

    dot -Tpng -o config.png config.dot
    

    效果如下:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/740971.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号