我正在尝试进行计算,以便每个值与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内核中的所有其他值?我应该将第二个向量值传递给内核吗?
你应该在循环qazxsw poi中与解除引用的指针进行比较。
避免在循环的每次迭代中计算j < *vector_size
。 pow(vector[i],2)
在第一个代码片段中就足够了解智能解决方案。