[petsc-dev] Backend independent VecGetArray for GPUs

Karl Rupp rupp at iue.tuwien.ac.at
Tue Oct 21 14:42:15 CDT 2014


Hi Lisandro,

On 10/21/2014 08:25 PM, Lisandro Dalcin wrote:
> On 20 October 2014 08:06, Karl Rupp <rupp at iue.tuwien.ac.at> wrote:
>> I pushed a function for obtaining the CUDA pointer from a CUSP vector here:
>> https://bitbucket.org/petsc/petsc/commits/d831094ec27070ea54a249045841367f8aab0976
>
> 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.

okay, so also want to have the guarantee that the the buffer contains 
the latest data, possibly sync'd from main memory. We might have to 
provide an additional interface for directly obtaining the CUDA handle 
without triggering a potentially costly host-device transfer then.

Either way, I can add the requested functionality. However, please allow 
for two days, I'm on a long-distance flight tomorrow.

Best regards,
Karli




More information about the petsc-dev mailing list