我正在研究用于稀疏矩阵运算的 OpenCL 代码,我发现当包括内核的代码被执行一次或两次时它可以工作。但是每隔几次运行,答案就会稍微偏离。这是我正在使用的非常简单的内核:
__kernel void dsmv( int N, __global int * IA,
                    __global int * JA, __global float * A,
                    __global float * X, __global float * Y){
    int IBGN, ICOL, IEND, ii;
    ICOL = get_global_id(0);
    if(ICOL < N)
    {
        IBGN = JA[ICOL]-1;
        IEND = JA[ICOL+1]-1-1;
        for (ii = IBGN; ii <= IEND; ii++)
        {
            Y[IA[ii]-1] +=  A[ii]*X[ICOL];
        }
    }
}
我还可以发布使用此内核的 fortran 代码。我正在使用 FortranCL。
什么可能导致乘法在每次运行时给出不同的答案?