OPENCL-如何使辅助功能返回阵列并将内存的部分从恒定内存空间转移到私有



我有以下功能:

float* get_value(__constant float * A){
  float temp[2];
  temp[0] = A[0];
  temp[1] = A[1];
  printf("A[0]: %.2f, temp[0]: %.2f",A[0],temp[0]);
  return temp;
}
__kernel
void matmul(__constant float * A){
   float * vec1 = get_value(A);
   .
   .
   .
}

在此方法中,正如代码本身所解释的那样,我试图将数组从辅助函数返回到核心,以称为内核。我分配temp[0] = A[0];的行显然由于某种原因无法工作。但是,openclc确实发出了警告

warning: address of stack memory associated with local variable
  'array' returned [-Wreturn-stack-address]

有人可以解释返回与本地内存空间相关的数组的地址时出了什么问题吗?

预先感谢。

您不能(这不是严格的OPENCL问题,这是由于以下事实:函数中的临时变量在离开功能时会"消失",因此返回指针对于您的本地变量,现在指向"不应该使用的东西",并且编译器正确识别了这一点(

使用将数组传递到get_value的构造,类似于:

    float vec1[2];
    get_value(A, vec1);

并使get_value这样的内容:

float* get_value(__constant float * A, private float *res){
   res[0] = A[0];
   res[1] = A[1];
}

最新更新