用纹理内存程序速度变慢?

在kernel里数据只需要访问一次,本身已满足合并访问了,再加上纹理后,速度比原来的慢…

texture<float, 1, cudaReadModeElementType> trf;

CUDA_SAFE_CALL( cudaMalloc( (void**)&f_dev, sizeof(float) * N ) );//分配空间

CUDA_SAFE_CALL( cudaMemcpy( f_dev, &f[0], sizeof(float)*N, cudaMemcpyHostToDevice ) );//拷贝数据

cudaBindTexture(0, trf, f_dev, sizeof(float) * N); //绑定纹理

在kernel内部,只用访问一次数据,本身满足合并访问
f0 = tex1Dfetch(trf, k);//通过纹理读取数据

发现加纹理之后,程序变慢了,是不是我用的有问题?或者,本身不适和用纹理?

大家帮我看看

樟树在群里的回答:

满足合并访问用纹理可能变慢的

只有要用到两维三维的局部性用纹理,一维的在Fermi上用global基本都比一维纹理好,tesla的时候没办法采用纹理的

tesla没办法合并访问才会用纹理

采用纹理加速效果要看具体的数据,未必能加速