我是推力(cuda)的新手,我想做一些数组操作,但我在互联网上找不到任何类似的例子。
我有以下两个数组(2d):
a = { {1, 2, 3}, {4} }
b = { {5}, {6, 7} }
我希望推力计算这个数组:
c = { {1, 2, 3, 5}, {1, 2, 3, 6, 7}, {1, 2, 3, 5}, {1, 2, 3, 6, 7} }
我知道它在 c/c++ 中是如何工作的,但不知道如何说要做它。
这是我的想法,它可能如何工作:
线程 1:取 a[0] -> 用 b 扩展它。将其写入 c。
线程 2:取 a[1] -> 用 b 扩展它。将其写入 c。
但我不知道该怎么做。我可以将数组 a 和 b 写入一维数组,例如:
thrust::device_vector<int> dev_a;
dev_a.push_back(3); // size of first array
dev_a.push_back(1);
dev_a.push_back(2);
dev_a.push_back(3);
dev_a.push_back(1); // size of secound array
dev_a.push_back(4);
thrust::device_vector<int> dev_b;
dev_b.push_back(1); // size of first array
dev_b.push_back(5);
dev_b.push_back(2); // size of secound array
dev_b.push_back(6);
dev_b.push_back(7);
和伪函数:
struct expand
{
__host__ __device__
?? ?? (const array ai, const array *b) {
for bi in b: // each array in the 2d array
{
c.push_back(bi[0] + ai[0]); // write down the array count
for i in ai: // each element in the ai array
c.push_back(i);
for i in bi: // each element in the bi array
c.push_back(i);
}
}
};
有人知道吗?