0

index で見つかったインデックスに基づいて、src マトリックスから dst マトリックスに要素をコピーすることになっている次のルーチンがあります。インデックスは正しく計算されますが、dst は更新されません。私は何が欠けていますか?

__kernel void
src_indexed_copy(__global real *dst, __global const real *src,
   __global const int *index, int src_offset)
{
        int id = get_global_id(ROW_DIM);
        int src_idx = src_offset + index[id];
        dst[id] = src[src_idx];
}

グローバル ワークスペースには、インデックス配列内のインデックスと同じ数のワーク アイテムがあります。

線形コードは次のようになります。

for (k = 0; k < n; k++) {
        dst[k] = src[m * column + index[k]];
}

これは、マトリックス src の列 column からすべてのインデックス付き要素をコピーします。

これは、バッファを読み戻す方法です(コメントで尋ねられます):

rc = clEnqueueReadBuffer(ompctx->clctx.queue, c,
        CL_TRUE, 0, i * sizeof(real), &tmp[0],
        0, NULL, NULL);
if (rc != CL_SUCCESS) {
    log_error("omp", "[%d] readbuf() failed", rc);
    goto err;
}
log_info("omp", "c");
for (k = 0; k < i; k++) {
    log_info("omp", "%6.8f", tmp[k]);
}
4

1 に答える 1