【问题标题】:How to pass C++ vector of vectors to OpenCL kernel?如何将向量的 C++ 向量传递给 OpenCL 内核?
【发布时间】:2016-07-24 11:20:07
【问题描述】:

我需要将一个 C++ 向量向量传递给 OpenCL 内核,例如,我有以下数据:

3 1 9 1 3 8 5 1 3 8 4

3 9 4 0 7 4 3

1 0 4 8 2 8 3 1 2

1 9 3 2

8 3 9 4

4 9 3 9 5 4 3

我在 C++ 中的数据结构是向量的向量:

  • std::vector >

所以,我的结构是一个大小为 6 的 vectos 向量,向量“i”的大小是动态的。

如何将数据传递给 OpenCL 内核?

有什么想法吗?

谢谢。

【问题讨论】:

  • 您需要将数据传递给的 OpenCL 内核函数的签名是什么?
  • 当您将 3 添加到第一个向量的向量时,它会重新分配整个向量及其向量以在内存中连续?那将是非常低的性能。也许只适用于静态大小的内部对象。
  • 是一个新的内核函数,我要定义它。我必须将代码迁移到 OpenCL,我遇到了这个问题。我唯一的想法是使用函数“vector.insert(...)”将二维数组更改为一维数组,但在这种情况下,我需要迭代数组的第一个维度,我想避免它.. . 顺序代码是MPI和OpenMP的混合代码,有一部分需要转换成OpenCL。数据来自算法中无法修改的一点。
  • 我拥有的另一个信息是二维数组的元素数量。在示例中是 42 个元素。

标签: c++ vector kernel opencl


【解决方案1】:

如果您仍然感兴趣:

在主机端创建你的向量:

std::vector<std::vector <float> > yourVector;

然后在你的主机上,将你的向量传递给内核

std::vector<std::vector <float>& >& yourVector

在内核的输入参数中,使用

__global float (*yourVector)[6]

您现在可以使用例如访问内核中的元素

yourVector[0][0]

没有测试它,但它应该可以工作。也许你需要稍微调整一下。

【讨论】:

    猜你喜欢
    • 2012-10-18
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 2016-08-12
    • 2018-06-02
    • 1970-01-01
    相关资源
    最近更新 更多