【发布时间】:2012-10-17 15:53:38
【问题描述】:
我的问题涉及合并全局写入到 CUDA 中数组的一组动态变化的元素。考虑以下内核:
__global__ void
kernel (int n, int *odata, int *idata, int *hash)
{
int i = blockIdx.x * blockDim.x + threadIdx.x;
if (i < n)
odata[hash[i]] = idata[i];
}
这里数组hash 的第一个n 元素包含要从idata 的第一个n 元素更新的odata 的索引。显然,这导致了可怕的、可怕的缺乏结合。在我的代码的情况下,一个内核调用的哈希与另一个内核调用的哈希完全无关(其他内核以其他方式更新数据),所以简单地重新排序数据以优化这个特定的 kenrel 不是一种选择。
CUDA 中是否有一些功能可以让我改善这种情况的性能?我听到很多关于纹理内存的讨论,但我无法将我读到的内容转化为解决这个问题的方法。
【问题讨论】: