gem5 arm架构 fullsystem spec2017 benchmark 仿真

gem5 system emulation 模式,内部实现了对system call的模拟,使用了一段时间后,有一些发现:

  1. 如果使用spec2017 X86编译,那么会存在对intel比较新的指令不支持的问题;后来使用gcc march K6 m32来解决,即使用amd的k6 32bit编译,但是这也只是权宜之计
  2. gem5的开发人员在邮件list中介绍intel对gem5的译码支持比较差,最开始gem5的x86也是基于amd的
  3. 很多论文中使用了ARM架构,gem5的开发人员也和ARM合作比较紧密,所以gem5对arm架构的指令支持比较好
  4. 即使使用上面的方法,se模式还是会遇到gem5没有模拟的system call函数的问题
  5. 同时还会遇到环境的问题,比如549.fotonik3d,需要手动将input输入的压缩文件OBJ.dat.xz手动解压之后才能运行
    “”
    因为上述的问题,在邮件list中可以看出gem5的开发人员比较倾向于使用full system模式,用他的话就是"works magically"。

X86 full system

如果使基于X86 Ubuntu系统模拟gem5 arch,制作disk image比较简单,可以git clone gem5 resource, 在spec2017文件夹下放入spec2017.iso,调用build.sh自动调用packer将spec2017装入ubuntu的disk image生成spec-2017。

 ./build/X86/gem5.fast --outdir=./m5out/ configs/example/gem5_library/x86-spec-cpu2017-benchmarks.py --image=path/spec-2017 --benchmark=505.mcf_r --size=ref --partition=1

这里需要强调的是,gem5中介绍了多次qemu-kvm, 但是qemu-kvm并不是在X86架构中生成disk image和真正运行gem5时必须的工具。
在gem5中引入它的主要作用就是在boot阶段使用qemu,在真实的cpu上运行boot 阶段,进行加速,实际上如果我们在云服务器上跑,如果没有qemu软件或者权限,只是使用atomic cpu跑boot也是比较快的。
就是不要被qemu迷惑,fullsystem gem5可以理解成在gem5上跑app,不过这个app是os,单纯的用atomic cpu跑也没有任何问题。

ARM full system

X86 full system的问题是memory最大支持3GB,目前看gem5的设置是不支持5GB 6GB这样的设置。
我们介绍一下如何生成gem5的disk image。
首先看一下最终成功运行full system 使用的指令:

./build/ARM/gem5.fast -d ./m5out/ARM/fullsystem64/spec2017 ./configs/example/fs.py \ 
--kernel 2022/binaries/vmlinux.arm64 \
--disk-image path/expanded-aarch64-ubuntu-trusty-headless.img \
--bootloader 2022/binaries/boot.arm64 --mem-type=DDR4_2400_4x16 \
--param 'system.highest_el_is_64 = True' \
--script=./m5out/ARM/fullsystem64/spec2017_restore/spec2017.rcS

