求问一个关于layered texture的问题

是关于layered texture绑定的一个问题。代码如下其中hlt_q1ce_ms是一个一维数组 (host端)
cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc(32, 0, 0,0,cudaChannelFormatKindFloat);cudaMalloc3DArray(&d_q1ce_ms,&channelDesc,make_cudaExtent(MXEKE+1, 0, MXMED),cudaArrayLayered); cudaMemcpy3DParms myparms = {0};
myparms.srcPos = make_cudaPos(0,0,0);
myparms.dstPos = make_cudaPos(0,0,0);
myparms.srcPtr = make_cudaPitchedPtr(hlt_q1ce_ms, (MXEKE+1) * sizeof(float),MXEKE+1,0);
myparms.dstArray = d_q1ce_ms;
myparms.extent = make_cudaExtent(MXEKE+1, 0, MXMED);
myparms.kind = cudaMemcpyHostToDevice;
cudaMemcpy3D(&myparms);
// lt_q1ce_ms.addressMode[0] = cudaAddressModeClamp;
lt_q1ce_ms.addressMode[0] = cudaAddressModeWrap;
// lt_q1ce_ms.addressMode[2] = cudaAddressModeWrap;
lt_q1ce_ms.filterMode = cudaFilterModeLinear;
lt_q1ce_ms.channelDesc = channelDesc;
lt_q1ce_ms.normalized = false;
cudaBindTextureToArray(lt_q1ce_ms, d_q1ce_ms, channelDesc);
其中lt_q1ce_ms 是layered texture 的reference。hlt_q1ce_ms是host端的一个一维数组[(MXEKE+1)*MXMED],d_q1ce_ms是一个cudaarray。问题描述,这个代码昨天测试的时候,通过tex1DLayered(lt_q1ce_ms,1.5,0);是可以读取数据的,都没有问题。当我尝试把其他的几个需要的变量绑定到layered texture上的时候,发现不行了。读取的数都是零。也就说同样的代码,第一天是可以绑定的,结果第二天就不行了。 求大神赐教,这个是为什么?另外一个问题就是如果绑定更多的layered texture。是否上面的那个参数myparms,channelDesc ,在绑定第二个的时候要换成比如说maparms1,channelDesc 1之类的?

抱歉,第一次发帖,格式比较乱。

楼主您好!
您的错误在于您错误的理解了,
不同API函数中的extend
的含义是不同的。

对于有cudaArrayLayered标志的cudaMalloc3DArray(), 你需要指定extend的height = 0来构成一个1D Layered Texture。 即:(W, 0, L)
而对于cudaMemcpy3D(), 每片texture相当于W*1的大小, 如果此时您指定0, 将传输0字节。即此时是(W, 1, L)而非(W, 0, L), 因为它是用这个来计算字节的。

同理,您的srcPtr中的最后一个参数0,也应该改成1.
即:
myparms.srcPtr = make_cudaPitchedPtr(hlt_q1ce_ms, (MXEKE+1) * sizeof(float),MXEKE+1,0);
改成
myparms.srcPtr = make_cudaPitchedPtr(hlt_q1ce_ms, (MXEKE+1) * sizeof(float),MXEKE+1,1);

以及:
myparms.extent = make_cudaExtent(MXEKE+1, 0, MXMED);
改成
myparms.extent = make_cudaExtent(MXEKE+1, 1, MXMED);

如果按照您的写法,您将“成功”传送“0字节”到贵卡上去。
(无论是昨天还是今天,您原写法都不可能成功的。
“也就说同样的代码,第一天是可以绑定的,结果第二天就不行了”----这种说法是对你的卡的侮辱! 请不要乱下结论!)

抱歉,第一次回帖,格式比较乱。
(您能不将1条语句中途拆成2行么?
您能不将2个半条语句放到一行么?
您能不使用毫无规律的缩进么?
您能将您的问题描述和您的代码分开说么?)

(本来版主可以在昨天午夜凌晨1点给您回复的,但是看到您极度错乱的代码。直接暂时无法理解了。导致一直理解到第二天。这个真心是你我的悲剧。)

嗯,谢谢版主了。第一次发帖,真的不太熟练。抱歉。

感谢您的来访,欢迎下次再来。