我设置了cudaArray
,并将其绑定到纹理:
texture<float, 2, cudaReadModeElementType> tex;
cudaChannelFormatDesc channelDesc =
cudaCreateChannelDesc(32, 0, 0, 0, cudaChannelFormatKindFloat);
cudaArray *cuArray;
checkCudaErrors(cudaMallocArray(&cuArray,
&channelDesc,
width,
height));
checkCudaErrors(cudaMemcpyToArray(cuArray,
0,
0,
hData,
size,
cudaMemcpyHostToDevice));
现在我想知道,如果cuArray
和tex
中的内容在计算过程中始终保持不变,我可以通过tex
和/或cuArray
到另一个功能,这样我每次都不必做绑定?
这样的事情:
DoJobUsingTex(float* output, float* input, int size, texture tex)
{
\\ do something here
}
答案 0 :(得分:1)
CUDA在CUDA 5和Kepler硬件发布时引入了纹理对象。这些是所谓的“无绑定”纹理,可以通过值传递给内核,因此每次要在不同的纹理数据上运行内核时都不需要重新绑定内存。
您可以详细了解其使用情况here。