2013-02-19 64 views
1
測量有效帶寬

所以我想知道如何計算總內存有效帶寬:對CUDA

cublasSdot(handle, M, devPtrA, 1, devPtrB, 1, &curesult); 

如該功能初級講座,以cublas_v2.h

該函數在0.46毫秒運行,矢量是10000 * sizeof(float)

我有((10000 * 4)/10^9)/0.00046 = 0.086 GB/s

我想知道它是因爲我不知道cublasSdot函數裏面是什麼,我不知道它是否是必需的。

+0

您如何計算時間? 10000基準太小。改爲嘗試1,000,000+。 – kangshiyin 2013-02-19 02:57:46

+0

時間不是真的,我想知道這種方式是否可以,假設一個「真正的時間」...我只想知道輸入的大小和輸出的大小是多少,或者我需要知道有關函數內的代碼的東西? – FacundoGFlores 2013-02-19 03:03:30

回答

3

對於您的情況,輸入數據的大小爲10000 * 4 * 2,因爲您有2個輸入向量,輸出數據的大小爲4個。有效帶寬應該約爲0.172 GB/s。

基本上cublasSdot()沒有什麼比計算更重要。 配置文件結果顯示cublasSdot()調用2個內核來計算結果。如果指針模式爲CUBLAS_POINTER_MODE_HOST(這是cublas lib的默認模式),還會調用額外的4字節設備到主機mem傳輸。

+0

假設我有一個函數「foo(param1,param2,param3)」,其中param1和param2是矢量,param3是一個浮點數...現在在函數內部,我有很多調用不同的cublas函數的方法。 。總有效帶寬是所有cublas調用的總和?或者我只需要計算函數foo中花費的時間,並考慮函數foo下面的輸入和輸出? – FacundoGFlores 2013-02-19 13:48:09

+1

@facunvd:如果你只是想顯示你的函數'foo()'給別人有效的BW,就應該使用後者。當你優化函數'foo()'以獲得更高性能時,你可能需要深入該函數並測量每個cublas調用。 – kangshiyin 2013-02-19 14:27:36

+0

讓我看看,我會更精確。我正在開發一個包含不同數值方法的庫,每個庫都使用許多cublas調用,並且我想顯示每個庫的有效帶寬。所以你說我必須測量函數「congujate gradient()」的時間,並使用矩陣A和向量B的大小並考慮向量X的輸出來計算有效帶寬,對嗎? – FacundoGFlores 2013-02-19 14:48:44