OpenCL内核使用std :: vector中的所有其他值计算每个值

时间:2018-03-06 16:56:31

标签: c++ opencl

我正在尝试进行计算,以便每个值都使用OpenCL中std :: vector中的所有其他值进行计算。

通常顺序:

for(int i = 0; i < vector.size(); i++){
    currentValue = vector[i];
    for(int j = 0; j < vector.size(); j++){
          out_val += pow(currentValue,2) + pow(vector[j],2);
    }
    out_vector[i] = out_val;
}

我想在OpenCL中实现这一点,所以在OpenCL内核中:

__kernel void calc(__global const float * vector, __global const int *vector_size, __global float *out_vector){
    int i = get_global_id(0);
    float out_val = 0;
    for(int j = 0; j < vector_size; j++){
         out_val += pow(vector[i],2) + pow(vector[j],2);
    }
    out_vector[i] = out_val;
}

但我无法访问内核中的vector [j],有没有办法访问OpenCL内核中的所有其他值? 我应该将第二个向量值传递给内核吗?

1 个答案:

答案 0 :(得分:2)

您应该在循环j < *vector_size中与derefernced指针进行比较。

避免在循环的每次迭代中计算pow(vector[i],2)。第一个代码段中的currentValue是足够的智能解决方案。