【发布时间】:2011-07-26 03:13:40
【问题描述】:
我在将纹理内存绑定到全局设备内存的子部分时遇到问题。
我有一个大型的全局设备数组,其中填充了如下内存:
双 * device_global;
cudaMalloc((void **)&device_global, sizeof(double)*N));
cudaMemcpy(device_global, host, sizeof(double)*N, cudaMemcpyHostToDevice) );
我在一个 for 循环中运行多个内核。
每个内核需要device_global 的一小部分(int offset = 100),我通过以下方式将其绑定到纹理:
cudaBindTexture(0, texRef, device_global, channelDesc, sizeof(double)*10);
但是我面临的问题是我无法使用指针算法仅通过循环偏移绑定device_global 的循环部分。
我想做这样的事情:
cudaBindTexture(0, texRef, device_global+ offsett * i , channelDesc, sizeof(double)*10);
需要注意的是,如果将偏移量设置为0,上述方法确实有效,但不知何故,指针算法不起作用。
任何帮助或其他指南将不胜感激。
【问题讨论】:
-
IIRC 指针算法是可以的,即使对于设备指针也是如此。您是否在循环结束时取消绑定纹理?什么错误?
标签: c memory cuda gpu textures