如何将向量数组传递给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);