NVIDIA Kepler系列显卡让玩家又爱又恨:虽然性能出众,但BIOS对诸多参数特别是核心电压进行了限制,无法在正常情况下通过软件来提升核心电压,进而提升显卡的超频性能。对于这种限制,我们应该如何解决呢?
NVIDIA Kepler系列显卡和以往的显卡相比,核心电压等和超频相关的一些参数都无法通过软件来更改。显然,我们需要通过一些特别的方法来打破这种限制。事实上,本刊曾经多次介绍过使用NiBiTor软件对NVIDIA显卡的BIOS进行修改,从而破解电压上限超频的方法。但由于Kepler系列显卡的BIOS文件结构与以往有较大差异,因此NiBiTor等软件至今都不能支持Kepler系列显卡的修改。不仅如此,Kepler系列显卡较以往的产品除了有核心电压、风扇转速可调范围等限制外,还有一个能明显影响超频能力的参数:功率(也就是我们在超频软件中看到的Power Target选项),这使得Kepler系列显卡的超频变得更加复杂。难道我们就只能等待软件的更新、再进行BIOS的修改吗?事实上,NiBiTor自今年5月21日升级到6.06版本后就一直未曾更新了。因此我们唯有“自己动手,丰衣足食”。
经过笔者的研究及实践发现,完全可以通过修改Kepler系列显卡的BIOS文件来破解Kepler系列显卡的诸多限制。本文将以公版GeForce GTX 680以及华硕GTX660Ti DC2T显卡为例,为大家讲解如何通过16进制编辑器直接修改Kepler系列显卡的BIOS文件,以此释放显卡的潜力。
1. 执行“开始菜单→所有程序→附件→命令提示符”的操作,并跳转到nvflash软件所在的位置。
2.输入nvflash-bgtx680_org.rom读取出原始的BIOS文件,其中“xxx.rom”为自定义的文件名,比如gtx680_org.rom等。执行命令后稍等片刻,看到“Savingofimage completed”字样就表示保存成功了(图1)。为防止意外情况发生,一定要备份原始的BIOS文件。
就笔者目前的实践来看,GTX 680、660Ti可以修改的参数主要有:风扇转速可调范围、功率限制、高核心电压、显存频率、核心频率。两款显卡的修改方法基本相同,只是各参数值存储的位置不一样。下面将以公版GTX 680显卡为例进行修改,并在后的表1中列出GTX660Ti参数的具体修改方法。
1.修改风扇转速可调范围
在默认状态下,公版Kepler显卡把风扇转速的可调范围限制在30%~85%左右。破解的方法非常简单,定位到0x810A和0x810B单元格(图2),分别对应低转速和高转速),里面的数值分别为0x1E和0x55(分别等同于十进制的30和85)。为了获得好的散热性能,笔者把大转速修改为100%,也就是将0x810B单元格改成0x64。至于低转速,可以稍微降低一些,这里把0x810A的值改成0x14,对应20%转速。
2.修改功率和Power Target
定位到0x80A6单元格(图3),可以看到连续的三个数值:10 98 02。根据little-endian的原则,这三个值实际代表0x 029810,笔者把它转换成10进制即170000。没错,这里的170000就是GTX680的100%功率(单位:毫瓦),即170W。类似的,笔者把从0x80AA地址开始的三个值E86E03倒过来变成0x036E E8并转换成10进制得到225000(毫瓦),这就是BIOS定义的大功率。由于225000/170000=132%,因此我们在使用超频软件超频时只能把Power Target值拉到132%。也就是说,我们只要修改这两个数值就可以提升GTX 680的功上限。比如把10802改为90D003(0x 03D090=250000), E86E03改为05B8D8(0x D8B805=375000),时我们在软件中看到的Power Targe100%就对应250W,大可以拉150%也就是375W,这个数值对于冷超频来说足够了。
另外对于GTX 660Ti的BIOS,笔者还可以修改“输入功率”限制(后面的测试可以看到,GTX 680也有这样的限制,只是笔者还没有找到解决方法),如图4,只要把4个框内的数值改大就能提升输入、输出功耗上限。只不过笔者手上这款硕GTX 660TITOP显卡的BIOS认功耗值本来就大大高于公版GT 660Ti,在超频过程中并没有遇到发输入、输出功率上限,进而影响超频幅度的问题,因而可以不用修改。但是对于公版GTX 660Ti来说,在保证散热的前提下还是可以适当提升这四个数值的。
3.破解高电压到1.2125v
如图5 ,只要将绿框中的四处308C11(0x118C30,对应1150000uV)改为54 80 12(0x12805对应1212500uV),同时把蓝框中的处E079AF(11500000)改为4803B(12125000)就能获得1.2125V的核电压。为什么不能将核心电压改得更呢?这是因为1.2125V是硬件限制的高电压,在不进行硬改的条件下我们是没有办法突破这个限制的。
4.修改显存频率
如图6,GTX 680的显存频率是根图中两个蓝框中的数值决定的。这两个10进制以后看不出和显存频有什么关系,不过笔者经过摸索找出了以下一些常见组合,修改后就能提高显存运行频率。
BC4B :默认1502MHz( 等效6008MHz)
804C:1600MHz(等效6400MHz)
644D:1710MHz(等效6840MHz)
204E:1800MHz(等效7200MHz)
另外我们也可以修改核心频率和GPU Boost频率。不过由于GPU Boost功能的特性,核心的实际运行频率一般都会比BIOS设定的要高,甚至会超过标称的GPU Boost频率,因此直接修改这两个参数的意义不大。当然,如果你为了在GPU-Z里面获得一个漂亮的参数截图的话,则另当别论。图7中,蓝框和绿框分别是GTX 680的GPU Boost频率、默认频率。不过其中的数值换算过来是我们在GPU-Z里面看到的2倍。比如蓝框中的0x0845=2117,除以2刚好就是GTX680的Boost频率:1059MHz。
在这里,我们不妨研究一下Kepler系列显卡的GPU Boost功能是如何影响频率的。首先我们要知道,Kepler系列显的核心频率不像以往产品那样可以进行逐MHz的调节,而是类似于C PU频率的调节方式:基频×倍频,这里的基频为13M Hz。因此GPU Boost功能在运行的时候是以13MHz为1挡进行增减的。于大能增大到多少则是由BIOS中的上限电压和频率表共同决定的。之前笔者并没有修改频率表(因为修改起来很繁琐,而且这个作用可以由超频软件中的增加频率offset来代替),只提升了高电压。在后面的测试中我们将会看到解锁电压对高GPU Boost频率的影响。
那么究竟是哪些因素在影响GPU Boost频率的运行呢?它们是温度和功耗,在3D模式下,只要没有达到温度或者功耗上限,GTX 680显卡就可以一直运行在高GPU Boost频率。反之,一旦触及了温度或者功耗上限,GTX 680显卡会自动降低1挡频率。如果降低一档频率后,GTX 680仍然达到了功耗、温度上限,那么它的频率会继续降一挡,以此类推。
需要说明的是,按照上文修改后的BIOS文件是不能直接使用的,因为显卡的BIOS文件中都有一个单元用来存放文件的校验码。修改后的文件与校验码不匹配,此时如果强行刷入这个BIOS,会导致系统出现黑屏、无法开机的情况。唯一的解决办法就是重新计算并填入文件的校验码,因此下面的步骤非常关键。
1. 点击HxD软件的Edit菜单→SelectBlock(图8)
2.进入SelectBlock对话框,在“Start-offset”栏输入400,“End-offset”栏输入FFFF后点击“OK”(图9)。
3 . 右键→ Copy( 或者直接“Ctrl+C”)复制选中的文本(图10)点击File→New(或者Ctrl+N)创建一个新文件,把复制的文本粘贴到这个新文件中,并保存为“checksum_fix_tmp1.rom”(图11)。
4.开启Ni BiTor6.06软件,导入刚才创建的checksum_fix_tmp1.rom文件。这时候NiBiTor会弹出Device unknown(无法识别的设备)错误对话框。不用担心,连续点击O K忽略一切弹出的错误提示,直到不再弹出错误对话框后把文件另存为checksum_fix_tmp2.rom。注意这里要选择File-Save Bios来保存,而不要用Save without checksum(图12)。
5 . 回到H xD软件中,打开刚刚用Ni BiTor保存的check sum_fix_tmp2.rom文件,全选(Ctrl+A)并复制(Ctrl+C)(图13)。
6.切换到先前打开的gtx680_org.rom文件,此时0x400至0xFFFF单元格还处于选中(高亮)的状态,直接把checksum_f ix_tmp2.rom中的全部内容粘贴过来。后把这个文件另存gtx680_mod.rom,整个修改的过程就完成了(图14)。
重新进入命令行模式并跳转到nvflash所在的文件夹,使用nv f l a s h-4-5-6 g t x680_m o d.r o m命令进行刷新。期间会有“Press‘y’toconfirm” (按y键确认)的提示,等出现“Update successful”字样后就可以重启系统了(图15)。
值得注意的是,部分显卡品牌的产品(比如华硕)默认开启了BIOS的写保护机制,在执行刷新命令后会出现错误提示。这时只要运行“nv flash--protectoff”命令解除写保护再刷新就好了(图16-1、16-2)。
接下来,我们来看一下经过改造后GTX 680的性能究竟如何?首先,我们来看看GTX 680风扇转速调节范围改造的效果。如图17-1、17-2可以看到,85%(改造前的大值)对应4170r/min的风扇转速,而改造后风扇转速提高到5340r/min。使用FurMark拷机5分钟后,100%风扇转速能使GPU核心满载温度相对85%转速时降低5℃左右。
在85%的风扇转速下,GTX 680拷机5分钟后核心温度高达73℃。此时核心频率已经不能运行在笔者所设定的1097MHz下了。
在100%的风扇转速下,GTX 680的满载核心温度仅有67℃,且核心频率一直运行在笔者设定的1097MHz上。
事实上,调节风扇转速还有更重要的意义。之前笔者提过,Kepler显卡的核心频率与功耗、温度、高电压密切相关。笔者把核心频率设置到1097MHz(没有使用更高频率是为了避免触发功耗上限)、核心电压设置到1.2125v并使用FurMark拷机5分钟以后,可以从核心频率的曲线上看到,当风扇转速为100%时,核心频率非常稳定地运行在1097MHz。而在85%的风扇转速下,拷机5分钟后由于温度过高,核心频率会自动下降1~2挡(一直1071MHz和1084MHz之间波动)。
接下来来看看修改功耗限制的效果。按照之前讲解的方法,笔者已经把Power Target 100%定义为250W。同时还可以用软件拉升到150%(也就是375W),而修改前大只能提升到225W。
笔者将核心、显存频率分别提升到1293MHz、7204MHz,风扇转速固定到100%(避免触及温度限),并分别在80%(相当于20 0W,图18-1)、90%(相当于225W,也就是修改前的上限,图18-2)和150(图18-3)的Power Target设置下进行3DMark 11 Extreme的测试可以看到在Power Target 80%设置下的得分低,150%得分高。观察核心频率曲线不难发现其中的因:图18-1、18-2有降频的情况发生,而图18-3中的频率曲线是平直的(除了场景切换的时候自动切换到2D模式),核心频率一直维持在笔者设定的1293MHz。很显然,Power Target 80%、90%模式下不能满足当前的超频设置。
此外,对C P U超频比较熟悉的读者都知道在冲击高频时,一定要关闭自动降频(节能)功能。因为当CPU处于较高频率的时候进行倍频的切换非常容易造成系统崩溃。类似的,在Kepler显卡超频的过程中,如果触发了功耗上限,那么GPU会自动降频甚至降电压,等负载稍低的时候又恢复。如此频繁地进行频率、电压的调整会导致系统不稳定。因此破解功率上限对Kepler显卡的超频来说,是至关重要的。
下面我们来重点比较一下修改电压上限的效果。首先通过图19-1、19-2可以看到,修改前使用软件高只能将核心电压调到1.175v。而在修改后可以将核心电压调到1. 213v。为了验证修改是否有效,笔者使用万用表测量修改前后的工作电压。由图图2 0-1、2 0-2可以看到,修改前后实测电压分别为1.210v和1.261v,0.051v的差距与理论计算的0.0375v相差不算大。上文已经提到,在提高电压上限的同时也提升了GPU Boost功能的上限频率。要验证这一点需要使用到EVGA Precision软件独有的一个功能K-Boost。打开该软件,点击A DJ UST VOLTAGE,在弹出的对话框中勾选K-BOOST。按照提示重启后,显卡的GPU Boost功能将被屏蔽。此时,无论是2D模式还是3D模式,核心频率都会保持在高值(除非触及温度或者功耗上限,图21)。
由图22-1、22-2可以看到,在不使用软件调节核心频率时,破解前核心频率高运行在1110MHz,而破解后,直接提升到了1201MHz。因此就算我们不进行任何超频,只要解锁电压上限,性能马上就有极大的提升。这也是之前笔者提到没有必要修改GPU频率和Boost频率的原因。
终,笔者在1358MHz、7574MHz的频率下完成了3DMark11的测试,取得了X4292分的高分(图23-1)。而在改造前这块显卡只能在1280MH、7400MHz的频率下完成测试,分数仅为X3935。而且由图23-2可以看到,改造前的GTX 680由于受到功耗的限制,在运行测试的过程中发生了严重的降频。因此就算芯片本身体质不错,也无法运行在更高的频率了。
此外,华硕660TiDC2T由于受到GPU芯片体质的影响,改造BIOS的效果并不明显。改造前能以12 45MHz、6800 MHz的频率通过3DMark 11测试,分数为X2992分。而在改造后,则在1280MH、6912MHz的频率下取得X3189分。
究竟本文介绍的BIOS修改方法是否通用?笔者下载了两个不同品牌的市售非公版GTX 680显卡的BIOS、一个公版GTX 660Ti显卡的BIOS、一个非公版GTX 660Ti显卡的BIOS进行验证。笔者发现,这些产品的参数修改的位置和本文介绍的两款产品是相同的。事实上,系统在启动以后,BIOS里面的数据会被GPU芯片读取并存贮。GPU通过这些参数再去控制显卡上的其他模块。换句话说,显卡BIOS的作用仅仅是存储了GPU所需要的一些控制参数,并非直接控制显卡上的供电模块或是调节风扇转速等。因此,从理论上来说本文所介绍的BIOS方法也适用于其他具备同芯片的产品。
破解所需的软件一览
1. 16进制编辑器,比如UltraEdit,HxD等,本文将以HxD为例进行讲解。
2. NVIDIA显卡BIOS保存、刷新软件:nvflash 5.118 Windows版。
3.超频软件EVGA Precision 3.0.4,请注意版本,因为较老的版本不具备后文提到的K-BOOST功能。
16进制编辑器入门
初次使用16进制编辑器的玩家在面对一堆数字时,会不知所措,我们不妨来了解下编辑器里面的内容怎么看。在主界面左边一列都是0000XXX0的字样,这代表BIOS文件每个单元的高7位地址(后一个0可忽略),我们可以理解为行号。而上面一行从00排到0F(前面的0可以忽略)代表每个单元的低位地址,可以理解为列号。横竖交差的单元格里面的值就是该内存地址里面的数据。例如“修改地址为815A单元格的数据为x x”,我们就需要跳转到第00008150行的第0A列,有点类似Excel表格(图24)。
另外,顾名思义16进制编辑器中的地址和数据都是以16进制表示的,而我们通常是通过10进制表示的。因此为了避免歧义,上文中所有提到的数据如果以“0x”开头就表示这个数是16进制的。例如0x1E=30。如果不熟悉16进制和10进制之间的换算怎么办?打开Windows自带的计算器,利用“ALT+3”切换到“程序员”模式。左侧有进制选择,选定某种进制后输入数字,再切换进制,之前输入的数字就已经转换成当前的进制了(图25)。
什么是little-endian
前文提到了little-endian,事实上计算机系统中每个内存地址里面只有8bit的容量,也就是说可以容纳2位16进制的数(1位16进制数需要4bit来存储)。如果需要保存的16进制数值超过2位就需要多个内存单元。问题就出在这里,例如我们要保存0x44332211这个数需要4个内存单元,那我们可以有如下的两种方式来解决。按照地址增加的方向(计算机都是按照从低地址到高地址的顺序存取数据的)首先存入低位的数据(0x11)或者是高位的数据(0x44),这就是我们说的Little-endian和Big-endian。由于PC系统采用的是Little-endian。因此我们读取多位数据时应该把高地址(地址值大)的数据放到高位,低地址(地址值小)的数据放到低位。
在前文修改功率上限的例子中我们看到“109802”实际上代表的数据是0x029810。同理,为了把这个数值修改成250000毫瓦(等于0x03D090),我们应该把“109802”替换为“90 D003”。
Kepler系列显卡在不硬改供电模块的情况下不能突破1.2125V的电压?
现阶段N卡使用的供电主控芯片都遵循VRM11规范来进行电压调节。输出电压是由供电主控芯片上的8个引脚VID7-VID0(刚好组成了一个8位的2进制数)上的值决定的。为了安全起见,在进行产品设计的时候,NVIDIA强制要求各厂商把VID6固定成了“1”(也就是直接接到电源上,这样任何软件都无法改变这个引脚的值)。图26是VRM11规范的定义,可以看到这个2进制数的数字越小,电压就越高。但因为VID6被固定成了1,所以能够得到的小值就只能是01000000,对应1.2125V,因此如果不硬改电路的话是不可能突破这个电压的(图24)。
通过简单的测量可以发现,公版GTX 680的供电主控芯片(Richtek RT8802A)的VID 6(33脚)已经直接接到电源上,相当于逻辑上的“1”,许多N卡也都有同样的设计。