这是上的一篇文章的翻译。这个网站主要是一些cpu体系结构,指令级,优化相关的描述以及测试结果类似的文章,本人觉得相当不错。尤其相对于cpu设计,编译器设计,汇编语言编程等人员有很大价值。在主要有五篇文章,这是其中第三篇The microarchitecture of Intel, AMD and VIA CPUs中的第11章节。
最近由于研究汇编,cpu指令并行,在我的机器上做代码测试的时候,需要关注下skylake系列cpu,所以才有此文的翻译。由于本人对cpu微体系结构也是了解不多,所以有理解不正确的地方,大家提出来,我做改进。本文是microarchitecture的第11小节,主要是skylake系列的微结构介绍,各子小节编号都按照原文的编号对应往下排,下面是正文。
11 skylake以及其它lake系列cpu流水线
Skylake代表了Haswell和Broadwell设计的进一步发展。前端的缓存和译码器与Haswell的基本相同,但带宽有所增加,而执行引擎部分进行了一些重组以提高性能。带有Lake名称的多个后续处理器型号的流水线几乎与Skylake相同。它们的主要区别在于处理技术,内核数和缓存大小。
某些名为Skylake-X的Skylake版本支持AVX512指令集,此指令集定义了512位向量寄存器和掩码指令。 这包括指令子集AVX512F,VX512BW,AVX512DQ,AVX512VL和AVX512CD。AVX512指令非常高效。 但是,并不是所有lake系列都支持AVX512指令集,具有Lake名称的许多后续处理器型号都不支持AVX512。Skylake具有2-18核。 后来的较新的版本能够在每个内核中运行两个线程。 如第134页所述,大多数关键资源在同一内核中运行的两个线程之间共享。Skylake和Broadwell一样使用14 nm技术,但支持更快的DDR4 RAM。
11.1 流水线结构
skylake流水线与以前的Haswell and Broadwell设计非常相似,但是执行单元已经进行了一些重新组织,几乎所有重要指令都提供一个以上的执行端口。 这样设计使得每个时钟周期可以达到四条指令的吞吐量,这里的指令是指译码后的微指令。
另外和乱序执行相关的资源,也有很大的进步。 在Skylake,重排序缓冲区有224个条目。 保留站有97个条目。 根据英特尔的官方发布消息称,Skylake具有180个内部整数寄存器和168个矢量寄存器。
具有两个线程的cpu核,两个线程共享所有的流水线各部件。 当两个线程同时运行时,每个线程将获得总吞吐量的一半。
同时,这需要简单描述一下两个概念,以下都是个人理解,可能有误:
11.1.1 多发射(个人添加,不是原文)
多发射是指一个时钟周期“发射”多条指令。首先这是一个并行概念,硬件上至少是超标量,只有流水线结构不能够多发射。从字面意思理解,“发射”是一个时间点,不是时间段。然而究竟在流水线哪一时刻才是“发射”呢?个人理解指令”发射“出去就是执行,所以”发射’的目的地是执行部件。其实广义的理解,多发射是整个微结构上必须都具备并发能力才有多发射能力。整个流水线上不管任何一个阶段如果是串行的,如取址或译码单元只能串行取址或译码,那多发射有何意义呢。所以我的理解就是多“发射”就是可以同时执行多条指令,提高吞吐量。我主业是软件开发,偏低层一些。所以没有到达非要深入理解“发射”策略或者在哪阶段发射的地步。
11.1.2 乱序
其实这个容易理解,顺序执行就是从前往后按读取或者前后顺序踏踏实实的往前走。乱序就是某些情况下,排在队列后面的可以先执行,而排在前面的后执行。排在后面的指令要先执行的话,必须要满足不相关的前提条件。读取指令是按照顺序读取的,执行完从部件输出的时候也必须是顺序的,而中间执行则可以乱序。这样你的程序执行才是你的代码想要的结果。乱序需要理解的几个概念:寄存器重命名(register aliasing)、重排序缓存(Reorder Buffer, ROB)、保留站(Reservation Station, RS):
寄存器重命名(register aliasing):
指令译码后,生成微指令,为了后面的乱序执行和一些不相关指令可以并行在多个执行部件中执行,需要对原来的体现在汇编语言中的寄存器(AX, R8...)用cpu内部寄存器重命名。
重排序缓存(Reorder Buffer, ROB):
乱序执行,不是随机执行,乱也要有顺序,怎么个乱法,就在这里安排的。
保留站(Reservation Station, RS):
这个主要作用是存放排序好的待执行的微指令,这些微指令可以直接送往各个执行机构。最主要的执行完以后还得回到保留站里,再按照一定顺序退出。
未完,待续
阅读(1415) | 评论(0) | 转发(0) |