GEM5是加载workload的(上)
在gem5的官方的教程中,是通过system.cpu.workload来指定binary的。
而cpu.workload则是一个Process*类型的vec。
那么系统是如何加载workload的呢?
//./src/sim/process.hh::Loader::ObjectFile *objFile;::Loader::MemoryImage image;
//./src/sim/process.cc
Process::Process(ProcessParams *params, EmulationPageTable *pTable,::Loader::ObjectFile *obj_file): SimObject(params), system(params->system),pTable(pTable),objFile(obj_file),argv(params->cmd), envp(params->env),executable(params->executable),//.....fds(make_shared<FDArray>(params->input, params->output, params->errout)),childClearTID(0)
{
其中objFile即为加载的file,通过其成员函数buildImage函数加载到image中。
而后通过initState()函数来使用image的内容初始化VirtMem.
void
Process::initState()
{if (contextIds.empty())fatal("Process %s is not associated with any HW contexts!\n", name());// first thread context for this process... initialize & enableThreadContext *tc = system->threads[contextIds[0]];// mark this context as active so it will start ticking.tc->activate();pTable->initState();initVirtMem.reset(new SETranslatingPortProxy(tc, SETranslatingPortProxy::Always));// load object file into target memoryimage.write(*initVirtMem);interpImage.write(*initVirtMem);
}
而image.write的函数内部即为:
bool
MemoryImage::writeSegment(const Segment &seg, const PortProxy &proxy) const
{if (seg.size != 0) {if (seg.data) {proxy.writeBlob(seg.base, seg.data, seg.size);} else {// no image: must be bssproxy.memsetBlob(seg.base, 0, seg.size);}}return true;
}
bool
MemoryImage::write(const PortProxy &proxy) const
{for (auto &seg: _segments)if (!writeSegment(seg, proxy))return false;return true;
}
即通过PortProxy来将数据写入proxy所指定的地址。在writeBlob时,是通过SETranslatingPortProxy的writeBlob进行写入,此时可以通过其内部成员变量pTable来对workload的地址和当前simulator所分配的地址进行再映射,这样后续程序的对内存的access就都是可以通过相同的映射关系来实现了。
SETranslatingPortProxy将workload的虚拟地址映射到simulator所被分配的虚拟地址,这时simulator运行时workload获取的是虚拟地址。
GEM5是加载workload的(上)相关推荐
- pytorch无法将模型加载到gpu上
通常是model = model.to(cuda)就好了 但由于搭建模型的时候,forward函数的代码直接调用这个类外部的函数,如图所示: 在这里直接调用了外部的函数, 这个函数里面有torch.n ...
- mui用ajax上拉加载更多,mui上拉加载更多的使用
demo地址 mui框架中上拉加载的坑 1.在函数自己上拉加载行为后的回调函数 2.在mui封装的上拉加载中,点击某一项会失效. 解决方法 1.该函数是必须要写的,用来写自己的逻辑需求,但是一般情况下 ...
- 微信小程序 下拉刷新/上拉加载更多 (上拉加载更多怎么实现)
参考:微信小程序开发文档->框架>逻辑层->注册页面 实现原理: 1.下拉刷新:由于小程序数据是实时渲染的.我们把data{}内的数据清空重新加载即可实现下拉刷新. 2.上拉加载更多 ...
- 上拉加载 php,jquery上拉加载代码及原理
jquery上拉加载更多原理: 其实就是判断下 当前滚动条距离底部的距离 滚动条距离底部小于一个值时候 我们执行加载内容 下面上jquery代码://$(window).height() 可视区域高度 ...
- 利用百度APIStoreSDK获取Json数据并解析加载到ListView上
效果图(这里只是截取了List中的一项): 一.:登录百度ApiStore,获取移动sdk Android版(同时有使用文档和示例),将jar包导入到项目中 Android Studio请在放入lib ...
- Unity动态加载外部服务器上的FBX模型
去年某项目需要从后端服务器上加载FBX模型,但是整个项目中只有很少的地方需要用到动态模型替换,并且项目交付后需要外行人员也能轻松上手更换需要动态加载的模型,所以需要实现一个简单的模型打包和动态模型加载 ...
- 新增书籍类别,下拉框加载,书籍上下架操作
一.新增页面书籍类别下拉框加载 1.查询所有类型的方法(CategoryDao) package com.xly.dao;import java.util.List;import com.xly.en ...
- 新增书籍类别下拉框加载、书籍上下架功能
课程内容: 1.新增书籍 2.上架书籍 3.下架书籍 一.新增页面书籍类别下拉框加载 1.根据下拉框类型写实体类 2.查询所有类型的方法(CategoryDao) package com.zxy.da ...
- 微信小程序 上拉加载配置,上拉加载设置不生效问题
一.上拉加载配置 1:json文件配置 "onReachBottomDistance": 50 {"usingComponents": {},"nav ...
最新文章
- vmd变分模态分解程序matlab论坛_博士兼职辅导员论坛分享会第三期
- BeautifulSoup学习笔记
- 根据端口不同来切换站点_KVM切换器是什么,看懂这一篇就够
- OA中项目关系,实体设计,映射实体,增删改查
- 【自用】 VS2017 部分快捷键
- 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus
- php计算字符串散列,php计算字符串的SHA-1散列函数sha1()
- HTML,CSS基础十大重点问题
- termux安装python2_termux怎么安装python
- uncheck关键字
- plotyy函数_转载:MATLAB关于plotyy函数的使用三例
- 【实验记录】yolov5的一些改进tricks总结--持续更ing
- Form表单提交数据的几种方式
- 2022-05-30 无法验证是否已安装所需的Microsoft更新KB2919355
- 在国内外市场均遭遇挫折的OPPO和vivo该反思了
- 印度电线标准IS 694(R2020),印度插头标准IS 1293(R2020)
- 2022年焊工(初级)试题及答案
- 2021年安全员-A证考试报名及安全员-A证新版试题
- 使用 Live Transcribe 进行实时连续转录
- GPU/APU加速库、算法及应用
热门文章
- 2021年山东省夏季高考数据统计:山东省高考参加考试人数占报名人数的88.1%,本土153所高校(2所985大学)
- 记录一次瑞芯微rk3128固件解包打包过程:以添加root权限为例
- altium designer添加原理图库和PCB封装库
- QQ邮箱一次性发送多封邮件导致授权码失效535
- IT薪酬报告:Java、Apex、Python、Windows技术最赚钱
- Activity精选内容,看看还有没有你的盲点!
- 传统的关系型数据库优缺点
- ipad分屏功能怎么开启_苹果手机便签怎么设置开启分类密码功能? - 学显
- 高的上去,沉得下来!
- html中写嵌套的js函数,Javascript 嵌套函数 - 递归函数 - 内置函数详解