64-ia-32架构优化手册(9)

来源:互联网 发布:c 语言编译器安卓版 编辑:程序博客网 时间:2024/06/04 19:59

2.5.5.读写操作的增强

Intel微架构Nehalem的内存簇提供了以下增强以加速内存操作:

·        每周期一个128比特读与一个128比特写操作的峰值发布速率。

·        读写操作的更深缓冲:48个读缓冲,32个写缓冲以及10个填充缓冲。

·        快速非对齐内存访问,以及内存对齐危险(memory alignmenthazard)的强健处理。

·        改进用于对齐及非对齐情形的写转发。

·        用于大多数地址对齐的写转发。

2.5.5.1. 对齐风险的高效处理

缓存与内存子系统在各种工作负荷下处理很大部分指令。不同的地址对齐情形对内存及缓存操作将产生不同的性能影响。例如,L1的1周期吞吐率(参考表2-32)通常适用于L1缓存的自然对齐的读。但使用非对齐读指令(比如MOVUPS。MOVUPD,MOVDQU等)从L1访问数据,依赖于特定的微架构以及对齐情形,将经历不同程度的时延。

表2-32. 来自L1的MOVDQU地址对齐的性能影响

吞吐率(周期)

Intel Core i7处理器

45nm Intel Core微架构

65nm Intel Core微架构

对齐情形

06_1AH

06_17H

06_0FH

16B对齐

1

2

2

非-16B对齐,没有越过缓存

1

~2

~2

越过缓存行边界

~4.5

~20

~20

表2-32列出了发布MOVDQU指令以不同地址对齐从L1缓存读入数据的大致吞吐率。如果一个16字节读跨过了缓存行边界,前代微架构将经历软件可见的时延。

Intel微架构Nehalem提供了硬件增强来降低处理不同地址对齐的时延,包括越过缓存行。

2.5.5.2. 写转发增强

当一个读跟着一个写,并重新读入这个写操作写入内存的数据,在许多情形里微架构可以将这个数据直接从写转发给读。这个情况,称为写到读转发,通过使读直接从写操作获取数据,而不是通过内存系统,节省了几个周期。

要无时延地进行写到读转发,必须满足几个通用规则:

·        这个写必须是在这个读之前最后写入该地址的。

·        这个写在尺寸上必须不小于要读入的数据。

·        读入数据必须完全包含在之前的写中。

读写操作之间特定的地址对齐与数据大小将确定一个写转发情形是否可以继续进行数据转发,还是经由缓存/内存子系统经历一个时延。相比前代,45nm增强IntelCore微架构提供了更灵活的地址对齐与数据大小要求。Intel微架构Nehalem提供了额外的周期,允许更多情形可以快速地转发数据。

就16字节写操作而言的写转发情形显示在图2-12中。


2-12. 16字节写操作的写转发场景


Intel微架构Nehalem允许写到读转发继续,不管写地址对齐(图中白色空格对应不适用写到读转发的情形)。图2-13展示8字节以下写操作的情形。

2.5.6.REP字符串增强

REP前缀连同MOVS/STOS指令以及ECX中的一个计数值通常用来替代库函数,比如memcpy()/memset()。这些被称为“REP字符串”指令。这些指令的每次迭代可以byte/word/dword/qword粒度持续拷贝/写入一个值。使用REP字符串的性能特征归因于两个要素:启动开销以及数据传输吞吐率。

REP字符串性能特征的两个要素进一步随着粒度、对齐,及/或计数值而变化。通常,MOVSB用于处理非常小的数据块。因此,REPMOVSB的处理器实现对处理ECX< 4进行优化。以ECX> 3使用REPMOVSB将实现低的数据吞吐率,因为不仅有字节粒度数据传输,还有额外的启动开销。如果ECX< 4,MOVSB的时延是9个周期;否则ECX> 9的REPMOVSB具有一个50周期的启动代价。

随着ECX值递增,对更大粒度数据传输的REP字符串。REP字符串的启动开销展示出步进式递增:

·        短的字符串(ECX <= 12):REPMOVSW/MOVSD/MOVSQ的时延大约是20个周期。

·        快速字符串(ECX >= 76:不包括REPMOVSB):通过尽可能地以6字节移动数据片段,处理器的实现提供了硬件优化。如果其中一个16字节数据传输跨越缓存行边界,REP字符串的时延将发生变化:

-  没有分离(split-free):时延包含一个大约40个周期的启动代价,然后每64字节数据增加4个周期。

-  缓存分离(cache split):时延包含一个大约35个周期的启动代价,然后每64字节数据增加6个周期。

·        中型字符串长度:REP MOVSW/MOVSD/MOVSQ的时延具有一个大约15个周期的启动代价,加上每次以word/dword/qword迭代的1个周期。

相比之前的微架构,Intel微架构Nehalem在几个方面显著改进了REP字符串的性能:

·        相对于之前的微架构在大多数情形下启动开销降低了。

·        数据传输吞吐率比之前的微架构提升了。

·        为了让REP字符串工作在“快速字符串”模式,之前的微架构要求地址对齐。在Intel微架构Nehalem中,即使地址没有对齐到16字节,REP字符串也可以工作在“快速字符串”模式。

2.5.7.系统软件的增强

除了可以施惠于应用程序层面与系统层面软件的微架构增强,Intel微架构Nehalem改进了几个主要有益于系统软件的操作。

Lock原语:使用Lock前缀的同步原语(比如XCHG,CMPXCHG8B)比之前的微架构执行时延显著减少。

VMM开销改进:在之前的微架构上,虚拟机(VM)与其监管者(VMM)之间的VMX转换每次会占用数以千计的周期。在基于Intel微架构Nehalem的处理器中,VMX转换的时延已经降低了。

2.5.8.功耗的效率提升

Intel微架构Nehalem不仅为在大范围负载情形下的高性能以及低功耗性能设计,它还突出了系统空闲时的低功耗。Intel微架构Nehalem支持处理器特定的C6状态,它具有OS可以通过ACPI以及OS电源管理机制管理的最低漏电功耗。

2.5.9.Intel微架构Nehalem中的超线程技术支持

Intel微架构Nehalem支持超线程技术(HT)。其HT的实现提供了共享每个核中大多数执行/缓存资源的2个逻辑处理器。在Intel微架构Nehalem中HT实现与前代使用Intel微架构NetBurst的HT实现区别在几个方面:

·        Intel微架构Nehalem提供了4宽度的执行引擎,更多的功能执行单元耦合到3个能发布复合操作发布端口。

·        Intel微架构Nehalem支持集成内存控制器,它可以提供IntelCore i7处理器中高达25.6GB/sec的峰值内存带宽。

·        更深的缓冲以及改进的资源共享/划分策略:

-  用于HT工作的重复资源:寄存器状态,被重命名的栈缓冲,大页面ITLB。

-  用于HT工作的分区资源:在两个逻辑处理器之间静态分配读缓冲,写缓冲,重排缓冲,小页面ITLB。

-  HT工作期间竞争性共享资源:保留站,缓存层级,填充缓冲,DTLB0与STLB。

-  HT工作期间交替:前端工作通常在两个逻辑处理器间交替以确保公平。

-  HT不知道的资源:执行单元。