基于多核平台优化的OGRE 3D渲染引擎

基于多核平台优化的OGRE 3D渲染引擎
陈天洲1+,陈学亮1, 施青松1
1(浙江大学计算机学院,浙江杭州,310027)
摘 要:近年来,随着计算机体系结构的发展,多核平台的应用越来越广泛。多核平台与并行计算理论结合,以多线程的方式有效的提高了应用程序性能。本文针对图形领域中广为使用的OGRE 3D渲染引擎,从多帧渲染、循环迭代、函数调用三个方面进行多线程并行优化,并在多核平台上进行测试。实验结果表明,本文的优化方法是正确的,有效的提高了OGRE 3D渲染引擎的性能,从而证明了多核平台和并行计算理论的优越性。
关键词:多核平台;优化;多线程;OGRE
1.引言1
多核处理器体系结构通过在单个芯片上集成多个处理器内核,每个核都是一个完整的处理器内核,都具有自己的逻辑单元、控制单元、执行单元,一级Cache通常独有,二级Cache可能共享也可能独有。
大多数现代的操作系统里,都是以线程为基本的资源分配和调度单位。在多处理器体系结构中,多线程能充分利用多处理器体系结构,它使得每个线程能并行运行在不同的处理器上。对于多核处理器体系结构来说,由于多核处理器中每个处理器内核都是一个完整的内核,都能同时运行一个线程,能大大提高应用程序性能。
多核平台以其特有的体系架构,有效的降低了芯片功耗,增加了晶体管利用率;同时,多核平台与并行计算理论相结合,以多线程并行的方式使应用程序性能大为提高[1]。多核平台的应用越来越广泛,逐渐渗透到计算机科学的各个领域,并将取代单核平台成为今后处理器发展的主流方向。
然而目前在图形领域,多核平台的应用尚未扩展开。图形领域中的许多应用仍然是单线程,也就是串行的,无法利用多核平台的优势。OGRE(Object-Oriented Graphics Rendering Engine),是图形领域中非常典型的一款面向对象的图形渲染引擎,它的类库提供了大量接口,并对底层的Direct3D等图形库进行抽象,使得开发者可以非常轻松的调用OGRE图形渲染引擎制作出各种各样的图形系统。此外,OGRE 3D渲染引擎是一款开源的图形引擎,由大量的专业技术人员开发和维护,更新迅速,功能强大,目前已广泛应用于游戏设计[2]、科学模拟、图形绘制等多个领域。
本文将使用Win32线程库和OpenMP方法,从多帧渲染、循环迭代、函数调用三个方面对OGRE 3D渲染引擎进行多线程并行优化,并最终在多核平台上进行实验,由此得到一个性能提高的OGRE 3D渲染引擎。
资助项目:国家自然基金 (60673149),863项目(2007AA01Z105)
联系作者:陈天洲,Email:[email protected]
2.OGRE渲染系统分析
OGRE渲染系统是OGRE 3D渲染引擎中最为重要的部分,本文对OGRE 3D渲染引擎的优化都集中于渲染系统模块,从中选取合适的区域进行多线程并行优化,从而提高OGRE 3D渲染引擎的性能。
OGRE渲染系统的主要作用是计算图像数据,不断生成图像帧,存储到缓冲区,然后由流水线管道将图像帧传送给场景管理器,最后由场景管理器加载各种资源输出到终端。为了将OGRE渲染系统多线程化,需要分析其渲染流程查找可以并行部分。

通过本文的分析,OGRE渲染流程如图1所示:



图1 完整的渲染流程

