错误:下标值不是内核中的数组,指针或向量

时间:2013-12-06 02:38:20

标签: c arrays pointers opencl

我正在使用以下代码:

__kernel                                                
void addround(__global int **A, __global int *B, int kSize, int kRound, int kNb)                                
{                   
  for (int i=0;i<kSize;i++){                            
     for (int j=0;j<kSize;j++){                     
        A[j][i]+=B[kRound*kNb*kSize+i*kNb+j];    
       }                        
   }                                                    
}

此行A[j][i]+=B[kRound*kNb*kSize+i*kNb+j];标记错误,说我尝试编译时它不是数组,指针或向量。我认为这个问题可能与双指针A有关,但我没看到怎么做。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

OpenCL中不存在双指针作为输入/输出。由于指针不允许从CPU&lt; - &gt;行进。 GPU。

您必须手动处理矩阵,这意味着:

__kernel                                                
void addround(__global int *A, __global int *B, int kSize, int kRound, int kNb)                                
{                   
  for (int i=0;i<kSize;i++){                            
     for (int j=0;j<kSize;j++){                     
        A[j+i*kSize]+=B[kRound*kNb*kSize+i*kNb+j];    
       }                        
   }                                                    
}

注意:只是一个小注释,您使用的内核代码效率非常低,它将比CPU普通版本更长。我只做了最小的改动来解决你的问题,就是这样。