表面参考比Surface对象更快

Arn*_*aud 5 cuda

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

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

表面参考API

时间:9.068928毫秒

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

Surface对象API

时间: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代码以查看差异.