每次我运行这个内核时,我都会得到一些不同的值。我想在第二次循环计算后总结 res 数组(类似于 np.sum(res, axis = 0))。当我在内核外部执行 np.sum 时,我得到相同的值,但在内核内部这是不可能的。可能屏障无法正确隔离内存。任何帮助将非常感激。
kernelsource = """
__kernel void forceFinder(
const int N,
const int dim,
const float sigma,
__global float* datacl,
__constant float* poscl,
__global float* res)
{
int i = get_global_id(0); // Global id
float f_sum ;
int k;
float sigma2 = sigma * sigma;
f_sum = 0;
for (k = 0; k < dim; k++)
{
f_sum += pown((poscl[k] - datacl[i * dim + k]), 2);
}
for (k = 0; k < dim; k++)
{
res[i * dim + k] = (datacl[i * dim + k] - poscl[k]) * exp(-f_sum/sigma2)/sigma2;
}
barrier(CLK_GLOBAL_MEM_FENCE | CLK_LOCAL_MEM_FENCE);
for(k=0; k<dim; k++)
{
res[k] += res[i*dim+k];
}
}
"""