所以我想知道如何計算總內存有效帶寬:對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函數裏面是什麼,我不知道它是否是必需的。
所以我想知道如何計算總內存有效帶寬:對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函數裏面是什麼,我不知道它是否是必需的。
對於您的情況,輸入數據的大小爲10000 * 4 * 2,因爲您有2個輸入向量,輸出數據的大小爲4個。有效帶寬應該約爲0.172 GB/s。
基本上cublasSdot()
沒有什麼比計算更重要。 配置文件結果顯示cublasSdot()
調用2個內核來計算結果。如果指針模式爲CUBLAS_POINTER_MODE_HOST
(這是cublas lib的默認模式),還會調用額外的4字節設備到主機mem傳輸。
假設我有一個函數「foo(param1,param2,param3)」,其中param1和param2是矢量,param3是一個浮點數...現在在函數內部,我有很多調用不同的cublas函數的方法。 。總有效帶寬是所有cublas調用的總和?或者我只需要計算函數foo中花費的時間,並考慮函數foo下面的輸入和輸出? – FacundoGFlores 2013-02-19 13:48:09
@facunvd:如果你只是想顯示你的函數'foo()'給別人有效的BW,就應該使用後者。當你優化函數'foo()'以獲得更高性能時,你可能需要深入該函數並測量每個cublas調用。 – kangshiyin 2013-02-19 14:27:36
讓我看看,我會更精確。我正在開發一個包含不同數值方法的庫,每個庫都使用許多cublas調用,並且我想顯示每個庫的有效帶寬。所以你說我必須測量函數「congujate gradient()」的時間,並使用矩陣A和向量B的大小並考慮向量X的輸出來計算有效帶寬,對嗎? – FacundoGFlores 2013-02-19 14:48:44
如果內核時間以毫秒爲單位,則乘法因子爲1000是必要的。 這導致86 GB /秒。
作爲一個例子參考例子提供由NVIDIA爲矩陣轉 在http://docs.nvidia.com/cuda/samples/6_Advanced/transpose/doc/MatrixTranspose.pdf
最後一頁的整個代碼是否存在。計算有效帶寬的方式爲2. * 1000 * mem_size /(1024 * 1024 * 1024)/(以ms爲單位的時間)
您如何計算時間? 10000基準太小。改爲嘗試1,000,000+。 – kangshiyin 2013-02-19 02:57:46
時間不是真的,我想知道這種方式是否可以,假設一個「真正的時間」...我只想知道輸入的大小和輸出的大小是多少,或者我需要知道有關函數內的代碼的東西? – FacundoGFlores 2013-02-19 03:03:30