我最近更改了表面对象的算法表面参考.然后,我注意到程序运行速度较慢.
下面是一个简单示例的比较,其中我用常数值填充3D浮动数组[400*400*400].
时间:9.068928毫秒
surface<void, cudaSurfaceType3D> s_volumeSurf;
...
surf3Dwrite(value, s_volumeSurf, px*sizeof(float), py, pz, cudaBoundaryModeTrap);
Run Code Online (Sandbox Code Playgroud)
时间:14.960256毫秒
cudaSurfaceObject_t l_volSurfObj;
...
surf3Dwrite(value, l_volSurfObj, px*sizeof(float), py, pz, cudaBoundaryModeTrap);
Run Code Online (Sandbox Code Playgroud)
这是在具有Compute Capability 3.0和CUDA 5.0的GTX 680上测试的.
有没有人对这种差异有解释?
小智 6
在表面对象的情况下,表面描述符是从全局内存中获取的.在表面引用的情况下,这些描述符被编译成常量存储器.获取这些描述符可能比全局内存访问快得多.如果您的内核足够小或者禁用了L1缓存,您可能会发现性能显着下降.
您可以区分SASS代码以查看差异.
归档时间: |
|
查看次数: |
1134 次 |
最近记录: |