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

Pass cuda texture variable as an argument

我已设置 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 and/or cuArray 到另一个函数,这样我就不必每次都进行绑定?

像这样:

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

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

您可以详细了解它们的使用 here