3.OGRE渲染系统多核并行化
2.2多帧渲染并行化
OGRE渲染系统中的瓶颈通常在生成图像帧的阶段,如果生成帧的速度加快,则缓冲区中能存储更多的图像帧,相应的保证了场景管理器渲染帧的速度加快。OGRE渲染系统的性能参数可以用FPS(Frames Per Second)来衡量,即每秒钟渲染的帧数。当FPS值越高时,显示效果越好,也代表渲染系统性能越高;而当FPS值越低时,显示效果越差,更严重时甚至会出现“跳帧”,代表渲染系统性能越差。
因此,为了提高OGRE渲染系统的性能,可以提高生成图像帧的速度。本文对图1中的Render One Frame以及Update Render Target等阶段进行多线程并行优化,改变原有的串行
生成帧的模式,而使用Win32 API进行多线程化,同时注意线程之间的同步。对相关函数的改动参考了Jeff Andrews的《Threading the OGRE3D Render System》[3],如下所示:
……
_beginthreadex(0, 0, Root::renderThreadFunc, 0, 0, 0);
……
/*static*/ unsigned int Root::renderThreadFunc(void) {
while(1) {
_waitForStartRendering();
_setStartRendering(false);
_updateAllRenderTargets();
_setRenderingComplete(true);
}
}
bool Root::renderOneFrame(void) {
if(!_fireFrameStarted()) return false;
if(mThreadedRendering) {
_waitForRenderingComplete();
_setRenderingComplete(false);
_setStartRendering(true);
}
else {
_updateAllRenderTargets();
}
return _fireFrameEnded();
}
对生成帧的并行化是最底层的优化,在OGRE渲染系统的最初调用阶段就进行并行化,能最大限度的提升性能。
3.2循环迭代并行化
OGRE渲染系统中存在着大量的循环迭代运算,即for形式的循环,消耗了大量的时间。OpenMP方法提供了对for循环多线程并行化的子句:#pragma parallel for [clause] [4]。
OpenMP的工作模式称为Fork-join模式。程序开始执行时,只有一条主线程。当主线程运行到OpenMP的编译制导语句即进入并行区域时,主线程会衍生出一组子线程,这些子线程和主线程一起并行执行完成任务,并行区域结束时,子线程全部合并到主线程,主线程继续执行到程序终结。并行区域支持嵌套,此时原来的线程就成为子并行区域线程组的主线程。OpenMP的Fork-join模式如图2所示:



图2 OpenMP的Fork-join模式

OpenMP的结构和子句都有一定的时间开销,如果对一些迭代次数不多、内部结构非常复杂的for循环进行优化,反而很有可能会降低性能。因此,在对OGRE渲染系统中的for循环进行优化时,要尽量选择迭代次数较多、内部结构简单的for循环,提高优化效率。
对OGRE渲染系统内部的循环迭代优化,属于中等层次的优化,能在一定程度上提高OGRE渲染系统的性能。
3.3函数调用并行化
在应用程序对OGRE提供的API函数进行调用时,可使用OpenMP提供的sections子句进行并行化,前提是并行的函数之间无依赖性。函数级并行示意图如图3所示:



图3 函数级并行化

函数调用并行化属于应用层次,是最高层的优化,性能提升效果和应用程序关系较大。
4.实验结果与分析
根据第2节的介绍我们得知在多核平台下使用多线程机制能有效提高应用程序性能,而在第3节中我们对OGRE渲染系统进行分析并总结出了多线程并行化的三个步骤:多帧渲染、循环迭代、函数调用。
我们依次实现了这三个步骤后,选取了一些OGRE的标准测试程序,在英特尔Pentium D 830 3.0GHz双核平台上进行测试。
在对渲染系统优化之前,先测试demo程序的性能以方便和优化之后的性能对比。本文的性能参数是以FPS为标准,FPS即每秒钟的帧数,系统性能越高,则渲染一帧的时间
越短,对应的每秒钟渲染的帧数越多,即FPS越高。实验结果如表1所示:

