在多个流之间共享 cuda 纹理

sharing cuda texture among multiple streams

我有一个用于读取图像的纹理。所以,纹理定义为:

texture<uchar4, 2, cudaReadModeNormalizedFloat> text;

我有一个 CUDA 内核,它使用这个纹理来读取一些图像像素值:

__global__ void resample_2D(float4* result, 
                            int width, nt height,
                            float* x, float* y)
{
    const int _x = blockDim.x * blockIdx.x + threadIdx.x;
    const int _y = blockDim.y * blockIdx.y + threadIdx.y;

    if (_x < width && _y < height) {
        const int i = _y * width + _x;
        result[i] res = tex2D<float4>(text, x[i] + 0.5f, y[i] + 0.5f);
    }
}

现在,我有 4 个 CUDA 流可以读取此纹理(因此访问绑定到纹理的同一图像)。所以,我的问题是这会影响性能吗?那么,就性能而言,拥有 4 个纹理(每个流一个)而不是所有流使用一个纹理更好吗?

CUDA 中的纹理用作缓存内存。在 SMX 上使用多个流在同一纹理位置寻找内存只会提高缓存命中率。