当前位置: 首页 > news >正文

网站开发做账四川网站建设外包服务

网站开发做账,四川网站建设外包服务,不让人看出wordpress建的站,中山网官网点击蓝字关注我们1概述对于一个简单的计算机系统模型#xff0c;我们可以将存储器系统看做是一个线性的字节数组#xff0c;而 CPU 能够在一个常数时间内访问每个存储器的位置。实际上#xff0c;存储器系统#xff08;memory system#xff09;是一个具有不同容量、成本和…点击蓝字关注我们1概述对于一个简单的计算机系统模型我们可以将存储器系统看做是一个线性的字节数组而 CPU 能够在一个常数时间内访问每个存储器的位置。实际上存储器系统memory system是一个具有不同容量、成本和访问时间的存储设备的层次结构。CPU 寄存器保存着最常用的数据。靠近 CPU 的小、快速的高速缓存存储器cache memory做为一部分存储在相对慢速的主存储器main memory中数据和指令的缓冲区域。主存缓存存储在容量较大的、慢速磁盘上的数据而磁盘常常作为存储在通过网络连接的其他机器的磁盘的缓存。Cache 基本模型问题CPU 通过总线从主存取指令和数据完成计算之后再将结果写回内存。这个模型的瓶颈在于 CPU 的超级快的运算速度和主存相对慢的多的运算速度无法匹配导致大量的时间都浪费在内存上。既然内存比较慢那么就尽量减少 CPU 对内存的访问于是在 CPU 和 主存之间增加一层 Cache如下图所示。cache在计算机中Cache 就是访问速度快的计算机内存被用来保存频繁访问或者最近访问的指令和内存。通常 Cache 的造价比较高所以相对 Memory 来说容量比较小,保存的数据也有限。总而言之由于 CPU 和内存之间的指令和数据访问存在瓶颈所以增加了一层 Cache用来尽力消除 CPU 和内存之间的瓶颈。这个模型如下图所示。Cache 模型局部性原理你可能会问为什么在CPU 和内存之间增加一层 Cache就可以尽力消除 CPU 和内存之间的瓶颈呢why cache work如上图所示是局部性原理principle of locality让 Cache 更好的工作。一个编写良好的计算机程序通常都具有良好的局部性locality,程序倾向于引用邻近于其他最近引用过的数据项的数据项或者最近引用过的数据项本身这种倾向性被称作局部性原理。局部性通常有 2 种不同的形式时间局部性temporal locality和空间局部性 (spatial locality)。在一个具有良好时间局部性的程序中被引用过一次的内存地址很可能在不远的将来会再被多次引用。在一个具有良好空间局部性的程序中如果一个内存位置被引用了一次那么程序很可能在不远的将来会引用附近的一个内存位置。程序是如何利用这个局部性原理呢Cachelocality从数据方面来说sum 变量在每次循环迭代的时候都会被访问符合时间局部性。采用步长为 1 的方式访问数组 a 符合空间局部性。从指令方面来说循环迭代符合时间局部性线性执行指令符合空间局部性对于程序员来说编写具有良好的局部性的程序是让程序运行更快的方法之一。存储器的层次结构存储器层次结构上图展示了一个典型的存储器层次结构。一般而言从高层往底层走存储设备变得更慢、更便宜和更大。在最高层是少量快速的CPU 寄存器CPU 可以再一个时钟周期内访问它们。接下来是一个或者多个小型到中型的基于 SRAM 的高速缓存存储器可以再几个 CPU 时钟周期内访问它们。然后是一个大的基于 DRAM 的主存可以在几十或者几百个时钟周期内访问它们。接下来是慢速但是容量很大的本地磁盘。最后有些系统甚至包括了一层附加的远程服务器上的磁盘要通过网络来访问它们例如网络文件系统Network File System,NFS这样的分布式文件系统允许程序访问存储在远程的网络服务器上的文件。存储器层次结构的核心是对于每个 k , 位于 k 层的更快更小的存储设备作为位于 k1 层的更大更慢的存储设备的缓存。也就是说层次结构中的每一层都缓存来自较低一层的数据对象。例如本地磁盘作为通过网络从远程磁盘取出文件的缓存以此类推知道 CPU 寄存器。cache上图展示了存储器层次结构中缓存的一般性概念。第 k1 层的存储器被划分成连续的数据对象组块chunk,称为块block。每个块都有一个唯一的名字或者地址以区别其他的块。例如第 k1 层存储器被划分成 16 个大小固定的块编号为 0 ~ 15。第 k 层的存储器被划分成较少的块的集合每个块的大小与 k1 层的块的大小一样。在任何时刻第 k 层的缓存包含了第 k1 层块的一个子集的副本。例如第 k 层的缓存有 4 个块的控件当前包含了 89143 的副本。数据总是以块大小为传输单元在第 k 层 和 第 k1 层之间来回复制的虽然在层次结构总任何一对相邻的层次之间块大小是固定的但是其他的层次对之间可以有不同的块大小。例如 L1 和 L2 之间的传送通常使用的是几十个个字大小的块而 L5 和 L4 之间的传送用的是大小为几百或者几千字节的块。一般而言层次结构中较低层离 CPU 较远的设备的访问时间较长因此为了补偿这些较长的访问时间倾向于使用较大的块。cache hit当程序需要第 k1 层的某个数据对象 d 时它首先会在当前存储在第 k 层的一个块中查找 d。如果 d 刚好缓存在第 k 层那么就是缓存命中。该程序直接从第 k 层读取 d根据存储器层次结构的性质从 k 层读取数据显然比从 k1 层读取数据更快。如上图所示一个具有良好时间局部性的程序可以从块 14 中读出一个数据对象得到一个对 k 层的缓存命中 。cache miss如果第 k 层中没有缓存数据对象 d那么就是我们所说的缓存不命中 cache miss。当发生缓存不命中时第 k 层的缓存从第 k1 层缓存中取出包含 d 的那个块如果第 k 层的缓存已经满了那么可能会覆盖现存的一个块。覆盖一个现存的一个块的过程称为替换或者驱逐。被替换的块有时也称作牺牲块。决定替换哪个块是由缓存的替换策略来控制的替换策略有随机替换和最近最少被使用LRU替换策略。高速缓存存储器早期的计算机系统的存储器结构只有三层CPU 寄存器 DRAM 主存磁盘。由于 CPU 和主存之间逐渐增大的速度差距系统设计者在 CPU 和 主存之间插入了一个小的 SRAM 高速缓存存储器称为 L1 高速缓存。随着 CPU 和主存之间逐渐增大的速度差距系统设计者在 L1 和 主存之间插入了一个更大的 SRAM 高速缓存存储器称为 L2 高速缓存。高速缓存存储器的典型总线结构假设一个计算机系统其中每个存储器地址 m 位形成 M 2^m 个不同的地址。如下图所示。一个机器的高速缓存被组织成一个有 S 2^s 个高速缓存组cache set的数组。每个组包含 E 个高速缓存行cache line,每个行由一个 B 2^b 字节的数据块组成一个有效位valid bit指明这个行是否有效t m -sb个标记位tab bit他们唯一地标识存储在这个高速缓存行中的块。Cache Organization根据每个组的高速缓存行数 E高速缓存可以被分为不同的类每个组只有一行E 1的高速缓存成为直接映射高速缓存。下面我们以直接映射高速缓存来讲解。E1假设有这么一个系统它有一个 CPU一个寄存器文件一个 L1 高速缓存和一个主存。当 CPU 执行一条读内存字 w 的指令它向 L1 请求这个字如果 L1 有 w 的副本那么 L1 高速缓存命中高速缓存取出 w返回给 CPU。若是不命中当 L1 向主存请求包含 w 的块的副本时CPU 必须等待。当被请求的块从内存到达 L1 时L1 将这个块存放在它的一个高速缓存行里面然后取出 w,返回给 CPU 。高速缓存上面的工作过程分为 3 个步骤组选择行匹配字抽取第一步直接映射高速缓存的组选择。高速缓存从 w 中取出 s 个组索引位。例子中的组索引位 00001 定位到组 1。直接映射高速缓存的组选择第二步直接映射高速缓存的行匹配。由于只有一个高速缓存行而且有效位也设置了所以这个行是有用的从 w 中取出标记位 t 与高速缓存行中的标记位相匹配所以缓存命中。直接映射高速缓存的行匹配第三步直接映射高速缓存的字选择。一旦缓存命中那么我们就知道 w 就在这个块中的某个位置。我们把块看成一个字节的数组而字节偏移是到这个数组的索引。所以最后一步是确定所需要的字在块中的偏移位置。例子中的块偏移是 100它说明了 w 的副本是从块中的字节 4 开始的假设字长为 4 字节。第四步直接映射高速缓存不命中的行替换。如果缓存不命中那么它需要从存储器层次结构中的下一层取出被请求的块然后将新的块存储在一个高速缓存行中。对于直接映射高速缓存来说每个组只要一个行替换策略就是用新取出的行替换当前的行。编写高速缓存友好的代码确保代码高速缓存友好的基本方法有 2 种让最常见的情况运行的快。尽量减少每个循环内部的缓存不命中数量。int sumvec(int v[n]) {int i, sum  0;for (i  0; i  N; i){sum  v[i];} return sum; }首先对于局部变量 i 和 sum循环体有良好的时间局部性。对数组 v 的步长为 1 的引用对 v[0] 的引用会不命中而对应的 v[0] ~ v[3] 的块会被从内存加载到高速缓存中因此接下来的三个引用都会命中以此类推四个引用中三个会命中这个是我们能做到的最好的情况了具有良好的空间局部性。总结作为一个程序员需要理解存储器的结构层次因为它对应用程序的性能有巨大的影响。如果你的程序需要的数据是存储在 CPU 寄存器中的那么在指令的执行期间在 0 个周期内就可以访问到它们如果在高速缓存中需要 4 ~ 75 个周期。如果存储在主存中需要上百个周期如果存储在磁盘上大约需要几千万个周期。如果理解了系统是如何将数据再存储器层次结构中上上下下移动的那么就可以在编写自己的应用程序的时候使得他们的数据项存储在结构层次中较高的地方以便 CPU 可以更快的访问到它们。编程时候可以注意以下几点让程序性能更好1.重复引用同一个变量的程序有良好的时间局部性2.具有步调长度为k的引用模式程序步调越小空间局部性越好;3.循环通常具有很好的空间局部性  时间局部性;4.数组通常具有很好的空间局部性;参考本文是华盛顿大学的公开课 《 The Hardware / Software Interface 》的课程笔记该课程的参考书籍是大名鼎鼎的 CSAPP 也就是《 深入理解计算机系统 》这书。文章截图来源于课程文章的内容也参考了 CSAPP 的书本内容。https://courses.cs.washington.edu/courses/cse351/17wi/videos.htmlhttps://book.douban.com/subject/26912767/*声明本文于网络整理版权归原作者所有如来源信息有误或侵犯权益请联系我们删除或授权事宜。戳“阅读原文”我们一起进步
http://wiki.neutronadmin.com/news/16515/

