我正在使用以下代码:
__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有关,但我没看到怎么做。有什么建议吗?
答案 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普通版本更长。我只做了最小的改动来解决你的问题,就是这样。