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

questionAnswers(2)

yourAnswerToTheQuestion