0

每次我运行这个内核时,我都会得到一些不同的值。我想在第二次循环计算后总结 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];
    }
 }
 """
4

0 回答 0