我有一个用于阅读图像的纹理。因此,纹理定义为:
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个纹理(每个流一个)而不是所有流使用的纹理更好吗?
答案 0 :(得分:1)
CUDA中的纹理作为缓存内存工作。在SMX上具有多个流以在相同纹理位置中寻找存储器只能改善高速缓存命中。