Konwersja ciągu :: iteratory do iz surowych wskaźników
Chcę użyć biblioteki Thrust do obliczenia sumy prefiksów tablicy urządzeń w CUDA. Moja tablica jest przydzielona za pomocącudaMalloc()
. Moje wymaganie jest następujące:
main()
{
Launch kernel 1 on data allocated through cudaMalloc()
// This kernel will poplulate some data d.
Use thrust to calculate prefix sum of d.
Launch kernel 2 on prefix sum.
}
Chcę użyć Thrust gdzieś między moimi jądrami, więc potrzebuję metody konwersji wskaźników na iteratory urządzeń i wstecz. Co jest nie tak w następującym kodzie?
int main()
{
int *a;
cudaMalloc((void**)&a,N*sizeof(int));
thrust::device_ptr<int> d=thrust::device_pointer_cast(a);
thrust::device_vector<int> v(N);
thrust::exclusive_scan(a,a+N,v);
return 0;
}