如何将一组向量传递给cuda内核?

时间:2018-03-30 18:53:41

标签: cuda thrust

我现在有

thrust::device_vector<int> A[N];

和我的内核函数

__global__ void kernel(...) {
    auto a = A[threadIdx.x];
}

我知道通过thrust :: raw_pointer_cast我可以将device_vector传递给内核。但是我怎么能把一个矢量数组传递给它呢?

1 个答案:

答案 0 :(得分:1)

真正简短的回答是,你基本上不能,而答案更长的是你甚至不应该发现或者被提出这样做​​的黑客方式。

根据这个建议的精神,你能做的就是这样:

 thrust::device_vector<int> A(N);
 thrust::device_vector<int> B(N);
 thrust::device_vector<int> C(N);
 thrust::device_vector<int> D(N);

 // .....

 thrust::device_vector<int*> E(4);
 E.push_back(thrust::raw_pointer_cast(A.data());
 E.push_back(thrust::raw_pointer_cast(B.data());
 E.push_back(thrust::raw_pointer_cast(C.data());
 E.push_back(thrust::raw_pointer_cast(D.data());

 int* E_p = thrust::raw_pointer_cast(E.data());

 // ....

 kernel<<<...>>>(E_p);

上面的代码应该可行,但是它有很多错误,我不建议将其用于任何事情。你被警告了。