私はスラスト(cuda)が初めてで、いくつかの配列操作を行いたいのですが、インターネット上で同様の例が見つかりません。
次の2つの配列(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 を 1 次元配列に書き込むことができます。
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);
}
}
};
誰でもアイデアはありますか?