この厄介なtex refの問題に悩まされている小さなcuda libを開発しています。
これは、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;
}
この問題についての洞察をいただければ幸いです。ありがとう