《报告]SimpleScalar简介.ppt》由会员分享,可在线阅读,更多相关《报告]SimpleScalar简介.ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、SimpleScalar简介简介汇报人:胡 潇4/16/20231SimpleScalar简介概要nSimpleScalar Tool Set 简介n功能级模拟器设计的初步分析4/16/20232SimpleScalar简介附加论题n由SimpleScalar 的设计得到的启发(一种新颖的编程手法)4/16/20233SimpleScalar简介SimpleScalar Tool Set 简介nSimpleScalar定义定义:用软件模拟在单处理器单处理器系统中单线程单线程的运行情况,以此评估当前硬/软件设计的综合性能,为下一步的改进提供依据。n在体系结构体系结构上做到了一定的“可配置”,诸如
2、,可以以命令行参数的形式设置不同的ALU个数、流水线各阶段属性、cache大小及其关联策略、替换策略(replacement policy)、分支预测策略(branch predicting policy)等等,通过模拟得到的结果(profile)来指导对体系结构的进一步改进。n在软件软件方面可以通过模拟所得的性能结果(profile)来指导进一步的改进。4/16/20234SimpleScalar简介SimpleScalar Tool Set 简介n整个工具集结构概览C benchmark sourceSS librarySimulator SourceSimpleScalar assemb
3、lyObject filesSimpleScalar executablesPrecompiled SS binaries(test)SimpleScalar GCCSimpleScalar GASSimpleScalar GLDHost C compilerResultUtilities and ToolsSimulator4/16/20235SimpleScalar简介SimpleScalar Tool Set 简介n模拟器分类模拟器分类:u功能级模拟(功能级模拟(Functional simulation):粒度最粗,速度最快。包括两个模拟器:Sim-fast:简单的进行功能模拟 Sim
4、-safe:同时进行存取对齐和权限检查uCache模拟模拟(Cache simulation):以Cache性能为主要考察目标,速度较慢。包括两个模拟器:Sim-cache:接收Cache参数,进行针对Cache性能的模拟Sim-cheetah:采用Cheetah cache simulation engineu乱序模拟(乱序模拟(Out-of-order processor timing simulation):详细模拟了流水线的六个阶段,速度最慢。包括一个模拟器:Sim-outorder:基于Register Update Unit(?),支持out-of-order发射和执行4/16/2
5、0236SimpleScalar简介功能级模拟器设计的初步分析n基本原理和流程:u模拟器初始化初始化,并从编译生成的二进制文件(此文件具有一定的格式)中装载可执装载可执行程序行程序至模拟器的虚拟内存;u核心执行核心执行:模拟器逐条读取可执行程序中的命令,根据指令集定义文件ss.def中各种指令的操作描述,来完成整个程序的执行(其中包含有一个重要的编程技巧,稍后讨论);u执行结束,输出统计信息输出统计信息。下面详细介绍以上各步骤下面详细介绍以上各步骤4/16/20237SimpleScalar简介模拟执行流程n初始化初始化n核心执行n统计输出4/16/20238SimpleScalar简介模拟器
6、初始化步骤一 分析命令行参数n首先请注意:功能级模拟只接受默认的命令行参数,对体系结构不具备可配置性;(但是,由于前面提到的编程技巧的运用,可以对指令集方便的进行修改而不需要改变源程序,所要做的仅仅是重新编译而已)n构建全局的参数库(option database),记录模拟器型号以及各命令行参数,为以后使用提供方便,而实际上,在功能级模拟中只是根据命令行参数设定了一些全局的标志变量的值,如是否打印help等等,可以认为,该参数库对功能级模拟而言几乎无意义,但是在其他需要对体系结构进行配置的模拟器中是不可或缺的;n具体数据结构略,可见工作记录。4/16/20239SimpleScalar简介n
7、所谓指令译码器实际上是一个ss_opcode枚举型的全局数组ss_mask2op,每个元素存放的是SimpleScalar体系结构中的指令所对应的一个枚举值(0255)。SimpleScalar规定最多有255条指令,而数组ss_mask2op有256项,所以可以以指令的操作码(0 x010 xff)为索引,把定义了的指令映射到对应项中,在该项中写入一个枚举值(1255),而初始值0恰恰代表了未定义的指令;n为什么要做这样一个看似繁琐的操作码到枚举值的附加转换呢?目的除了能方便的进行各种有效性检查有效性检查(如指令的重复定义、指令数大于255、程序用到未定义的指令等等)之外,更重要的是为了在改
8、变指令集定义文件在改变指令集定义文件ss.def的同时不需要对源程序做任何的同时不需要对源程序做任何改动改动,大大方便了用户对指令集的修改(这其实也是前面提到的编程技巧的根本目的所在,我们稍后会详细讨论)模拟器初始化步骤二 初始化指令译码器4/16/202310SimpleScalar简介nSimpleScalar是31位虚拟地址结构:【30:16】为块索引,【15:0】是块内偏移;n相应的,SimpleScalar只有一级页表,是一个存储块首址的数组mem_table,以虚拟地址的【30:16】为索引得到的数组项的值即为SimpleScalar的物理块首址,再以【15:0】为偏移量即可得到真
9、正的地址;n值得注意的是,这些所谓的“物理地址”,其实都是宿主机的虚拟地址,是通过调用宿主机操作系统的内存分配函数得到的;n初始化内存系统就是将mem_table的每一项置为NULL。模拟器初始化步骤三 初始化存储系统4/16/202311SimpleScalar简介n程序由命令行指定的文件载入,该文件有一定的格式,其文件头和各个扇区(section)头中记载了诸如大小尾端标志、数据属于哪个段、数据应装入的虚拟地址等等信息;n载入过程:由宿主机操作系统分配存储空间,并建立页表,按照文件指定的地址装入程序的各段数据。然后模拟器初始化步骤四 装载程序至存储系统4/16/202312SimpleSc
10、alar简介n初始化栈、段信息,包括:注:堆栈段是反向增长,即其末址为7FFFC000-10000=7FFEC000然后模拟器初始化步骤四 装载程序至内存系统首 址大 小堆栈段ld_text_base:0 x7FFF C000ld_stack_size:10000H数据段ld_data_base:0 x1000 0000ld_data_size:由文件头中获得代码段ld_text_base:0 x0040 0000ld_text_size:装载时计算得到程序入口ld_prog_entry:由文件头中获得4/16/202313SimpleScalar简介n初始化堆栈u输入参数(此处的参数是给可执
11、行程序的参数,有别于SimpleScalar的命令行参数)个数写入栈顶u构造argv指针数组和envp指针数组,各指向对应参数所在的栈单元u分别将argv和envp数组中各参数值复制到对应的栈单元这到底是为了什么?模拟器初始化步骤四 装载程序至内存系统argc0 x7FFE C0004/16/202314SimpleScalar简介n模拟器核心的寄存器均以全局变量的形式给出;n初始化包括:u单精度浮点寄存器组regs_F(RF0RF31)置零u整数寄存器组regs_R(R0R31)置零,但栈顶地址寄存器R29置为ld_eviron_baseu存储乘除结果的高、低字寄存器regs_HI、regs
12、_LO置零u浮点条件码寄存器regs_FCC置零u程序寄存器regs_PC置为ld_prog_entry模拟器初始化步骤五 寄存器初始化4/16/202315SimpleScalar简介n功能级模拟可统计的信息包括:指令条数、运行时间、运行速度、各段参数n统计信息库中表示各信息的单元与表示该信息的全局变量相关联,模拟执行过程中,全局变量不断改变,但是无需对统计信息库做任何更改n有趣的是:对于数学表达式形式的统计信息,SimpleScalar仍然以字符串的形式记录在库中,当要输出统计信息时,用一个简单的编译器对该表达式进行解析,只要表达式合法,则能计算输出相应的信息模拟器初始化步骤六 设置统计信
13、息4/16/202316SimpleScalar简介n在这里,我们又一次看到了将已有程序指令的二进制操作码转换为枚举值的过程,这同样是为了支持前面所述的目标:指令集的独立可配置指令集的独立可配置(稍后将系统的回顾稍后将系统的回顾SimpleScalar为支持该目的所使用的技巧为支持该目的所使用的技巧)模拟器初始化步骤七 初始化程序指令4/16/202317SimpleScalar简介模拟器初始化回顾 .功能级模拟无法通过命令行参数的形式进行体系结构配置 构建命令行参数库构建命令行参数库 .将指令集定义中的指令映射到相应的枚举值 初始化指令译码器初始化指令译码器 .将一级页表表项全部置零 初始化
14、存储系统初始化存储系统 .从文件中读取程序并设置各段参数和程序入口 装载程序装载程序 .设置栈顶寄存器和PC值 初始化寄存器初始化寄存器.对于表达式类型的统计信息能够进行解析 构建统计信息构建统计信息4/16/202318SimpleScalar简介模拟执行流程n初始化(Accomplished)n核心执行核心执行n统计输出4/16/202319SimpleScalar简介功能级模拟器核心执行n一言以蔽之:逐条取入取入程序中的指令,按照ss.def中的描述进行操作操作,操作过程中改变改变统计信息变量n没有计时(time accounting)n没有并行n没有cachen没有指令检查n没有Deb
15、ug功能n但是,它快!4/16/202320SimpleScalar简介模拟执行流程n初始化(Accomplished)n核心执行(Accomplished)n统计输出统计输出4/16/202321SimpleScalar简介输出统计信息n将库中定义的统计信息输出4/16/202322SimpleScalar简介附加论题一个重要的编程技巧n目的:如前所述,支持指令集的独立可更改nss.def文件中所有的指令,都以宏DEFINST的统一形式给出,在与指令集相关的地方给出该宏的不同定义,然后一句简单的include“ss.def”让编译器自动生成代码去吧!4/16/202323SimpleScal
16、ar简介For Examplen登记指令集定义时:#define DEFINST(OP,)(OP)枚举类型ss_opcode定义为enum ss_opcode OP_NA=0,#include ss.def,OP_MAX;nNOTE:当OP_MAX大于255,则指令集太大4/16/202324SimpleScalar简介n初始化指令译码器时:#define DEFINST(OP,MSK,.)if(ss_mask2op(MSK)fatal(doubly defined mask value);if(MSK)SS_MAX_MASK)fatal();ss_mask2op(MSK)=(OP);于是,整个初始化数组ss_mask2op就仅剩一句话:#include“ss.def”For Example4/16/202325SimpleScalar简介n核心执行时:#define DEFINST(OP,.,EXPR)case OP:EXPR;break;于是整个核心执行过程就只是:switch(SS_OPCODE(inst)#include ss.def“For Example4/16/202326SimpleScalar简介THANK YOU ALL谢 谢 大 家Email:4/16/202327SimpleScalar简介