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