Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 错误:下标值不是内核中的数组、指针或向量_C_Arrays_Pointers_Opencl - Fatal编程技术网

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

C 错误:下标值不是内核中的数组、指针或向量,c,arrays,pointers,opencl,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++){

我正在使用以下代码:

__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];    
       }                        
   }                                                    
}
\u内核
void addround(uuu global int**A、uuu global int*B、int kSize、int kRound、int kNb)
{                   

for(int i=0;i双指针在OpenCL中不作为输入/输出存在。因为不允许指针从CPU 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];    
       }                        
   }                                                    
}
\u内核
void addround(uuu global int*A、uu global int*B、int kSize、int kRound、int kNb)
{                   

对于(inti=0;iGuess:这是不合格的中间值。
\uuuu global int*\uuuu global*A
有意义吗?谢谢。我最近才开始学习OpenCL;你会怎么做来提高代码的效率呢?OpenCL是并行计算,你应该把作业分成几部分,让每个工作项都在一个部分上工作。相反,你是在为循环每个工作项。事实上,您甚至没有使用get_global_id(),它必须在所有OpenCL内核中使用。请参阅任何教程,因为您的代码有许多我无法在本文中解释的深层次设计缺陷。您的代码的运行速度将比现在的CPU慢100倍。