OpenCL - 如何使辅助函数返回数组并将内存的一部分从常量内存空间转移到私有

时间:2018-03-27 06:53:37

标签: c++ 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]

有人可以解释一下返回与本地内存空间关联的数组的地址有什么问题吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

你不能(这不是严格意义上的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];
}