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倍。