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

如何将向量数组传递给cuda内核?,cuda,thrust,Cuda,Thrust,我现在有 thrust::device_vector<int> A[N]; 我知道通过推力::raw_pointer_cast,我可以将设备向量传递给内核。但是我怎样才能把一个向量数组传递给它呢?真正简短的答案是你基本上不能,而较长的答案是你真的不应该,即使你发现或者被展示了一种黑客的方法 本着这个建议的精神,你能做的是: thrust::device_vector<int> A(N); thrust::device_vector<int> B(N);

我现在有

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

我知道通过推力::raw_pointer_cast,我可以将设备向量传递给内核。但是我怎样才能把一个向量数组传递给它呢?

真正简短的答案是你基本上不能,而较长的答案是你真的不应该,即使你发现或者被展示了一种黑客的方法

本着这个建议的精神,你能做的是:

 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);

上面的代码应该可以工作,但是它有太多的错误,所以我不建议在任何事情上使用它。您已收到警告。

您需要逐个提取指向数组中每个向量开头的指针,并通过裸指针/原始指针数组将这些指针传递给CUDA内核。
 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);