繁体   English   中英

Cuda cudaGetTextureReference返回“无效纹理参考”

[英]Cuda cudaGetTextureReference returns “invalid texture reference”

我正在开发一个小型的cuda lib,坚持这个烦人的tex ref问题。

这是来自Cuda C Programming Guide,Page 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;
}

对此问题的任何见解将不胜感激。 谢谢

在CUDA 5.0中删除了使用命名变量作为符号参数的字符串。

CUDA工具包参考手册5.0 ,第5.20.2.8节/注释中说明。

请执行以下操作:

cudaGetTextureReference( &tref, &texRef );

直接传递符号,而不是字符串。 字符串外观方法是在CUDA 5中完全删除的API的弃用版本。您的纹理查找应该写为

cudaGetTextureReference( &tref, &texRef );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM