NVIDIA承认GTX 970显卡规格有误

近日,关于GTX970显卡只能使用3.5GB显存的讨论如火如荼 。昨天,边肖也验证了这个问题 。在一些游戏中,存在GTX970只使用3.5GB显存的问题 。英伟达也对此进行了解释,称这是因为设计 。但是官方的回答并没有详细解释为什么会这样做,现在这个问题的内幕已经被挖掘出来了,NVIDIA在GTX970显卡的规格上存在错误,其ROP单元及L2缓存并非当初所说的那样,而是做了精简 。.

Anandtech网站对GTX970显卡的3.5GB显存进行了深入研究,并在与NVIDIA讨论后澄清了一些存在的问题 。原文很长,技术性很强 。让我们简单看看这个问题是如何发生的 。

GTX970规格修正:ROP及L2缓存有精简

首先要澄清的问题是,英伟达在官方文件中介绍的GTX970规格有误,和GTX980一样使用GM204核心 。英伟达只说其SMM单元采用三组屏蔽降低功耗,预留7GHzGDDR5视频内存、256位宽、64 ROP单元,其实有些规格是错误的 。

GTX970视频内存异常背后肯定有规格差异 。现在NVIDIA已经承认GTX970原来的规格不对,四个ROP/视频内存控制分区中有一个实际禁用了,所以它的实际ROP单元只有56,L2缓存是1.75MB,而不是原来说的2MB,少了1/8 。不过视频内存控制器没变,确实是256位宽,4GB 。

GTX970禁用三组SMM单位,一些单位的功能也受到影响 。

部分禁用ROP/视频内存主控的功能是Maxwell架构上的一个新功能,后面会在原文中介绍 。

这是英伟达文档中介绍的GTX970规范 。

至于为什么会出现这个错误,英伟达解释说是偶然,这些文件都是英伟达的技术销售团队做的 。(PPT制作人这次惨了?)

说明NVIDIA的技术销售团队在制作评测指南时,并没有意识到Maxwell架构具有上述“部分禁止”的功能 。他们知道GTX970是256位宽,却不知道ROP单元和2MBL2缓存可以独立禁止 。因此,他们制作的文件中的错误在英伟达各部门和通过媒体传播 。

这个问题在过去的4个月里没有被发现,直到本月早些时候英伟达开始调查GTX970视频内存寻址的问题才被注意到 。

英伟达现在无疑是在做危机公关 。Anandtech表示,考虑到NVIDIA并不是第一家在危机公关中撒谎的公司,他们应该相信他们吗?Anandtech网站给出的答案是:可以 。(这里有点晕 。不知道是真的相信还是嘲讽NVIDIA 。反正我不信 。就算之前NVIDIA真的发现了问题,恐怕也不会主动说出来,尤其是没有问题的话,现在我不得不说出来 。)

当然,Anandtech网站也有反映,这些问题之前也透露了一些线索 。例如,英伟达的CUDADeviceQuery工具曾报告过,GTX970显卡的L2缓存为1.75MB,而GTX980的缓存为2MB 。

以前的工具也报告过GTX970 L2缓存变薄 。

GPU-Z等第三方软件检测不到这个问题 。

GPU-Z、AIDA64等第三方软件没有意识到这种情况,所以无法检测到这个问题 。最新版本的GPU-Z0.8.1仍然显示64个ROP单元 。

深度解析:Maxwell架构的显存交叉及ROP分区

问题是GTX970(只有GTX970) 。之前编的验证文章中GTX760和GTX960显示的降速原因其实和这里的不一样 。),因为NVIDIA只是开始禁用Maxwell架构中的一些ROP/视频内存主分区,这在之前的开普勒和更早的架构中是没有的 。而GTX970禁用部分分区,因此其行为在理论上不同于GTX980或麦克斯韦架构 。

【NVIDIA承认GTX 970显卡规格有误】 NVIDIA之前的解释也提到了这一点 。禁用部分单元导致GTX970 ROP/内存主分区不平衡,因此NVIDIA设计了内存分区,3.5GB分区为高性能分区,0.5GB分区包含剩余的视频内存,性能稍低 。

为了更好地理解上述差异,我们应该首先了解麦克斯韦架构的内存交叉开关,看看它们是如何工作的 。

GTX970显卡内存交叉问题 。

NVIDIA在上图中解释了Maxwell架构的内存交叉布局,特别是如何配置GTX970 。交叉杆上有16组SMM单元,交叉杆下有4组ROP/主分区 。每个分区都分配给一个特定的ROP/L2高速缓存单元和内存主机 。需要注意的是,GTX970屏蔽的三组SMM单元并不是1/3/5组那么简单,L2缓存也不是最后一组屏蔽的 。不过这是示意图,不需要考虑哪些单元屏蔽 。

上面的示意图显示了SMM装置和ROP/主控分区是如何通过Crossbar连接的 。内存分区主要与ROP/主控分区有关,而SMM单元与GTX970显卡的内存分配无关 。

sbar将他们联系在一起,而Croosbar只跟ROP/主控分区有关 。

说到ROP/主控分区,这是Maxwell架构上的新功能 。之前的Kepler架构上,ROP/MC分区只有完全禁用和完全不禁用两种选择——要么关闭整个分区,要么都不能关 。而在Maxwell架构上,NVIDIA可以通过分区来独立禁用ROP/L2单元,允许1、2个单元禁用 。这实际上引入了第三种可能——部分开启的ROP/MC分区,可由1组ROP/L2单元、2组内存主控支持,而与此同时,内存主控依然是一体的,禁用他们中的1个就会导致整个主控被禁用 。


Kepler与Maxwell架构的区别

