泡泡网显卡频道 PCPOP首页      /      显卡     /      0    /    正文

GeForce6深入探讨 NVIDIA市场部副总

  作为NVIDIA的技术市场部副总裁,Tony Tamasi不仅需要进行市场推广工作,还要倾听客户的反馈,帮助制定产品的规格。而当产品即将推出时,他将扮演NVIDIA与外界沟通、传递技术信息的首席技术顾问。可以想象,由于日前GeForce 6系列的发布,他有许多工作要处理,但他百忙之中还是抽空回答了我们关于新一代NVIDIA图形处理器的一些问题。

    TR: GeForce 6800 Ultra 什么时候可以上市?

    Tamasi: 6800 Ultra在纪念日(5月31日)就可以上市,而6800系列产品的全面上市要等到7月4日。

    TR:非Ultra版的产品将搭载多少显存?

    Tamasi:你是指$299的那块吗?

    TR:对。

    Tamasi:这取决于我们的AIC伙伴。我估计会有128和256MB两种版本,这主要取决于我们的AIC伙伴而不是我们。

    TR:它的显存位宽是256-bit的吗?

    Tamasi:是的。

    TR:是DDR, DDR2, 还是 DDR3显存?

    Tamasi: DDR1.

    TR: 结合其产品规格来说,以$299的价位相信会有很高销量,但你们卖这个价位能赚到钱么?

    Tamasi:如果我们不能赚钱,就不会卖这个价了(笑)

    TR:据说GeForce 6800 Ultra GPU包含了2.22亿个晶体管,你们是怎么计算的?统计了所有SRAM/cache上的晶体管吗?又或者是其它方法?

    Tamasi:得出一个精确的晶体管数目的唯一方法就是计萛所有芯片上的晶体管数目,而我们也的确是这样做的。所以我们公布的数字包括了caches, FIFOs, register files。它包含了所有的晶体管,而不仅仅是逻辑部分的晶体管。

    TR:你能透露一下其芯片的最终大小么?

    Tamasi:不,我们一般来说不透露这些信息,它很大。[笑]

    TR:你们也按这种方法去计算NV30系列和过去的GPU的晶体管数目么?

    Tamasi:是的,自从我们使用“晶体管数目”这个名词起,就开始用这样的方法计算。事实上,我不知道为什么有的公司会就其芯片公布不确切的芯片晶体管数目。

    边缘抗锯齿

    TR:在我们的评论中,我注意到一些GeForce 6系列抗锯齿的报道。GeForce 6800的抗锯齿模式是否8X antialiasing 模式 4X supersampling 加 2X multisampling?

    Tamasi:当前控制面板的模式是4X super/2X multi,支持OpenGL和 D3D。我们将在数周之内推出4X multi/2X super模式的驱动。

    TR: GeForce 6800的抗锯齿功能在截屏扫描时对某些不能获取的数据是否有作过任何解决的方法?如果有,它是如何运作及在什么模式下运作?

    Tamasi:在进行基本的多点取样时需要做重复数据运算,它可以在帧缓中重做或在扫描时进行。实际上,GeForce 6800在进行4X多点取样时,这个运算可以在GPU中同时进行(称为on-the-fly运算),并不需要另外一次的运算及写入另外的帧缓中。因此,在截屏扫描时,当你想截取某个帧片时,我们的驱动程序可以将已运算好的抗锯齿图像传给截屏软件。

    TR:它目前适用于所有的多点取样模式吗?

    Tamasi:是,这个基于on-the-fly的实时运算技术适用于所有的多点取样模式。

    TR:那么对3DMark03的截图又怎样?如果你用了图像品质工具,将能产生正确的输出吗?

    Tamasi:如果你在3DMark用AA,你将得到正确的截图帧片输出。

    TR:ATI在它的R300系列为抗锯齿宣传"gamma-correct blending"技术,GeForce 6800 Ultra有类似的技术吗?如果没有,请问为什么?

    Tamasi:我们有相关的技术,因为大家对此技术有些混淆,我想澄清一些概念。Gamma修正(correction)和Gamma调整(adjustment)有很多的不同。ATI的技术是从Gamma调整(adjustment)到gamma 2.2,它可以根据不同的显示器来调整你的输出,这也是我们可以做的。Gamma修正(correction)可以调整所有的gamma,但它需要多一个渲染运做(Shader pass)。

    着色器模型

    TR:GeForce6800 Ultra的象素着色器能力远远超出了你们之前的历代GPU。

    Tamasi:对

    TR:NV40的象素着色器是源于NV30系列的着色器么?又或是一个全新的设计?

    Tamasi:它是一个全新的设计。两者之间唯一的共同点是它们的设计方框图在某些地方看起来比较相似,但实际上它的源代码是全新的。

    TR:GeForce 6800其中的一个较重要的功能是Shader Model 3.0(着色器模型3.0)。你能就Shader Model 3.0对我们作一个简单的介绍么?他对游戏玩家有什么好处?

    Tamasi:从各方面来说,Shader Model 3可以分为顶点着色(vertex shading)和象素着色(pixel shading)两大类。在顶点着色器方面,Shader Model 3带来了三方面的改进:大大丰富了的编程模型,这样你可以编写更长的程序,可以进行更佳的程序流控制。因此从开发者的角度来看,他们在Shader Model 3上可以做更多他们感兴趣的时情,可以做过去在Shader Model 2上不能实现的功能,或者在Shader Model 3上更有效的去实现某些功能。例如复杂的人物动画片制作,在Shader Model 3的程序中当你需要略过某个角色或场景时,你可以分支或跳过一些暂时无用的代码,这样可以达到更快及更佳的效果,而在Shader Model 2你就必须去执行这些代码。

     在顶点着色器3.0中有些更新的功能。其中一项叫:顶点纹理取码(vertex texture fetch)。顶点纹理取码允许应用程序直接从显存中提取纹理信息来作顶点处理,这种技术可以用在包括实时位移贴图(displacement mapping)等方面使用,通过这个功能你可以在顶点着色器3.0中实现各顶点的位移工作。

    另外一个大概是最被忽视也是最有趣的功能是geometry instancing,它可以让开发者批量处理大量琐碎的运算和小模件,把他们组成一个大的模块并有效的由总线传输到图像里面――这个功能对于即时战略游戏特别有用。以前每做一次运算模件都要進行一次绘图处理,这样不但会把CPU拖慢,而且会得到很差的绘图效果。使用geometry instancing的功能,你可以发送更少的绘图指令就可以批量处理所有的数据。有时可以减少数十甚至上百次的绘图指令,这样就可以更少的使用CPU,减轻CPU的负担,提高你的帧片速率,可以使你的图形处理器更有效率的工作。

     以上我们谈的是有关顶点的问题,从象素的角度来说,大概也是一样的。你得到了一个更丰富的编程环境,你可以编写非常非常长的程序,它可以提供比Shader Model 2更多的指令数。你将得到一个真实的程序流控制模型,它可以提供循环及分支选项,就等同一个真实的编程环境。Shader Model 3拥有FP32(32位浮点)的精确度,你不可能得到任何因不够精度计算下产生的对象,现在所有低于FP32的运算都只能定为不够精确。最重要的是Shader Model 3能达到FP32的精确度。

    TR我想澄清一些关于Pixel Shader 3.0的程序问题,某些说法它的指令数限制在512或以下,但另一些说法却是65536。这到底是怎么一回事?

    Tamasi:实际上它的指令槽数目是512,但如果你支持循环选项,你就可以执行更多的指令。Shader Model 3容许你去做程序流控制,你可以编写带循环及分支的程序,但是Shader Model 2却不能这样做。ATI在GDC中宣布了一种称为2.0b的新模式,基本上它能支持512条指令,但是它不含任何程序流控制,精确度没有改变,没有循环及分支选项――-没有任何新的功能,只是单纯的512个指令。我们的硬件却能支持完全的Shader Model 3模式,你有512个指令槽,含循环及分支选项,可以执行65000个指令。

    TR:关于实时象素着色器中的动态程序流控制,似乎分支流和条件选取会有机会带给流水线过高的負擔。你能给游戏开发者一些甚么指示去避免出现这个情况?

     Tamasi:根本上说,就是小心的使用它们[笑]。你的考虑是对的。如果你不能正确的使用分支功能,将会产生性能上的损失,但其实在大多数情况下他都能有很好的表现。事实上,我们的美人鱼演示demo就非常有效的利用了分支功能。美人鱼专用的着色器十分巨大,它懂得分流去处理她的皮肤或她身上的服装。你要知道我们非常清楚,我们会确保使用者有效的去运用分支功能。的确实现这个功能并不是“免费”的。实际上他要在CPU上实现也不是“免费”的。说实在,在图形处理器中的并行流水在线执行分支功能是需要一定的技巧。

    Shader Model 3.0的实时应用

    TR:在Editor’s Day上你们的展示了一个复杂的象素着色器范例,就是指环王中Gollum的皮肤着色器,它带有子表面的分散场景渲染。有介绍说那个着色器中每象素需要计算135条指令,14个纹理存取和259个FLOPS。

    Tamasi:是的,那只是子表面下分散场景渲染的计算。

    TR:GeForce6系列实际运用时需要多长的着色器指令?你能给我个大概的答案么?

    Tamasi:大概需要百多条。坦白说,这取决于你当时正在进行什么计算,有多少纹理存取等类似因素。你可以这样体会,在Editor’s Day同一日中,我们用了Epic中的青蛙来演示Unreal Engine 3,有注释说那个演示的着色器指令长度在50到150条之间。

    TR:如果我的理解正确的话:开发者多数会用高级编程语言如HLSL来编写着色器,然后程序会按照不同的硬件作出编译。在编程过程中,相对Shader Model 2而言,编写Shader Model 3时会有什么不同?

    Tamasi:基本上,他们会用HLSL来编写着色器,然后再经过两级编译。不管是Shader Model 2.0, Shader Model 2.0b, 或者Shader Model 3.0,他们都要先通过API,DirectX等称之为预编译的环节。然后,一旦API完成了那个工作,驱动程序中的编译器就会进行下一个工作。任何硬件开发者在他们的驱动程序中都带有一个编译器,有了这样一个帮手,就可以把API指令转化为最基本的硬件源代码。

     因此从一个开发者的角度来看,他们使用HLSL,如果他们想要支持Shader Model 3,,他们就会借助API写出带循环及分支的着色器程序。如果他们对硬件的要求低于Shader Model 3,他们必顺清楚如何去用HLSL编写程序。总体来说,Microsoft最初的Dirext9为他们提供了有利的条件。从将来的发展趋势看,DirextX9.0c必定会支持Shader Model 3。

    TR:能否给我们一些简单的例子,说明Shader Model 3.0所能完成的实时效果在Shader Model 2.x上无法完成?

    Tamasi:许多复杂的光影算法不是在Shader Model 2上无法实现,只是说用SM 2.0不太实用。例如,在shader Model 3中,你可以从一个shader程序中退出,而在shader model 2中可能需要上百个或数百个指令才可以退出,从性能角度而言这实际上已经没有实用意义。SM 3.0支持分支跳转,从而简单地实现shader model 2.0所无法完成的效果。

    例如,我们的开发人员在Editor’s Day上进行了一个Shader Model 3物理演示,在Pixel和Vertex处理中间有一条反馈路径。在这个特别的演示中,开发人员需要转换一个几何区域来创造一个山地场景。他们实际上要在图形处理器中完整计算pixel shader中的运动矢量,并将这些运动矢量反馈回vertex处理器,之后用Vertex纹理取回机制读取运动数据来实现粒子系统的运动。这是一个完全GPU驱动的粒子系统。

    从与开发人员的交流中,我认为Shader Model 3最大的优势是从根本上改变了开发人员的工作难度,他们的工作更为简单。而我认为,这对于任何开发人员都是巨大的财富,它赋予了我们一个真正的编程模型。你上一次写不含分支的C程序是什么时候?所以SM 3.0是真正的编程模型。开发人员不用再担心指令设置极限,他们可以毫无顾虑地编写shader,坦白地说,只要足够的指令,他们就可以用代码获得他们需要的效果,但是,Shader Model 3可以更简单、更容易地去实现这些效果,所以从效率的观点而言,他们对于SM 3.0是非常高兴的。

    我认为结合NV4x 的64-bit浮点帧缓混合及纹理滤波功能将使得开发人员轻而易举地创建高质量的着色内容。

    TR:在某些shaders中,FP32的精度能得出正确效果;但FP24会生成可见的差效果。你可以给出一些范例吗?

    Tamasi:关于这个问题你可以听听Tim Sweeney的阐述。我们采用了大量的lighting算法用于使FP24产生artifacts。一般认为,shader越为复杂,lighting模板也就越复杂,那么就越能够看出FP24在精度上的问题。典型例子就是,如果你使用恰好是用来对于深值进行操作的shaders,那么将再一次发现FP24的问题。

    我最后想到,说实话,最大的问题就在于FP24没有标准化。FP32是有其相应标准的。差不多20年了,这就是IEEE754。仅仅当人们在编写一个非常复杂的程序时,他们希望能够产生别人或多或少觉得熟悉的那些精确度,而且CPU的单精度浮点运算采用FP32的格式也 有多年了。我想从期望的结果也可以看出这一点。他们不需要担心特别的包装;他们也不会担心“哇,到底是谁的FP24?”,反正根本没有什么标准可言。如果真的有人以这种方式来开发FP24,恐怕在另一个人的电脑硬件上都不是同一个东西了。不过通常来说,lighting算法越复杂,或者操作值越深;你就越可能发现FP24的精度问题。

    Far Cry和shader models

    TR:我们看过了所有公布出来的在Shader Model 3.0效果下的Far Cry截图。

    Tamasi:是的,实际上,他们是在Shader 2 或Shader 3下的截图。

    TR:其中一个效果图向我们展示的是“假位移贴图”效果,对么?

    Tamasi:是的。“虚拟位移贴图”,“并行贴图”等,有很多类似的术语。

    TR:产生这样的效果的shader程序需要多少指令行?

    Tamsi:要达到这种效果其实需要的指令行数并不多….我想要达到那个特别的效果,不需要超过10行指令。

    TR:我们能否在Far Cry中看到Geforce FX通过Shader Model 2.0路径获得同样的效果。

    Tamasi:是的,你们已经在Far Cry中看到了图象。当前的路径实际上是Shader Model 2.0,任何运行shader model 2.0的显卡都应该可以生成那些图象。

    NV40的内部

    TR:我看了一些你的演说稿,提到在NV40中每条象素流水线都包含两个象素着色单元,他们可以一起按照不同的模式工作:它可以在一个时钟周期内进行三组件矢量操作和单元件标量操作,或者在每个时钟周期内进行两组双组件矢量操作。你能举例说明什么类型的图像操作可以显示这种能力的优越地方么?

    Tamasi:怎么说呢,在一些我们称之为后处理的着色效果里,如发光、污点和一些自然的物体或者其它透镜效果一般是二维的,只有XY坐标。因此,从坐标系统的角度来看,那些着色效果都是采用双组件矢量操作的,此时进行并行工作时的优势就显现出来了。

    TR:在象素流水线里,每个象素管里都有两个FP32象素着色器。在每个时钟周期内,他们都可以进行并行矢量操作么?

    Tamasi:是的,每个着色单元可以发出双重(或更多)指令,同时你也可以在他们之间进行相互传送。因此,实际上在每条象素流水线里,你可以有4个,或者在某些情况下多于4个的指令操作――两个在着色单元1,两个在着色单元2――两个独立的指令在着色单元1,另外两个独立的指令在着色单元2。在每个着色单元里我们还有迷你ALUS,他们也可以为他们发送指令。我们给出了一个实际上在并行传送下实行7条指令操作的着色器范例。

    这次访问到此结束,TR非常感谢Tony Tamasi能抽出时间并耐心的回答我们的问题。

0人已赞

关注我们

泡泡网

手机扫码关注