私は疎行列演算用の OpenCL コードに取り組んでおり、カーネルを含むコードが 1 回または 2 回実行されると機能することがわかりました。しかし、数回実行するたびに、答えはわずかにずれています。私が使用している非常に単純なカーネルは次のとおりです。
__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 を使用しています。
実行ごとに異なる答えが得られる乗算の原因は何ですか?