我的内核线程以合并的方式访问一个线性字符数组。如果我将该数组映射到纹理中,我并没有看到任何加速。运行时间几乎相同。我正在使用计算能力为2.0的Tesla C2050,读到某个地方说全局访问具有缓存。这是真的吗?也许这就是我没有看到运行时间差异的原因。
主程序中的数组为
char *dev_database = NULL;
cudaMalloc( (void**) &dev_database, JOBS * FRAGMENTSIZE * sizeof(char) );
我将其绑定到纹理texture<char> texdatabase
上。
cudaBindTexture(NULL, texdatabase, dev_database, JOBS * FRAGMENTSIZE * sizeof(char) );
每个线程都会读取一个字符ch = tex1Dfetch(texdatabase, p + id)
,其中id是threadIdx.x + blockIdx.x * blockDim.x
,而p是一个偏移量。
我只绑定一次,而dev_database
是一个很大的数组。事实上,我发现如果大小太大,绑定会失败。是否有绑定数组大小的限制?非常感谢。