5.4 Stream Buffer
来源:互联网 发布:爱特数据恢复中心 编辑:程序博客网 时间:2024/06/06 13:19
Stream Buffer是一种广义Cache,主要功能是避免因为预读而造成的Cache Pollution问题。当采用该机制时,处理器可以将预读的数据序列放入Stream Buffer中而不是放入Cache,如果处理器使用的数据没有在Cache中命中,将首先在Stream Buffer中查找,采用这种方法可以消除预读对Cache的污染,但是也因此增加了系统设计的复杂性。Stream Buffer的组成结构如图5‑9所示。
在一个StreamBuffer中,由多个Entry组成,在这个Entry中可以存放一个或者多个Cache Block,也包含若干个状态位。Stream Buffer的每一个Entry由Cache Block,Valid位和与此对应的地址Tag组成。其中Valid位表示当前Cache Block中的数据是否有效,而地址Tag用来进行地址比较。Stream Buffer的使用方法与FIFO类似,从Front指针处开始使用,新的数据将填入Rear指针的位置。
出现CacheMiss时,微架构首先在Stream Buffer的Front开始寻找数据,如果命中,该数据才预读进入Cache,从而不会造成Cache Pollution,同时预读进行Cache的数据将从Stream Buffer的头部移除。随后微架构根据Prefetch Address从其下Cache Hierarchy中获得Cache Block,并填写Rear指针对应Entry的Tag信息,数据返回时将填写相应的Cache Block,并将Valid位置为有效。
如果数据在StreamBuffer中Miss,而且系统中只有一个Stream Buffer,该Stream Buffer将被刷新,并试图建立新的预读序列。显然在多数情况下,设立一个Stream Buffer并不合理,在一个实际的应用中,一个任务经常会访问多个Stride不同的数据序列,如图5‑8所示。为此在现代微架构中,一般设置多个Stream Buffer,即Multi-Way Stream Buffers,其组成结构如图5‑10所示。
当出现Stream BufferMiss时,将使用某种替换算法,LRU或者PLRU,替换其中的一个Stream Buffer,以装填新的访问序列。当使用这种结构时,如果一个任务需要访问Stride不同的几种数据序列时,可以使用不同的Stream Buffer,从而有效提高了Stream Buffer的利用率。在一个微架构的具体实现中还可以将Stream Buffer与Lookahead Data Prefetching方式联合使用,其结构示意如图5‑11所示。
即便是使用这种硬件预读方式,也无法彻底解决因为预读带来的Cache Pollution问题,很难解决预读数据的及时有效等一系列。硬件预读机制不断的发展演变过程,与程序的分支预测有某些相近之处,其本质都是硬件自学习数据访问轨迹的过程。
各类StridePrefeching,Distance Prefeching和Global Histrory Buffer Prefeching算法,其本质均是如此,没有必要对此再一一进行介绍。很多从Qualitative Research看起来非常不错的预读算法,其Quantitative Analysis的最终结果未必能够超过OBL算法。这些优化方法都有较强的针对性,在某类Access Pattern之下有较好的表现,而在其他情况之下并不适用。在Prefectch这个领域,有时简单逻辑获得的效果并不弱于复杂逻辑。
这也引发了一个思考,是否应该把更多的硬件资源用于微架构的其他部分,而非用于硬件预读。一些简单的方法可能就是最优,比如OBL实现和最基本的Stream Buffer。这一切依然是一个深层次的Trade-Off问题,没有优劣之分。
[1]与[20]中的Stream Buffer示意图相比,[94]中的图片更为直观一些。
- 5.4 Stream Buffer
- buffer stream FIFO
- stream buffer原理
- Stream和Buffer
- Node Buffer/Stream 内存策略分析
- Node入门--8-->Buffer&Stream
- 黑马程序员—JAVA IO(Buffer和Stream)
- Google Ptotocol Buffer(3)—stream与message;
- nio.FileChannel 、io.Stream 和 io.buffer速度的比较
- Stream
- stream
- stream
- Stream
- stream
- stream
- Stream
- stream
- Stream
- 4.7 Case Study on Sandy Bridge C…
- 第5章 Data Prefetch
- 5.1 数据预读
- 5.2 软件预读
- 5.3 硬件预读
- 5.4 Stream Buffer
- 结束语
- 参考资料
- 浅谈Cache Memory--目录
- 后科技时代的思考
- 【自考】-信息资源管理学习导图
- 后科技时代--处理器的思考
- 后科技时代--操作系统的思考
- C# DataGridView 获取当前单元格输入内容