2012年4月27日 星期五
Building the GPU Cluster
我們有幾台 GPU Server,老師有想要將他建立成一個 GPU Cluster 的 prototype, 在Infrastructure,我們有了機器,那問題就是要如何管理這些資源(CPU, Mem, Network, GPU ...)。
我的想法是,有三個部份要做,分別為基礎建設的管理、程式介面(Platform)、用戶介面。
1. 基礎建設的管理
用以往實驗室常用的方式,就是將程式寫成 components 然後再不同台機器上運作, 接著建個 data flow 交換資料。以我的經驗,這樣的方式在多個使用者時不免會有一人當機,整車人都不能用機器。虛擬化既然這麼紅,那我們是不是用虛擬化的管理方式呢? 現有的 Hypervisor 有 VMWare, xen, kvm 等。將每個 component 放在一個虛擬機器裡頭,接著也一樣用 data flow 做溝通,萬一某台虛擬機器死翹翹,那也不會影響機器內的其他用戶,是一個可行的方法。再者跨多台機器的 Management Tool 也是很多,像是 Nimbus, OpenNebula, Eucalyptus,他們可以用來管理這些 Hypervior。如此一來,我們有了一個中控中心,可以發佈虛擬機器和關閉虛擬機器,有人要執行他的 component 們,我們就給他幾台虛擬機吧。
2. 程式介面
既然 DataFlow 是這樣一個好的傳統,那我們也許可以繼續沿用,每個用戶將他的程式寫成一個 component,然後我們將他放在虛擬機裡。他要 CPU/Mem/Network 我們就給他,他要 GPU,我們也給他。這裡比較難的地方就是要怎麼將 GPU 給虛擬化,有人有辦法請給我一點方向。好加在的是,CUDA 4.0 允許多工,多個人再一台機器上享用 GPU 也不會有太大的問題,剩下的就是 GPU 虛擬化的問題。
3. 用戶介面
前端的用戶介面,負責與使用者溝通,讓他們上傳程式,觀看結果。以往的方法都是寫個 Shell,像是小大象 Hadoop 的 Shell,但我想是不是有其他方法呢?這裡頭還需要 Build System,讓上傳的 Component 可以順利編譯。所以用戶介面要有幾個功能,包括上傳資料程式、建置系統、瀏覽結果的介面。
特別打出來,希望各位看倌、高人能給一些建議。
以後這裡就變一個討論串了,歡迎不吝嗇提出意見。
2010年12月6日 星期一
Molecular Dynamic Simulation - 威佐、雙魚
--------- 2010 . 12. 06 ----------
威佐 :
目前已經將幾個常用的 Operations 取出,
需要計算的力包括:
Bonded(Bond length、Bond angle、Dihedral 三種力)和 Non-Bonded,
我相信這是簡化過的形式,但對於我們做加速運算已經足夠,
我現在使用的 Code 是學長給的那本書中的 Code (老師我沒有自己寫一個...)。
但是因為要先嘗試做 translator,所以先暫用書中的 Code,等到評估期過後,
我們可以自己改一份 MD 的 Code,
另外,現在成熟的 MD 套件大概是 CHAMBER、AMBER、NAMD、GROMACS,
可以下載使用,看一下別人如何做的,當然我們不需要做到像這些軟體這麼複雜。
雙魚:
著手將 MD 的 Code 改成 Multi-Thread,
目前先規劃將 Non-Bonded Force 的部份給平行,
如果修改完成,可以再加入 Bonded 的部分。
下一步,就是將它寫成 SPCI 的 Component。
威佐 :
目前已經將幾個常用的 Operations 取出,
需要計算的力包括:
Bonded(Bond length、Bond angle、Dihedral 三種力)和 Non-Bonded,
我相信這是簡化過的形式,但對於我們做加速運算已經足夠,
我現在使用的 Code 是學長給的那本書中的 Code (老師我沒有自己寫一個...)。
但是因為要先嘗試做 translator,所以先暫用書中的 Code,等到評估期過後,
我們可以自己改一份 MD 的 Code,
另外,現在成熟的 MD 套件大概是 CHAMBER、AMBER、NAMD、GROMACS,
可以下載使用,看一下別人如何做的,當然我們不需要做到像這些軟體這麼複雜。
雙魚:
著手將 MD 的 Code 改成 Multi-Thread,
目前先規劃將 Non-Bonded Force 的部份給平行,
如果修改完成,可以再加入 Bonded 的部分。
下一步,就是將它寫成 SPCI 的 Component。
2009年10月12日 星期一
Special Topic on ESL and Multi-core Tool Design
Syllabus
1. SystemC Simulation Kernel
2. Advanced OpenESL tool development
3. TLM2.X
4. ARM Processor ESL Model
5. Multi-core Virtual Model
6. Multi-core Programming on Virtual Model
7. Multi-core application programming using CUDA
8. Debugging tool for microprocessors
09/23 - 10/07
1. SystemC Simulation Kernel
2. Advanced OpenESL tool development
3. TLM2.X
4. ARM Processor ESL Model
5. Multi-core Virtual Model
6. Multi-core Programming on Virtual Model
7. Multi-core application programming using CUDA
8. Debugging tool for microprocessors
09/23 - 10/07
2009年8月25日 星期二
cuda for slim - 塞公
--------------- 2009/08/25 ---------------
這次是主要要改寫slim 能讓cuda 在slim以multiprocess方式呈現並測試cuda在multiprocess的支援能力與正確性。可是上次是利用fork搭配system()函式(類似shell呼叫執行檔執行的方式) 來達成multiprocess的效果,是覺得有點不太恰當。所以又改回用fork的方式搭配execve()的方式把外部程式呼叫起來。不過所遇到的問題是cuda process有成功叫起來,不過執行到cudamalloc時,程式似乎異常終止,今天請DNA幫我看一下,發現是segfault問題,現在是繼續嘗試去解決。
另外,在未來要繼續實做上學期難產的waveguide model。計畫是先從介面下手,讓CAD製圖工具所畫出來的3D moudel可以讓我載入到opengl中使用。目前是先決定要以哪一種CAD輸出的檔案格式來當作我input的資料,較廣泛被使用的格式有DXF, DWG, IGES, STEP,不過前兩個檔案格式都是屬於AutoCAD公司所擁有,目前到底有沒有版權問題我看不太懂,不過wiki上面講好像有打過官司的樣子。不過現在好像很多公司都用逆向工程試著去讀寫.dwg格式,另外有一個是叫Open Design Alliance的團體自己出了一套軟體叫做DWGdirect試著去讀寫dwg檔案http://www.opendwg.org/,因為目前我有需要的是類似parser部分,所以可能會去參考一些opensource的東西。另外還有一個網頁是有自己寫了簡單的parser部分http://www.bearcave.com/dxf/ 如果要拿DWGdirect的lib或者source似乎有一點麻煩。都不太open的樣子。http://www.opendwg.org/education
因為這幾天也只是稍微涉略一下,另外還有IGES和STEP格式有在這個網站找到http://www.gcad3d.org/看起來好像很open的樣子而且像是用openGL寫的(沒仔細看),不過對於我...只要挖出parser部分,code部分可能需要下一點功夫...找這麼多,最主要目的是可以找一個現成的parser可以讓我讀進CAD檔案格式的內容就好。希望是能讓我不要對於讀檔部分花太多時間。
--------------- 2009/08/17 ---------------
上禮拜提到:
1.在執行cuda程式時候,像是其他cpu工作是否真的會被block住?可以利用播放影片或者聲音檔來測試看看
實驗後的結果,發現在播放聲音mp3之類的,並不會因為執行cuda運算程式後被block住。而畫面依然是block的狀態。另外撥放影片時,只有影像部分會被block住,而當cuda程式結束後,影像就直接跳過cuda執行期間應該撥放的影像部分。
2.利用thread priority設定方式來調整各thread在cpu執行所占的比例。
實際測試,將執行cuda的cpu thread priority設低一點後,沒有改善畫面停滯的情形。
3.重新改寫multi-processes 程式。利用類似一支shell同時呼叫多個已經編譯好的cuda運算程式。目前還沒測試到錯誤的值出現。
4.之後想繼續研究人家是如何去寫cuda程式,使計算與顯示方面能無法察覺停頓的方式。
--------------- 2009/08/06 ---------------
問題應該只是顯示卡在處理資料運算時造成cpu一直等待資料回應使電腦暫時沒有回應。因為試過開兩個cpu thread跟一個cuda thread,在cpu thread 中每一秒就印一次計算的秒數,而cuda thread中就讓gpu thread做大量迴圈運算。單獨執行cuda thread約5.6秒。而三個thread同時運行時。雖然一開始畫面都沒有顯示,可是約五秒後,所印出的資料如圖:
也就是說,其實CPU thread也有在進行print out的動作,並沒有被等待回傳cuda結果的thread所卡住,只是可能有影響到I/O的動作,使得在kernel function結束之前output被卡住了。另外,利用multiprocess,實作相同程式方式也有類似的情況。
--------------- 2009/08/04 ---------------
利用mutex方式控制 gpu resource的分配,可是在故意將cuda運算量稱大一點後,讓他做一次kernel function需要花約3秒時間,可是在這3秒內。電腦幾乎不太能做其他事情,觀察cpu loading 都跑到100% 。所以猜想是這個kernel function thread 沒有被OS切換出去讓其他thread進來工作的關係還是有其他原因。之後確定之後,在想看怎麼解決。
--------------- 2009/07/29 ---------------
在meeting後對於怎麼把cuda放進去slim當中,有幾個重點或方向可以去做。
1. 利用對於cpu multithread的呼叫cuda kernel function 就多一個 cpu thread透過它來呼叫kernel function。也就是放到slim kernel中讓kernel來做呼叫的工作。
2. 利用semaphore的機制。控制每個component的kernel function呼叫。
3. 創一個child process讓他專門來做呼叫kernel function的工作,而scheduler部分就是交給device driver。
--------------- 2009/07/28 ---------------
這篇主要是維護 如何使slim能有效利用cuda的運算能力,目前研究的是如何在multithread架構上利用 cuda的運算。之前學妹有測試過一個 process只能一次跑在GPU device上,也就是一次只能執行一個 kernel function。如果是在 multithread 上執行會發生錯誤。
而接下來老師希望測試的是利用動態連結的方式做測試,也就是先將要放進cuda運算的function(也就是kernel function)先製作成動態連結資料庫(ex: .dll or .so),然後在runtime時,再將kernel function動態載入到記憶體中。看看是否能達到multithread的效果。
我基本上大概測試是kernel function 是用來做矩陣的乘法。測的結果是透過每個thread都執行一次kernel function所算出來的結果是錯的。結果都是零(這部分我還要看一下)。而循序執行kernel function結果是正確的。
2009年3月18日 星期三
OpenCL
看來nVidia有意要開放OpenCL變成Open Standard
不過當然是為了賺錢.... Maket Builder 這個字還真有意思
http://www.channelregister.co.uk/2009/03/17/opencl_demo/
不過當然是為了賺錢.... Maket Builder 這個字還真有意思
http://www.channelregister.co.uk/2009/03/17/opencl_demo/
訂閱:
文章 (Atom)