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

时间:2017-02-23 01:06:44

标签: opencl gpu

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

1)全球ID为1040

2)本地ID为16

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

.controller('businessPageController',['$scope', '$timeout', '$firebaseArray', 'CONFIG', '$document', '$state',   function($scope, $timeout, $firebaseArray, CONFIG, $document, $state, $cordovaGeolocation, $ionicLoading, $ionicPlatform, ionicPlatform, ngCordova)

虽然常数是常数,但我希望Offset成为一个"数组"排序,包含值0,1,...,9。我已经尝试将这些值作为一个数组传递,但我不认为有可能以这种方式使用数组进行偏移(程序崩溃)。我想写的一个样本如下:

.controller('businessPageController',['$scope', '$ionicPlatform', '$ionicLoading', '$cordovaGeolocation', '$timeout', '$firebaseArray',    'CONFIG', '$document', '$state',   function($scope, $ionicPlatform, $ionicLoading, $cordovaGeolocation, $timeout, $firebaseArray, CONFIG, $document, $state,   ngCordova) 

请注意:缩放全局ID不是一种选择,因为在我的内核中它需要保持固定。因此:无论如何要实现这一目标吗?

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

1 个答案:

答案 0 :(得分:1)

我收到的错误消息是

  

参数不能在命名地址空间中分配

因为constant是保留字。

我尝试通过在其末尾添加“1”来更改变量名称,如下所示:

__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