这一节是我准备最后书写的内容,在此之前最后一章的书写早已完成。待到结束,总在回想动笔时的艰辛。这些艰辛使我选择一个Case Study作为结尾,因为这样做最为容易。这些Case实际存在的,不以你的喜好而改变。缺点与优点都在你面前,你无需改变,只需要简单的去按照事实去陈述。

Sandy Bridge是Nehalem微架构之后的Tock,并在Nehalem的基础上作出的较大的改动。本节重点关注Cache Hierarchy上的改动。鉴于篇幅,鉴于没有太多公开资料,我并不能在这里展现Sandy Bridge微架构的全貌,即便只限于Cache Hierarchy层面。这一遗憾给予我最大的帮助是可以迅速完成本节。

Intel并没有公开Sandy Bridge的细节,没有太多可供检索的参考资料。David Kanter在Realworldtech上发表的文章[69][99]较为详尽,但这并不是来自官方,鉴于没有太多公开资料,本篇仍然使用了David Kanter的文章。虽然我知道真正可作为检索的资料是Intel发布的Intel 64 and IA-32 Architectures OptimizationReference Manual中的第2.1.1节[98]和Intel在2010年IDF上公开的视频http://www.intel.com/idf/audio_sessions.htm[1]。

Sandy Bridge包含两层含义。首先是Sandy Bridge微架构,即Core部分,由指令流水,L1 Cache和L2 Cache组成,如图4‑16所示。其中指令流水的Scheduler部件,和Load,Store部件需要重点关注,最值得关注的是L1和L2 Cache的组成结构。

从CPUCore的角度上看,Sandy Bridge与Nehalem相比,并没有太多质的变化。最值得关注的是Sandy Bridge增加的L0 Instruction Cache和PRF(Physical Register File)。L0 Instruction Cache也被称为Decoded μops Cache,这是Sandy Bridge在指令流水中相对于Nehalem微架构的重大改进。PRF替换了Nehalem微架构使用的CRRF(Centralized Retirement RegisterFile)。PRF不是什么新技术,只是Intel实现的晚了些。

在Core和Nehalem微架构中,每一个μops包含Opcode和Operand。这些μops在经过指令流水执行时需要经过若干Buffer,有些Buffer虽然只需要Opcode,但是也必须要同时容纳Operand,因而带来了不必要的硬件开销。在Core微架构时代,Operand最大为80b,Nehalem为128b,到了Sandy Bridge微架构,Operand最大为256b。

如果SandyBridge不使用PRF,支持AVX(Advanced Vector Extension)的代价会变得无法承受,因为有些AVX指令的Operand过长。AVX的出现不仅影响了指令流水线的设计,也同时影响了Sandy Bridge的Memory子系统的设计。我们首先关注指令执行部件中的Memory Cluster,Memory Cluster即为LSU,其结构如图4‑17所示。

与Nehalem微架构在一个Cycle中只能执行一条128b的Load和Store指令[1][12]相比,Sandy Bridge微架构在一个Cycle中可以执行一条128b的Load和一条128b的Store指令,或者两条Load指令,进一步提高了Load指令的执行效率,在微架构设计中,通常会优先考虑Load指令,而不是Store指令。如果将Store指令提高为两条,其中因为Memory Consistency引发的同步并不容易处理。也因为这个原因,Sandy Bridge设置了两条Load通路,LSU与L1 Data Cache间的总线宽度也从Nehalem微架构的2×128b提高到3×128b。

合并Load和Store Address部件在情理之中,因为Load操作和Store Probe操作有相近之处,在现代处理器中,Store操作的第一步通常是Read for Ownership/Exclusive,首先需要读取数据后,再做进一步的处理。

在SandyBridge中,FLC和MLC的组成结构与Nehalem微架构类同。最大的改动显而易见,是在L1 Cache之上多加了一个读端口。单凭这一句话就够工程师忙碌很长时间。在Cache Memory层面任何一个小的改动,对于工程师都是一场噩梦。

其中FLC由指令Cache与数据Cache组成,由两个Thread共享;MLC为微架构内部的私有Cache。L1指令和数据Cache的大小均为32KB,MLC的大小为256KB。FLC和MLC的关系为NI/NE,组成结构为8-Way Set-Associative,Cache Block为64B,MPMB,Non-Blocking,Write-Allocate,Write Back和Write-Invalidate。Cache Coherence Protocol为MESI。

