【Swift:高级架构、流水线深度、内存延迟】
根据之前的发现,以及其它一些资料,Swift的高级架构应该是这个样子。虽然只是象征性的,不同单元的分布位置谁也不清楚,但总体应该差不了多少。
对比Cortex-A9:
Swift的前端从2宽度升级为3宽度,仍旧是个相对很小的乱序核心,但执行端口从3个增加到5个。注意专用的载入与存储单元,可能是浮点性能骤增的原因之一。
我们知道,高通Krait也是人家自己设计的CPU核心,但高通不肯公布任何具体资料。它也是类似的3宽度前端,但是7个执行单元只有4个端口,不过具体分布就不知道了。Intel Haswell发布前九个月就敢公开整数和浮点寄存器文件,高通的都出货半年了却连高级架构都不肯透露一点!
Cortex-A15的前端也是3宽度,号称拾取带宽比Cortex-A9翻番,还可以乱序执行更多类型的指令,并使用3个独立的发射池(issue pool)来满足8个独立的流水线,包括载入与存储、两个整数ALU、两个浮点/NEON、一个分支、一个乘除法。
Swift比它肯定要差多了,更可能和Krait处在类似的水平上。
流水线深度方面,Cortex-A8是13级,Cortex-A9精简为8级但频率基本不变(所以性能更突出),Cortex-A15则又加深到15级,高通Krait定制的是11级,顺便说Intel Atom拥有最深的16级。
Swift是多少呢?Anand Shimpi又写了两种不同的代码路径,分别有简单可预测的分支和复杂难预测的分支,最后以主代码循环的时钟周期衡量延迟。
无论简单还是复杂预测,Swift都和Cortex-A8差不多,但是要比Cortex-A9长很多,证明Swift的预测错误要比Cortex-A9多了大约50%,但是和Cortex-A8基本一致,复杂的稍多一点。据此猜测,Swift的流水线可能是12级的,跟高通Krait很接近。
但是尽管流水线深度加大了,苹果依然保住了IPC,从前边的Geekbench 2对比数据就可以看出来。应该是分支预测精度有了大幅度的改进,这也是加深流水线深度的时候芯片设计师必须注意的问题。苹果做得很好。
最后是内存延迟。iPhone 5性能测试显示了CPU核心内存带宽的大幅提升,但既然外部位宽仍是64-bit,所有这些改变肯定来自内部的缓存和内存控制器。继续自己写代码测试。
无论何种尺寸,Swift的延迟都是最低的,只不过4-16KB左右的时候差距不大。超过32KB(一级数据缓存容量)之后,Swift的优势就凸显出来了(Cortex-A8有256KB二级缓存所以有延迟增加很快)。这与其它iOS内存测试表现相符合。
低得多的内存延迟再配合专用的载入与存储端口,iPhone 5的内存性能相比iPhone 4S可以提升2.5-3.2倍。