现在的位置: 首页 > 综合 > 正文

在集群系统内部署Equalizer应用

2013年09月04日 ⁄ 综合 ⁄ 共 2666字 ⁄ 字号 评论关闭

概述

Equalizer是一个基于OpenGL的并行渲染系统框架,其开发者来自于瑞士的苏黎世大学,目前最新的版本是0.3,估计近期就会发布0.4版本了。
简 单来说,Equalizer希望构造一套基于OpenGL的图形渲染框架,不同于渲染引擎,它通过提供对渲染环境和流程的控制,用于将串行计算机上运行的 图形应用快速的扩展到诸如多窗口、多显卡(如SLI)、集群系统等环境中,从而充分利用系统的并行渲染能力获得更高的处理速度。相对于比较传统的由 Stanford大学设计实现的Chromium 及其前身WireGL,Equalizer通过在应用层实现渲染的并行化,避免由于在OpenGL指令层实现并行所带来的巨大的网络带宽要求,因此Equalizer的效率要远远高于Chromium。关于Equalizer项目的创建目标及其理论可以参考相关的网站[1]

下载与安装

这里以Equalizer中的示例eqPly为对象,讲述如何在集群系统内正常的部署Equalizer应用。
首先需要在www.equalizergraphics.com网 站上下载当前稳定版本源码,或通过SVN获取当前最新的开发版本.我的系统是windowsXP SP2,所以下载完成后在visual studio 2005下即可正常编译,这里需要注意的是,即时更新的开发版本常常会存在一些设置或文件不全的问题,因此建议开始的时候还是先下载稳定版试验.编译会产 生几个主要的二进制文件,包括eqserver.exe, eqserver.dll, eqPly.exe等,编译好的文件输出到/build/win32/debug下.

由于需要在命令行中执行各种指令,因此我将编译输出的exe与dll文件都拷贝到自己建的d:/eqbin目录下,然后将example/configs目录拷贝到d:/eqbin中,该文件夹中的eqc文件是服务器程序用于进行系统配置的脚本文件。
Equalizer 是通过SSH实现在集群系统内部进行远程管理的,在windows系统构成的集群中则依靠cygwin中的openssh实现,因此需要在集群系统的各个 节点部署SSH,其中作为Equalizer服务器的计算机需要配置为ssh客户端,其它用于渲染的节点都要安装ssh服务器,并保证从eqalizer 服务器可通过同一个用户登陆所有的渲染节点计算机。关于如何在windows系统内安装ssh,可以参考[3]

启动服务器

一切准备工作完成后,首先来启动equalizer服务器,在命令行窗口中进入d:/eqbin目录,然后输入如下指令:
eqServer configs/2-window.2d.eqc
这里采用的配置方案为通过屏幕空间划分将计算负载分配给两个本地窗口,在渲染完成后将两个窗口的画面进行二维合成,获得最终的画面,也就是sort-first并行架构。

启动客户端

启动另外一个命令行窗口,进入d:/eqbin目录,然后输入如下指令:
eqply
这时会弹出两个窗口,共同完成一个正方形的渲染,其中一个窗口在渲染的同时接受另一个窗口的渲染结果,在与自身渲染结果一同显示,从而得到完整的画面。

eqply可以通过命令行参数-m及其指定的文件加载模型文件,并在场景中进行渲染,目前它支持ply文件格式,相关的资料及模型请参考[4] 。这里假设有一个ply格式的模型文件位于d:/eqbin目录下,文件名为boat-25.ply,可输入如下指令:
eqply -m boat-25.ply
可以看到在弹出的两个窗口内分别渲染了场景的一半,其中一个窗口将两个部分的画面合成为同一幅画面。


sort-last的效果

关掉eqPly(ESC)与eqServer(Ctrl+C),重新在命令行中运行
eqServer configs/2-window.2d.eqc
然后在新的命令行窗口中运行
eqPly -m rockerArm.ply
可以实现由两个窗口构造的sort-last并行渲染系统,即两个窗口分别渲染一部分几何图元,然后将其中一个窗口的颜色缓存和深度缓存发送到另一个窗口,由该窗口进行最终像素的深度检测与填充。渲染的画面如下图所示:

现在来试试集群内的运行情况
同样的首先要运行服务器,不同的是需要采用另一个配置文件2-node.2d.eqc
这里要注意,在2-node.2d.eqc中,关于节点node的配置项需要设置将要运行渲染任务的计算名称或IP地址

集群设置

服务器启动后,同样的在另一个命令行窗口中运行
eqply -m boat-25.ply
此时根据eqply中的设置,首先在本地运行应 用节点任务,然后通过ssh管道将要运行的指令(eqply -m boat-25.ply)发送给配置文件中指定的渲染节点计算机,由后者执行该指令。此时应当在服务器计算机与另一台设置为渲染节点的计算机上分别有一个 窗口负责渲染,只是在服务器计算机的窗口内包含了由渲染节点传输过来的渲染好的另一半画面。

其他

这里需要说明的是,由于Equalizer在集群应用中所发送的ssh指令,规定在远端以同样的路径运行应用程序及搜索数据文件,因此需要将要执行的应用与相关的数据文件放置在相同的路径下。

关于Equalizer的性能,近期eqPly的模型采用kd-tree进行管理与遍历,并通过VBO加载数据与绘制,因此无论是性能还是画面质 量相比于v0.3版本时有了很大改善,特别是在release编译版本下,由于关掉了很多的提示信息输出,速度就更快了。在我的Geforce 7950GTX上前面的两个单机运行的例子都可以达到300帧以上,而这两个Ply模型分别为8万和12万个三角形面。

至于在集群系统上的性能,瓶颈主要在于合成阶段,即图像的帧缓存拷贝与传输造成的阻塞与延迟,在我的测试中,在包含图像合成的时候,帧速率不到10帧,而如果关闭图像合成(帧同步仍然有效),两个节点的帧速率都恢复到几百帧每秒。
图像合成可以通过将2-node.2d.eqc文件中包含“outputframe”与“inputframe”的行删除即可。

参考文献
1.http://www.equalizergraphics.com
2.http://chromium.sourceforge.net
3.http://blog.csdn.net/rickArkin/archive/2007/09/19/1792057.aspx ,"在windows下安装SSH"
4.http://graphics.stanford.edu/data/3Dscanrep/

抱歉!评论已关闭.