2016-02-05 24 views
2

我目前使用CUDA,推力和CUBLAS一個GPU執行隨機梯度下降。如何大應矩陣是,如果我使用BLAS/CUBLAS它比普通的C/CUDA有更好的表現?

在我最初的實現我用普通的CUDA執行矩陣向量運算,現在我想通過使用,而不是這樣的操作CUBLAS優化這個。

我正在觀察目前,對於大小列x欄的矩陣,對於少數的cols的,普通的CUDA性能一直優於CUBLAS,顯然無論行數。 然而,對於大量的cols,cuBLAS實現勝出。

所以我想知道:是否有任何經驗法則/準則應該是什麼應該是矩陣/向量的最小尺寸之後使用BLAS或cuBLAS將比純C/CUDA更好地執行,或者這完全依賴於應用程序/ BLAS功能?

+0

相關問題:http://stackoverflow.com/q/26417475/209882 – Bar

+2

注意BLAS2(矩陣矢量)操作趨向於由存儲器吞吐量的限制。如果可能的話,你會想使用BLAS3操作。有許多不同的BLAS2操作,每個操作都有自己的性能特徵(GPU架構可能會有所不同),所以您的問題似乎過於寬泛。檢查是否有任何批處理操作適用於您的用例,因爲它們爲小型矩陣提供更好的性能,否則這些小型矩陣只使用一部分機器資源。 – njuffa

+0

你做的正是在您鏈接到的問題 - 基準您的問題大小域和硬件,並使用這些數據來驅動你的啓發。我非常希望把這個問題作爲這個問題的重複來解決。 – talonmies

回答

1

我已經運行了幾個基準測試,我將在這裏發佈: 結果是針對10000個行的數據集運行10次迭代的線性迴歸任務。實施和實際效果都可以在這裏找到:https://github.com/thvasilo/cuda-sgd-sese-project

運行時爲10-100特徵/列:

enter image description here

所以我在執行其純CUDA變慢是在50列的變化點。對於cuBLAS的100個特徵,在運行時間上有一個跳躍,但這可能是一個神器,這些實驗只能運行一次,差異也不會那麼大。

當多個列BLAS拉特運行。 2一致地執行得更好:

enter image description here

相關問題