文章摘要
AMD Zen 5处理器在性能上实现了显著提升,指令获取率从每时钟周期16字节增加到32字节,解决了长期存在的瓶颈问题。Zen 5每时钟周期可执行多达六条指令(偶尔八条),增加了执行单元数量,包括六个整数ALU和四个地址生成单元。高性能要求程序员避免长依赖链,以充分利用其高吞吐量。
文章总结
Zen 5与Arrow Lake的新特性
在完成对AMD Zen 5的测试后,其表现令人印象深刻。Zen 5在多个方面提升了CPU性能,达到了前所未有的水平。
首先,指令获取速率从每时钟周期16字节提升至32字节。这一改进解决了长期以来在Intel和AMD处理器中存在的瓶颈问题。指令长度通常在1到15字节之间,而AVX512指令的长度为6到11字节。此前,处理器的其他部分能够每时钟周期处理四条或更多指令,但指令获取速率限制了整体性能。只有那些能够完全放入微操作缓存的循环才能充分利用高吞吐量。
Zen 5每时钟周期最多可执行六条指令(偶尔可达八条)。如此高的吞吐量要求程序员在设计软件时避免过长的依赖链。依赖链指的是每条指令都依赖于前一条指令的结果,导致无法同时执行多条指令。
Zen 5的执行单元数量也有所增加,包括六个整数ALU、四个地址生成单元、三个分支单元、四个向量ALU和两个向量读写单元。所有常见指令都有多个执行单元可供选择,因此很少需要等待空闲单元。每时钟周期可以执行六条简单的整数指令,而向量和浮点指令则可以同时执行两条向量加法、两条向量乘法以及两条向量读写指令。所有向量单元都具备完整的512位处理能力,除了内存写入操作,512位向量写入指令会被拆分为两个256位写入操作。
整数内存操作每时钟周期可执行四次读取或两次读取加两次写入,而浮点和向量内存操作每时钟周期可执行两次读取或写入,512位写入操作除外。
分支指令的性能也达到了前所未有的水平。Zen 5每时钟周期可执行两条预测为“真”的分支或三条预测为“假”的分支指令。分支预测器可以提前查看两条分支,并同时解码双向分支的两侧。复杂的重复分支模式在经过短暂的学习后即可被预测。
整数向量加法的延迟从Zen 4的1个时钟周期增加到Zen 5的2个时钟周期,而浮点加法的延迟则从3个时钟周期减少到2个时钟周期。整数向量指令和浮点向量指令现在具有相同的延迟。
尽管Zen 5在指令获取速率、解码、执行单元、内存读写和分支吞吐量等方面都达到了新的高度,但其缓存大小和关联性仅有小幅改进。这意味着在Zen 5中,CPU吞吐量很少成为瓶颈,程序员需要重点优化内存访问,以充分利用Zen 5的高计算能力。Zen 5能够显著提升计算密集型程序的性能,但对于主要受内存和磁盘访问限制的程序,提升效果有限。
评论总结
关于Zen 3和Zen 4/5的内存重命名问题
- 评论1提到Zen 3缺少内存重命名功能,而Zen 4和Zen 5重新引入了这一功能,但原因不明。
- 引用:"This reminds me: has anyone ever figured out why Zen 3 was missing memory renaming, but it came back in Zen 4 and Zen 5?"
文章标题与内容不符
- 评论2指出文章标题具有误导性,因为文中并未提供实际的测试结果。
- 引用:"While an interesting read, the title is a bit misleading since I didn’t see any actual 'test results' in the post."
Zen 5的设计选择与市场定位争议
- 评论3质疑Zen 5的512位向量写入设计,认为这可能会影响内存复制密集型工作负载。同时,批评AMD在AI领域的市场定位存在误导,尤其是将Zen 5与较旧的Intel处理器进行比较。
- 引用:"That sounds like a weird design choice. Curious if this will affect memcpy-heavy workloads."
- 引用:"AMD's website claims Zen5 is the 'Leading CPU for AI'... but I strongly doubt that."
向量ALU指令延迟的复杂性
- 评论4指出,AMD Zen 5优化手册中提到,浮点调度器的“慢速区域”会影响指令延迟,但通过优化代码(如插入NOP指令)可以避免这种延迟。
- 引用:"Basically, short vector code sequences that don’t fill up the scheduler will have better latency."
- 引用:"The latency test could interleave NOPs to prevent the scheduler from filling up."