我现在有
thrust::device_vector<int> A[N];
和我的内核函数
__global__ void kernel(...) {
auto a = A[threadIdx.x];
}
我知道通过thrust :: raw_pointer_cast我可以将device_vector传递给内核。但是我怎么能把一个矢量数组传递给它呢?
答案 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);
上面的代码应该可行,但是它有很多错误,我不建议将其用于任何事情。你被警告了。