Convertendo thrust :: iterators de e para ponteiros brutos
Eu quero usar a biblioteca Thrust para calcular a soma de prefixo da matriz de dispositivos em CUDA. Minha matriz é alocada comcudaMalloc()
. Minha exigência é a seguinte:
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.
}
Eu quero usar Thrust em algum lugar entre meus kernels, então eu preciso de método para converter ponteiros para iteradores de dispositivos e de volta. O que está errado no código a seguir?
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;
}