【发布时间】:2013-02-21 21:34:02
【问题描述】:
假设我有一个大数组值(仍然小于 64 kB),在内核中经常非常读取,但不写入。然而,它可以从外部改变。该数组有两组值,让我们称它们为左右。 所以问题是,将大数组作为 __global 并将其写入 __local left 和 __local right 数组是否更快?还是将其作为一个常量 __constant large 并处理内核中的访问?例如:
__kernel void f(__global large, __local left, __local right, __global x, __global y) {
for(int i; i < size; i++) {
left[i] = large[i];
right[i] = large[i + offset];
}
...
x = foo * left[idx];
y = bar * right[idx];
}
对比:
__kernel void f(__constant large, __global x, __global y) {
...
x = foo * large[idx];
y = bar * large[idx * offset];
}
(索引有点复杂,但可以用宏来制作,例如) 我读到常量内存存在于全局空间中,所以它应该更慢吗? 它将在 Nvidia 卡中运行。
【问题讨论】: