我正在研究用于稀疏矩阵运算的 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。
什么可能导致乘法在每次运行时给出不同的答案?