将cuda纹理变量作为参数传递

时间:2017-01-24 17:01:15

标签: memory cuda textures gpu

我设置了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));

现在我想知道,如果cuArraytex中的内容在计算过程中始终保持不变,我可以通过tex和/或cuArray到另一个功能,这样我每次都不必做绑定?

这样的事情:

DoJobUsingTex(float* output, float* input, int size, texture tex)
{
   \\  do something here
}

1 个答案:

答案 0 :(得分:1)

CUDA在CUDA 5和Kepler硬件发布时引入了纹理对象。这些是所谓的“无绑定”纹理,可以通过值传递给内核,因此每次要在不同的纹理数据上运行内核时都不需要重新绑定内存。

您可以详细了解其使用情况here