Cuda 为什么,在我的例子中,纹理内存比全局内存慢

Cuda 为什么,在我的例子中,纹理内存比全局内存慢,cuda,textures,Cuda,Textures,请帮帮我。我不明白为什么这个函数使用纹理记忆 __global__ void corr (int * data) { int idx = (blockIdx.y*blockDim.y+threadIdx.y)*64+ (blockIdx.x * blockDim.x + threadIdx.x); data[idx]=0; for(int i=0; i<blockDim.y-threadIdx.y; i++) for(int j=0; j<blockDim.x-threadIdx.

请帮帮我。我不明白为什么这个函数使用纹理记忆

__global__ void corr (int * data)
{ int idx = (blockIdx.y*blockDim.y+threadIdx.y)*64+ (blockIdx.x * blockDim.x + threadIdx.x);
data[idx]=0;
for(int i=0; i<blockDim.y-threadIdx.y; i++)
 for(int j=0; j<blockDim.x-threadIdx.x; j++)
data [idx] = data[idx] + tex2D(g_TexRef,blockIdx.x * blockDim.x + threadIdx.x +j, blockIdx.y*blockDim.y+threadIdx.y+i);
\uuuuu全局\uuuuu无效corr(int*数据)
{int idx=(blockIdx.y*blockDim.y+threadIdx.y)*64+(blockIdx.x*blockDim.x+threadIdx.x);
数据[idx]=0;

对于费米上的(int i=0;i),全局内存负载缓存在一级缓存中,一级缓存的带宽高于纹理缓存

此外,您的2D空间位置可能不够高,无法从使用纹理中获益。如果是这样,您可以重构内核,以便并发运行的线程可以访问缓存中彼此更接近的值


有关更多信息和更多指针,请参阅此线程:

您使用的是哪种计算功能?您是否尝试在探查器中运行以查看缓存命中和未命中?
__global__ void corr1(int * in , int * data)
{ int idx = (blockIdx.y*blockDim.y+threadIdx.y)*64+ (blockIdx.x * blockDim.x + threadIdx.x);
data[idx]=0;
for(int i=0; i<blockDim.y-threadIdx.y; i++)
 for(int j=0; j<blockDim.x-threadIdx.x; j++)
 data [idx] = data[idx] +in[(blockIdx.y*blockDim.y+threadIdx.y+i)*64+blockIdx.x * blockDim.x + threadIdx.x +j];