Hi,
I pushed a function for obtaining the CUDA pointer from a CUSP vector here: https://bitbucket.org/petsc/petsc/commits/d831094ec27070ea54a249045841367f8a...
Karl, I think this is half-way to meed our needs, and the missing bits are related to out-of-sync CPU/GPU buffers. To improve the implementation and make it useful for petsc4py (and other plain-C consumers), I would suggest the following:
1) Implement VecCUSPGetCUDAArray() by calling VecCUSPGetArrayReadWrite(), this automatically handles calling VecCUSPCopyToGPU()
2) I think we still need a VecCUSPRestoreCUDAArray(), you can implement it by basically calling VecCUSPRestoreArrayReadWrite(vec,NULL) to update the valid_GPU_array flag and the internal object state.
Both 1) and 2) are now pushed to the feature branch. Any feedback appreciated :-) Best regards, Karli