首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >两个缓冲区的索引副本

两个缓冲区的索引副本
EN

Stack Overflow用户
提问于 2013-04-10 23:04:47
回答 1查看 55关注 0票数 0

我有以下例程,用于根据index中找到的索引将元素从src矩阵复制到dst矩阵。索引计算正确,但dst未更新。我遗漏了什么?

代码语言:javascript
运行
复制
__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];
}

全局工作区的工作项数量与索引数组中的索引数量一样多。

线性代码看起来像这样:

代码语言:javascript
运行
复制
for (k = 0; k < n; k++) {
        dst[k] = src[m * column + index[k]];
}

其从矩阵src中的列列复制所有索引的元素。

这就是我读回缓冲区的方式(在评论中被问到):

代码语言:javascript
运行
复制
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]);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-10 23:57:33

一定是主机代码出了问题。请验证:

  • 所有 OpenCL API调用的返回值,
  • 缓冲区创建标志(需要对目标缓冲区的写访问权限),
  • 内核参数对应于内核代码。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15929592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档