英特尔的Alchemist架构让该公司踏入了高性能图形领域的大门。锐炫Arc A770显卡作为首次尝试表现不俗,能够以不错的性能运行多款游戏。如今,英特尔正将接力棒传递给全新的图形架构——Battlemage。
和Alchemist架构一样,Battlemage架构瞄准的是中端市场。它并不试图与AMD或英伟达的高端显卡竞争。虽然它不像英伟达的RTX 4090或AMD的RX 7900 XTX那样耀眼,但中端GPU凭借较低的价格,在独立显卡市场中占据了大得多的份额。不幸的是,如今像RTX 4060和RX 7600这样的中端显卡仅配备8GB显存,性价比很低。英特尔抓住这一契机,以250美元的价格推出了锐炫Arc B580,在提供12GB显存的同时,价格比竞争对手都低。
要让B580取得成功,其全新的Battlemage架构必须在各种图形工作负载中都有出色表现。英特尔对Battlemage架构相比Alchemist架构做了诸多改进,旨在以更低的计算能力和更少的内存带宽实现更优的性能。本文将评测锐炫Arc B580,并附上来自A770和A750的对比数据,以及一些零散数据。
Battlemage架构的组织方式与其前身颇为相似。Xe核心依旧作为基本构建单元。四个Xe核心组成一个渲染切片,其中还包含渲染后端、光栅化器,以及这些固定功能单元的相关缓存。整个GPU共享一个18MB的二级缓存。
英特尔锐炫Arc B580的方框图。B570禁用了两个Xe核心。图中仅显示了FP32单元,因为是用Javascript并大量运用CSS盒模型生成此图的。
总体而言,锐炫Arc B580的GPU规模比上一代Alchemist架构产品更小。B580有5个渲染切片,而A770有8个。B580总共有2560个FP32通道,A770则有4096个。
Battlemage架构推出时所配备的内存子系统规模也较小。B580采用192位的GDDR6总线,运行
速度为19 GT/s,理论带宽为456GB/s。A770凭借运行速度为17.5 GT/s的256位总线,拥有560GB/s的GDDR6带宽。
A770的方框图。A750禁用了四个Xe核心(即一整个渲染切片)
甚至主机接口也被缩减了。B580仅配备PCIe 4.0 x8接口,而A770则配备了完整的x16接口。如果英特尔的新架构想要超越规模大得多的前代产品,还有很多艰巨的任务要完成。
Battlemage架构的改变始于其Xe核心。两代产品之间最重大的变化实际上首次出现在Lunar Lake架构上。Xe核心进一步细分为XVE,即Xe矢量引擎。英特尔将Alchemist架构中的XVE两两合并,使其宽度翻倍,完成了向更大执行单元分区的转变。Xe核心的吞吐量保持不变,每个周期可执行128次FP32运算。
一个共享的指令缓存为一个Xe核心中的全部8个XVE提供指令。Alchemist架构有一个96KB的指令缓存,Battlemage架构几乎可以肯定至少有同样大的指令缓存。英特尔GPU上的指令通常为16字节长,某些情况下有8字节的压缩形式。因此,一个96KB的指令缓存标称容量为6000 - 12000条指令。
XVE是英特尔GPU中最小的分区。每个XVE最多跟踪8个线程,在线程间切换以隐藏延迟,并为其执行单元提供数据。一个64KB的寄存器堆存储线程状态,在保持最大占用率的同时,每个线程最多可使用8KB的寄存器。为英特尔GPU指定寄存器数量实际上并不容易,因为英特尔GPU指令对寄存器堆的寻址比英伟达或AMD的架构灵活得多。每条指令都可以指定向量宽度,并且可以像访问单个标量元素那样访问寄存器。
对于大多数数学指令,Battlemage架构坚持使用16位宽或32位宽的向量,舍弃了Alchemist架构中可能出现的SIMD8模式。向量执行减少了指令控制开销,因为单个操作会应用于向量中的所有通道。然而,如果某些通道采用不同的分支方向,就会导致吞吐量损失。理论上,Battlemage架构更长的原生向量长度会使其更容易受到这种分歧惩罚的影响。但Alchemist架构在XVE对之间笨拙地共享控制逻辑,使得SIMD8的行为类似于SIMD16,而除了一个特殊的边角情况外,SIMD16的行为很像SIMD64(详见有关“流星湖”架构的文章)。
相比之下,Battlemage 架构在分支分歧处理上的表现直观且直接。如果 16 个线程一组执行相同操作,SIMD16 就能实现充分利用。SIMD32 与 32 个一致线程的组也是如此。因此,在处理分支分歧时,Battlemage 架构实际上比其前代产品更加灵活,同时还能享受使用更大向量带来的效率优势。
也许 XMX 位于一个单独的端口,也许不是。我不太确定。
与 Alchemist 架构一样,Battlemage 架构通过两个端口(ALU0、ALU1)执行大多数数学运算。ALU0 处理基本的 FP32 和 FP16 运算,而 ALU1 处理整数运算和不太常见的指令。英特尔的端口布局与英伟达的图灵(Turing)架构有相似之处,图灵架构也在 16 位宽的 FP32 和 INT32 单元之间分配调度带宽。一个关键区别在于,图灵架构使用固定的 32 位宽向量,并通过在交替周期为两个单元提供数据来保持其占用状态。英特尔可以连续发出相同类型的指令,并且每个周期可以选择向不同端口发出多条指令。
与图灵架构的另一个相似之处在于,Battlemage 架构沿用了 Alchemist 架构的 “XMX” 矩阵乘法单元。英特尔声称可以三路并发执行,这意味着 XMX 位于一个单独的端口。然而,VTune 性能分析工具仅显示 ALU0 + ALU1 和 ALU0 + XMX 的多个流水线活动指标。本文在上面将 XMX 画为一个单独的端口,但 XMX 单元也可能在 ALU1 上。
从英特尔VTune性能分析器收集的数据,放大后展示毫秒级别的情况。VTune的纵轴缩放方式有些特别(相对于观测到的最大利用率,而非以100%为基准),所以标注了一些有意思的点。
游戏工作负载往往会使用更多浮点运算。在计算密集阶段,ALU1会分担其他运算,让ALU0能专注处理浮点数学运算。XeSS技术会调用XMX单元,与向量运算同时并发执行的情况较少。生成式人工智能工作负载中,XMX与向量运算同时并发执行的情况更是少见。
正如任何专用执行单元一样,XMX的软件支持远不能得到保证。使用其他框架运行人工智能图像生成或语言模型时,主要依靠B580的常规向量单元,而XMX单元则处于闲置状态。
在微基准测试中,英特尔旧款的A770和A750常常能凭借更大的着色器阵列,实现比B580更高的计算吞吐量。然而,B580的表现更为稳定。Alchemist架构在处理FP32融合乘加(FMA)运算时存在问题,而Battlemage架构则能轻松达到理论吞吐量。FP32 + INT32双指令发射在Battlemage架构上虽并非完美,但在A750上几乎无法实现。
在整数运算方面,Battlemage架构在处理低精度INT8运算时表现更佳。以“流星湖”的集成显卡作为参照,英特尔上一代架构使用指令对来处理加法运算,而Battlemage架构仅用.movaddchar16add指令就能完成。
每个XVE还设有一个用于控制流指令的分支端口,以及一个让XVE与外部交互的“发送”端口。这些端口的负载通常较低,因为GPU程序不像CPU程序那样频繁分支,而且通过“发送”端口访问的共享函数,其吞吐量不足以同时满足所有XVE的调用。
Battlemage的内存子系统与Alchemist有诸多相似之处,其根源可追溯到英特尔过去十年的集成显卡架构。XVE通过向相应的共享功能单元发送消息来访问内存层级。曾经,整个集成显卡基本上等同于一个Xe核心,类似XVE的单元作为基本构建模块。XVE会通过消息结构访问集成显卡的纹理单元、缓存和工作分配硬件。从那以后,英特尔构建了更大的细分结构,但术语仍沿用至今。
每个Xe核心有8个TMU(按照英特尔的术语,即纹理采样器)。这些采样器有一个32KB的纹理缓存,每周期能向XVE返回128字节的数据。在这方面,Battlemage与Alchemist并无不同。但B580可用的纹理带宽比其前代产品少。其较高的时钟速度不足以弥补Xe核心数量大幅减少的劣势。
B580运行时的时钟速度更高,这也降低了纹理缓存命中延迟。不过,以时钟周期来衡量,Battlemage的纹理缓存命中延迟与前代几乎相同。二级缓存(L2)延迟有了显著改善,所以在Battlemage架构中,错过纹理缓存的影响没那么严重。
全局内存访问首先会缓存在一个256KB的区块中,该区块同时兼作共享本地内存(SLM)。它比Alchemist和“月湖”架构的192KB一级缓存(L1)/SLM区块更大,所以英特尔已在晶体管预算上做出安排,让更多数据更靠近执行单元。与“月湖”架构一样,即使计算内核未分配本地内存,B580也更倾向于使用SLM而非L1容量。
英特尔或许能够以另一种方式划分L1/SLM区块,但延迟测试表明,无论我是否分配本地内存,结果都完全相同。使用Nemes的Vulkan测试套件进行测试也显示L1为96KB。
在Battlemage架构上,全局内存访问的延迟比纹理访问低,尽管XVE必须处理数组地址生成。而对于纹理访问,TMU会完成所有地址计算,XVE只需向它们发送消息。以时钟周期计算,L1数据缓存延迟与Alchemist架构类似,不过较高的时钟速度确实让B580在实际延迟方面具有优势。
Battlemage在标量内存访问方面也实现了时钟周期延迟的降低。英特尔不像AMD那样有单独的标量指令。但英特尔的GPU指令集架构(ISA)允许每条指令指定其单指令多数据(SIMD)宽度,SIMD1指令是可行的。早在Battlemage架构之前,英特尔的编译器就一直在进行标量优化,并适时生成SIMD1指令,之前并没有性能差异。现在情况不同了。
与 SIMD32 相比,强制 SIMD16 模式可节省一个周期的延迟,因为地址生成指令不必在两个周期内发出
对于SIMD1(标量)访问,B580上的L1延迟比SIMD16访问快约15个周期。在微基准测试中,SIMD32访问会多花费一个周期,这是因为编译器生成两组SIMD16指令来计算32个通道的地址。测试中让英特尔的编译器发出标量INT32加法指令,但与向量指令相比,延迟并没有改善。因此,标量延迟的改善几乎可以肯定来自优化后的内存流水线。
标量负载,解释简单
SIMD1指令在XVE内部也有帮助。英特尔不使用单独的标量寄存器堆,但与AMD或英伟达相比,它能更灵活地对向量寄存器堆进行寻址。指令可以访问单个元素(子寄存器),并读出所需的任意向量宽度。英特尔的编译器可以将许多“标量寄存器”打包到相当于一个向量寄存器中,节省寄存器堆容量。
通过从小数组加载数据,在B580的L1上实现了比A750更高的效率。英特尔表示,Xe - HPG的L1每周期可传输512字节,但在Alchemist或Battlemage架构上都远未达到这一数值。微基准测试表明,这两种架构中每个Xe核心的带宽略低于每周期256字节。
即使L1每周期只能提供256字节,这也让英特尔的Xe核心拥有与AMD RDNA的工作负载处理单元(WGP)相同的L1带宽,是英伟达安培架构流式多处理器(SM)L1带宽的两倍。每周期512字节可以让每个XVE每周期完成一次SIMD16加载,不过这多少有些过剩。
Battlemage将相同的256KB区块用于L1缓存和SLM。SLM为一组线程提供本地地址空间,并充当一个快速的软件管理暂存区。在OpenCL中,这通过本地内存类型公开。大家对它的称呼各不相同,但在本文中,我将使用OpenCL和英特尔的术语。
尽管本地内存和L1缓存命中都由相同的物理存储支持,但SLM访问的延迟更低。与缓存命中不同,SLM访问无需进行标签检查或地址转换。以SLM模式访问Battlemage256KB的内存区块,延迟可降至略高于15纳秒。这比在Alchemist架构上更快,与AMD和英伟达的最新GPU相比也极具竞争力。
本地内存/SLM还允许工作组内的线程进行同步和数据交换。通过对本地内存的测试,B580在线程间传递值的速度比其前代产品稍快。几乎所有这些改进都得益于更高的时钟速度,但这足以让B580与AMD和英伟达的新GPU相当。
本地内存的支持结构通常包含用于处理原子操作的专用算术逻辑单元(ALU)。例如,AMD RDNA架构上的本地数据存储(LDS)分为32个存储体,每个存储体有一个原子ALU。每个线程针对数组中的不同地址,以避免争用。
Alchemist和Battlemage似乎每个Xe核心的SLM单元都连接着32个原子ALU,与AMD的RDNA和英伟达的帕斯卡架构非常相似。“流星湖”的Xe - LPG架构每个Xe核心的原子ALU数量可能只有一半。
Battlemage与前代产品以及英伟达当前的GPU一样,具有两级缓存层级结构。B580的18MB L2缓存略大于A770的16MB L2缓存。A770将其L2缓存分为32个存储体,每个存储体每周期能够处理一次64字节的访问。在2.4GHz频率下,这相当于近5TB/s的带宽。
英特尔没有披露B580的L2拓扑结构,但合理的假设是,英特尔将存储体大小从512KB增加到了768KB,每个内存控制器仍连接4个L2存储体。如果是这样,B580的L2将有24个存储体,在2.85GHz频率下的理论带宽为4.3TB/s。使用Nemes的Vulkan测试进行微基准测试,能够达到该带宽的相当一部分。较旧的A750效率要低得多,尽管它可能拥有更多的理论L2带宽,但获得的带宽与B580大致相同。
除了使执行单元免受慢速显存(VRAM)的影响,L2缓存还可以作为整个GPU的一致性点。B580在使用全局内存在线程间传递数据时速度相当快,且比其前代产品更快。
对于全局内存上的原子加法操作,Battlemage在同尺寸的GPU中表现良好,并且大幅超越了其前代产品。
测试使用的是INT32操作,所以A750上的86.74GOPS(每秒千兆次操作)相当于351GB/s的L2带宽。在B580上,220.97GOPS则需要883.9GB/s的带宽。然而,VTune报告A750的L2带宽要高得多。不知为何,在测试期间A750的L2带宽达到了1.37TB/s,几乎是其应需带宽的4倍。
在 A750 上运行的测试的 VTune 捕获
“流星湖”的集成显卡与Alchemist架构关系密切,但其全局原子加法吞吐量与Xe核心数量的比率与Battlemage相似。VTune报告“流星湖”的集成显卡使用的L2带宽比所需带宽多,但仅为两倍左右。奇怪的是,它也显示了从XVE流出的预期带宽。
对于Battlemage,原子操作被单独列为一个类别,不会作为常规L2带宽报告。VTune表明原子操作通过加载/存储单元传递到L2,没有任何夸大。此外,L2的繁忙程度仅为79.6%,这表明该层还有一定的余量。
和 B580 上的相同测试
B580有一个192位的GDDR6 VRAM子系统,可能配置为六个2×16位的内存控制器。OpenCL测得的延迟比上一代更高。
不过这或许仅适用于OpenCL,因为使用Nemes测试的Vulkan测得的延迟略高于300纳秒。在大测试规模下,延迟可能会遇到页表缓存(TLB)未命中的情况,而且英特尔针对不同的应用程序编程接口(API)可能使用了不同的页面大小。
与同类产品相比,锐炫B580具有更高的理论VRAM带宽,为456GB/s,但L2容量较小。例如,英伟达的RTX 4060使用128位GDDR6总线,运行速度为17GT/s,VRAM带宽为272GB/s,前面有24MB的L2缓存。测试使用VTune对一些内容进行了分析,并挑选出VRAM带宽使用的峰值。测试还检查了相同采样间隔内报告的L2带宽。
英特尔在缓存容量和内存带宽之间的平衡似乎效果良好,至少在几个例子中是这样。即使VRAM带宽需求很高,18MB的L2缓存也能够捕获足够的流量,避免达到GDDR6带宽限制。假设英特尔使用像英伟达RTX 4060那样较小的GDDR6内存子系统,B580将需要更大的缓存来避免达到VRAM带宽限制。
可能作为一种削减成本的措施,B580的PCIe链接比其前代产品更窄。不过,x8 Gen 4链接提供的理论带宽与x16 Gen 3链接相同。使用OpenCL进行测试时,远未达到理论带宽,且B580与A750相比处于劣势。
只要有足够的VRAM,PCIe链接带宽通常对游戏性能的影响最小。与直接竞争对手相比,B580拥有相对较大的12GB VRAM池,其竞争对手也配备PCIe 4.0 x8链接。这可能使B580在中端市场具有优势,但这并不意味着它不会出现问题。
例如,《数字战斗模拟世界》(DCS)在使用模组时会使用超过12GB的VRAM。在不同区域观察不同飞机时,B580经常会出现卡顿。VTune显示PCIe流量很高,因为GPU必须频繁从主机内存读取数据。
Battlemage保留了Alchemist的高层次目标和基础,但进行了一系列改进。计算资源更易于利用,缓存延迟有所改善,全局内存原子操作的奇怪缩放问题也已解决。英特尔还进行了一些令人惊讶的优化,比如降低标量内存访问延迟。结果令人印象深刻,尽管在几乎所有纸面规格上都落后,但锐炫B580轻松超越了即将淘汰的A770。
英特尔的一些GPU架构变化使其与AMD和英伟达的设计更为接近。英特尔的编译器通常倾向于SIMD32模式,这是AMD在计算代码或顶点着色器中经常选择的模式,也是英伟达唯一使用的模式。SIMD1优化与AMD的标量单元或英伟达的统一数据路径有相似之处。Battlemage的内存子系统比其前代更注重缓存,对高VRAM带宽的依赖则有所降低。AMD的RDNA 2和英伟达的Ada Lovelace在其内存子系统上也做出了类似的改变。
当然,Battlemage与独立GPU竞争对手相比仍有很大不同。即使XVE更大,Battlemage使用的执行单元分区仍比AMD或英伟达小。凭借SIMD16支持,英特尔继续支持比竞争对手更短的向量宽度。生成SIMD1指令使英特尔在一定程度上实现了标量优化,但还没有像AMD或图灵架构之后的英伟达那样拥有完整的标量/统一数据路径。而且18MB的缓存仍然少于英伟达和AMD中端显卡的24MB或32MB。
除了与AMD和英伟达的差异,Battlemage是英特尔进军中端图形市场征程中值得肯定的一步。对于任何PC爱好者来说,独立GPU市场出现第三个竞争对手都是好消息。当然,英特尔仍有一段路要走。驱动程序开销和对可调整大小的BAR的依赖,就是英特尔仍在努力摆脱仅专注于集成显卡背景的领域示例。
但希望英特尔在站稳脚跟后,能够进军高端GPU市场。高端独立GPU市场出现第三个参与者将非常受欢迎,因为许多人仍在使用帕斯卡或GCN架构,觉得还没有合理的升级产品。英特尔的锐炫B580至少在有货的时候,满足了部分积压的需求。我期待看到英特尔未来在GPU方面的努力。
本文转自媒体报道或网络平台,系作者个人立场或观点。我方转载仅为分享,不代表我方赞成或认同。若来源标注错误或侵犯了您的合法权益,请及时联系客服,我们作为中立的平台服务者将及时更正、删除或依法处理。