这就是GTX 970显卡的情况,这是Maxwell架构首次使用这种部分禁用的新功能,NVIDIA禁用了1组ROP/L2缓存单元,去掉了8个ROP单元(或者说是1组8pixel/clock的单元)以及256KB L2缓存,这就是GTX 970为什么只有56个ROP单元、1.75MB L2缓存的来源 。

与此同时,这还有一个新功能,但它只有在禁用部分分区时才会激活——这就是第一、第二个ROP分区之间的Link通 。通常每个ROP/L2单元都需要1个接口连接到Crossbar,同时需要1个Link连接到它自己的32位显存控制器通道中 。不过GTX 970禁用了1组ROP/L2单元,所以临近的Link(buddy link)开始发挥作用,这是Maxwell架构能够禁用部分分区的关键,它能让第二个只有一半的显存主控保持激活状态 。

这个Link只有在ROP/L2单元被禁用时才会需要被激活,NVIDIA确认它跟正常的ROP/L2单元到MC主控的link一样都是全带宽的,每周期可以执行4个32bytes要求(2读2写) 。总之,这个Link是保证禁用部分分区功能的关键,它也使得在缺少了1组ROP/L2单元之后还能使用完整256bit位宽成为了可能 。

与GPU执行每个操作类似,内存读取也会支持并行操作以提高吞吐量 。在GTX 980这样完整的的显卡上,这些操作是以1KB的步幅匹配于所有内存控制器的 。为了实现这个设计,每个32bit内存通道都需要通过自己的ROP/L2单元用一个直接的Link连接Crossbar 。在GTX 970上,它有7个Crossbar接口和8个内存通道 。

最后,由于Crossbar和内存主控的设计,1个Crossbar接口不能承载2个内存通道的完全负载,Crossbar和它自己的ROP/L2单元可以同时连接两个内存通道,分裂4个算法,不过同时只有1个读取返回总线,因此实际情况中它只能读取1个内存通道 。

(看到这里,很多人可能还是不明白到底咋回事,还是直接来说吧)

正因为此,NVIDIA才将GTX 970显卡的显存分为两个分区,正常的3.5GB和另外的500MB分区,前面的3.5GB部分,其功能跟正常的GTX 980显卡是一样的,以1KB步进匹配7个Crossbar接口,因此有7个DRAM模块 。第八个DRAM模组包含500MB分区,需要自己的Crossbar 。

这就是为什么GTX 970显卡的224GB/s带宽是技术上正确的,但3.5GB部分显存的带宽是196GB/s(7GHz*7port*32bit),而500MB那部分读取速度是28GB/s,但这二者不是同时读取的,这实际上是一个XOR(亦或)的情况 。进一步来讲,由于500MB显存那部分不能跟3.5GB那部分同时读取,这又进一步导致显卡的等效带宽太低了,使用的500MB部分显存越多,3.5GB部分显存的等效带宽就会越低 。

最终的结果就是GTX 970拥有独一无二的显存布局,需要操作系统及NVIDIA的驱动优化,因为3.5GB部分的显存相比另外的500MB部分更大,更快,更好 。这500MB部分的显存逻辑上来看相当于VRAM与系统内存之间的缓存,它的速度比3.5GB部分更慢,不过依然是PCI-E总线到内存的带宽的2倍 。

GTX 970是NVIDIA首次使用ROP/MC主控分区的产品,不过这并不是NVIDIA首次次用分区内存或者非对称内存配置了 。从GTX 500系列NVIDIA就开始应用非对称/异构内存配置了,特别是在GTX 660及GTX 660 Ti上了 。这些显卡上使用了192bit位宽,但搭配了2GB显存,这也意味着有些内存主控会比其他主控连着更多VRAM 。

最终的结果也是类似的,不过NVIDIA从来没有深度解释这些显卡的内存寻址,看起来跟GTX 970的情况很类似 。与其说NVIDIA有过多次这样的经验,不如说这是NVIDIA首次在GTX 970这样的高端显卡上使用这种方式 。


GTX 660 Ti上使用过类似的异构内存

至于为什么NVIDIA要这么做,问题的关键显然是成本和良率 。如果没有这样部分禁用的能力,NVIDIA要么就只能使用功能完整的分区——这会减少良率进而提升成本,要么就只能直接禁用整个分区,这又会损失额外的ROP、内存及内存主控 。现在这种细粒度调整允许NVIDIA更好地控制坏的芯片,调节部分单元再推向市场,

往大的方面说,取决于你如何定义GTX 970的显存容量,它可以说是3.5GB显存的,也可以说是4GB显存的,其中只有前面的3.5GB是全速的,这也是软件最想用的那部分 。不过512MB那部分分区也是有意义的,虽然性能比3.5GB部分低,但它依然比PCI-E到住内存的带宽更高,GTX 970依然可以使用完整的4GB显存 。

这意味着两种说法都是正确的,这就跟其他现代技术具备多方面因素一样,真正的答案往往比单一因素更复杂 。

总结:

限于时间和篇幅,原文我只翻了前面两页,主要解释了GTX 970为什么有规格错误以及3.5GB+500MB内存分区到底是怎么来的 。如有错误之处,还请读者多多指出 。

GTX 970显卡发布4个多月了,现在NVIDIA才指出是技术销售团队在制作文档时犯错了,这个解释不知道大家相信不?

这里也解释了GTX 970的分区内存到底怎么来的,技术问题大家了解一下就好了,愿意深究的可以去详细阅读原文 。至于GTX 970的分区内存到底有多大影响,昨天官方有公布过测试了,小编也体验过了,算起来影响确实不大,只不过消费者是否介意这个问题,还得看每个人的想法了,GTX 970的4GB内存确实可用,但有1/8的部分性能差,心里确实会有个疙瘩 。

    推荐阅读