所以我想知道如何计算总内存有效带宽:
cublasSdot(handle, M, devPtrA, 1, devPtrB, 1, &curesult);
该函数低于cublas_v2.h
该函数在0.46 ms内运行,向量为10000 * sizeof(float)
我有((10000 * 4) / 10^9 )/0.00046 = 0.086 GB/s
吗?
我很想知道它,因为我不知道cublasSdot函数里面有什么,我不知道它是否是必要的。
答案 0 :(得分:3)
在您的情况下,输入数据的大小为10000 * 4 * 2,因为您有2个输入向量,输出数据的大小为4.有效带宽应为0.172 GB / s。
基本上cublasSdot()
除了计算之外什么也没做。
配置文件结果显示cublasSdot()
调用2个内核来计算结果。如果指针模式为CUBLAS_POINTER_MODE_HOST
,则还会调用额外的4字节设备到主机内存传输,这是cublas lib的默认模式。
答案 1 :(得分:0)
如果内核时间以ms为单位,则需要乘法因子1000。 这导致86 GB / s。
作为示例,请参阅NVIDIA for Matrix Transpose提供的示例 在http://docs.nvidia.com/cuda/samples/6_Advanced/transpose/doc/MatrixTranspose.pdf
在最后一页上存在整个代码。计算有效带宽的方式是2. * 1000 * mem_size /(1024 * 1024 * 1024)/(以毫秒为单位的时间)