簡體   English   中英

錯誤:下標的值不是內核中的數組,指針或向量

[英]error: subscripted value is not an array, pointer, or vector in a kernel

我正在使用以下代碼:

__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有關,但我看不出如何解決。 有什么建議么?

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];    
       }                        
   }                                                    
}

注意:僅需說明一下,您正在使用的內核代碼效率很低,它所花費的時間甚至比CPU普通版本更長。 我只是做了最小的更改來解決您的問題,僅此而已。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM