我正在开发一个小的 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/