2012-11-14 82 views
15

我知道它聽起來很奇怪,但這裏是我的場景:CUDA內核可以調用cublas函數嗎?

我需要做矩陣矩陣乘法(A(n * k)* B(k * n)),但我只需要對角線元素對輸出矩陣進行評估。我搜索cublas圖書館並沒有發現任何可以做到這一點的2級或3級功能。 因此,我決定將A的每一行和B的每一列分配到CUDA線程中。對於每個線程(idx),我需要計算點積「A [idx,:] * B [:,idx]」並將其保存爲相應的對角線輸出。現在因爲這個dot產品也需要一些時間,我想知道我是否可以在這裏調用cublas函數(比如cublasSdot)來實現它。

如果我錯過了一些cublas函數可以直接實現我的目標(只計算矩陣 - 矩陣乘法的對角元素),這個問題可以被丟棄。

回答

11

是的,它可以。

「CUDA C/C++中提供的語言界面和Device Runtime API是CUDA Runtime API的一個子集,CUDA Runtime API的語法和語義保留在設備上以便於可以在主機或設備環境中運行的API例程輕鬆實現代碼重用內核還可以直接調用GPU庫,例如CUBLAS,而無需返回CPU。 Source

Here你可以看到和使用CUDA和CUBLAS庫函數cublasSgemv矩陣向量乘法。

+7

請注意,動態並行性,即允許嵌套內核調用的功能,僅在剛發佈的Kepler GK110上受支持。 GK110僅適用於高端計算產品,中級產品是特斯拉K20,價格爲3200美元。 –

+0

因此,對於特米拉m2090,這是一個費米GPU,可能不支持動態平行度,對不對? –

+0

它明確不支持,你可以創建一個不同的內核來在GPU上做到這一點 – RSFalcon7