在集羣系統內部署Equalizer應用



概述

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/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章