cudaTextureObject_t texFetch1D无法编译

时间:2016-07-02 23:03:22

标签: c++ cuda textures

此代码无法在gtx 980上的cuda toolkit 7.5中编译,在visual studio 2013中计算能力设置为5.2。

__global__ void a_kernel(cudaTextureObject_t texObj)
{
    int thread_id = blockIdx.x * blockDim.x + threadIdx.x;
    int something = tex1Dfetch(texObj, thread_id);
}

这是错误。

error : more than one instance of overloaded function "tex1Dfetch" matches the argument list:

此代码也无法编译。

__global__ void another_kernel(cudaTextureObject_t texObj)
{
    int thread_id = blockIdx.x * blockDim.x + threadIdx.x;
    float something = tex1Dfetch<float>(texObj, thread_id);
}

这是错误。

error : type name is not allowed

按照此示例和注释,以上所有内容都应该有效: https://devblogs.nvidia.com/parallelforall/cuda-pro-tip-kepler-texture-objects-improve-performance-and-flexibility/

如果您需要其他信息,请告诉我,我想不出还有什么可以提供。

2 个答案:

答案 0 :(得分:2)

由于缺少模板类型参数,您的第一个内核无法编译。这将编译:

__global__ void a_kernel(cudaTextureObject_t texObj)
{
    int thread_id = blockIdx.x * blockDim.x + threadIdx.x;
    int something = tex1Dfetch<int>(texObj, thread_id);
}

你的第二个内核是正确的, 为我编译使用VS2012和CUDA 7.0工具包为我尝试的每个计算能力(sm_30到sm_52)。

答案 1 :(得分:0)

我重新安装了cuda工具包,现在第二段代码(another_kernel)编译。根据第一个答案,第一段代码首先是错误的。 W.r.t.重新安装cuda工具包,我必须先在sdk中破坏了一些东西,我相信它是texture_indirect_functions.h。