不能向 kernel 传递 surface 对象 ?

有几个 surface 要填充,于是写了个
global void kernel(surface<void,2> T,int X)
然后传递一个全局surface<void,2> T进去
结果,编译通过,运行时输出个“cuda enum”错误
kernel没有被执行(Nsight cuda debug 不会在kernel里面的断点停下来)
这个,是不是只能向 kernel 传递基本类型?还是我的方法不对?

楼主您好,您试图传递一个surface reference, 这不不被允许的。

如果您需要surface/texture作为kernel形参,您只能购买3.x计算能力的卡,并使用texture/surface object api。(注意只在3.x上被支持).

对于老1.x/2.x, 您可以使用全局的texture和surface reference, 即:surface<>和texture<>。
但不能作为kernel的参数。

以及,我看到您的标题写到“传递surface对象”,

但您的内容使用的是surface<>。这个是不对的。这个依然是老的surface引用。

请使用cudaSurfaceObject类型以及相关的建立、读写函数等。

请参考手册中的多个详细例子。

好的,懂了……手头木有 3.x 的卡啊……
新手,没仔细研究 reference 和 object 的区别……

您可以看看手册,过过干瘾,做做准备的。

祝您好运~

本人不负责教学。但负责解答。

:lol 本人只负责学习,实在没办法了才来发帖~