[报告]SimpleScalar简介.pptVIP

  • 8
  • 0
  • 约5.04千字
  • 约 27页
  • 2017-08-11 发布于河南
  • 举报
SimpleScalar简介 SimpleScalar简介 概要 SimpleScalar Tool Set 简介 功能级模拟器设计的初步分析 附加论题 由SimpleScalar 的设计得到的启发(一种新颖的编程手法) SimpleScalar Tool Set 简介 SimpleScalar定义:用软件模拟在单处理器系统中单线程的运行情况,以此评估当前硬/软件设计的综合性能,为下一步的改进提供依据。 在体系结构上做到了一定的“可配置”,诸如,可以以命令行参数的形式设置不同的ALU个数、流水线各阶段属性、cache大小及其关联策略、替换策略(replacement policy)、分支预测策略(branch predicting policy)等等,通过模拟得到的结果(profile)来指导对体系结构的进一步改进。 在软件方面可以通过模拟所得的性能结果(profile)来指导进一步的改进。 SimpleScalar Tool Set 简介 整个工具集结构概览 SimpleScalar Tool Set 简介 模拟器分类: 功能级模拟(Functional simulation):粒度最粗,速度最快。包括两个模拟器: Sim-fast: 简单的进行功能模拟 √ Sim-safe: 同时进行存取对齐和权限检查 Cache模拟(Cache simulation) :以Cache性能为主要考察目标,速度较慢。包括两个模拟器: Sim-cache: 接收Cache参数,进行针对Cache性能的模拟 Sim-cheetah: 采用Cheetah cache simulation engine 乱序模拟(Out-of-order processor timing simulation):详细模拟了流水线的六个阶段,速度最慢。包括一个模拟器: Sim-outorder:基于Register Update Unit(?),支持out-of-order发射和执行 功能级模拟器设计的初步分析 基本原理和流程: 模拟器初始化,并从编译生成的二进制文件(此文件具有一定的格式)中装载可执行程序至模拟器的虚拟内存; 核心执行:模拟器逐条读取可执行程序中的命令,根据指令集定义文件ss.def中各种指令的操作描述,来完成整个程序的执行(其中包含有一个重要的编程技巧,稍后讨论); 执行结束,输出统计信息。 下面详细介绍以上各步骤…… 模拟执行流程 初始化 核心执行 统计输出 模拟器初始化步骤一 —— 分析命令行参数 首先请注意:功能级模拟只接受默认的命令行参数,对体系结构不具备可配置性;(但是,由于前面提到的编程技巧的运用,可以对指令集方便的进行修改而不需要改变源程序,所要做的仅仅是重新编译而已) 构建全局的参数库(option database),记录模拟器型号以及各命令行参数,为以后使用提供方便,而实际上,在功能级模拟中只是根据命令行参数设定了一些全局的标志变量的值,如是否打印help等等,可以认为,该参数库对功能级模拟而言几乎无意义,但是在其他需要对体系结构进行配置的模拟器中是不可或缺的; 具体数据结构略,可见工作记录。 模拟器初始化步骤二 —— 初始化指令译码器 所谓指令译码器实际上是一个ss_opcode枚举型的全局数组ss_mask2op,每个元素存放的是SimpleScalar体系结构中的指令所对应的一个枚举值(0~255)。SimpleScalar规定最多有255条指令,而数组ss_mask2op有256项,所以可以以指令的操作码(0x01~0xff)为索引,把定义了的指令映射到对应项中,在该项中写入一个枚举值(1~255),而初始值0恰恰代表了未定义的指令; 为什么要做这样一个看似繁琐的操作码到枚举值的附加转换呢?目的除了能方便的进行各种有效性检查(如指令的重复定义、指令数大于255、程序用到未定义的指令等等)之外,更重要的是为了在改变指令集定义文件ss.def的同时不需要对源程序做任何改动,大大方便了用户对指令集的修改(这其实也是前面提到的编程技巧的根本目的所在,我们稍后会详细讨论) 模拟器初始化步骤三 —— 初始化存储系统 SimpleScalar是31位虚拟地址结构:【30:16】为块索引,【15:0】是块内偏移; 相应的,SimpleScalar只有一级页表,是一个存储块首址的数组mem_table,以虚拟地址的【30:16】为索引得到的数组项的值即为SimpleScalar的物理块首址,再以【15:0】为偏移量即可得到真正的地址; 值得注意的是,这些所谓的“物理地址”,其实都是宿主机的虚拟地址,是通过调用宿主机操作系统的内存分配函数得到的; 初始化内存系统就是将mem_table的每一项置为N

文档评论(0)

1亿VIP精品文档

相关文档