2011-09-14 87 views
2

我需要在同一個數據集上運行多個獨立分析。 具體來說,我需要運行一串100 glm(廣義線性模型)分析,並且正在考慮利用我的視頻卡(GTX580)。Matlab和GPU/CUDA編程

因爲我可以訪問Matlab和Parallel Computing Toolbox(並且我對C++不太好),所以我決定嘗試一下。

我知道單個GLM對於並行計算並不理想,但由於我需要並行運行100-200,我認爲使用parfor可能是一個解決方案。

我的問題是,我不清楚我應該遵循哪種方法。我寫了一個gpuArray版本的matlab函數glmfit,但是使用parfor與標準的「for」循環相比沒有任何優勢。

這與matlabpool設置有關嗎?我甚至不清楚如何設置它以「查看」GPU卡。默認情況下,它被設置爲CPU中的核心數(我的情況是4),如果我沒有錯的話。 我的方法完全錯了嗎?

任何建議將不勝感激。

編輯

感謝。我知道GPUmat和Jacket,而且我可以在不用太多努力的情況下開始用C編寫,但是我正在測試每個人使用Matlab或R的部門的GPU計算可能性。最終目標是基於C2050和Matlab Distribution Server(或者至少這是第一個項目)。 從Mathworks讀取AD我的印象是,即使沒有C語言技能,並行計算也是可能的。要求我的部門的研究人員學習C是不可能的,所以我猜測GPUmat和Jacket是更好的解決方案,即使這些限制非常大,並且對像glm這樣的常用例程的支持是不存在的。

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

回答

4

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

爲了獲得最大的性能,你可能要學習一些C(無需C++)和代碼在原CUDA自己。許多這些高級工具可能對於管理內存傳輸的方式不夠聰明(您可能會因在PCI-E總線上不必要地混洗數據而失去所有計算優勢)。

+0

感謝指向Jacket的指針。它包括一個運行時間系統,用於最大限度地減少內存傳輸,包括PCI-E傳輸最小化和卡內存傳輸,最終爲人們帶來好處。有關Jacket如何比PCT更好的詳細信息,請參閱http://accelereyes.com/compare祝您好運! – arrayfire

2

Parfor將幫助您使用多個GPU,但不是一個GPU。事情是,一個GPU只能一次做一件事,因此單個GPU或單個GPU上的parfor將達到完全相同的效果(如您所見)。

外套更趨於有效,因爲它可以將多個操作和更有效地運行他們,並有更多的功能,但大多數部門已經有了並行計算工具箱,而不是外套,這樣可以是一個問題。你可以嘗試演示來檢查。

沒有與gpumat經驗。

並行計算工具箱越來越好,你需要的是一些大的矩陣運算。GPU擅長多次執行相同的操作,因此您需要將代碼以某種方式組合到一個操作中,或者使每個操作足夠大。至少我們平均需要約10000件事情,儘管它不是一組1e4矩陣,而是一個至少有1e4個元素的大矩陣。

我的確發現,使用並行計算工具箱,仍然需要相當多的內聯CUDA代碼才能生效(它仍然非常有限)。它更好地允許你內聯內核並將matlab代碼轉換成內核,但是,這是