Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (15) - L1数据缓存/读写地址转换
L1 DCache (L1D)
L1D指的是一级数据缓存,通过缓存内部的数据结构(即硬件逻辑),管理所有类型的读存与访存请求:
- 允许投机式,乱序发射读存与写存请求
- 确保退役的读存与写存指令在退役时具有正确的数据
- 确保读存与写存操作遵循IA32与Intel 64指令集架构定义的访存顺序规则
表:L1D的构件
Component |
Sandy Bridge |
Nehalem |
DCU – Data Cache Unit |
32KB, 8 ways |
32KB, 8 ways |
Load Buffers |
64 entries |
48 entries |
Store Buffers |
36 entires |
32 entries |
Line fill buffers (LFB) |
10 entries |
10 entries |
DCU的容量是32K字节大小,8路组相联;DCU缓存行大小是64字节,组织在8个存储体中(即每个存储体保存8个字节)
在DCU内部,每次访问可达16字节,如果是256位Intel AVX指令操作则执行两个16字节访问。每个周期可以同时处理两个读存操作与一个写存操作。
L1D会维护不能立即完成的访存请求。导致访存延迟的因素有:缓存未命中,跨缓存行的非对齐访问,来自于前一个写存操作的数据还不能进行转发,读存操作遭遇存储体冲突,读存由于缓存行需要被替换而阻塞。
从微指令分配阶段直到退役阶段,L1D可以维护最多64条读存操作(注:正好是读存缓冲区的容量);可以维护最多36个写存操作(注:写存缓冲区容量),从分配阶段直到数据被提交到DCU中,或者对于非时效写存操作,直到数据写入到行填充缓冲区LFB中。
L1D可以处理多个未完成缓存未中事件,持续的为读存与写存操作提供服务。使用LFB缓冲区,可以同时管理最多10个缓存行未中请求。
L1D是回写式写分配(write-back write-allocate)高速缓存。回写式指的是命中DCU的写存操作不会更新更低层级的存储器(即不更新L2,L3和memory)。写分配指的是未命中DCU的写存操作会导致在DCU中分配一个新的缓存行。
Loads
L1D架构可以每周期服务两个读存操作,每个操作可以请求最大16字节长的数据。最多可以维护32个处于不同阶段的读存操作,从乱序引擎的分配阶段直到将数据传输到执行核阶段。
读操作可以:
- 尽管在指令顺序上写操作位于读操作之前,但是如果已知读操作地址与写操作地址没有冲突(即地址没有重叠或不相等),则读操作可以在写操作之前发生(即乱序执行)。
- 在前面的分支指令被计算决断之前,可以投机式地执行读操作。
- 以乱序且可以重叠的方式处理缓存未中情形
读操作不可以:
- 投机读不能产生任何处理器故障或陷阱
- 投机读不能访问非缓存的(uncacheable)存储器区域。
通常,读存操作时延是5个周期。当使用简单寻址模式时,即基址参量加上小于2048的位移量,这种类型的读存时延是4个周期。这种技术对指针追逐代码(pointer-chasing code)尤其有用。但是,由于执行栈旁路效应,整体时延会根据目标寄存器数据类型产生变化。
表:寻址模式对读操作的影响
Data Type/Addressing Mode |
Base + Offset > 2048; Base + Index [+ offset] |
Base + offset < 2048 |
Integer |
5 |
4 |
MMX, SSE, 128-bit AVX |
6 |
5 |
x87 |
7 |
6 |
256-bit AVX |
7 |
7 |
Stores
写存操作实际上分两个阶段执行:
- 执行阶段。把写操作的线性地址,物理地址,与数据填充到写存缓冲区。一旦地址和数据可用(即位于写存缓冲区中),数据即可被转发给后续需要的读存指令。
- 完成阶段。在写存指令退役后, L1D将数据从写存缓冲区移到DCU,每周期最多16字节。
Address Translation
DTLB每个周期可以执行总共三个线性地址到物理地址的转换操作,两个为读存操作,一个为写存操作。如果要转换的地址不在DTLB中(即DTLB未中),处理器会继续查找STLB(同时保存指令页面与数据页面的转换信息)。如果DTLB未中但是STLB命中,性能损失是7个周期。除了4KB,2MB/4MB的页面,大页面转换支持还包括1GB页面。
表:DTLB和STLB参数
TLB |
Page Size |
Entries |
DTLB |
4KB |
64 |
2MB/4MB |
32 |
|
1GB |
4 |
|
STLB |
4KB |
512 |
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (15) - L1数据缓存/读写地址转换相关推荐
- Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (16) - L1数据缓存/存储转发访存消歧存储体冲突
Store Forwarding 如果读存操作紧跟着写存操作,且要读取的数据包含在要写入的数据中,则数据可能可以从写操作直接转发给读操作.这个过程叫做"存储-读取转发",简称为&q ...
- Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (1) - 特性概述
Intel Sandy Bridge/Ivy Bridge Microarchitecture Intel Sandy Bridge微架构继承了Intel Core微架构与Nehalem微架构的成功之 ...
- Intel Haswell/Broadwell架构/微架构/流水线 (2)-流水线前端
The Front End 除了继承了Sandy Bridge/Ivy Bridge微架构的前端特性,Haswell微架构对流水线前端做的额外增强如下: 微指令缓存(uop cache,即decode ...
- Intel, AMD及VIA CPU的微架构(39,完)
21. 微架构的比较 已经调查的最先进微架构代表了不同的微架构核心:AMD,Pentium 4(NetBurst),Pentium M与Intel Core 2核心.现在我将讨论这些微架构的优缺点.我 ...
- Intel Haswell/Broadwell架构/微架构/流水线 (8)-Broadwell微架构
The Broadwell Microarchitecture Intel Core™ M处理器基于Broadwell微架构.Broadwell微架构从Haswell演进而来同时还提供了多种增强.本节 ...
- Intel Core Enhanced Core架构/微架构/流水线 (3) - 流水线概述
Intel® Core Microarchitecture Pipeline Overview Intel Core微架构的流水线包括: 有序发射前端,从内存中获取指令,利用4个指令译码器将x86指令 ...
- Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (20) - IvyBridge微架构
Intel® Ivy Bridge Microarchitecture 第三代Intel Core处理器是基于Ivy Bridge微架构的.上述的Sandy Bridge微架构的特性也都适用于Ivy ...
- Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (19) - 系统代理
System Agent 在Sandy Bridge微架构中实现的系统代理包括了如下的组件: 一个总裁器,用于管理所有的访问请求,并将这些请求路由(即转发)到正确的位置上.访问请求可能来自于环域(ri ...
- Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (18) - 数据预取
Data Prefetching 使用软件预取指令,硬件预取机制,或者两者的任意组合,都可以将数据投机式地加载到L1D中. 程序员可以使用4条SSE预取指令来实施软件控制的预取操作.这些指令给处理器提 ...
最新文章
- 2022-2028年中国金融云行业市场研究及前瞻分析报告
- SAP MM Return Purchase Order之使用
- 在sql查询中使用表变量
- python装饰器_Python装饰器是个什么鬼?
- Java线程池Executor框架
- Python Django 常用字段类型
- Java Ajax jsonp 跨域请求
- 开发app用户协议_APP软件开发如何让用户更开心地付钱?
- matlab宏参赛,MATLAB杯无人机大赛 | 决赛通知!
- 一个学妹写的按键检测函数把我秀翻了!
- Log4j2完整XML参考(详细注释说明)
- 12.11团队任务汇总
- alisql mysql_AliSQL 5.6.32 vs MySQL 5.7.15抢鲜测试
- 电脑只能上微信不能打开网页_能上微信不能打开网页
- 吴伯凡-认知方法论-如何做到真正的反思
- 2015全国硕士研究生计算机考研真题(附答案)
- 关于windows下的System32与SysWOW64两个文件夹
- excel 设置隔行变色功能
- CentOS7.4下安装Oracle 11gR2
- 2014 C专科C组第五题 套娃
热门文章
- 如何读取tensorboard文件 展现可视化
- 代数学笔记3: 分裂域
- fpga 峰值采样_FPGA开发者都喜欢用的通用高性能电源解决方案
- CSDN的MarkDown编辑器插入图片时调整大小
- wepy小程序踩坑-未发现相关 sass/less 编译器配置,请检查wepy.config.js文件
- Python3小程序:把连续的16进制UTF8编码转换为字符串
- oracle怎么扩大连接数,如何增加ORACLE连接数
- linux 运行jar main,Maven打包生成jar包并在linux下启动main方法
- 实现石头剪刀布获胜法_用java实现一个猜拳小游戏
- svm matlab 画图,matlab 画图