C++ OpenCL-如何使helper函数返回数组并将部分内存从常量内存空间转移到私有内存空间

C++ OpenCL-如何使helper函数返回数组并将部分内存从常量内存空间转移到私有内存空间,c++,opencl,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);

假设我有以下功能:

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);
   .
   .
   .
}
在这个方法中,正如代码本身所解释的,我试图将一个数组从一个helper函数返回到调用它的内核。我分配
temp[0]=A[0]的行由于某种原因显然不起作用。然而openclc确实抛出了一个警告

warning: address of stack memory associated with local variable
  'array' returned [-Wreturn-stack-address]
有人能解释一下返回与本地内存空间关联的数组地址的错误吗

提前感谢。

您不能(这不是严格意义上的OpenCL问题,这是因为当您离开函数时,函数中的临时变量将“消失”,因此返回指向局部变量的指针现在指向“不应该使用的东西”,编译器正确地识别了这一点)

使用将数组传递到
get\u value
的结构,类似于:

    float vec1[2];
    get_value(A, vec1);
并使
get\u value
如下所示:

float* get_value(__constant float * A, private float *res){
   res[0] = A[0];
   res[1] = A[1];
}
您不能(严格来说,这不是OpenCL的问题,这是因为当您离开函数时,函数中的临时变量将“消失”,因此返回指向本地变量的指针现在指向“不应该使用的东西”,并且编译器正确地识别了这一点)

使用将数组传递到
get\u value
的结构,类似于:

    float vec1[2];
    get_value(A, vec1);
并使
get\u value
如下所示:

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

显然你建议的方法不起作用。请查看我的代码,不要知道您会遇到什么错误(或“什么不起作用”),我不确定该建议什么,但我怀疑可变长度数组在OpenCL中受到很大限制。它不再抛出任何错误或警告,但当我打印指定值时,它不包含我期望的值。抱歉,不知道为什么会这样,看不出代码中有任何明显的错误。首先尝试一个简单的例子,看看它是否有效。显然,你建议的方法不起作用。请查看我的代码,不要知道您会遇到什么错误(或“什么不起作用”),我不确定该建议什么,但我怀疑可变长度数组在OpenCL中受到很大限制。它不再抛出任何错误或警告,但当我打印指定值时,它不包含我期望的值。抱歉,不知道为什么会这样,看不出代码中有任何明显的错误。首先尝试一个简单的例子,看看这是否有效。