2013-02-13 22 views
0

我有興趣瞭解在計算矩陣乘法(C = A * B)時如何將cublasSgemm/clAmdBlasSgemm例程映射到GPU上。在調用cublasSgemm/clAmdBlasSgemm例程時如何將線程/塊映射到GPU上?

假設輸入矩陣的維數爲:A_rows = 6144; A_cols = 12288; B_rows = 12288; B_cols = 15360;

和結果矩陣的維數:: C_rows = 6144; C_cols = 15360;

假設我已經初始化主機上的輸入矩陣,並將矩陣數據複製到設備內存中。之後,我打電話給cuBlasclAmdBlas例程在GPU上進行矩陣乘法。

void cublasSgemm (char transa, char transb, int m, int n, int k, float alpha, const float *A, int lda, const float *B, int ldb, float beta, float *C, int ldc); 

其中m = A_rows;和 n = B_cols;

所以我的疑惑是:
1.)這些例程是如何在GPU上實現的?
2.)m和n值是否映射到一個計算單位(SM)上?如果否,那麼m和n的最大值是多少?
3.)我們是否有線程/塊的控制權?

+0

你真的想知道關於CUBLAS或任何OpenCL庫的問題嗎?你認爲有一個共同的答案適用於兩者嗎? – talonmies 2013-02-13 07:19:55

+0

@talonmies是的,我想知道這些例程是如何定義的? – Gopal 2013-02-13 08:09:05

+0

這是兩個完全不同的問題。選擇其中一個。 – talonmies 2013-02-13 08:15:55

回答

1

對於主機側CUBLAS API(請注意,我不知道你爲什麼會認爲clAmdBlasSgemm將是相同的),簡短的回答你的問題如下:

  1. 現代CUBLAS是封閉源代碼。有像Magma這樣的代碼庫,您至少可以瞭解CUBLAS 如何實現。您也可以在NVIDIA提供的分析器之一中運行CUBLAS代碼,以查看它在GPU上的功能。但重要的是,你不需要知道它是如何工作的。有一個API和一些非常全面的文檔。這就是你需要知道的一切。
  2. 您的示例問題需要大約1.2Gb的內存。如果你有一個具有這麼多內存的GPU,或者有足夠的計算能力來避免display driver watchdog timer或計算專用的GPU,它就可以工作。內存和顯示驅動程序時間限制(如果適用)是唯一的限制。

注意這裏也是K20開普勒設備上CUBLAS設備API,和我上面提供並不適用於該庫中的答案。

+0

根據你的第二點,我明白cublasSgemm()例程中m和n的值將映射到所有SM(不僅在一個SM上)。是這樣嗎 ? – Gopal 2013-02-13 11:00:46

+1

@Gopal:這是一個未公開的實現細節。你可以通過分析一個正在運行的電話來檢查發生了什麼,如果你真的想,但是你不必知道任何這個使用CUBLAS。 – talonmies 2013-02-13 12:50:00

0

在繼續之前,您必須閱讀Volkov和Demmel的論文,看看這裏:http://www.cs.berkeley.edu/~volkov/請參閱他關於SGEMM的文章。答案是從2008年開始的。

相關問題