c++ - Cuda cudaGetTextureReference 返回 "invalid texture reference"

标签 c++ parallel-processing cuda gpgpu cuda-arrays

我正在开发一个小的 cuda 库,被这个烦人的 tex ref 问题困住了。

这是《Cuda C 编程指南》第 43~44 页的示例代码:

texture<float, cudaTextureType2D,cudaReadModeElementType> texRef;
textureReference* texRefPtr;
cudaGetTextureReference(&texRefPtr, "texRef");
cudaChannelFormatDesc channelDesc;
cudaGetChannelDesc(&channelDesc, cuArray);
cudaBindTextureToArray(texRef, cuArray, &channelDesc);

当我执行它时,cudaGetTextureReference(...) 行返回错误代码 cudaErrorInvalidTexture。 我在互联网上找不到很多关于 cudaGetTextureReference 的其他示例,其中大部分都遵循与上述示例代码完全相同的过程。

沮丧,后来我尝试了高级API:

texture<float, cudaTextureType2D,cudaReadModeElementType> texRef;
cudaBindTextureToArray(texRef, cuArray);

同样的问题。 如果从内核中的纹理读取,我得到的都是零值。

我的完整玩具测试代码,100% 重现率:(win7,cuda 5.0)

texture<float, cudaTextureType2D, cudaReadModeElementType> texRef;

int main ()
{
    const textureReference *tref = NULL;
    checkSuccess( cudaGetTextureReference( &tref, "texRef" ) );
    pauseConsole();
    return 0;
}

如果您对此问题有任何见解,我们将不胜感激。 谢谢

最佳答案

Use of a string naming a variable as the symbol paramater was removed in CUDA 5.0.

CUDA Toolkit Reference Manual 5.0 中说明, 5.20.2.8 节/注。

改为执行以下操作:

cudaGetTextureReference( &tref, &texRef );

关于c++ - Cuda cudaGetTextureReference 返回 "invalid texture reference",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15404150/

相关文章:

c++ - 如何处理未能释放包含在智能指针中的资源?

c++ - 如何从 "this"对象本身内部将shared_ptr返回到当前对象

c++ - 二叉树的层序遍历

c++ - 转换到另一个库(尤其是 C++ 中)

python - 在 ParallelPython 中,对象的方法 ( object.func() ) 无法操作对象的变量 ( object.value )

R optimParallel - 找不到函数

java - Gradle并行执行命令行

cuda - CUDA 图中的节点如何连接?

C++11 标准与 CUDA 6.0

CUDA驱动程序API : Where is nvcuda?