kernel 我的理解就是os内核程序,disk image则是装载了benchmark的磁盘镜像。
内核程序与我们无关,我们可以直接使用,disk image 则需要我们手动装载。
image kernel
![我是用的就是这两个文件](https://img-blog.csdnimg.cn/97fe6c7e804f4804a1382f7b9fabc9d5.png
script这里指定的是一个script

#!/bin/bash
source /root/.bashrc
/sbin/m5 checkpoint 1
echo "A real multi node workload might start here ..."
cd /home/gem5/spec2017
source shrc
echo "Reset stats"
/sbin/m5 resetstats
runcpu --size test --iterations 1 --config myconfig.aarch64.cfg  --nobuild 605.mcf_s
/sbin/m5 exit 1

通过指定这个script,gem5在boot成功后,运行这个script,就调用了脚本内的runcpu,自动运行了spec2017对应的app。
如果我们不指定这个script,那么如果不对disk image进行任何修改,那么boot成功后,要求输入用户名和密码,输入root可以进入,不过这个操作比较麻烦,还是建议指定script。

现在唯一需要的工作就是实现disk image,这里帮助对我很大的就是这篇博客](https://www.eecg.utoronto.ca/~elsayed9/website/blog/gem5_fs_arm_flow.php)。
首先遇到的问题就是官方提供的image 1GB或者2GB,然而spec2017有4GB我们需要对image进行扩容。按照博客的操作如下

$ # Backup the original disk image if needed
$ cp aarch64-ubuntu-trusty-headless.img expanded-aarch64-ubuntu-trusty-headless.img
$ # Increase disk image by 2G
$ dd if=/dev/zero bs=1G count=2 >> expanded-aarch64-ubuntu-trusty-headless.img
$ sudo parted expanded-aarch64-ubuntu-trusty-headless.img resizepart 1 100%
              
$ # Parse some info for 'losetup' and 'mount' later
$ name=$(sudo fdisk -l expanded-aarch64-ubuntu-trusty-headless.img | tail -1 | awk -F: '{ print $1 }' | awk -F" " '{ print $1 }')
$ start_sector=$(sudo fdisk -l expanded-aarch64-ubuntu-trusty-headless.img | grep $name | awk -F" " '{ print $2 }')
$ units=$(sudo fdisk -l expanded-aarch64-ubuntu-trusty-headless.img | grep Units | awk -F" " '{ print $8 }')
              
$ # Attach to device and record output, to me it was /dev/loop18                                                               
$ sudo losetup -f --show expanded-aarch64-ubuntu-trusty-headless.img -o $(($start_sector*$units))                         
              
$ sudo e2fsck -f /dev/loop18  # Fix potential errors, press Y for all fixes
$ sudo resize2fs /dev/loop18  # Actual resizing step
$ sudo e2fsck -f /dev/loop18  # Double check there are no errors
              
$ sudo losetup -d /dev/loop18 # Detach from the loop device
              
$ # Mount image and check new size
$ mkdir disk_mnt
$ sudo mount -o loop,offset=$(($start_sector*$units)) expanded-aarch64-ubuntu-trusty-headless.img disk_mnt
$ df -h # Should show the new expanded image size with the Used and Avail for disk_mnt
$ sudo umount disk_mnt

扩容之后 mount image,下面就是要安装spec2017到这个disk image了。
这里建议看一下 gem5-resources/src/spec-2017/disk-image/spec-2017/install-spec2017.sh 这个是装载spec2017到x86 os的过程,我们装载spec2017到arm,可以按照这个流程来。
gem5 resources的路径

1. sudo chroot . #将当前mount目录切换为主目录
2. 创建/home/gem5/文件夹 将cpu_spec2017.iso拷贝到这个文件夹
3. 按照cpu_spec2017.iso的install流程,mount cpu_spec2017.iso 然后install.sh
4. install 之后,我们可以build,生成spec2017的可执行文件等。建议参考install-spec2017.sh

disk image中已经有gcc aarch64的编译工具,因此我们不需要额外再安装gcc aarch64,还是比较方便的。
我们将spec2017安装到了/home/gem5/,再结合一下刚才介绍的spec2017.rcS,就能看出来这个script的作用实际上就是进入文件夹,然后runcpu。

我们看一下效果
full system运行
大约1Billion指令之后,大约半小时,完成boot。再执行3.3Billion的指令进入真实的runcpu仿真。

最后在介绍一下./util/term/m5term 3460。
在gem5开始运行后,会显示system.terminal listening for connections on port NUMBER
在这里插入图片描述
这时我们另开一个terminal,输入./util/term/m5term NUMBER,即可观察到当前os具体运行到哪一步,而上面说的,如果不指定script,需要手动输入root也是在这里。

对我帮助很大的两篇博客:
https://www.eecg.utoronto.ca/~elsayed9/website/blog/gem5_fs_arm_flow.php
https://lucian.run/2021/10/03/gem5%20FS/

在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: CEC2017 基准函数是用于测试优化算法性能的一组标准函数。其中包含了针对10、30、50和100维度的四个基准函数。 对于10维度基准函数,CEC2017 提供了10个函数,分别为 F1-F10。这些基准函数涵盖了不同类型的优化问题,如多峰优化问题、线性和非线性约束问题等。每个函数都有一个目标函数和若干约束函数,算法需要在给定的变量范围内找到最优解。 对于30维度基准函数,CEC2017 提供了30个函数,同样涵盖了多种优化问题。这些函数的复杂度更高,对于算法来说更具挑战性。算法需要充分利用每个维度的信息来找到最优解。 对于50维度基准函数,CEC2017 提供了50个函数,其难度和复杂度进一步增加。算法需要在更高维度的情况下进行搜索,并在大量的解空间中找到最优解。 对于100维度基准函数,CEC2017 提供了100个函数,要求算法在更大维度上进行搜索。这对于优化算法来说是一个更大的挑战,需要具备更强的搜索和收敛能力。 CEC2017 的四个维度的基准函数设计用于对算法进行全面和系统的评估。它们可以用于检验算法的性能和稳定性,帮助研究人员了解和改进不同优化算法的特点和能力。同时,它们还可以用于比较不同算法之间的差异和优劣,从而提供了一种客观的评估标准。 ### 回答2: CEC2017基准测试是一个评估优化算法性能的标准测试集。它包括了不同维度的优化问题,如10、30、50和100维。这些问题被设计为具有挑战性,以测试算法在高维空间中的表现能力。 这些基准测试的目的是比较优化算法的效果和效率。在这些问题中,算法需要找到一个在特定维度下最小化目标函数的解。这些目标函数是非线性、非凸函数,具有多个局部最小值。 对于10维问题,基准测试提供了20个不同的优化问题。它们的目标函数形式各异,包括二元函数、线性可分函数等。这些函数可以用来评估算法在低维情况下的性能。 在30维问题中,基准测试提供了10个不同的优化问题。它们涉及到更复杂的目标函数,如旅行商问题、非线性函数等。这些问题可以用来评估算法在中等维度下的性能。 在50和100维问题中,基准测试提供了5个不同的优化问题。它们更具挑战性,算法需要在高维空间中找到最优解。这些问题包括SCH、SDC、F1、F2和F3等。 CEC2017基准测试的结果可以帮助研究人员和工程师选择最合适的优化算法来解决不同维度的问题。通过比较不同算法在这些问题上的表现,我们可以了解它们的优势和局限性,并对算法进行改进和优化。这有助于促进优化算法的发展和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值