首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一种在OpenCl内核中偏移索引的方法?

一种在OpenCl内核中偏移索引的方法?
EN

Stack Overflow用户
提问于 2017-02-23 09:06:44
回答 1查看 616关注 0票数 0

我有一个内核,它接受以下参数:

1)全局ID为1040

2)本地ID为16

下面不是我使用的内核,但我用它来说明我想要实现的东西;A和B的数组输入基本上是1040*10长。

代码语言:javascript
复制
__kernel void vector_add(__global const int *A, __global const int *B, __global int *C, int Offset, int constant) {

    // Index of the current element to be processed
    int i = get_global_id(0);


    // Do the operation
    C[i + Offset*constant] = A[i + Offset*constant] + B[i + Offset*constant];
}

虽然constant是一个常量,但我希望Offset是一个排序的“数组”,包含值0,1,...,9。我已经尝试过将这些值作为数组传递,但我认为不可能以这种方式使用数组来进行偏移(程序崩溃)。下面是我想要写的示例:

代码语言:javascript
复制
__kernel void vector_add(__global const int *A, __global const int *B, __global int *C, __constant const int *Offset, int constant) {

    // Index of the current element to be processed
    int i = get_global_id(0);

    for (int k = 0; k < 10; k++) {
    // Do the operation
    C[i + Offset[k]*constant] = A[i + Offset[k]*constant] + B[i + Offset[k]*constant];
    }
}

请注意:扩展全局ID不是一个选项,因为在我的内核中它需要保持不变。因此:有没有办法实现这一点?

编辑:我添加了一个我想要实现的示例。目前,它不是这样工作的。这合法吗?

EN

回答 1

Stack Overflow用户

发布于 2017-02-23 10:00:07

我得到的错误信息是

无法在命名地址空间中分配

参数

因为constant是保留字。

我尝试通过在变量名的末尾添加'1‘来更改变量名,如下所示:

代码语言:javascript
复制
__kernel void vector_add(__global  int *A,       __global  int *B, __global int *C,
                         __constant  int *Offset,__constant  int * constant1) {

    int i = get_global_id(0);
    int constVar=constant1[0];
    for (int k = 0; k < 10; k++) {
        C[i + Offset[k]*constVar] = A[i + Offset[k]*constVar] + B[i + Offset[k]*constVar];
    }
} 

它适用于global=1040,ABC_size=1040*10,local=16,偏移量从0到9的数组和constant1=1040

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42405253

复制
相关文章

相似问题

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