程序设计是这样的:
1)在设备上建立一个3D数组 (float,widthheighz)
2)然后设备计算时对这个3D数组赋值
3)接着将这个3D数组绑定到3D纹理
4)访问
我之前的设计是3D数组作为1D线性数组在设备上创建,赋值,再将1D线性数组拷贝到3D cudaArray。然后绑定3D纹理。但发现1D线性数组拷贝到3D cudaArray(cudaMemcpyDeviceToDevice)太耗时,所以放弃这个实现。
现在我打算创建3D线性数组,GPU计算过程中对它赋值,再将这个3D线性数组绑定到3D纹理。
问题1)用cudaMemset3D创建的3D线性数组后在设备中能否对其赋值?
问题2)如何将cudaMemset3D创建的cudaPitchedPtr绑定到3D纹理?
//创建3D线性数组
cudaPitchedPtr d_det;
extent.width = width*sizeof(float);
extent.height = height;
extent.depth = z;
cudaMalloc3D(&d_det,extent);
//memset
cudaMemset3D(d_det, 0, extent);
//希望将cudaPitchedPtr绑定到3D纹理
问题3)有社么更好的方法实现吗?
再次先谢过大家