相关文章:

  • 长沙设计网站排名企业品牌网站营销
  • 洛阳建站建站源码
  • 青岛网站建设定制官方网站建设方案图
  • 网站后台的编辑器不显示祝桥建设网站
  • 信息公开和网站建设工作总结网站建设pc指什么
  • 网站建设 会计分录网店运营
  • 上海阀门网站建设六安市城市建设档案馆网站
  • 企业网站建设产品设计书asp做网站
  • 工程机械网站设计优秀网站架构
  • 常州网站建设企业人力资源网站开发说明书
  • 上传网站代码媒体邀约
  • 找个人合伙做网站十堰秦楚网论坛十堰城事
  • 苏省住房和城乡建设厅网站首页广州网站建设骏域网站
  • 北京市建设工程网郑州seo排名工具
  • 石家庄微信网站你喜欢的公司网站
  • 做项目网站pluto wordpress
  • h5免费模板网站淘宝作图在哪个网站上做图
  • 怎样搭建自己的网站wordpress 建的网站吗
  • 1企业网站案例网络服务遇到问题请检查网络状况或稍后再试吧
  • 网站需求说明wordpress 过滤插件下载
  • 网站开发技术合作协议书word模板免费下载素材
  • 国贸做网站公司分销网站有哪些
  • 查看网站后台登陆地址家政门户网站源码
  • 北京建设质量协会网站wordpress html5 音乐
  • 网站建设 软件有哪些方面建筑设计文字说明
  • 台州企业网站搭建图片访问国外的网站很慢
  • 西安网站制作顶尖公司展示网站报价方案
  • 广东省高校质量工程建设网站家具定制
  • 下载做网站ftp具体步骤南昌地宝网租房信息网
  • 嘉鱼网站建设多少钱网络营销案例具体分析