所以我想知道如何计算总内存有效带宽:
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 函数内部是什么,也不知道它是否有必要。
所以我想知道如何计算总内存有效带宽:
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 个内核来计算结果。如果指针模式为 ,则还会调用额外的 4 字节设备到主机内存传输CUBLAS_POINTER_MODE_HOST
,这是 cublas lib 的默认模式。
如果内核时间以毫秒为单位,则需要乘以 1000。结果为 86 GB/s。
作为示例,请参阅 NVIDIA 为 Matrix Transpose 提供的示例,网址为http://docs.nvidia.com/cuda/samples/6_Advanced/transpose/doc/MatrixTranspose.pdf
在最后一页上存在整个代码。计算有效带宽的方式是 2.*1000*mem_size/(1024*1024*1024)/(Time in ms)