2012-05-23 34 views
1

我最近想用一個簡單的CUDA矩陣向量乘法。我在cublas庫中找到了一個正確的函數:cublas < < >> gbmv。這裏是the official documentationCUDA cublas <t> gbmv瞭解

但它實際上很差,所以我沒有設法瞭解klku參數的含義。此外,我不知道什麼是stride(它也必須提供)。 這些參數有一個簡短的解釋(頁37),但它看起來像我需要知道別的東西。

在互聯網上的搜索沒有提供有關此問題的大量有用信息,大多數是對不同版本文檔的引用。

所以,我有幾個問題GPU/CUDA/CUBLAS大師:

  1. 我如何找到有關使用CUBLAS更容易理解文檔或指南?
  2. 如果你知道如何使用這個功能,你難道不能解釋我如何使用它?
  3. 也許cublas圖書館有些不尋常,每個人都使用更受歡迎,更好記錄的東西等等?

非常感謝。

+2

CUBLAS函數只是在標準的Fortran BLAS上建模,爲此它有大量的文檔。因此,請嘗試搜索SBGMV,您可能會發現您正在尋找什麼(您的矩陣是否真的被綁定?) – talonmies

回答

4

所以BLAS(基本線性代數子程序)通常是一個API,正如其名稱所述,基本線性代數子程序。它包括矢量矢量運算(1級blas例程),矩陣矢量運算(2級)和矩陣矩陣運算(3級)。有一個"reference" BLAS可用,可以正確實現所有內容,但大多數情況下,您會爲您的體系結構使用優化的實現。 cuBLAS是CUDA的一個實現。

BLAS API是一個非常成功的API,它描述了它被廣泛採用的基本操作。然而,(a)由於當時的架構限制(這是1979年,並且使用8個字符或更少的名字來定義API以確保它可以廣泛編譯),名稱是難以置信的神祕,並且(b)它是成功的,因爲這是相當普遍的,所以即使最簡單的函數調用也需要大量無關的參數。

因爲它非常普遍,所以通常假設如果你正在做數值線性代數,你已經知道API的一般要點,所以實現手冊經常會忽略重要的細節,我認爲這就是你正在運行的成。

2級和3的例程通常具有形式TMMOO..其中T是數控型的基質/載體中的功能名稱(S/D對於單/雙精度實,C/Z對於單/雙精度複數) ,MM是矩陣類型(GE一般 - 例如,只是一個密集的矩陣,你不能說任何其他的; GB爲一般的帶狀矩陣,SY爲對稱矩陣等),OO是操作。

現在這一切都顯得有點荒謬,但它的工作原理和工作方式都比較好 - 你很快學會掃描這些熟悉的操作,以便SGEMV是單精度通用矩陣時間向量乘法(這可能是你想要的,而不是SGBMV),DGEMM是雙精度矩陣 - 矩陣乘法等,但這需要一些練習。

所以,如果你看cublas sgemv指令,或在documentation of the original,你可以通過參數列表。首先,基本操作是

此函數執行矩陣 - 向量乘法 y = a op(A)x + b y 其中A是存儲在列優先格式,x和y 一個m×n個矩陣是矢量,並且和是標量。

其中op(A)可以是A,A Ť,或A ħ。所以如果你只想要y = Ax,那是常見的情況,那麼a = 1,b = 0。和transa == CUBLAS_OP_N

incxx中不同元素之間的跨步;有很多情況下,這將派上用場,但如果x只是一個簡單的1d陣列包含向量,那麼步幅將是1.

這就是關於您需要的所有SGEMV。