MCPLive > 杂志文章 > 修改BIOS、提升超频性能

修改BIOS、提升超频性能

2013-02-04张夷捷《微型计算机》2013年1月下

NVIDIA Kepler系列显卡让玩家又爱又恨:虽然性能出众,但BIOS对诸多参数特别是核心电压进行了限制,无法在正常情况下通过软件来提升核心电压,进而提升显卡的超频性能。对于这种限制,我们应该如何解决呢?

修改BIOS、提升超频性能

Step by Step 手把手教你修改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文件,以此释放显卡的潜力。

Step 1:保存BIOS文件

1. 执行“开始菜单→所有程序→附件→命令提示符”的操作,并跳转到nvflash软件所在的位置。

2.输入nvflash-bgtx680_org.rom读取出原始的BIOS文件,其中“xxx.rom”为自定义的文件名,比如gtx680_org.rom等。执行命令后稍等片刻,看到“Savingofimage completed”字样就表示保存成功了(图1)。为防止意外情况发生,一定要备份原始的BIOS文件。

Step 2:开启HxD软件,导入保存的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仍然达到了功耗、温度上限,那么它的频率会继续降一挡,以此类推。

Step 3:重新计算文件的checksum校验值,并生成终可用的BIOS文件

需要说明的是,按照上文修改后的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)。

Step 4:刷入修改过的BIOS文件

重新进入命令行模式并跳转到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)。

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

Step by Step 手把手教你修改BIOS

BIOS改造效果实测

风扇转速改造实测

接下来,我们来看一下经过改造后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是否通用?

究竟本文介绍的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进制编辑器入门

另外,顾名思义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卡也都有同样的设计。

Kepler系列显卡在不硬改供电模块的情况下不能突破1.2125V的电压?

 

分享到:

用户评论

用户名:

密码: