我有一些数据要处理,每个块负责给定的数据子集。
由于我的应用程序的性质,我希望这些数据驻留在纹理内存中。但是,数据太大而无法放入单个纹理参考中。
如果我理解正确,我可以有多个纹理引用,但不能有纹理引用数组。
由于我需要处理每个块中的不同数据子集,因此我正在考虑(在内核中)做一些事情,例如
while(counter < 10000) {
if(blockIdx.x == 0)
foo = tex2D(tex0, x, y);
else if(blockIdx.x == 1)
foo = tex2D(tex1, x, y);
...
}
但这不仅不好看,我也不确定我是否会遇到分歧问题。
做类似的事情
texture<int, 2, cudaReadModeElementType> ref;
(..)
/* kernel code from now on */
if(blockIdx.x == 0)
ref = tex0;
else if(blockIdx.x == 1)
ref = tex1;
...
while(counter < 10000)
foo = tex2D(ref, x, y)
似乎也不完全正确,因为我相信纹理引用是全局的,而不是线程私有的。
还有其他选择吗?谢谢你。