1

我正在尝试在使用 Surface Objects 的 CUDA 5 中编译内核。但是,这似乎并不完全按照手册中的描述工作。

__global__ void kernel_reset(cudaSurfaceObject_t surf)
{
    int x = blockIdx.x * blockDim.x + threadIdx.x;
    int y = blockIdx.y * blockDim.y + threadIdx.y;
    int z = blockIdx.z * blockDim.z + threadIdx.z;
    surf3Dwrite(0u, surf, x * sizeof(unsigned int), y, z, cudaBoundaryModeTrap);
}

这无法编译:

error : no instance of overloaded function "surf3Dwrite" matches the argument list

我想要的重载在 surface_indirect_functions.h 中列为:

static __forceinline__ __device__ void surf3Dwrite(unsigned int data, cudaSurfaceObject_t surfObject, int x, int y, int z, cudaSurfaceBoundaryMode boundaryMode = cudaBoundaryModeTrap)

谁能告诉我我在这里做错了什么?

谢谢。

4

1 回答 1

1

我发现了这个问题的原因。

代码没问题 - 问题出在编译器参数中:由于纹理对象需要 2.0 或更高的计算能力,我不得不将 NVCC 编译器设置从“compute_10,sm_10”更改为“compute_20,sm_20”。这解决了这个问题。

谢谢。

于 2012-12-12T15:17:33.443 回答