【问题标题】:OpenCL kernel compute each value with all other values in a std::vectorOpenCL 内核使用 std::vector 中的所有其他值计算每个值
【发布时间】:2018-03-07 01:03:12
【问题描述】:

我正在尝试进行计算,以便每个值与 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 内核中的所有其他值? 我应该将第二个向量值传递给内核吗?

【问题讨论】:

  • 为了将 std::vector 共享到您的 OpenCL 设备,您需要获取指向第一个元素的指针并共享该内存。 OpenCL 内核不做标准库。

标签: c++ opencl


【解决方案1】:

您应该与循环中的取消引用指针j &lt; *vector_size 进行比较。

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

【讨论】:

    猜你喜欢
    • 2019-04-23
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 2015-04-04
    相关资源
    最近更新 更多