从实验结果可以看出,大部分的标准测试程序经过多线程优化后性能都得到了较大的提升,性能提升比例大部分都在10%以上,最高的甚至达到了27.7%;但有的标准测试程序性能出现了倒退,为-3.4%,这主要是因为其内部结构比较复杂,并行化效率很低,而且在使用OpenMP进行循环迭代并行化和函数调用并行化时,创建、切换、终结线程等都有一定的时间开销,反而降低了性能。但总的来说,本文的优化方法是成功的,有效的提高了OGRE 3D渲染引擎的性能。
5.结论
近年来,多核平台的应用越来越广泛。多核平台与并行计算理论相结合,以多线程并行的方式大大提高了应用程序的性能。本文针对图形领域中广泛使用的OGRE 3D渲染引擎,从多帧渲染、循环迭代、函数调用三个方面进行了多线程并行优化,并在多核平台上进行验证。实验结果表明,本文对OGRE 3D渲染引擎的优化方法是正确的,有效的提高了OGRE 3D渲染引擎的性能,证明了多核平台和并行计算理论的优越性。
参考文献
[1] Ronen, R., et al. Coming challenges in microarchitecture and architecture [J]. Proceedings of the IEEE. 2001, 89(3): 325-340
[2] TCW Benjamin, EC Prakash. Game rendering: a material editor for the object-oriented game rendering engine[C]. Proceedings of the 2006 international conference on Game research and development. 2006: 199-206
[3] Jeff Andrews. Threading the OGRE3D Render System. http://cache-www.intel.com/cd/00/00/33/13/331357_331357.pdf. 2006
[4] OpenMP Architecture Review Board. OpenMP. http://www.openmp.org
An Optimized OGRE 3D Render Engine Based on Multi-Core Platform
CHEN TianZhou1+, Chen Xueliang1, SHI QingSong1,
1 (College of Computer Science, Zhejiang Hangzhou,310027)
+ Chen Tianzhou:Phn:+86-571-87951793, E-mail:[email protected]
Key words:Multi-Core Platform; Optimization; Multithreads; OGRE
Abstract:In recent years, with the computer architecture’s development, multi-core platform’s application becomes more and more extensive. Combined with the parallel computing theory, multi-core platform greatly improves the application's performance by the multi-thread parallelization. This paper threads the OGRE 3D render engine, which is widely used in the graphic field, by the 3 steps: multi-frames rendering parallelization, loop iterations parallelization and call of functions parallelization, And then verifies it in the multi-core platform. The results show that the optimization method is correct, and it effectively upgrades the engine's performance. So this paper verifies the multi-core platform and the parallel computing theory's advantage, and achieves the research purpose.
基于多核平台优化的OGRE 3D渲染引擎
陈天洲1+,陈学亮1, 施青松1
1(浙江大学计算机学院,浙江杭州,310027)
摘 要:近年来,随着计算机体系结构的发展,多核平台的应用越来越广泛。多核平台与并行计算理论结合,以多线程的方式有效的提高了应用程序性能。本文针对图形领域中广为使用的OGRE 3D渲染引擎,根据并行计算理论,对OGRE 3D渲染引擎进行多核平台上多线程并行优化。
本文对OGRE渲染系统做分析,理清了OGRE渲染系统的整体框架,提出了OGRE渲染系统并行化的三个步骤:多帧渲染并行化、循环迭代并行化、函数调用并行化。
通过在帧、函数、循环三个层次,本文将渲染系统的源码进行了多线程改造。通过将Render One Frame以及Update Render Target等阶段进行多帧渲染的多线程优化,能并行生成帧;在渲染代码中将循环迭代运算通过多线程分配到多个核上;在无依赖性的函数之间将各个函数分配到各个处理器核上,最终形成了多核平台优化的OGRE 3D渲染引擎。
本文将使用Win32线程库在多核平台上进行实验,通过OGRE的标准测试程序进行测试,结果表明,大部分的标准测试程序经过多线程优化后性能都得到了较大的提升,性能提升比例大部分都在10%以上,最高的甚至达到了27.7%。有少部分标准测试程序由于多线程开销以及本身串行化程度较高,而导致性能降低。
总体上看,本文的优化方法正确,能有效提高了OGRE 3D渲染引擎的性能,从而证明了多核平台和并行计算理论的优越性。
Abstract:In recent years, with the computer architecture’s development, multi-core platform’s application becomes more and more extensive. Combined with the parallel computing theory, multi-core platform greatly improves the application's performance by the multi-thread parallelization. This paper threads the OGRE 3D render engine, which is widely used in the graphic field, by the 3 steps: multi-frames rendering parallelization, loop iterations parallelization and call of functions parallelization, And then verifies it in the multi-core platform. The results show that the optimization method is correct, and it effectively upgrades the engine's performance. So this paper verifies the multi-core platform and the parallel computing theory's advantage, and achieves the research purpose.

你可能感兴趣的:(图形图像,图形引擎,引擎开发,优化相关,游戏引擎,OGRE,技术理论)