表面参考比Surface对象更快

时间:2013-05-27 07:39:57

标签: cuda

我最近更改了表面对象的算法表面参考。然后,我注意到程序运行速度较慢。

下面是一个简单示例的比较,其中我用常量值填充3D浮动数组[400 * 400 * 400]。

表面参考API

时间:9.068928毫秒

surface<void, cudaSurfaceType3D> s_volumeSurf;
...
surf3Dwrite(value, s_volumeSurf, px*sizeof(float), py, pz, cudaBoundaryModeTrap);

Surface对象API

时间:14.960256 ms

cudaSurfaceObject_t l_volSurfObj;
...
surf3Dwrite(value, l_volSurfObj, px*sizeof(float), py, pz, cudaBoundaryModeTrap);

这是在具有Compute Capability 3.0和CUDA 5.0的GTX 680上测试的。

有没有人对这种差异有解释?

1 个答案:

答案 0 :(得分:5)

在表面对象的情况下,表面描述符是从全局内存中提取的。 在表面引用的情况下,这些描述符被编译成常量存储器。获取这些描述符可能比全局内存访问快得多。如果您的内核足够小或者禁用了L1缓存,您可能会发现性能显着下降。

您可以对SASS代码进行区分以查看差异。