`

基于PC的OpenGL跨平台实现及性能研究

阅读更多

基于PC的OpenGL跨平台实现及性能研究

(原文地址:  http://qkzz.net/magazine/1001-9081/2007/05/846684.htm  )

摘要:针对OpenGL独立于操作系统和窗口系统的特性,分析了OpenGL基于PC的工作原理,包括泛型实现、硬件实现和OpenGL跨平台实现。使用OpenGL性能特征小组的SPECViewperf 9.0对OpenGL在Windows和Linux操作平台上的实现性能进行了测评和对比,并给出相关数据和图表。结果显示,OpenGL运行在硬件模式时会获得更好的性能。在PC平台上,OpenGL的实现性能受操作系统和窗口系统影响。测评方法和结果对选择OpenGL操作平台具有一定参考价值。
  关键词:OpenGL;性能;测评;SPECViewperf
  中图分类号: TP302.7
  文献标识码:A
  
  0引言
  
  OpenGL作为开发灵活的、交互的2D和3D图形应用程序的一个主要环境,目前已经成为工业界最广泛使用和支持的2D和3D图形应用程序接口(Application Programming Interface, API),它是真正意义上开放的、跨平台的图形标准[1]。随着并不昂贵但性能卓越的图形硬件的普及,以及原来只在图形工作站上才具有的OpenGL硬件实现技术在个人计算机(Personal Computer, PC)上的应用,OpenGL在PC上得到了广泛的运用,例如在Windows系统上应用于机器人模拟[2]和虚拟地形漫游系统[3],以及在Linux环境下模型直升机飞行过程的实时3D仿真[4]和地震数据的三维可视化[5]中的应用。同时其性能成为至关重要的问题。目前对于OpenGL性能的主要研究可分为两个方面:一是针对计算机3D图形卡、CPU等“硬件层”的研究,例如J.W.Sheaffer,D.Luebke,K.Skadron开发的GPU模拟工具Qsilver[6],以及Chris J.Thompson,Sahngyun,Hahn Mark Oskin对图形硬件结构的研究[7];二是对应用软件的“应用软件层”的研究,例如罗朔锋,李雪耀,熊新平等在高性能面向对象场景图系统中对OpenGL图形性能的优化[8]。然而,OpenGL在跨平台的具体实现时,其性能除了与“硬件层”和“应用软件层”相关外,由于OpenGL没有附属任何窗口函数,OpenGL必须要与具体的操作系统和窗口系统相结合才能执行[9],使得OpenGL的性能又与具体操作系统及窗口系统这一“操作平台层”密切相关。
  针对这一问题,本文对基于PC的OpenGL跨平台实现性能作了研究,分析了OpenGL跨平台实现的原理,详细论述了使用SPECViewperf 9.0对OpenGL在Windows和Linux上实现性能的测评,分析和比较了PC上不同操作平台对OpenGL性能的影响。
  
  1OpenGL工作原理
  
  1.1实现模式
  OpenGL的实现有两种模式:泛型实现和硬件实现。泛型实现即软件实现,也就是对OpenGL函数调用做出响应创建三维图像的软件函数库。图1显示当一个应用程序运行时OpenGL的泛型实现所占据的典型位置。在不同的操作系统上想要在屏幕上创建输出的应用程序通常会调用一种本地显示服务。OpenGL的硬件实现又称为加速实现,通常采用图形卡驱动程序的形式。图2显示了它与应用程序的关系。OpenGL调用将传递给硬件驱动。这个驱动程序并不把它的输出传递给本地显示服务以进行显示,而是直接与图形显示硬件进行通信[10]。需要说明的是,OpenGL的硬件实现中通常也包含了OpenGL的软件实现,这在图2中并未明确反映出。
  
  1.2OpenGL在PC上的实现
  OpenGL是操作系统独立的和窗口系统独立的。为了将它结合到各种窗口系统中,需要利用附加库,为此每个窗口系统有它自己的特定的库和函数。在Linux上,X Windows系统和OpenGL之间的“桥梁”是GLX;在微软的Windows上则是WGL。对于Windows操作系统,Windows NT 3.5和Windows 95(Service Release 2以后)之后的每个版本都提供了OpenGL的实现。Windows 2000和Windows XP也包含了对OpenGL的支持。在屏幕上创建输出的Windows应用程序通常会调用一种叫做图形设备接口(GDI)的Windows API。一般来说,如果安装系统时使用操作系统自带的显卡驱动程序,那么OpenGL程序就会运行在泛型实现模式下,而安装显卡驱动程序之后,OpenGL就会运行在硬件实现模式下。
  Linux上通常使用直接渲染结构(Direct Rendering Infrastructure, DRI)提供加速的OpenGL实现。Mesa是一个开源的OpenGL实现,通常它是作为DRI的核心与DRI一起完成OpenGL硬件实现[11],而当3D图形硬件不在Mesa支持或使用的范围内时,Mesa完成OpenGL的泛型实现。一般来说,Linux上3D图形硬件驱动是基于DRI的,但是也有一些例外,比如本文测试平台中使用的3D图形硬件NVIDIA的驱动就不是基于DRI(安装该驱动程序会在X Window配置文件中去掉“载入DRI”一项)。它提供了自己的非开源驱动程序,并为Linux与Windows使用一致的驱动代码。其驱动方式在Linux上为内核模式驱动,在Windows上是以VXD最小端口方式驱动。为了获得OpenGL的硬件实现,本文在Windows各版本和Linux各发行版中均安装NVIDIA最新显卡驱动程序(作者写稿时,Windows最新版本是91.47,Linux最新版本为1.09625 beta)。
  
  2测试平台
  
  2.1硬件平台
  本文测试计算机(Ⅰ),代表了中低水平的PC性能,其配置如下:CPUP4 3.00GHz, 内存512MB, 显卡NVIDIA GeForce FX 5200。

在计算机高速发展的今天,双核技术已经成为PC发展的方向。为了更加全面的比较OpenGL在相对高端性能的PC上实现性能的不同,本文使用“双核”测试计算机(Ⅱ),其配置如下:CPU PD 2.80GHz, 内存1GB, 显卡NVIDIA GeForce 7300 LE。
  
  2.2操作系统
  在Windows平台上本文选用操作系统如下:
  (1) Windows 2000 Professional 
  (2) Windows 2000 Advanced Server 
  (3) Windows XP Professional 
  (4) Windows Server 2003, Enterprise Edition 
  在下文中,Windows XP Professional和Windows Server 2003, Enterprise Edition将会分别用Windows XP和Windows Server 2003代替。
  Linux作为OpenGL实现的一个主要操作系统平台,除了是免费分发之外,还因其多功能性、可改写性和健壮性,成为UNIX和微软操作系统的主要替代者[12]。作为Linux操作系统核心的内核也由最初的0.01版本发展到目前的2.6版本(2003年12月发布)。而基于内核之上的Linux发行版有上百种,本文选择其中3个有代表性的Linux发行版:Fedora Core 5、Ubuntu 6.06和RedFlag 5.0。
  
本文原文
  
  3性能分析程序SPECViewperf
  
  3.1SPECViewperf简介
  SPECViewperf是OpenGL性能特征组织(OpenGL Performance Characterization, SPECopc)发布的一个OpenGL性能测评程序,它由IBM用C语言编写开发,后经SGI、Digital、3Dlabs和其他SPECopc项目小组的贡献使之不断完善。目前,该程序能够运行于绝大多数操作系统,包括UNIX,Windows系列以及OS/2[13]。本文使用SPECViewperf 9.0对OpenGL性能进行测评。
  SPECViewperf 9.0对OpenGL的测评数据源(称之为Viewset)并不是由SPECopc项目小组开发的,而是来自于独立软件提供商(Independent Software Vendor, ISV)本身。目前,共有9个SPECopc Viewset:3DSMAX,CATIA,ENSIGHT,LIGHT,MAYA,PROE,SW,UGNX和TCVIS。
  
  3.2SPECViewperf测评基准和方法
  SPECViewperf是通过测试每秒帧数(Frames Per Second, FPS)反映OpenGL性能。其他相关信息如测试的操作系统版本,所有的渲染状态,建立显示列表时间(如果使用了的话)以及使用的数据源等都输出在标准化的报告中。以3DSMAX Viewset为例,3DSMAX Viewset当中包含了14个不同的测试包,每个测试包具有一个权值,由公式(1)计算得到一个加权几何图形平均值(Weighted Geometric Mean):
  ∏ni=1(frames/secondi)(wi)(1)
  式中:
  n — Viewset中独立测试包总数。
  w — 每个独立测试包的权重值。
  
  4性能测试
  
  以下将使用SPECViewperf 9.0对OpenGL在Windows和Linux平台上的实现性能做出综合测评和分析,测评过程中测试窗口大小均为宽1280高1024。
  
  4.1OpenGL不同实现模式性能比较
  OpenGL运行在不同实现模式时实现环境有所不同,在Windows上主要不同如表1所示。OpenGL版本方面,Windows的OpenGL实现为1.1版本,事实上,Windows对于OpenGL的支持在1.1版本之后就再也没有更新过。泛型实现模式下OpenGL的本地显示服务是GDI,而在硬件实现模式下显卡驱动提供了对OpenGL最新的支持,对OpenGL的调用则直接由硬件驱动来完成。
  在Linux上,与Windows对OpenGL支持不多不同,Mesa近几年来一直紧随OpenGL逐渐增加特性(如表2所示),Mesa 6.x 已经支持OpenGL 1.5。当OpenGL运行在泛型模式时,Mesa为间接渲染状态,在硬件实现模式下则为直接渲染状态。然而正如表3和表4所示,不论是在Windows还是在Linux上,OpenGL运行在硬件模式时的性能都要优于泛型模式时几倍甚至更多。
  不同之处泛型实现硬件实现
  不同之处泛型实现硬件实现
  
  4.2OpenGL的硬件实现性能
  下面将针对OpenGL的硬件实现性能(以下简称性能)做出测评。在此之前,因为Linux各个发行版的内核版本并不都相同,其中Fedora 5和Ubuntua 6.06内核版本为2.6.15,RedFlag 5.0内核版本则为2.6.9。由于Linux内核版本不断更新,新的内核修订了旧内核的bug,并增加了许多新的特性。为了能够使用这些新特性,并定制一个更高效,更稳定的内核,减少由于内核差别对于测评可能带来的影响,就需要下载最新内核2.6.18[14],并重新编译安装Linux内核(编译安装新内核后,还需要重新安装Linux显卡驱动程序)。 
表5是对Windows操作平台上OpenGL性能测评的结果。可以看出,Windows XP上在CATIA、ENSIGHT、LIGHT、MAYA、PROE和UGNX几项上OpenGL性能都最为出色,特别是CATIA和LIGHT两项,而OpenGL在Windows Server 2003上较在其他Windows版本上性能则有明显的差距。Windows 2000 Professional和Windows 2000 Advanced Server由于版本一样,OpenGL性能测评结果也基本相同。
  相比之下,Linux操作平台上OpenGL性能的差别并不十分明显,如表6所示。进一步将Windows平台上OpenGL性能表现最为突出的Windows XP与Linux平台上的Ubuntu 6.06作一个对比可以看出,虽然Windows XP上OpenGL性能在CATIA、LIGHT和SW几项上的测评结果较Ubuntu 6.06要稍好一些,但在ENSIGHT、UGNX方面却相差比较明显,而在其他各项上的差距则很小。
  
  4.3“双核”计算机上OpenGL性能
  SPECViewperf 9.0在测试过程中使用的Viewset代表了相对高端的应用程序,例如Viewset中的CATIA,它所使用的模型包含了总共两百万个顶点。此外,SPECViewperf 9.0还包括了对光照、显示列表、投影等全面的测评,而完成每一项测评需要大量的系统资源。为了尽量减少由于系统资源的不足对OpenGL性能的影响,本文使用测试计算机(Ⅱ)来进一步认识OpenGL跨平台实现的性能。
  表7是在测试计算机(Ⅱ)的Windows平台上OpenGL性能比较。可以看出,在系统资源对于OpenGL性能的限制减小后,Windows平台上各操作系统对于OpenGL性能的影响也减少很多,表中显示除了ENSIGHT和TCVIS两项之外,Windows各版本上的OpenGL性能相差已经非常小。同时,如表8所示,Windows XP与Ubuntu 6.06上OpenGL性能仅在3DSMAX和PROE两项上测评结果非常接近,而其他各项测评结果依然是存在较大差异。
  
  5结语
  
  通过对OpenGL跨平台实现
  性能的全面测评可以看出,一方面,在相同配置计算机上,相比泛型模式,当OpenGL运行在硬件模式时能够发挥更好的性能;另一方面,虽然决定OpenGL性能的因素主要是CPU、图形子系统(包括GPU、图形总线、驱动)等,但是在PC上,操作平台对于OpenGL的性能的影响同样是不可忽略的,特别是在运行相对高端的应用程序而计算机系统资源又相对不足时,这种影响体现得更加明显。本文的测评方法和结果对选择OpenGL操作平台和衡量OpenGL实现性能具有一定参考价值。
  本文并未对操作系统和窗口系统可能对OpenGL性能发挥产生影响的具体因素以及限制OpenGL性能发挥的瓶颈问题做出研究,如何使OpenGL在PC上发挥出最好的性能需要在今后的学习工作中作进一步深入的研究。 
 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics