0
我有下面的例程,应该根据索引中找到的索引将元素从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所有的索引元素。
这是我正在读的缓冲回(问评论):
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]);
}
您如何知道索引是否正确计算?尝试dst [id] = id来验证您的主机代码。 – 2013-04-10 15:41:59
我printf'ed它,我也做了dst [id] = 515和dst [id] = id。而且dst看起来还是一样。而printf'ing我看到索引计算正确。 – 2013-04-10 15:44:03
然后,您可能无法正确读取dst。你好吗? – 2013-04-10 15:47:54