我正在研究一个内核,每个线程都有很多全局内存访问权限,因此我将它们复制到本地内存中,速度提高了40%.
我希望更快的速度,从本地复制到私人,这降低了性能
所以我认为我们不能使用可能会降低性能的私有内存,这是正确的吗?
我确实理解一般的全局和本地内存之间的区别.但我有使用本地内存的问题.
1)通过将全局内存变量转换为本地内存变量需要考虑什么?
2)我如何使用本地障碍?
也许有人可以帮我一个小例子.
我尝试使用本地内存进行jacobi计算,但结果只得到0.也许有人可以给我一个建议.
工作方案:
#define IDX(_M,_i,_j) (_M)[(_i) * N + (_j)]
#define U(_i, _j) IDX(uL, _i, _j)
__kernel void jacobi(__global VALUE* u, __global VALUE* f, __global VALUE* tmp, VALUE factor) {
int i = get_global_id(0);
int j = get_global_id(1);
int iL = get_local_id(0);
int jL = get_local_id(1);
__local VALUE uL[(N+2)*(N+2)];
__local VALUE fL[(N+2)*(N+2)];
IDX(uL, iL, jL) = IDX(u, i, j);
IDX(fL, iL, jL) = IDX(f, i, j);
barrier(CLK_LOCAL_MEM_FENCE);
IDX(tmp, i, j) = (VALUE)0.25 * ( U(iL-1, jL) + …Run Code Online (Sandbox Code Playgroud)