如何将C ++向量传递给OpenCL内核?

时间:2012-09-14 13:57:15

标签: c++ c opencl

我是C,C ++和OpenCL的新手,现在正尽力学习它们。这是一个预先存在的C ++函数,我试图弄清楚如何使用C或C ++绑定移植到OpenCL。

#include <vector>

using namespace std;

class Test {

private:

    double a;
    vector<double> b;
    vector<long> c;
    vector<vector<double> > d;

public:

    double foo(long x, double y) {
        // mathematical operations
        // using x, y, a, b, c, d
        // and also b.size()
        // to calculate return value
        return 0.0;
    }

};

从广义上讲,我的问题是如何将此函数访问的所有类成员传入绑定和内核。我理解如何传递标量值但是我不确定的矢量值。是否有一种方法可以将指针传递给上述每个成员或内存映射它们,以便OpenCL的视图与主机内存同步?细分我的问题如下。

  1. 如果这些大小可变,我如何将成员b和c传递给绑定和内核?
  2. 如果它是二维的,我如何传递成员?
  3. 如何从内核中访问这些成员,以及在内核的参数中声明它们的类型?将简单地使用数组索引表示法,即b [0]是否可以访问?
  4. 如何在内核函数中调用等效于b.size()的操作,或者我不会将绑定大小作为额外参数传递给内核?如果它发生变化会发生什么?
  5. 我非常感谢C或C ++绑定以及答案中的内核代码示例源代码。

    非常感谢。

0 个答案:

没有答案