簡體   English   中英

Matlab和GPU / CUDA編程

[英]Matlab and GPU/CUDA programming

我需要對同一數據集運行多個獨立的分析。 具體來說,我需要運行一堆100 glm(廣義線性模型)分析,並正在考慮利用我的視頻卡(GTX580)。

當我可以使用Matlab和Parallel Computing Toolbox(並且我對C ++不太滿意)時,我決定嘗試一下。

我知道單個GLM不適用於並行計算,但是由於我需要並行運行100-200,因此我認為使用parfor可能是一種解決方案。

我的問題是我不清楚應該采用哪種方法。 我編寫了matlab函數glmfit的gpuArray版本,但使用parfor相比標准的“ for”循環沒有任何優勢。

這與matlabpool設置有關嗎? 我什至不清楚如何設置它以“查看” GPU卡。 默認情況下,如果我沒有記錯的話,它設置為CPU的內核數(在我的情況下為4)。 我在方法上完全錯誤嗎?

任何建議將不勝感激。

編輯

謝謝。 我知道GPUmat和Jacket,無需費太多力氣就可以開始用C編寫代碼,但是我正在為每個人都使用Matlab或R的部門測試GPU計算的可能性。最終目標是基於C2050的集群Matlab分發服務器(或者至少這是第一個項目)。 從MathWorks上閱讀AD,我的印象是,即使沒有C技能,並行計算也是可能的。 不可能要求我系的研究人員學習C語言,因此我猜測GPUmat和Jacket是更好的解決方案,即使局限性很大,並且不存在對glm等幾種常用例程的支持。

它們如何與集群接口? 他們是否與某些工作分配系統一起工作?

我建議您嘗試使用GPUMat (免費)或AccelerEyes Jacket (購買,但有免費試用版),而不是並行計算工具箱。 該工具箱沒有太多功能。

為了獲得最佳性能,您可能需要自己學習一些C語言(不需要C ++)和原始CUDA中的代碼。 這些高級工具中的許多工具可能對它們如何管理內存傳輸還不夠聰明(您可能會由於不必要地通過PCI-E總線改組數據而失去所有計算優勢)。

Parfor將幫助您利用多個GPU,而不是單個GPU。 問題是單個GPU一次只能做一件事,因此parfor在單個GPU上或在單個GPU上的parfor將實現完全相同的效果(如您所見)。

Jacket往往效率更高,因為它可以組合多個操作並更有效地運行它們並具有更多功能,但是大多數部門已經具有並行計算工具箱,而不是Jacket,因此可能是一個問題。 您可以嘗試演示進行檢查。

沒有使用gpumat的經驗。

並行計算工具箱正在變得越來越好,您需要的是一些大型矩陣運算。 GPU善於多次執行同一操作,因此您需要以某種方式將代碼組合到一個操作中,或者使每個操作足夠大。 我們說的是至少並行需要約10000個事物,盡管它不是1e4矩陣的集合,而是一個至少包含1e4元素的大型矩陣。

我確實發現,使用並行計算工具箱,您仍然需要大量內聯CUDA代碼才能有效(它仍然很有限)。 它更好地使您可以內聯內核並將Matlab代碼轉換為內核,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM