我的问题涉及合并的全局写入到 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];
}
这里n
数组的第一个元素包含要从 的第一个元素更新hash
的索引。显然,这导致了可怕的、可怕的缺乏结合。在我的代码的情况下,一个内核调用的哈希与另一个内核调用的哈希完全无关(其他内核以其他方式更新数据),因此简单地重新排序数据以优化这个特定的 kenrel 不是一种选择。odata
n
idata
CUDA 中是否有一些功能可以让我改善这种情况的性能?我听到很多关于纹理内存的讨论,但我无法将我读到的内容转化为这个问题的解决方案。