这些仅是SandyBridge微架构,即Core层面的内容。Sandy Bridge的另一层含义是Sandy Bridge处理器。Sandy Bridge处理器以Sandy Bridge微架构为基础,包括用于笔记本和台式机的Sandy Bridge处理器,和Server使用的Sandy Bridge EP处理器。但是Sandy Bridge和Sandy Bridge EP在Uncore部分的设计略有不同,本节重点讲述Sandy Bridge EP处理器。

Sandy Bridge EP处理器由CPU Core,iMC控制器(Home Agent)[98],Cache Box[1][99],PCIe Agent,QPI Agent和LLC(L3 Cache)组成,由Ring Bus(Ring-Based的Interconnect)连接在一起,并在其内部集成Graphics Controller,其组成结构如图4‑18所示。

其中CacheBox是Core与Uncore部分的连接纽带。如图4‑18所示,Cache Box提供了三个接口,与CPU Core,LLC和Ring Bus的接口。Cache Box的主要功能是维护Sandy Bridge EP处理器中CPU Core与Core间的Memory Consistency,并将来自CPU Core的数据请求发送到合适的LLC Slice或者其他设备中[1]。

Sandy BridgeEP处理器的LLC采用Distributed方式,每一个CPU Core都有一个对应的LLC Slice,每个Slice的大小可以是0.5/1/1.5/2MB,可以使用4/8/12/16-Way Associated方式。这不意味着每一个CPU Core都有一个私有Slice。

来自CPUCore的数据访问在经过Cache Box时,首先进行Hush,并通过Ring Bus转发到合适的Cache Slice。但是从逻辑层面上看这些Slice组成一个LLC。Sandy Bridge EP处理器的LLC与Core内Cache的关系是Inclusive,与Nehalem的L3 Cache类同。这意味着空间的浪费,也意味着天然的Snoop Filter[99]。

所有CPUCore,LLC Slice,QPI Agent,iMC,PCIe Agent,GT(Graphics uniT)通过Ring Bus连接在一起[1][99]。Ring Bus是Sandy Bridge EP处理器的设计核心,也意味着GT可以方便的与CPU Core进行Cache Coherence操作。这在一定程度上决定了Sandy Bridge处理器横空出世后,基于PCIe总线的Nvidia Graphics Unit黯然离场。

Sandy BridgeEP处理器的Ring Bus,采用Fully Pipelined方式实现,其工作频率与CPU Core相同,并由四个Sub-Ring Bus组成,分别是Data Ring,Request Ring,Acknowledge Ring和Snoop Ring[1],其中Data Ring的数据宽度为256位。这些Sub-Ring Bus协调工作,共同完成Ring Bus上的各类总线Transaction,如Request,Data,Snoop和Response。采用4个Sub-Ring Bus可以在最大程度上使不同种类的Transaction并发执行。

Sandy BridgeEP处理器的这些Sub-Ring Bus谈不上是什么创新,所有使用了Ring Bus结构的现代处理器都需要这么做。由于Dual Ring的存在,Sub-Ring中通常含有两条总线,可能只有Snoop Ring除外,所以在Sandy Bridge的Ring Bus至少由7条Bus组成[1]。

在RingBus上,还有两个重要的Agent,一个是Memory Agent,另一个是QPI Agent。其中Memory Agent用来管理主存储器,包括iMC,而QPI Agent用于管理QPI链路,并进行与其他Sandy Bridge EP处理器互联,组成较为复杂的ccNUMA处理器系统。

以上是对Sandy BridgeEP处理器与Memory Hierarchy结构的简单介绍,下文将以此为基础进一步说明Sandy Bridge EP处理器如何进行Load操作。

剩余的内容需要等待Intel公开Sandy Bridge EP使用的Transaction Flow,估计会在Sandy Bridge EP正式发布时公开。Sandy Bridge EP的正式发布推迟到了2012年Q1,那时我会重新书写本节。整篇文章需要更改的地方还有很多。


[1] 这些说法仅是猜测。SnoopRing有两条总线,至少我现在想不出什么简单的方法确保Memory Consistency。

4.7 Case Study on Sandy Bridge C…相关推荐

  1. CPU Wiki: Sandy Bridge Microarchitecture 前端(上)

    Sandy Bridge 可以看做是自从NetBurst和P6之后的一个全新microarchitecture.Sandy Bridge回溯了最去的drawing board阶段,从P6和NetBur ...

  2. Case study:在数据库网页中设计数据排序工具

    一.目的 该笔记的目的是引导读者在已搭建的数据库网页的基础上,利用JS设计数据排序工具.其效果如图1所示."Order by"下拉列表框由一系列字段组成,如"Locati ...

  3. Case Study: 利用PHP获取关系型数据库中多张数据表的数据

    一.目标 该笔记的目的是引导读者借助WampServer平台和MySQL数据库,利用HTML/CSS/JS/PHP设计一个多数据表关联的网页.在上一个案例(Case Study: 利用JS实现数据库网 ...

  4. Case Study: 利用JS实现数据库网页的数据分页、数据选择、数据详细信息查看功能

    一.目标 该笔记的目的是引导读者借助WampServer平台和MySQL数据库,利用HTML/CSS/JS/PHP设计一个能够进行实现数据分页显示.数据选择.数据详细信息查看功能的数据库网页.该数据库 ...

  5. Case Study: 利用JS设计高级检索功能通过PHP获取MySQL数据

    一.目标 该笔记的目的是引导读者借助WampServer平台和MySQL数据库,利用HTML/CSS/JS/PHP设计一个含有高级检索功能的数据库网页.该功能效果如图1所示.用户在文本框中输入相应内容 ...

  6. Customer Success Case Study Library

    Customer Success Case是一个比较值得借鉴的地方. Citrix社区The Connection,提供了分享企业虚拟计算的成功经验,社区的一些好处也不介绍了,复制过来: Promot ...

  7. FetchAI Case Study

    FetchAI Case Study Background Location Contact Info Web: https://fetch.ai/ Objectives Methodologies ...

  8. Case Study. Technical and Commercial understating. Internal use only.

    Case Study. Technical and Commercial understating. Internal use only. You're a consultant for a Tech ...

  9. 李宏毅机器学习课程---2、Regression - Case Study

    李宏毅机器学习课程---2.Regression - Case Study 一.总结 一句话总结: 分类讨论可能是比较好的找最佳函数的方法:如果 有这样的因素存在的话 模型不够好,可能是因素没有找全 ...

  10. Overview of ISA and TMG Networking and ISA Networking Case Study (Part 2)

                老方说:此篇文章摘自ISASERVER.ORG网站,出自Thomas Shinder达人之手.严重建议ISA爱好者看看. Published: Dec 16, 2008 Upd ...

最新文章

  1. mahout相关笔记
  2. [总结]博客聚合-cnblogs,wordpress,live writer,word2010
  3. Your First Concordion.Net Project (Part 5)-Running Specs with Gallio
  4. Vue.js 渲染函数 JSX
  5. W ndoWs7重启按F11没用,windows7无法正常启动按F8也没有效果的解决方法
  6. optparse接受带空格的参数值时,需要加双引号
  7. 戏说 Windows GDI (1)
  8. android 缩进轮播图,如何利用纯css实现图片轮播
  9. 链表的基本操作 java_详细实现单链表的基本操作【Java版】
  10. 统一帐号体系业务及模型
  11. [转]很经典的http协议详解
  12. html背景图平移显示一次,js实现单张图片平移切换效果
  13. 为了研究,可以在 Linux 内核中植入漏洞吗?
  14. 将log4j重定向到指定函数
  15. JAVA学习-类与对象(韩顺平java-高级篇)
  16. CCF论文会议 IEEE 如何查询某个会议期刊的所有文章
  17. 超像素评价(评估)标准
  18. Android FFMPEG音视频开发(一)
  19. c语言香农编码文件压缩,谈谈熵编码无损压缩的原理
  20. 阿里天池:Airbnb短租房数据集分析

热门文章

  1. 如何自学Java 经典
  2. 企业为什么选择软件定制开发?
  3. VSPD及友善串口调试助手下载地址
  4. h5支付不能打开支付宝 ios_iOS解决H5支付跳转到支付App及返回原App问题
  5. DlhSoft Kanban,WPF 的看板组件
  6. Amazon Alexa硬件方案选型
  7. echarts散点图使用(转:http://www.suchso.com/UIweb/echarts-sandiantu.html)
  8. 从雀书无代码应用——浅谈零代码开发平台(上)
  9. 精彩泄漏截图 2006最值得期待的游戏
  10. 三赢电商:拼多多店铺一直不发货怎么办?