不支持Flash

DX10走向大众 320MB 8800GTS显卡性能评测(2)

http://www.sina.com.cn 2007年02月12日 11:11 天极yesky

  DirectX中间件的指针问题及线程调用

  DirectX凭借其提供的丰富视觉特效及简单易用的特性成为了最主流的图形编程语言,深受软件行业中图形开发业者的喜爱。尽管这是一门取得如此成功的语言,但DirectX API却总是有一个高CPU占用率的毛病。

  在图形编程API被引入之前,3D应用程序是可以直接访问图形硬件,这些3D的应用程序可以直接发送他们的指令目录到图形硬件上。随着硬件处理速度的加快,这些应用程序不得不分派不同的指令到其对应的硬件设备的寄存器中,以加速应用程序的执行效率。但这带来的后果就是3D应用程序的开发难度加大,以及调试过程困难调试效率低下并且容易出错。这种情况虽然图形硬件日新日异的发展变得越来越严重。

  像今天DirectX与OpenGL这样的图形编程API其实是位于3D应用程序与图形硬件的中间层,这个概念是类似于今天已经广为人知的中间件技术,与目前的中间件应用一样,DirectX与OpenGL这样的API是处理并翻译3D应用程序的指令到图形硬件特定的单元。同样与目前的中间件技术类似,DirectX与OpenGL的应用程序指令翻译与发放是使用CPU来完成的,也就是说所有的3D指令的执行都会占用CPU的资源。随着GPU的发展速度超越CPU,这样的中间层API设计就会为3D图形渲染带来2个问题:一是由于GPU的处理器速度已经比CPU翻译指令的速度快,所以低速的CPU会限制GPU同时渲染的物体(Object)个数;二是CPU过慢的速度会限制场景中特效使用,同样是因为CPU指令翻译速度过慢的问题。

  由于CPU指令翻译过慢而引发的GPU限制的一个典型案例:一个画笔调用是使用固定的API占用情况下,如果系统处理满负荷状态下这个画笔调用的指令数量就会被硬性的加入一个数量限制,以避免CPU能均衡分配资源到其他的调用翻译,防止应用程序停止响应甚至是应用的崩溃。为了突破这个限制,一些开发者们想出了一个巧妙的办法,就是把这些画笔调用打包成一个指令群,利用指针调用这个指令群的head执行地址,使CPU能再一个指令调用的空档下执行多个画笔调用的指令群。这个利用指针的方法不能不说是一个巧妙的方法。可是由过资深的程序员都应该知道指针是危险而高效的东西,在C语言时代,指针与’into’指令一样都是导致许多应用崩溃的罪魁祸首,微软把指针在C++上发扬光大,但强大而高效的指针系统对于C++的贡献则是功过参半,Java语言就是号称不使用指针系统的语言,虽然其内部还是不可避免的使用指针,但其API开发包中不会为程序员提供指针调用。从上面的这些编程语言对于指针系统的反馈来看,在开发环境不成熟的DirectX、OpenGL图形中间件下使用指针系统是会对应用程序执行造成很大风险的。并且这种打包的方法并不能解决需要不同材质的画笔调用,仅限于同一材质的画笔程序,这就使打包的便捷大打折扣。

  DirectX、OpenGL中间层过高的CPU占用率不仅会限制GPU的渲染速度,还会限制3D应用程序中场景特效的丰富程度。与上面画笔调用的动态变量不同,上面的画笔调动的动态变量在程序中是使用new关键词申请,而在程序中还存在一种通过State关键字注明的静态全局变量,在图形处理过程中,静态的全局变量同样需要占用CPU资源,这些静态的全局变量包含纹理、渲染、顶点格式和混合模式等场景元素,正是这些场景的基本特征元素区别着每一个场景,就犹如我们平常说“人”这个物体一样,如果不加上特征修饰,所有的“人”都是物件都是一样的,但我们通常会说“凶恶的人”、“善良的人”等等这样的修饰,场景的描绘也是一样,如果不加入特征修饰,所有申请下来的场景对象都是一样的类(Class)对象,静态的全局特征变量为我们区别了当前场景的特征。但这些静态全局变量同样需要耗费CPU资源,而这些在物件(Object)上的修饰同样受限于物件(Object)的数量,通常还会有多个修饰叠加在一个物件(Object)上。最终的结果就是影响游戏场景中的视觉效果。

  DirectX 10的设计宗旨之一就是减少图形指令翻译对CPU的依赖,在DirectX 10中主要通过3种方法来改善这一情况。第一,重新设计那些动态变量(Class)与静态变量(State)的物件代码,使其在单个处理器任务重占用更少的CPU资源。使用一个新的特性来减少CPU资源占用。三,这个新的特性允许在单个指令中加入更多的工作。但截至到目前,还没有任何一款DX10游戏正式发布,因此DX10的这些改善以及其他的崭新特性我们只能留待以后讨论。

[上一页] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]
 [下一页]

本文导航:
·图形编程的新时代-DirectX 10概述
·DirectX中间件的指针问题及线程调用
·正在走向大众的DX10,320MB G80显卡
·双敏2499元GeForce 8800GTS样卡介绍
·3DMark05对比测试成绩
·3DMark06对比测试成绩
·FarCry对比测试成绩
·SCCT+HDR 对比测试成绩
·Serious Sam2对比测试成绩
·总结

发表评论
爱问(iAsk.com)
不支持Flash
 
不支持Flash
不支持Flash