Def*_*efd 2 c++ parallel-processing cuda gpgpu visual-studio-2010
我正在开发一个小型的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);
Run Code Online (Sandbox Code Playgroud)
当我执行它时,行cudaGetTextureReference(...)返回错误代码cudaErrorInvalidTexture.我在互联网上找不到关于cudaGetTextureReference的许多其他样本,其中大多数都遵循与上面的示例代码完全相同的过程.
很沮丧,之后我尝试了高级API:
texture<float, cudaTextureType2D,cudaReadModeElementType> texRef;
cudaBindTextureToArray(texRef, cuArray);
Run Code Online (Sandbox Code Playgroud)
同样的问题.如果从内核中的那个纹理读取,那么我得到零值.
我的完整玩具测试代码,100%重现率:(win7,cuda 5.0)
texture<float, cudaTextureType2D, cudaReadModeElementType> texRef;
int main ()
{
const textureReference *tref = NULL;
checkSuccess( cudaGetTextureReference( &tref, "texRef" ) );
pauseConsole();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对此问题的任何见解将不胜感激.谢谢
在CUDA 5.0中删除了使用命名变量作为符号参数的字符串.
在CUDA工具包参考手册5.0,第5.20.2.8节/注释中说明.
请执行以下操作:
cudaGetTextureReference( &tref, &texRef );
Run Code Online (Sandbox Code Playgroud)