在多个流之间共享 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 上使用多个流在同一纹理位置寻找内存只会提高缓存命中率。
我有一个用于读取图像的纹理。所以,纹理定义为:
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 上使用多个流在同一纹理位置寻找内存只会提高缓存命中率。